Stable Diffusion adalah model generasi citra berkualitas tinggi yang menghasilkan citra stabil beresolusi tinggi. Stable Diffusion WebUI sumber terbuka menyediakan antarmuka browser berbasis pustaka Gradio dan menawarkan berbagai alat untuk generasi citra. Platform for AI (PAI) Elastic Algorithm Service (EAS) menyediakan mode penyebaran berbasis skenario yang memungkinkan Anda menyebarkan layanan model Stable Diffusion WebUI hanya dengan mengonfigurasi beberapa parameter. Layanan yang telah disebarkan dapat digunakan untuk menghasilkan citra berdasarkan prompt teks. Topik ini menjelaskan cara menyebarkan dan memanggil layanan Stable Diffusion WebUI serta memberikan jawaban atas pertanyaan yang sering diajukan.
Fitur dan manfaat
Penyebaran EAS menyediakan fitur dan manfaat berikut:
Kemudahan penggunaan: Anda dapat dengan cepat menyebarkan layanan model siap pakai di EAS dan secara dinamis mengganti sumber daya dasar seperti GPU sesuai kebutuhan.
Fitur tingkat enterprise: Mekanisme layanan frontend dan backend yang terpisah mendukung banyak pengguna dalam penjadwalan multi-GPU, isolasi pengguna, dan pemisahan tagihan.
Ekstensi dan optimasi: PAI menyediakan edisi sumber terbuka Stable Diffusion WebUI, alat optimasi PAI-Blade, serta ekstensi FileBrowser dan ModelZoo. PAI-Blade meningkatkan optimasi kinerja. Ekstensi FileBrowser memungkinkan Anda mengunggah dan mengunduh model serta citra dari klien lokal. Ekstensi ModelZoo mempercepat pengunduhan model sumber terbuka.
Edisi penyebaran
Layanan Stable Diffusion WebUI tersedia dalam edisi berikut: Edisi Standar, Edisi API, WebUI Edisi Kluster, dan Edisi Serverless. Tabel berikut menjelaskan perbedaan antar edisi tersebut.
Skenario | Metode pemanggilan yang didukung | Penagihan | |
Edisi Standar | Direkomendasikan untuk pengujian dan verifikasi pengguna tunggal. Hanya berlaku untuk menyebarkan satu instans. |
| Anda ditagih berdasarkan konfigurasi penyebaran Anda. Untuk informasi selengkapnya, lihat Penagihan Elastic Algorithm Service (EAS). |
Edisi API | Sistem akan secara otomatis mengubah layanan menjadi mode asinkron, cocok untuk skenario konkurensi tinggi. | Pemanggilan API (sinkron & asinkron) | |
WebUI Edisi Kluster | Cocok untuk skenario di mana banyak pengguna perlu menggunakan WebUI bersama-sama, seperti penggunaan kolaboratif oleh tim desain dalam perusahaan. | Web UI | |
Edisi Serverless | Cocok untuk skenario dengan fluktuasi permintaan signifikan, di mana layanan dapat melakukan penskalaan elastis secara otomatis berdasarkan volume permintaan Anda. | Web UI | Penyebaran layanan sepenuhnya gratis, dan Anda hanya ditagih berdasarkan durasi generasi citra. |
Edisi API: Sistem secara otomatis menyebarkan edisi ini sebagai layanan asinkron dan membuat instans layanan antrian, sehingga memerlukan sumber daya CPU tambahan.
WebUI Edisi Kluster: Setiap pengguna memiliki lingkungan backend dan direktori kerja independen, memungkinkan berbagi GPU dan manajemen file yang efisien.
Edisi Serverless: Hanya tersedia di wilayah Tiongkok (Shanghai) dan Tiongkok (Hangzhou).
Jika penyebaran berbasis skenario tidak memenuhi kebutuhan layanan Anda, Anda dapat menggunakan image resmi yang sesuai untuk Edisi Standar, Edisi Kluster, dan Edisi API guna melakukan penyebaran model kustom yang mendukung lebih banyak fitur layanan. Untuk informasi selengkapnya, lihat Parameter untuk penyebaran kustom di konsol.
Prasyarat
Sistem file Apsara File Storage NAS (NAS) atau bucket Object Storage Service (OSS) telah dibuat untuk menyimpan file model dan citra yang dihasilkan.
Buat sistem file NAS tujuan umum. Untuk informasi selengkapnya, lihat Buat sistem file.
Buat bucket OSS. Untuk informasi selengkapnya, lihat Buat bucket.
Jika Anda memanggil layanan melalui operasi API, Anda harus mengonfigurasi variabel lingkungan. Untuk informasi selengkapnya, lihat Konfigurasikan kredensial akses.
Sebarkan layanan model
Metode penyebaran berikut didukung:
Metode 1: Penyebaran model berbasis skenario (direkomendasikan)
Metode ini berlaku untuk Edisi Standar, Edisi API, Edisi Kluster, dan Edisi Serverless. Lakukan langkah-langkah berikut:
Login ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service. Di bagian Scenario-based Model Deployment, klik AI Painting-SDWebUI Deployment.
Pada halaman AI Painting - SD Web UI Deployment, konfigurasikan parameter kunci berikut.
Parameter
Deskripsi
Basic Information
Edition
Lihat Deployment editions.
Model Configuration
Digunakan untuk menyimpan file model dan citra inferensi yang dihasilkan.
PentingKonfigurasi model wajib untuk edisi API dan Kluster.
Klik Add untuk mengonfigurasi model. Jenis konfigurasi berikut didukung:
Object Storage Service (OSS): OSS lebih nyaman untuk unggah dan unduh data serta dapat menghasilkan alamat akses Internet untuk citra yang dihasilkan. Namun, kecepatan pergantian model dan penyimpanan citra lebih lambat dibandingkan NAS. Konfigurasikan OSS sebagai path bucket OSS yang sudah ada.
File Storage (NAS): Mendukung pergantian model dan penyimpanan citra yang lebih cepat. Opsi ini hanya didukung untuk edisi berikut: Edisi Standar, Edisi API, dan WebUI Edisi Kluster.
NAS Mount Target: Pilih sistem file NAS dan titik pemasangan yang sudah ada.
NAS Source Path: Atur nilainya menjadi
/.
Dalam contoh ini, OSS digunakan.
Resource Configuration
Resource Configuration Selection
Parameter ini hanya didukung untuk edisi berikut: Edisi Standar, Edisi API, dan WebUI Edisi Kluster.
Pilih tipe GPU, untuk Resource Specification kami merekomendasikan menggunakan ml.gu7i.c16m60.1-gu30 (rasio harga-kinerja terbaik).
Inference Acceleration
Fitur akselerasi inferensi. Nilai yang valid:
PAI-Blade Inference Acceleration: PAI-Blade adalah alat optimasi inferensi tujuan umum yang disediakan oleh PAI. Alat ini mengoptimalkan model yang telah dilatih untuk mencapai kinerja inferensi optimal.
Open Source Framework XFormers Inference Acceleration: xFormers adalah alat akselerasi sumber terbuka berbasis Transformer yang dapat secara efektif mengurangi waktu generasi citra.
No Acceleration: Menunjukkan bahwa fitur akselerasi inferensi dinonaktifkan.
VPC Configuration
VPC
Ketika Model Settings diatur ke File Storage (NAS), sistem secara otomatis mencocokkan virtual private cloud yang terhubung ke VPC tempat sistem file NAS berada. Tidak diperlukan modifikasi tambahan.
VSwitch
Security Group Name
Setelah mengonfigurasi parameter, klik Deploy.
Metode 2: Penyebaran kustom
Metode ini berlaku untuk Edisi Standar, Edisi API, dan WebUI Edisi Kluster. Lakukan langkah-langkah berikut:
Login ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
Pada halaman Custom Deployment, konfigurasikan parameter kunci berikut.
Parameter
Deskripsi
Environment Context
Deployment Mode
Untuk menyebarkan layanan Edisi Standar dan WebUI Edisi Kluster, pilih Image-based Deployment, dan pilih Enable Web App.
Untuk menyebarkan layanan Edisi API, pilih Image-based Deployment, dan pilih Asynchronous Services.
Image Configuration
Dalam daftar Official Images, pilih stable-diffusion-webui, dan pilih nomor versi tertinggi, di mana:
x.x-standard: Edisi Standar
x.x-api: Edisi API
x.x-cluster-webui: WebUI Edisi Kluster
CatatanVersi image sering diperbarui. Kami merekomendasikan Anda memilih versi terbaru.
Jika Anda ingin mengizinkan banyak pengguna menggunakan Stable Diffusion WebUI untuk menghasilkan citra, pilih versi x.x-cluster-webui.
Untuk informasi selengkapnya tentang skenario untuk setiap versi, lihat Deployment editions.
Model Configuration
Digunakan untuk menyimpan file model dan citra inferensi yang dihasilkan.
PentingKonfigurasi model wajib untuk edisi API dan Kluster.
Jenis konfigurasi berikut didukung:
OSS
Uri: Atur path OSS ke path bucket OSS yang sudah ada.
Mount Path: Atur ke
/code/stable-diffusion-webui/data.
NAS
Select A File System: Pilih sistem file NAS yang telah tersedia.
Mount Target: Pilih titik pemasangan yang sudah ada.
File System Path: Atur ke
/.Mount Path: Atur ke
/code/stable-diffusion-webui/data.
PAI Model
PAI Model: Pilih model PAI dan versi model.
Mount Path: Atur ke
/code/stable-diffusion-webui/data.
Dalam contoh ini, bucket OSS dipasang.
Command To Run
Setelah menyelesaikan konfigurasi di atas, sistem secara otomatis menghasilkan perintah run yang sesuai.
Setelah menentukan konfigurasi model, tambahkan parameter
--data-dirke perintah run untuk memasang data ke path tertentu pada instans layanan. Path tersebut harus sama dengan path mount, seperti--data-dir /code/stable-diffusion-webui/data.(Opsional) Anda juga dapat menambahkan parameter
--bladeatau--xformerske perintah run untuk mengaktifkan fitur akselerasi inferensi dan meningkatkan kecepatan generasi citra. Untuk informasi selengkapnya tentang parameter, lihat Parameter yang didukung saat startup layanan.
Resource Information
Deployment Resources
Pilih tipe GPU, untuk Resource Specification kami merekomendasikan menggunakan ml.gu7i.c16m60.1-gu30 (rasio harga-kinerja terbaik).
Service Registration
Virtual Private Cloud (VPC)
Ketika Model Settings diatur ke NAS, sistem secara otomatis mencocokkan virtual private cloud yang terhubung ke VPC tempat sistem file NAS berada. Tidak diperlukan modifikasi tambahan.
VSwitch
Security Group Name
Setelah mengonfigurasi parameter, klik Deploy.
Metode 3: Penyebaran JSON
Anda dapat menyebarkan layanan Stable Diffusion WebUI menggunakan skrip JSON. Bagian berikut menjelaskan cara menggunakan JSON untuk menyebarkan layanan Edisi Standar dan Edisi API.
Login ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service, lalu di bagian Custom Model Deployment, klik JSON Deployment.
Pada halaman JSON Deployment, konfigurasikan konten berikut dalam format JSON.
Sebarkan layanan Edisi Standar
{ "metadata": { "instance": 1, "name": "sd_v32", "enable_webservice": true }, "containers": [ { "image": "eas-registry-vpc.<region>.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:4.2", "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-prepare-environment --api --filebrowser --data-dir=/code/stable-diffusion-webui/data", "port": 8000 } ], "cloud": { "computing": { "instance_type": "ml.gu7i.c16m60.1-gu30", "instances": null }, "networking": { "vpc_id": "vpc-t4nmd6nebhlwwexk2****", "vswitch_id": "vsw-t4nfue2s10q2i0ae3****", "security_group_id": "sg-t4n85ksesuiq3wez****" } }, "storage": [ { "oss": { "path": "oss://examplebucket/data-oss", "readOnly": false }, "properties": { "resource_type": "model" }, "mount_path": "/code/stable-diffusion-webui/data" }, { "nfs": { "path": "/", "server": "726434****-aws0.ap-southeast-1.nas.aliyuncs.com" }, "properties": { "resource_type": "model" }, "mount_path": "/code/stable-diffusion-webui/data" } ] }Perhatikan parameter berikut:
Parameter
Wajib
Deskripsi
metadata.name
Ya
Nama layanan model kustom, yang unik dalam wilayah yang sama.
containers.image
Ya
Ganti <region> dengan ID wilayah saat ini. Misalnya, ganti variabel dengan cn-shanghai untuk Tiongkok (Shanghai). Untuk informasi tentang cara menanyakan ID wilayah, lihat Wilayah dan zona.
storage
Tidak
Anda dapat memilih salah satu dari dua metode pemasangan berikut:
oss: Dibandingkan dengan NAS, OSS lebih nyaman untuk unggah dan unduh data serta dapat menghasilkan alamat akses Internet untuk citra yang dihasilkan. Namun, kecepatan pergantian model dan penyimpanan citra lebih lambat. Atur parameter storage.oss.path ke path bucket OSS yang sudah ada.
nas: NAS mendukung pergantian model dan penyimpanan citra yang lebih cepat. Atur parameter storage.nfs.server ke sistem file NAS yang sudah ada.
Dalam contoh ini, OSS digunakan.
cloud.networking
Tidak
Jika Anda mengatur parameter storage ke nas, Anda harus mengonfigurasi VPC, termasuk ID VPC, vSwitch, dan grup keamanan. VPC harus sama dengan VPC sistem file NAS tujuan umum.
Sebarkan layanan Edisi API
{ "metadata": { "name": "sd_async", "instance": 1, "rpc.worker_threads": 1, "type": "Async" }, "cloud": { "computing": { "instance_type": "ml.gu7i.c16m60.1-gu30", "instances": null }, "networking": { "vpc_id": "vpc-bp1t2wukzskw9139n****", "vswitch_id": "vsw-bp12utkudylvp4c70****", "security_group_id": "sg-bp11nqxfd0iq6v5g****" } }, "queue": { "cpu": 1, "max_delivery": 1, "memory": 4000, "resource": "" }, "storage": [ { "oss": { "path": "oss://examplebucket/aohai-singapore/", "readOnly": false }, "properties": { "resource_type": "model" }, "mount_path": "/code/stable-diffusion-webui/data" }, { "nfs": { "path": "/", "server": "0c9624****-fgh60.cn-hangzhou.nas.aliyuncs.com" }, "properties": { "resource_type": "model" }, "mount_path": "/code/stable-diffusion-webui/data" } ], "containers": [ { "image": "eas-registry-vpc.<region>.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:4.2", "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-prepare-environment --api-log --time-log --nowebui --data-dir=/code/stable-diffusion-webui/data", "port": 8000 } ] }Tabel berikut hanya menjelaskan parameter yang konfigurasinya berbeda dari penyebaran layanan Edisi Standar.
Parameter
Deskripsi
Hapus parameter berikut:
metadata.enable_webservice
Hapus parameter ini untuk menonaktifkan webserver.
containers.script
Hapus opsi --filebrowser yang ditentukan dalam parameter containers.script untuk mempercepat startup layanan.
Tambahkan parameter berikut:
metadata.type
Atur nilainya ke Async untuk mengaktifkan layanan asinkron.
metadata.rpc.worker_threads
Atur nilainya ke 1 untuk memungkinkan satu instans hanya memproses satu permintaan dalam satu waktu.
queue.max_delivery
Atur nilainya ke 1 untuk menonaktifkan percobaan ulang setelah terjadi kesalahan.
containers.script
Konfigurasi containers.script menambahkan --nowebui (untuk mempercepat kecepatan startup) dan --time-log (untuk mencatat waktu respons antarmuka).
Untuk informasi selengkapnya tentang konfigurasi parameter, lihat Sebarkan layanan Edisi Standar.
Klik Deploy.
Panggil layanan
Panggil layanan menggunakan web UI
Anda dapat menggunakan web UI untuk memanggil layanan Edisi Standar, WebUI Edisi Kluster, dan Edisi Serverless. Lakukan langkah-langkah berikut:
Setelah layanan disebarkan, klik View Web App di kolom Service Type layanan target.
Lakukan inferensi model.
Pada tab Txt2img halaman Stable Diffusion WebUI, masukkan prompt positif, seperti
cute dog, lalu klik Generate. Gambar berikut menunjukkan citra yang dihasilkan:
Panggil layanan menggunakan operasi API
Anda dapat menggunakan operasi API untuk memanggil layanan Edisi Standar atau Edisi API. Pemanggilan API mendukung panggilan sinkron dan asinkron. Layanan Edisi Standar hanya mendukung panggilan sinkron, sedangkan layanan Edisi API mendukung kedua jenis panggilan tersebut.
Panggilan sinkron: Jika Anda mengirim permintaan sinkron, klien menghentikan eksekusi dan menunggu hasil dikembalikan.
Panggilan asinkron: Klien menggunakan layanan antrian EAS untuk mengirim permintaan ke antrian input dan berlangganan hasil inferensi di antrian output.
Panggilan sinkron
Setelah menyebarkan layanan Edisi Standar atau Edisi API, lakukan langkah-langkah berikut untuk mengirim permintaan sinkron.
Dapatkan informasi pemanggilan.
Setelah layanan disebarkan, klik nama layanan untuk membuka halaman Overview.
Di bagian Basic Information, klik View Call Information.
Pada halaman Invocation Information, dapatkan titik akhir layanan dan token.
Jika layanan adalah Edisi API, Anda dapat memperoleh titik akhir layanan dan token di tab Synchronous Call.

