Novelai Image Generation APIの軽量の非同期Pythonラッパー。
Metadataクラスを提供します。asyncioを利用して生成タスクを実行し、出力を効率的に返します。 重要
残念ながら、Novelaiは2024年3月21日からAPIエンドポイントの画像生成関数を減価しました。その結果、同時生成機能は利用できなくなりました。
ソース
注記
このパッケージには、Python 3.12以上が必要です。
PIPでインストール/更新:
pip install -U novelai必要なパッケージをインポートし、小説アカウントの資格情報を使用してクライアントを初期化します。
import asyncio
from novelai import NAIClient
# Replace argument values with your actual account credentials
username = "Your NovelAI username"
password = "Your NovelAI password"
async def main ():
client = NAIClient ( username , password , proxy = None )
await client . init ( timeout = 30 )
asyncio . run ( main ())正常に初期化した後、 generate_imageメソッドで画像を生成できます。このメソッドは、 Metadataオブジェクトを最初の引数として取得し、使用するバックエンドを指定するオプションのhost引数です。
verbose=Trueを渡すことにより、メソッドは、生成リクエストが行われるたびに推定ANLAコストを印刷します。
Metadataの完全なパラメーターリストは、クラス定義にあります。
from novelai import Metadata , Resolution
async def main ():
metadata = Metadata (
prompt = "1girl" ,
negative_prompt = "bad anatomy" ,
res_preset = Resolution . NORMAL_PORTRAIT ,
n_samples = 1 ,
)
print ( f"Estimated Anlas cost: { metadata . calculate_cost ( is_opus = False ) } " )
output = await client . generate_image (
metadata , verbose = False , is_opus = False
)
for image in output :
image . save ( path = "output images" , verbose = True )
asyncio . run ( main ())img2imgアクションを実行するには、メタデータのactionパラメーターをAction.IMG2IMGに、 imageパラメーターをベース画像に設定します。ベース画像は、base64エンコード形式に変換する必要があります。これは、 base64モジュールを使用して実現できます。
import base64
from novelai import Metadata , Action
async def main ():
with open ( "tests/images/portrait.jpg" , "rb" ) as f :
base_image = base64 . b64encode ( f . read ()). decode ( "utf-8" )
metadata = Metadata (
prompt = "1girl" ,
negative_prompt = "bad anatomy" ,
action = Action . IMG2IMG ,
width = 832 ,
height = 1216 ,
n_samples = 1 ,
image = base_image ,
strength = 0.5 ,
noise = 0.1 ,
)
output = await client . generate_image ( metadata , verbose = True )
for image in output :
image . save ( path = "output images" , verbose = True )
asyncio . run ( main ())inpaintアクションを実行するには、メタデータのactionパラメーターをAction.INPAINTINGに設定し、 imageパラメーターをベース画像に設定し、パラメーターを黒と白のマスク画像にmask 。ベースイメージとマスクの両方をBase64エンコード形式に変換する必要があります。これは、 base64モジュールを使用して実現できます。
import base64
from novelai import Metadata , Model , Action , Resolution
async def main ():
with open ( "tests/images/portrait.jpg" , "rb" ) as f :
base_image = base64 . b64encode ( f . read ()). decode ( "utf-8" )
with open ( "tests/images/inpaint_left.jpg" , "rb" ) as f :
mask = base64 . b64encode ( f . read ()). decode ( "utf-8" )
metadata = Metadata (
prompt = "1girl" ,
negative_prompt = "bad anatomy" ,
model = Model . V3INP ,
action = Action . INPAINT ,
res_preset = Resolution . NORMAL_PORTRAIT ,
image = base_image ,
mask = mask ,
)
output = await client . generate_image ( metadata , verbose = True )
for image in output :
image . save ( path = "output images" , verbose = True )
asyncio . run ( main ())バイブ転送には独自のアクションタイプがありません。代わりに、メタデータにreference_image_multipleパラメーターを追加することで達成されます。参照画像は、base64エンコード形式に変換する必要があります。これは、 base64モジュールを使用して実現できます。
import base64
from novelai import Metadata , Resolution
async def main ():
with open ( "tests/images/portrait.jpg" , "rb" ) as f :
base_image = base64 . b64encode ( f . read ()). decode ( "utf-8" )
metadata = Metadata (
prompt = "1girl" ,
negative_prompt = "bad anatomy" ,
res_preset = Resolution . NORMAL_PORTRAIT ,
reference_image_multiple = [ base_image ],
reference_information_extracted_multiple = [ 1 ],
reference_strength_multiple = [ 0.6 ],
)
output = await client . generate_image ( metadata , verbose = True )
for image in output :
image . save ( path = "output images" , verbose = True )
asyncio . run ( main ())オプションで、CLIでアクセストークンを直接生成するためにモジュール関数も提供されます。
アクセストークンが生成されると、30日間有効になります。トークンは、認証ヘッダーとして使用して、Novelaiへのリクエストを行うことができます。
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Novelaiバックエンド
航空/novelai-api
Novelai非公式の知識ベース