Pembungkus python asinkron ringan untuk API generasi gambar novelai.
Metadata untuk dengan mudah mengatur parameter generasi dengan validasi tipe.asyncio untuk menjalankan tugas menghasilkan dan mengembalikan output secara efisien. Penting
Sayangnya, Novelai telah mendepresiasi fungsi pembuatan gambar mereka dari titik akhir API mulai dari 21 Maret 2024. Sebagai hasilnya, fitur generasi bersamaan tidak lagi tersedia.
Sumber
Catatan
Paket ini membutuhkan Python 3.12 atau lebih tinggi.
Instal/Perbarui dengan PIP:
pip install -U novelaiImpor paket yang diperlukan dan inisialisasi klien dengan kredensial akun novelai Anda.
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 ()) Setelah menginisialisasi dengan sukses, Anda dapat menghasilkan gambar dengan metode generate_image . Metode ini mengambil objek Metadata sebagai argumen pertama, dan argumen host opsional untuk menentukan backend untuk digunakan.
Dengan lulus verbose=True , metode ini akan mencetak perkiraan biaya ANLAS setiap kali permintaan pembangkit akan dibuat.
Daftar parameter lengkap Metadata dapat ditemukan dalam definisi kelas.
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 ()) Untuk melakukan tindakan img2img , atur parameter action dalam metadata ke Action.IMG2IMG , dan parameter image ke gambar dasar Anda. Gambar dasar perlu dikonversi menjadi format yang dikodekan base64. Ini dapat dicapai dengan menggunakan modul 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 ()) Untuk melakukan tindakan inpaint , atur parameter action dalam metadata ke Action.INPAINTING Meninjau, dan parameter image ke gambar dasar Anda, dan parameter mask ke gambar topeng hitam dan putih, di mana putih adalah area yang tidak dapat dicat dan hitam untuk disimpan apa adanya. Gambar dasar dan topeng perlu dikonversi menjadi format yang dikodekan base64. Ini dapat dicapai dengan menggunakan modul 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 ()) Transfer getaran tidak memiliki jenis aksinya sendiri. Sebaliknya, itu dicapai dengan menambahkan parameter reference_image_multiple di metadata. Gambar referensi perlu dikonversi menjadi format yang dikodekan base64. Ini dapat dicapai dengan menggunakan modul 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 ())Secara opsional, fungsi modul juga disediakan untuk secara langsung menghasilkan token akses di CLI.
Setelah token akses dihasilkan, itu akan berlaku selama 30 hari. Token dapat digunakan sebagai header otentikasi untuk membuat permintaan ke Novelai.
# Replace argument values with your actual account credentials
python3 -m novelai login < username > < password > Backend novelai
Aedial/Novelai-API
Novelai tidak resmi Pengetahuan