webui(AUTOMATIC1111) APIを使ってみた
はじめに
おはこんにちばんは、えるです❢
AUTOMATIC1111 にAPIがあるらしいと聞いたので使ってみました
AUTOMATIC1111 API 資料リンク
GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI
API · AUTOMATIC1111/stable-diffusion-webui Wiki · GitHub
だいたいは上記の通り、または適当に調べたりして作ります
webui起動(APIあり)
まずはAPIありでwebuiを普通に起動します
以下の感じで起動できるのかな?
私の環境だと.bat使わないのでわかりませんが。。
"webui-user.bat": set COMMANDLINE_ARGS=--api
ちなみに私のcolab環境だと以下の形で --apiを追加しwebuiを起動します
!python launch.py --api --xformers (略
APIからのtxt2img(お試し版)
txt2imgリクエストの実装方法
APIありでwebuiを起動すると、APIでリクエストできるようになります。
試しに簡単なtxt2imgをしてみます
いつも通りGoogleColabで作ります
import json
import requests
import io
import base64
from PIL import Image, PngImagePlugin
#url = "http://127.0.0.1:7860"
url = myURL
payload = {
"prompt": "1girl",
"steps": 20
}
response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
r = response.json()
for i in r['images']:
image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0])))
png_payload = {
"image": "data:image/png;base64," + i
}
response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
pnginfo = PngImagePlugin.PngInfo()
pnginfo.add_text("parameters", response2.json().get("info"))
image.save('output.png', pnginfo=pnginfo)
urlの部分はローカル環境だと http://127.0.0.1:7860 なんですかね?
私の場合はcolab+ngrokなので https://xxxx-xx-xxx-xxx-xxx.ngrok-free.app/ な感じになっています
実行
実装したコードをcolab上で実行します 生成されたoutput.pngを開きます
出来ました❢
APIリクエストが出来ると色々応用できそうです
出来ることや出来ないことなど調べてみて、じわじわ追記する予定です
txt2img設定
APIでは以下のコード部分に設定を記載していきます
payload = {
"prompt": "1girl",
"steps": 20
}
webuiのGUIと対応させつつAPI使用時のtxt2img設定方法を記載します
なお結論から言うと、hires.fixがよくわからず追加するタイプのextensionは現状動かせませんでした
誰か教えて有識者…!!
①Stable Diffusion checkpoint設定
以下で設定可能らしいですが、GUIで設定したモデルを使用する場合は無くてもよいです
"sd_model_checkpoint": "sd_model名",
②prompt
まあそのままですかね
loraやhypernetwork, promptに記述する形のextensionはそのまま使えました
prompt = "child elf,intricate detail,blue eyes, orange hair,green dress, __bg__\
<lora:flat2:-0.2> \
<hypernet:holala_eri-1000:0.3>"
payload = {
"prompt": prompt,
③negative_prompt
こちらもプロンプトと同様で、embeddingなど記述する形のものは使用可能です
neg_prompt = "EasyNegative"
payload = {
"negative_prompt" : neg_prompt,
④Sampling method
Sampling method, sampler_index, samplerといった具合に実に単語が統一されてないんだけど、なんでだろうか…
こちらは画像生成後のPNG infoで確認出来るので多分設定出来てます
sampler = "DPM++ 2M Karras"
payload = {
"sampler_index": sampler,
⑤Sampling steps
step設定はこんな感じ、そのままですかね
"steps": 20,
⑥hires.fixとか
Restore facesとかTilingは有効に出来そうでしたが私は使ってないので省略
問題はhiresのほうで、以下でアプスケします
"enable_hr": True,
しかし、hires.fixは動作していない気がします
パラメータ設定方法もよくわからず。。
教えて有識者…!!
⑦width, ⑧height
このあたりはそのままかな?
"width": 512,
"height": 768,
⑨Batch count, ⑩Batch size
これは実装方法が対応できてないので省略
⑪cfg scale, ⑫seed
これもそのままですかね
"cfg_scale": 8,
"seed": -1,
⑬extension
tilled diffusionやcontrol netは起動方法がわかりませんでした。。
頑張ればできそうな気はするんですが、有識者に任せた…!
txt2img設定 まとめ
loraやembedding、prompt記述タイプのextensionがAPIでもそのまま使えそうなのは収穫でした
tilledは生成後にGUIでやってもいいかなあと思ったり
control netが可能かは調べたいなあ
APIだとdiscord等からの連携も出来ると思うので、そのあたりも試してみようかと思います、img2imgを調査後かなあ
APIからのimg2imgリクエスト
※調べ中
この記事が気に入ったらサポートをしてみませんか?