Um invólucro leve assíncrono Python para a API de geração de imagens Novelai.
Metadata para configurar facilmente parâmetros de geração com validação de tipo.asyncio para executar tarefas de geração e retornar saídas com eficiência. Importante
Infelizmente, a Novelai depreciou sua função de geração de imagens do ponto final da API a partir de 21 de março de 2024. Como resultado, o recurso de geração simultânea não está mais disponível.
Fonte
Observação
Este pacote requer Python 3.12 ou superior.
Instale/atualize com PIP:
pip install -U novelaiImportar pacotes necessários e inicialize um cliente com suas credenciais da conta 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 ()) Depois de inicializar com sucesso, você pode gerar imagens com o método generate_image . O método pega um objeto Metadata como o primeiro argumento e um argumento opcional host para especificar o back -end a ser usado.
Ao passar verbose=True , o método imprimirá o custo estimado de Anlas cada vez que uma solicitação de geração será feita.
A lista completa de parâmetros de Metadata pode ser encontrada na definição da 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 ()) Para executar a ação img2img , defina o parâmetro action em metadados como Action.IMG2IMG e o parâmetro image para sua imagem base. A imagem base precisa ser convertida em formato codificado por Base64. Isso pode ser alcançado usando o 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 executar a ação inpaint , defina o parâmetro action em metadados como Action.INPAINTING e o parâmetro image para sua imagem base e mask o parâmetro da imagem de máscara em preto e branco, onde o branco é a área para a pista e preto para manter como está. A imagem base e a máscara precisam ser convertidas em formato codificado por 64. Isso pode ser alcançado usando o 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 ()) A transferência de vibração não tem seu próprio tipo de ação. Em vez disso, é alcançado adicionando um parâmetro reference_image_multiple em metadados. A imagem de referência precisa ser convertida em formato codificado por Base64. Isso pode ser alcançado usando o 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, uma função de módulo também é fornecida para gerar diretamente o token de acesso na CLI.
Depois que um token de acesso for gerado, ele será válido por 30 dias. O token pode ser usado como cabeçalho de autenticação para fazer solicitações ao Novelai.
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Novelai back -end
Aedial/Novelai-api
NOVENAI MAIS OFFICIAL CONHECIMENTO