見出し画像

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リクエスト

※調べ中



この記事が気に入ったらサポートをしてみませんか?