Untuk layanan Edisi Standar, lihat gambar berikut untuk memperoleh titik akhir layanan dan token.

Gunakan salah satu metode berikut untuk mengirim permintaan sinkron.
Gunakan perintah cURL untuk mengirim permintaan layanan
Kode contoh:
curl --location --request POST '<service_url>/sdapi/v1/txt2img' \ --header 'Authorization: <token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "prompt":"cute dog ", "steps":20 }'Di mana:
<service_url>: Ganti dengan titik akhir layanan yang Anda peroleh di Langkah 1. Anda perlu menghapus
/di akhir titik akhir.<token>: Atur parameter ini ke token layanan yang Anda peroleh di Langkah 1.
Setelah menjalankan perintah, sistem mengembalikan citra yang dikodekan Base64.
Gunakan Python untuk mengirim permintaan layanan
Lihat API untuk mengirim permintaan layanan.
Contoh 1 (direkomendasikan): Kami merekomendasikan Anda memasang bucket OSS ke layanan EAS untuk menyimpan citra yang dihasilkan. Dalam contoh berikut, path mount OSS digunakan dalam badan permintaan untuk menyimpan citra ke OSS, dan SDK oss2 digunakan untuk mengunduh citra dari OSS ke perangkat lokal Anda.
import requests import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Langkah 1: Kirim permintaan. Citra yang dihasilkan disimpan ke OSS. url = "<service_url>" # Pasangan Kunci Akses akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di OSS adalah operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat Pengguna RAM, login ke konsol RAM. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda. bucket = oss2.Bucket(auth, '<endpoint>', '<examplebucket>') payload = { "alwayson_scripts": { "sd_model_checkpoint": "deliberate_v2.safetensors", "save_dir": "/code/stable-diffusion-webui/data/outputs" }, "steps": 30, "prompt": "girls", "batch_size": 1, "n_iter": 2, "width": 576, "height": 576, "negative_prompt": "ugly, out of frame" } session = requests.session() session.headers.update({"Authorization": "<token>"}) response = session.post(url=f'{url}/sdapi/v1/txt2img', json=payload) if response.status_code != 200: raise Exception(response.content) data = response.json() # Langkah 2: Dapatkan citra dari OSS dan unduh citra ke perangkat lokal Anda. # Konfigurasi mount_path untuk OSS yang Anda tentukan saat menyebarkan layanan. mount_path = "/code/stable-diffusion-webui/data" # Path OSS yang Anda tentukan saat menyebarkan layanan. oss_url = "oss://examplebucket/data-oss" for idx, img_path in enumerate(data['parameters']['image_url'].split(',')): # Dapatkan URL aktual citra yang dihasilkan di OSS. img_oss_path = img_path.replace(mount_path, oss_url) print(idx, img_oss_path, url) # Unduh objek OSS ke sistem file lokal. Ganti <examplebucket> dengan nama bucket OSS yang Anda buat. bucket.get_object_to_file(img_oss_path[len("oss://examplebucket/"):], f'output-{idx}.png')Tabel berikut menjelaskan parameter kunci:
Konfigurasi
Deskripsi
url
Ganti <service_url> dengan titik akhir layanan yang Anda peroleh di Langkah 1. Anda perlu menghapus
/di akhir titik akhir.bucket
Di mana:
<endpoint> mengacu pada Endpoint OSS yang dikonfigurasi. Misalnya: Endpoint untuk wilayah Tiongkok (Shanghai) adalah
http://oss-cn-shanghai.aliyuncs.com. Jika layanan Anda disebarkan di wilayah lain, konfigurasikan parameter sesuai kebutuhan. Untuk informasi selengkapnya, lihat Wilayah dan endpoint OSS.Ganti <examplebucket> dengan nama bucket OSS yang Anda buat.
<token>
Atur parameter ini ke token yang Anda peroleh di Langkah 1.
mount_path
Path mount OSS yang Anda konfigurasi saat menyebarkan layanan.
oss_url
Path penyimpanan OSS yang Anda konfigurasi saat menyebarkan layanan.
Jika kode berhasil dijalankan, hasil berikut dikembalikan. Anda dapat membuka Konsol OSS dan melihat citra yang dihasilkan di direktori
outputspenyimpanan yang Anda pasang saat menyebarkan layanan.0 /code/stable-diffusion-webui/data/outputs/txt2img-grids/2024-06-26/grid-093546-9ad3f23e-a5c8-499e-8f0b-6effa75bd04f.png oss://examplebucket/data-oss/outputs/txt2img-grids/2024-06-26/grid-093546-9ad3f23e-a5c8-499e-8f0b-6effa75bd04f.png 1 /code/stable-diffusion-webui/data/outputs/txt2img-images/2024-06-26/093536-ab4c6ab8-880d-4de6-91d5-343f8d97ea3c-3257304074.png oss://examplebucket/data-oss/outputs/txt2img-images/2024-06-26/093536-ab4c6ab8-880d-4de6-91d5-343f8d97ea3c-3257304074.png 2 /code/stable-diffusion-webui/data/outputs/txt2img-images/2024-06-26/093545-6e6370d7-d41e-4105-960a-b4739af30c0d-3257304075.png oss://examplebucket/data-oss/outputs/txt2img-images/2024-06-26/093545-6e6370d7-d41e-4105-960a-b4739af30c0d-3257304075.pngContoh 2: Simpan citra ke path lokal. Jalankan kode Python berikut untuk mendapatkan citra yang dikodekan Base64 dan menyimpan file citra ke direktori lokal.
import requests import io import base64 from PIL import Image, PngImagePlugin url = "<service_url>" payload = { "prompt": "puppy dog", "steps": 20, "n_iter": 2 } session = requests.session() session.headers.update({"Authorization": "<token>"}) response = session.post(url=f'{url}/sdapi/v1/txt2img', json=payload) if response.status_code != 200: raise Exception(response.content) data = response.json() # Anda dapat memperoleh citra yang dikodekan Base64 dari permintaan sinkron, tetapi kami merekomendasikan Anda memperoleh URL citra sebagai gantinya. for idx, im in enumerate(data['images']): image = Image.open(io.BytesIO(base64.b64decode(im.split(",", 1)[0]))) png_payload = { "image": "data:image/png;base64," + im } resp = session.post(url=f'{url}/sdapi/v1/png-info', json=png_payload) pnginfo = PngImagePlugin.PngInfo() pnginfo.add_text("parameters", resp.json().get("info")) image.save(f'output-{idx}.png', pnginfo=pnginfo)Di mana:
<service_url>: Atur parameter ini ke titik akhir layanan yang Anda peroleh di Langkah 1. Hapus
/di akhir.<token>: Ganti dengan token yang Anda peroleh di Langkah 1.
Anda juga dapat menggunakan data LoRA dan ControlNet dalam permintaan untuk mengaktifkan fungsionalitas tertentu.
Konfigurasi LoRA
Saat mengirim permintaan layanan, Anda dapat menambahkan
<lora:yaeMikoRealistic_Genshin:1000>dalam badan permintaan untuk menggunakan model LoRA. Untuk informasi selengkapnya, lihat LoRA.Badan permintaan contoh:
{ "prompt":"girls <lora:yaeMikoRealistic_Genshin:1>", "steps":20, "save_images":true }Konfigurasi ControlNet
Anda dapat menggunakan format data ControlNet dalam permintaan API untuk dengan mudah melakukan transformasi umum pada citra yang dihasilkan, seperti menjaga orientasi citra tetap horizontal atau vertikal. Untuk informasi selengkapnya tentang metode konfigurasi, lihat Contoh: txt2img dengan ControlNet.
Pada halaman Invocation Method, ambil titik akhir layanan dan Token.
Jika layanan adalah versi API, Anda dapat menemukan titik akhir layanan dan token di tab Synchronous Call.

