Легкая асинхронная обертка для питона для API генерации изображений.
Metadata для легкой настройки параметров генерации с помощью проверки типа.asyncio для выполнения генерации задач и эффективного возврата выходов. Важный
К сожалению, Novalai амортизировала свою функцию генерации изображений в конечной точке API, начиная с 21 марта 2024 года. В результате функция одновременной генерации больше не доступна.
Источник
Примечание
Этот пакет требует 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 , метод будет печатать расчетную стоимость Anlas каждый раз, когда будет выполнять генерационный запрос.
Полный список параметров 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 на изображение черно -белой маски, где белый - это область для INPaint и Black, чтобы сохранить, как есть. И базовое изображение, и маска должны быть преобразованы в формат кодировки 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 ()) Передача Vibe не имеет своего типа действий. Вместо этого это достигается путем добавления параметра 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 дней. Токен может быть использован в качестве заголовка аутентификации, чтобы сделать запросы в Novalai.
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Backend Novelai
Aedial/novelai-api
Novalai Неофициальные базы знаний