Un envoltorio de pitón asíncrono liviano para la API de generación de imágenes novelai.
Metadata para configurar fácilmente los parámetros de generación con la validación de tipo.asyncio para ejecutar tareas de generación y devolver salidas de manera eficiente. Importante
Desafortunadamente, el novelai ha depreciado su función de generación de imágenes del punto final API a partir del 21 de marzo de 2024. Como resultado, la función de generación concurrente ya no está disponible.
Fuente
Nota
Este paquete requiere Python 3.12 o superior.
Instalar/actualizar con PIP:
pip install -U novelaiImportar paquetes requeridos e inicializar a un cliente con las credenciales de su cuenta de 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 ()) Después de inicializarse con éxito, puede generar imágenes con el método generate_image . El método toma un objeto Metadata como el primer argumento y un argumento host opcional para especificar el backend a usar.
Al pasar verbose=True , el método imprimirá el costo de ANLAS estimado cada vez que se realizará una solicitud de generación.
La lista completa de metadatos de Metadata se puede encontrar en la definición de clase.
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 ()) Para realizar la acción img2img , establezca el parámetro action en metadatos a Action.IMG2IMG y el parámetro image en su imagen base. La imagen base debe convertirse en formato codificado Base64. Esto se puede lograr usando el módulo 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 ()) Para realizar la acción inpaint , establezca el parámetro action en metadatos a Action.INPAINTING Inpainto y el parámetro image a su imagen base, y mask el parámetro en la imagen de la máscara en blanco y negro, donde el blanco es el área de inhalación y negro para mantener como está. Tanto la imagen base como la máscara deben convertirse en formato codificado Base64. Esto se puede lograr usando el módulo 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 ()) La transferencia de vibra no tiene su propio tipo de acción. En cambio, se logra agregando un parámetro reference_image_multiple en metadatos. La imagen de referencia debe convertirse en formato codificado Base64. Esto se puede lograr usando el módulo 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 ())Opcionalmente, también se proporciona una función de módulo para generar directamente el token de acceso en CLI.
Una vez que se genera un token de acceso, será válido por 30 días. El token se puede usar como encabezado de autenticación para hacer solicitudes a novelai.
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Backend de novelai
Aedial/novelai-api
Base de conocimiento no oficial de novelai