Jika layanan adalah Edisi Standar, Anda dapat menemukan titik akhir layanan dan token seperti yang ditunjukkan pada gambar berikut.

Panggilan asinkron
Setelah menyebarkan layanan Edisi API, Anda dapat mengirim permintaan asinkron ke layanan tersebut. Klien berlangganan hasil inferensi di antrian output. Lakukan langkah-langkah berikut:
Dapatkan informasi pemanggilan.
Klik Invocation Method di kolom Service Type layanan. Di tab Asynchronous Call, lihat titik akhir layanan dan token.

Kirim permintaan asinkron. Anda dapat menggunakan SDK untuk Python atau SDK untuk Java.
PentingLayanan antrian mensyaratkan bahwa ukuran antrian input atau output tidak boleh melebihi 8 KB. Perhatikan hal-hal berikut:
Jika data permintaan berisi citra, kami merekomendasikan Anda menggunakan URL untuk meneruskan informasi citra. SD WebUI secara otomatis mengunduh dan mengurai data citra.
Untuk memastikan respons tidak berisi data citra asli, kami merekomendasikan Anda menggunakan parameter save_dir untuk menentukan path tempat citra yang dihasilkan disimpan. Untuk informasi selengkapnya, lihat Parameter konfigurasi tambahan untuk operasi API.
Secara default, EAS tidak dapat terhubung ke Internet. Jika Anda menggunakan parameter image_link untuk menentukan URL citra dari internet, Anda harus mengonfigurasi akses jaringan publik seperti yang dijelaskan di Pengaturan jaringan EAS agar layanan dapat mengakses citra.
Metode 1: Gunakan SDK untuk Python
Kode contoh:
import requests url = "<service_url>" session = requests.session() session.headers.update({"Authorization": "<token>"}) prompts = ["cute dog", "cute cat", "cute girl"] for i in range(5): p = prompts[i % len(prompts)] payload = { "prompt": p, "steps": 20, "alwayson_scripts": { "save_dir": "/code/stable-diffusion-webui/data-oss/outputs/txt2img" }, } response = session.post(url=f'{url}/sdapi/v1/txt2img?task_id=txt2img_{i}', json=payload) if response.status_code != 200: exit(f"send request error:{response.content}") else: print(f"send {p} success, index is {response.content}") for i in range(5): p = prompts[i % len(prompts)] payload = { "prompt": p, "steps": 20, "alwayson_scripts": { "save_dir": "/code/stable-diffusion-webui/data-oss/outputs/img2img", "image_link": "https://eas-cache-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/stable-diffusion-cache/tests/boy.png", }, } response = session.post(url=f'{url}/sdapi/v1/img2img?task_id=img2img_{i}', json=payload) if response.status_code != 200: exit(f"send request error:{response.content}") else: print(f"send {p} success, index is {response.content}")Di mana:
<service_url>: Ganti nilainya dengan titik akhir layanan yang Anda peroleh di Langkah 1. Hapus
/di akhir titik akhir.<token>: Ganti dengan token yang Anda peroleh di Langkah 1.
CatatanSemua antarmuka POST layanan WebUI didukung. Anda dapat mengirim permintaan ke path yang sesuai sesuai kebutuhan.
Jika Anda ingin meneruskan informasi kustom ke layanan, Anda dapat menentukan tag kustom menggunakan parameter URL. Misalnya, Anda dapat menambahkan parameter
?task_id=task_abcke URL untuk menentukan tag bernama task_id, dan informasi tag dikembalikan di field tags output layanan.
Jika kode berhasil dijalankan, sistem menghasilkan output berikut. Hasil aktual Anda mungkin berbeda.

