Eine leichte asynchrone Python -Wrapper für die Novelai Image -Generierung -API.
Metadata , mit der die Parameter der Generierung einfach mit Typvalidierung eingerichtet werden können.asyncio , um generierende Aufgaben auszuführen und Ausgänge effizient zurückzugeben. Wichtig
Leider hat Romanai ab dem 21. März 2024 ihre Bildgenerierungsfunktion des API -Endpunkts abgeschrieben. Infolgedessen ist die gleichzeitige Funktion zum Generieren nicht mehr verfügbar.
Quelle
Notiz
Dieses Paket erfordert Python 3.12 oder höher.
Installieren/Aktualisieren mit PIP:
pip install -U novelaiImportieren Sie die erforderlichen Pakete und initialisieren Sie einen Kunden mit Ihren Romanai -Kontoanmeldeinformationen.
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 ()) Nach erfolgreicher Initialisierung können Sie Bilder mit der Methode generate_image erstellen. Die Methode nimmt ein Metadata als erstes Argument und ein optionales host -Argument an, um das zu verwendende Backend anzugeben.
Durch das Übergeben verbose=True druckt die Methode die geschätzten Anlas -Kosten jedes Mal, wenn eine generierende Anforderung gestellt wird.
Die vollständige Parameterliste von Metadata finden Sie in der Klassendefinition.
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 ()) Um die img2img -Aktion durchzuführen, setzen Sie den action in Metadaten zu Action.IMG2IMG und image auf Ihr Basisbild. Das Basisbild muss in das base64-kodierte Format umgewandelt werden. Dies kann mit dem base64 -Modul erreicht werden.
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 ()) Um inpaint -Aktionen durchzuführen, setzen mask image action in Metadaten an Action.INPAINTING ein. Sowohl das Basisbild als auch die Maske müssen in das base64-kodierte Format umgewandelt werden. Dies kann mit dem base64 -Modul erreicht werden.
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 ()) Die Vibe -Übertragung hat keinen eigenen Aktionstyp. Stattdessen wird es erreicht, indem ein reference_image_multiple -Parameter in Metadaten hinzugefügt wird. Das Referenzbild muss in das base64-kodierte Format konvertiert werden. Dies kann mit dem base64 -Modul erreicht werden.
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 ())Optional wird auch eine Modulfunktion bereitgestellt, um in CLI direkt Zugriffstoken zu generieren.
Sobald ein Zugangstoken generiert ist, ist es 30 Tage lang gültig. Token kann als Authentifizierungsheader verwendet werden, um Anfragen an Romanai zu stellen.
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Romanai Backend
Aedial/Romanai-api
Romanai inoffizieller Wissensbasis