Un emballage python asynchrone léger pour l'API de génération d'images Novelai.
Metadata pour configurer facilement les paramètres de génération avec validation de type.asyncio pour exécuter efficacement les tâches de génération et de retour. Important
Malheureusement, Novelai a déprécié sa fonction de génération d'images du point final de l'API à partir du 21 mars 2024. En conséquence, la fonction de génération simultanée n'est plus disponible.
Source
Note
Ce package nécessite Python 3.12 ou plus.
Installer / mettre à jour avec PIP:
pip install -U novelaiImportez des packages requis et initialisez un client avec vos informations d'identification de compte 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 ()) Après avoir initialisé avec succès, vous pouvez générer des images avec la méthode generate_image . La méthode prend un objet Metadata comme premier argument et un argument host facultatif pour spécifier le backend à utiliser.
En passant verbose=True , la méthode imprimera le coût ANLAS estimé chaque fois qu'une demande de génération sera faite.
La liste complète des paramètres Metadata peut être trouvée dans la définition de la classe.
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 ()) Pour effectuer une action img2img , définissez le paramètre action dans les métadonnées en Action.IMG2IMG et paramètre image sur votre image de base. L'image de base doit être convertie en format codé de base64. Cela peut être réalisé à l'aide du module 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 ()) Pour mask une action inpaint , définissez image paramètre action dans les métadonnées à Action.INPAINTING . L'image de base et le masque doivent être converties en format codé de base64. Cela peut être réalisé à l'aide du module 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 ()) Vibe Transfer n'a pas son propre type d'action. Au lieu de cela, il est réalisé en ajoutant un paramètre reference_image_multiple dans les métadonnées. L'image de référence doit être convertie en format codé de base64. Cela peut être réalisé à l'aide du module 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 ())Facultativement, une fonction de module est également fournie pour générer directement un jeton d'accès dans CLI.
Une fois le jeton d'accès généré, il sera valable 30 jours. Le jeton peut être utilisé comme en-tête d'authentification pour faire des demandes à Novelai.
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Backend Novelai
Aedial / Novelai-API
Nouvelle base de connaissances non officielle