Metode 2: Gunakan SDK untuk Java
Maven digunakan untuk mengelola proyek Java. Oleh karena itu, Anda harus menambahkan dependensi klien yang diperlukan ke file pom.xml. Untuk informasi selengkapnya, lihat SDK untuk Java.
Kode contoh:
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; public class SDWebuiAsyncPutTest { public static void main(String[] args) throws Exception { // Buat klien untuk layanan antrian. String queueEndpoint = "http://166233998075****.cn-hangzhou.pai-eas.aliyuncs.com"; String queueToken = "xxxxx=="; // Nama antrian input terdiri dari nama layanan dan path permintaan yang ingin Anda gunakan. String inputQueueName = "<service_name>/sdapi/v1/txt2img"; // Buat antrian input. Setelah Anda menambahkan data permintaan ke antrian input, layanan inferensi secara otomatis membaca data permintaan dari antrian input. QueueClient inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); // Hapus data antrian. Lakukan dengan hati-hati. // input_queue.clear(); // Tambahkan data permintaan ke antrian input. int count = 5; for (int i = 0; i < count; ++i) { // Buat data permintaan. String data = "{\n" + " \"prompt\": \"cute dog\", \n" + " \"steps\":20,\n" + " \"alwayson_scripts\":{\n" + " \"save_dir\":\"/code/stable-diffusion-webui/data-oss/outputs/txt2img\"\n" + " }\n" + " }"; // Buat tag kustom. HashMap<String, String> map = new HashMap<String, String>(1); map.put("task_id", "txt2img_" + i); Pair<Long, String> entry = inputQueue.put(data.getBytes(), map); System.out.println(String.format("send success, index is %d, request_id is %s", entry.getKey(), entry.getValue())); // Layanan antrian mendukung antrian multi-prioritas. Anda dapat menggunakan fungsi put untuk mengatur tingkat prioritas permintaan. Nilai default adalah 0. Nilai 1 menentukan prioritas tinggi. // inputQueue.put(data.getBytes(), 0L, null); } // Tutup klien. inputQueue.shutdown(); inputQueueName = "<service_name>/sdapi/v1/img2img"; inputQueue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser()); for (int i = 0; i < count; ++i) { // Buat data permintaan. String data = "{\n" + " \"prompt\": \"cute dog\", \n" + " \"steps\":20,\n" + " \"alwayson_scripts\":{\n" + " \"save_dir\":\"/code/stable-diffusion-webui/data-oss/outputs/img2img\",\n" + " \"image_link\":\"https://eas-cache-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/stable-diffusion-cache/tests/boy.png\"\n" + " }\n" + " }"; HashMap<String, String> map = new HashMap<String, String>(1); map.put("task_id", "img2img_" + i); Pair<Long, String> entry = inputQueue.put(data.getBytes(), map); System.out.println(String.format("send success, index is %d, requestId is %s", entry.getKey(), entry.getValue())); } // Tutup klien. inputQueue.shutdown(); } }Di mana:
queueEndpoint: Konfigurasikan sebagai titik akhir layanan yang diperoleh di Langkah 1. Rujuk kode contoh untuk mengonfigurasi parameter ini.
queueToken: Konfigurasikan sebagai informasi token layanan yang diperoleh di Langkah 1.
<service_name>: Ganti dengan nama layanan asinkron yang disebarkan.
CatatanJika Anda ingin meneruskan tag dalam layanan, Anda dapat mengatur parameter tag di fungsi put. Anda dapat merujuk kode contoh untuk penggunaan tag kustom. Informasi tag dikembalikan di field tag hasil output.
Jika kode berhasil dijalankan, sistem menghasilkan output berikut. Hasil aktual Anda mungkin berbeda.
send success, index is 21, request_id is 05ca7786-c24e-4645-8538-83d235e791fe send success, index is 22, request_id is 639b257a-7902-448d-afd5-f2641ab77025 send success, index is 23, request_id is d6b2e127-eba3-4414-8e6c-c3690e0a487c send success, index is 24, request_id is 8becf191-962d-4177-8a11-7e4a450e36a7 send success, index is 25, request_id is 862b2d8e-5499-4476-b3a5-943d18614fc5 send success, index is 26, requestId is 9774a4ff-f4c8-40b7-ba43-0b1c1d3241b0 send success, index is 27, requestId is fa536d7a-7799-43f1-947f-71973bf7b221 send success, index is 28, requestId is e69bdd32-5c7b-4c8f-ba3e-e69d2054bf65 send success, index is 29, requestId is c138bd8f-be45-4a47-a330-745fd1569534 send success, index is 30, requestId is c583d4f8-8558-4c8d-95f7-9c3981494007 Process finished with exit code 0Berlangganan hasil permintaan asinkron.
Setelah server menyelesaikan pemrosesan permintaan terkait, server secara otomatis mendorong hasil ke klien untuk komunikasi asinkron yang efisien. Anda dapat menggunakan SDK untuk Python atau SDK untuk Java untuk berlangganan hasil.
Metode 1: Gunakan SDK untuk Python
Kode contoh:
import json import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from eas_prediction import QueueClient sink_queue = QueueClient('139699392458****.cn-hangzhou.pai-eas.aliyuncs.com', 'sd_async/sink') sink_queue.set_token('<token>') sink_queue.init() mount_path = "/code/stable-diffusion-webui/data-oss" oss_url = "oss://<examplebucket>/aohai-singapore" # Pasangan Kunci Akses akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi di OSS adalah operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat Pengguna RAM, login ke konsol RAM. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda. bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<examplebucket>') watcher = sink_queue.watch(0, 5, auto_commit=False) for x in watcher.run(): if 'task_id' in x.tags: print('index {} task_id is {}'.format(x.index, x.tags['task_id'])) print(f'index {x.index} data is {x.data}') sink_queue.commit(x.index) try: data = json.loads(x.data.decode('utf-8')) for idx, path in enumerate(data['parameters']['image_url'].split(',')): url = path.replace(mount_path, oss_url) # Unduh objek OSS ke sistem file lokal. bucket.get_object_to_file(url[len("oss://<examplebucket>/"):], f'{x.index}-output-{idx}.png') print(f'save {url} to {x.index}-output-{idx}.png') except Exception as e: print(f'index {x.index} process data error {e}')Tabel berikut menjelaskan parameter kunci:
Konfigurasi
Deskripsi
sink_queue
Ganti
139699392458****.cn-hangzhou.pai-eas.aliyuncs.comdengan titik akhir layanan dari alamat layanan yang Anda peroleh di langkah sebelumnya, mengikuti format yang ditunjukkan dalam kode contoh.Ganti sd_async dengan nama layanan asinkron yang Anda sebarkan dalam format yang ditunjukkan dalam kode contoh.
<token>
Atur nilainya ke token layanan yang Anda peroleh di Langkah 1.
oss_url
Atur parameter ini ke path OSS yang Anda tentukan saat menyebarkan layanan.
bucket
Di mana:
http://oss-cn-hangzhou.aliyuncs.commewakili Endpoint OSS yang dikonfigurasi menggunakan wilayah Tiongkok (Hangzhou) sebagai contoh. Jika layanan Anda disebarkan di wilayah lain, tentukan endpoint aktual Anda. Untuk informasi selengkapnya, lihat Wilayah dan endpoint OSS.Ganti <examplebucket> dengan nama bucket OSS yang Anda buat.
CatatanAnda dapat melakukan operasi commit secara manual, atau atur
auto_commit=Trueuntuk melakukannya secara otomatis.Jika klien layanan antrian berhenti mengonsumsi data, kami merekomendasikan Anda menutup klien untuk melepaskan sumber daya.
Anda juga dapat menggunakan perintah cURL atau memanggil API sinkron untuk berlangganan hasil. Untuk informasi selengkapnya, lihat Sebarkan layanan inferensi asinkron.
Klien terus-menerus mendengarkan hasil dari server menggunakan metode
watcher.run(). Jika server tidak mengembalikan hasil, klien terus menunggu. Jika server mengembalikan hasil, klien mencetak hasil tersebut. Berikut adalah hasil contoh. Hasil aktual Anda mungkin berbeda. Anda dapat membuka Konsol OSS untuk melihat citra yang dihasilkan di path penyimpanan OSS yang Anda tentukan saat menyebarkan layanan.index 1 task_id is txt2img_0 index 1 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075825-a2abd45f-3c33-43f2-96fb-****50329671-1214613912.png","seed":"1214613912","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}' save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075825-a2abd45f-3c33-43f2-96fb-****50329671-1214613912.png to 1-output-0.png index 2 task_id is txt2img_1 index 2 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075827-c61af78c-25f2-47cc-9811-****aa51f5e4-1934284737.png","seed":"1934284737","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}' save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075827-c61af78c-25f2-47cc-9811-****aa51f5e4-1934284737.png to 2-output-0.png index 3 task_id is txt2img_2 index 3 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075829-1add1f5c-5c61-4f43-9c2e-****9d987dfa-3332597009.png","seed":"3332597009","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}' save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075829-1add1f5c-5c61-4f43-9c2e-****9d987dfa-3332597009.png to 3-output-0.png index 4 task_id is txt2img_3 index 4 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075832-2674c2d0-8a93-4cb5-9ff4-****46cec1aa-1250290207.png","seed":"1250290207","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}' save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075832-2674c2d0-8a93-4cb5-9ff4-****46cec1aa-1250290207.png to 4-output-0.png index 5 task_id is txt2img_4 index 5 data is b'{"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data/outputs/txt2img/txt2img-images/2024-07-01/075834-8bb15707-ff0d-4dd7-b2da-****27717028-1181680579.png","seed":"1181680579","error_msg":"","image_mask_url":""},"info":"{\\"hostname\\": \\"***-8aff4771-5c86c8d656-hvdb8\\"}"}' save oss://examplebucket/xx/outputs/txt2img/txt2img-images/2024-07-01/075834-8bb15707-ff0d-4dd7-b2da-****27717028-1181680579.png to 5-output-0.pngMetode 2: Gunakan SDK untuk Java
Kode contoh:
import com.aliyun.openservices.eas.predict.http.HttpConfig; import com.aliyun.openservices.eas.predict.http.QueueClient; import com.aliyun.openservices.eas.predict.queue_client.DataFrame; import com.aliyun.openservices.eas.predict.queue_client.QueueUser; import com.aliyun.openservices.eas.predict.queue_client.WebSocketWatcher; public class SDWebuiAsyncWatchTest { public static void main(String[] args) throws Exception { // Buat klien untuk layanan antrian. String queueEndpoint = "http://166233998075****.cn-hangzhou.pai-eas.aliyuncs.com"; String queueToken = "xxxxx=="; // Nama antrian output terdiri dari nama layanan dan "/sink". String sinkQueueName = "<service_name>/sink"; // Antrian output. Layanan inferensi memproses data input dan menulis hasil ke antrian output. QueueClient sinkQueue = new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser()); // Hapus data antrian. Lakukan dengan hati-hati. // sinkQueue.clear(); // Berlangganan antrian dan dapatkan data antrian. WebSocketWatcher watcher = sinkQueue.watch(0L, 5L, false, false, null); try { while (true) { DataFrame df = watcher.getDataFrame(); if (df.getTags().containsKey("task_id")) { System.out.println(String.format("task_id = %s", df.getTags().get("task_id"))); } System.out.println(String.format("index = %d, data = %s, requestId = %s", df.getIndex(), new String(df.getData()), df.getTags().get("requestId"))); sinkQueue.commit(df.getIndex()); } } catch (Exception e) { System.out.println("watch error:" + e.getMessage()); e.printStackTrace(); watcher.close(); } // Tutup klien. sinkQueue.shutdown(); } }Di mana:
queueEndpoint: Konfigurasikan sebagai titik akhir layanan yang diperoleh di Langkah 1. Rujuk kode contoh untuk mengonfigurasi parameter ini.
queueToken: Konfigurasikan sebagai informasi token layanan yang diperoleh di Langkah 1.
<service_name>: Ganti dengan nama layanan asinkron yang disebarkan.
CatatanAnda dapat melakukan commit data secara manual, atau atur
auto_commit=Trueuntuk melakukan commit data secara otomatis.Jika klien layanan antrian berhenti mengonsumsi data, kami merekomendasikan Anda menutup klien untuk melepaskan sumber daya.
Anda juga dapat menggunakan perintah cURL atau memanggil API sinkron untuk berlangganan hasil. Untuk informasi selengkapnya, lihat Sebarkan layanan inferensi asinkron.
Klien menggunakan metode
watcher.getDataFrame()untuk terus-menerus mendengarkan hasil dari server. Jika server tidak mengembalikan hasil, klien terus menunggu. Jika server mengembalikan hasil, klien mencetak hasil tersebut. Berikut menunjukkan hasil contoh. Hasil aktual Anda mungkin berbeda. Anda dapat membuka Konsol OSS dan melihat citra yang dihasilkan di path yang sesuai.2023-08-04 16:17:31,497 INFO [com.aliyun.openservices.eas.predict.queue_client.WebSocketWatcher] - WebSocketClient Successfully Connects to Server: 1396993924585947.cn-hangzhou.pai-eas.aliyuncs.com/116.62.XX.XX:80 task_id = txt2img_0 index = 21, data = {"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data-oss/outputs/txt2img/txt2img-images/2023-08-04/54363a9d-24a5-41b5-b038-2257d43b8e79-412510031.png","seed":"412510031","error_msg":"","total_time":2.5351321697235107},"info":""}, requestId = 05ca7786-c24e-4645-8538-83d235e791fe task_id = txt2img_1 index = 22, data = {"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data-oss/outputs/txt2img/txt2img-images/2023-08-04/0c646dda-4a53-43f4-97fd-1f507599f6ae-2287341785.png","seed":"2287341785","error_msg":"","total_time":2.6269655227661133},"info":""}, requestId = 639b257a-7902-448d-afd5-f2641ab77025 task_id = txt2img_2 index = 23, data = {"images":[],"parameters":{"id_task":null,"status":0,"image_url":"/code/stable-diffusion-webui/data-oss/outputs/txt2img/txt2img-images/2023-08-04/4d542f25-b9cc-4548-9db2-5addd0366d32-1158414078.png","seed":"1158414078","error_msg":"","total_time":2.6604185104370117},"info":""}, requestId = d6b2e127-eba3-4414-8e6c-c3690e0a487c task_id = txt2img_3Setelah mengirim permintaan asinkron dan berlangganan hasilnya, Anda dapat menggunakan metode
search()untuk menanyakan status permintaan. Untuk informasi selengkapnya, lihat SDK untuk Python dan SDK untuk Java.
EAS mendukung fitur baru di atas API Stable Diffusion WebUI native. Anda dapat menambahkan parameter opsional dalam data permintaan untuk mengaktifkan fitur lebih lanjut atau memenuhi kebutuhan kustom. Untuk informasi selengkapnya, lihat Parameter konfigurasi tambahan untuk operasi API.
Instal ekstensi untuk fitur yang ditingkatkan
Anda dapat mengonfigurasi ekstensi untuk Stable Diffusion WebUI guna mengaktifkan berbagai fitur. PAI menyediakan berbagai ekstensi preset, seperti ekstensi BeautifulPrompt yang digunakan untuk memperluas dan memoles prompt. Bagian berikut menggunakan ekstensi BeautifulPrompt sebagai contoh untuk menjelaskan cara menginstal dan menggunakan ekstensi.
Instal ekstensi
Anda dapat melihat dan menginstal ekstensi di tab Extensions halaman web UI. Lakukan langkah-langkah berikut:
Di daftar layanan, klik View Web App di kolom Service Type layanan target untuk memulai web UI.

Di tab Extensions halaman web UI, periksa apakah BeautifulPrompt dipilih. Jika tidak dipilih, pilih ekstensi tersebut dan klik Apply And Restart UI untuk memuat ulang ekstensi BeautifulPrompt.

Saat Anda menginstal ekstensi, halaman WebUI akan secara otomatis restart. Setelah dimuat ulang, Anda dapat melakukan verifikasi inferensi.
Gunakan ekstensi untuk verifikasi inferensi
Di tab BeautifulPrompt, masukkan prompt sederhana di kotak teks dan klik Generate untuk menghasilkan prompt yang lebih detail.

PAI menyediakan beberapa model generasi prompt. Prompt yang dihasilkan oleh setiap model berbeda:
pai-bloom-1b1-text2prompt-sd-v2: Unggul dalam menghasilkan prompt untuk skenario kompleks.
pai-bloom-1b1-text2prompt-sd: Menghasilkan prompt yang menggambarkan objek tunggal.
Anda dapat memilih model yang sesuai untuk menghasilkan prompt berdasarkan kebutuhan skenario Anda.

Pilih Prompt yang ingin Anda gunakan, lalu klik to txt2img di sebelah Prompt.
Halaman secara otomatis beralih ke tab Text-to-image, dan area Prompt diisi secara otomatis.

Klik Generate untuk menghasilkan citra di sisi kanan halaman web UI.

Dibandingkan dengan tidak menggunakan ekstensi BeautifulPrompt, penggunaan ekstensi ini dapat meningkatkan estetika citra yang dihasilkan dan membantu Anda menambahkan lebih banyak detail. Perbandingan efek sebelum dan sesudah menggunakan ekstensi BeautifulPrompt dalam skenario lain adalah sebagai berikut:
Input prompt
Efek tanpa BeautifulPrompt
Dengan BeautifulPrompt
a cat


a giant tiger


FAQ
Bagaimana cara menggunakan model dan direktori output saya?
Apa yang harus saya lakukan jika layanan membeku dalam waktu lama?
Bagaimana cara mengubah bahasa default antarmuka aplikasi web ke Bahasa Inggris?
Bagaimana cara mengelola sistem file saya?
Kesalahan: Tidak ada file atau direktori tersebut: 'data-oss/data-********.png'
Apa yang dapat saya lakukan jika tidak dapat mengakses halaman WebUI
Lampiran
Parameter konfigurasi opsional saat membuat layanan
Parameter umum
Parameter umum
Deskripsi
Rekomendasi penggunaan
--blade
Mengaktifkan PAI-Blade untuk mempercepat generasi citra.
Kami merekomendasikan Anda mengaktifkan fitur ini.
--filebrowser
Memungkinkan Anda mengunggah dan mengunduh model atau citra.
Secara default, fitur ini diaktifkan.
--data-dir /code/stable-diffusion-webui/data-oss
Path yang digunakan untuk memasang penyimpanan persisten.
Digunakan saat memasang penyimpanan persisten. Path awal default adalah
/code/stable-diffusion-webui/, atau Anda dapat menggunakan path relatif.--api
Mode pemanggilan API dari web UI.
Secara default, fitur ini diaktifkan.
--enable-nsfw-censor
Secara default, fitur ini dinonaktifkan. Jika Anda memerlukan kepatuhan keamanan, Anda dapat mengaktifkan fitur deteksi pornografi.
Aktifkan fitur sesuai kebutuhan.
--always-hide-tabs
Sembunyikan tab tertentu.
Aktifkan fitur sesuai kebutuhan.
--min-ram-reserved 40 --sd-dynamic-cache
Cache model Stable Diffusion ke memori.
Tidak berlaku
Parameter Edisi Kluster
CatatanModel ckpt dan ControlNet secara otomatis memuat file di direktori publik dan file kustom.
Parameter Edisi Kluster
Deskripsi
Catatan penggunaan
--lora-dir
Tentukan direktori model LoRA publik, misalnya:
--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora.Secara default, parameter ini tidak dikonfigurasi. Semua direktori LoRA pengguna diisolasi dan hanya model LoRA di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna memuat model LoRA di direktori publik dan model LoRA di folder pengguna.
--vae-dir
Tentukan direktori model VAE publik, misalnya:
--vae-dir /code/stable-diffusion-webui/data-oss/models/VAE.Secara default, parameter ini tidak dikonfigurasi. Semua direktori VAE pengguna diisolasi dan hanya model VAE di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna memuat model VAE di direktori publik.
--gfpgan-dir
Tentukan direktori model GFPGAN publik, misalnya:
--gfpgan-dir /code/stable-diffusion-webui/data-oss/models/GFPGAN.Secara default, parameter ini tidak dikonfigurasi. Semua direktori GFPGAN pengguna diisolasi dan hanya model GFPGAN di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna hanya memuat model GFPGAN di direktori publik.
--embeddings-dir
Tentukan direktori model embeddings publik, misalnya:
--embeddings-dir /code/stable-diffusion-webui/data-oss/embeddings.Secara default, parameter ini tidak dikonfigurasi. Semua direktori embeddings pengguna diisolasi dan hanya model embedding di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna memuat model embedding di direktori publik.
--hypernetwork-dir
Tentukan direktori model hypernetwork publik, misalnya:
--hypernetwork-dir /code/stable-diffusion-webui/data-oss/models/hypernetworks.Secara default, parameter ini tidak dikonfigurasi. Semua direktori hypernetwork pengguna diisolasi dan hanya model hypernetwork di folder pengguna yang dimuat. Jika Anda menentukan direktori, semua pengguna hanya memuat model hypernetwork di direktori publik.
--root-extensions
Menggunakan direktori ekstensi sebagai direktori publik. Jika Anda mengonfigurasi parameter ini, semua pengguna dapat melihat ekstensi yang sama.
Jika Anda ingin menginstal atau mengelola ekstensi secara terpusat, gunakan parameter ini.
Parameter apa saja yang dapat saya konfigurasi untuk operasi API?
EAS menambahkan dukungan untuk fitur baru ke API Stable Diffusion WebUI native. Selain parameter yang diperlukan, Anda dapat menambahkan parameter opsional ke permintaan API untuk mengaktifkan lebih banyak fungsionalitas dan memenuhi kebutuhan kustom:
Konfigurasikan model SD, model VAE, dan path untuk menyimpan citra yang dihasilkan.
Gunakan parameter URL untuk mengirim permintaan, yang kode statusnya dikembalikan.
Akses citra yang dihasilkan melalui URL, termasuk citra yang diproses oleh ControlNet.
Kode contoh:
Contoh permintaan dan respons Txt2img
Badan permintaan contoh:
{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors",
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs",
"sd_vae": "Automatic"
},
"steps": 20,
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}Tabel berikut menjelaskan parameter kunci:
sd_model_checkpoint: Menentukan parameter model Stable Diffusion, yang dapat secara otomatis beralih ke model besar.
sd_vae: Menentukan model VAE.
save_dir: Menentukan path untuk menyimpan citra yang dihasilkan.
Permintaan sinkron contoh:
# Panggil API sinkron untuk menguji model.
curl --location --request POST '<service_url>/sdapi/v1/txt2img' \
--header 'Authorization: <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors",
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs",
"sd_vae": "Automatic"
},
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}'
Format respons contoh:
{
"images": [],
"parameters": {
"id_task": "14837",
"status": 0,
"image_url": "/code/stable-diffusion-webui/data-oss/outputs/txt2img-grids/2023-07-24/grid-29a67c1c-099a-4d00-8ff3-1ebe6e64931a.png,/code/stable-diffusion-webui/data-oss/outputs/txt2img-images/2023-07-24/74626268-6c81-45ff-90b7-faba579dc309-1146644551.png,/code/stable-diffusion-webui/data-oss/outputs/txt2img-images/2023-07-24/6a233060-e197-4169-86ab-1c18adf04e3f-1146644552.png",
"seed": "1146644551,1146644552",
"error_msg": "",
"total_time": 32.22393465042114
},
"info": ""
}Permintaan asinkron contoh:
# Kirim data ke antrian asinkron.
curl --location --request POST '<service_url>/sdapi/v1/txt2img' \
--header 'Authorization: <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors",
"id_task": "14837",
"uid": "123",
"save_dir": "tmp/outputs"
},
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}'Contoh format data permintaan Img2img
Badan permintaan contoh:
{
"alwayson_scripts": {
"image_link":"https://eas-cache-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/stable-diffusion-cache/tests/boy.png",
"sd_model_checkpoint": "deliberate_v2.safetensors",
"sd_vae": "Automatic",
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs"
},
"prompt": "girl",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame",
"steps": 20, # Sampling steps
"seed": 111,
"subseed": 111, # Variation seed
"subseed_strength": 0, # Variation strength
"seed_resize_from_h": 0, # Resize seed from height
"seed_resize_from_w": 0, # Resize seed from width
"seed_enable_extras": false, # Extra
"sampler_name": "DDIM", # Sampling method
"cfg_scale": 7.5, # CFG Scale
"restore_faces": true, # Restore faces
"tiling": false, # Tiling
"init_images": [], # image base64 str, default None
"mask_blur": 4, # Mask blur
"resize_mode": 1, # 0 just resize, 1 crop and resize, 2 resize and fill, 3 just resize
"denoising_strength": 0.75, # Denoising strength
"inpainting_mask_invert": 0, #int, index of ['Inpaint masked', 'Inpaint not masked'], Mask mode
"inpainting_fill": 0, #index of ['fill', 'original', 'latent noise', 'latent nothing'], Masked content
"inpaint_full_res": 0, # index of ["Whole picture", "Only masked"], Inpaint area
"inpaint_full_res_padding": 32, #minimum=0, maximum=256, step=4, value=32, Only masked padding, pixels
#"image_cfg_scale": 1, # resized by scale
#"script_name": "Outpainting mk2", # The name of the script. Skip this field if you do not use a script.
#"script_args": ["Outpainting", 128, 8, ["left", "right", "up", "down"], 1, 0.05] # The parameters of the script in the following order: fixed field, pixels, mask_blur, direction, noise_q, and color_variation.
}Format respons contoh:
{
"images":[],
"parameters":{
"id_task":"14837",
"status":0,
"image_url":"/data/api_test/img2img-grids/2023-06-05/grid-0000.png,/data/api_test/img2img-images/2023-06-05/00000-1003.png,/data/api_test/img2img-images/2023-06-05/00001-1004.png",
"seed":"1003,1004",
"error_msg":""
},
"info":""
}Format data Txt2img dengan ControlNet
Format permintaan contoh:
{
"alwayson_scripts": {
"sd_model_checkpoint": "deliberate_v2.safetensors", # The name of the model.
"save_dir": "/code/stable-diffusion-webui/data-oss/outputs",
"controlnet":{
"args":[
{
"image_link": "https://pai-aigc-dataset.oss-cn-hangzhou.aliyuncs.com/pixabay_images/00008b87bf3ff6742b8cf81c358b9dbc.jpg",
"enabled": true,
"module": "canny",
"model": "control_v11p_sd15_canny",
"weight": 1,
"resize_mode": "Crop and Resize",
"low_vram": false,
"processor_res": 512,
"threshold_a": 100,
"threshold_b": 200,
"guidance_start": 0,
"guidance_end": 1,
"pixel_perfect": true,
"control_mode": "Balanced",
"input_mode": "simple",
"batch_images": "",
"output_dir": "",
"loopback": false
}
]
}
},
# Key parameters.
"prompt": "girls",
"batch_size": 1,
"n_iter": 2,
"width": 576,
"height": 576,
"negative_prompt": "ugly, out of frame"
}Format respons contoh:
{
"images":[],
"parameters":{
"id_task":"14837",
"status":0,
"image_url":"/data/api_test/txt2img-grids/2023-06-05/grid-0007.png,/data/api_test/txt2img-images/2023-06-05/00014-1003.png,/data/api_test/txt2img-images/2023-06-05/00015-1004.png",
"seed":"1003,1004",
"error_msg":"",
"image_mask_url":"/data/api_test/controlnet_mask/2023-06-05/00000.png,/data/api_test/controlnet_mask/2023-06-05/00001.png"
},
"info":""
}Referensi
Untuk informasi selengkapnya tentang penagihan EAS, lihat Penagihan Elastic Algorithm Service (EAS).



