MkItYs

MkItYs > AI・交渉・物語の自動生成 > 

images

ComfyUI の API を使う:ComfyUI, API, JSON, Python, Docker, GCP

images

ComfyUI の API の使い方です。[※1]


images

※1
生成画像は、次のモデルを使用しています:
https://civitai.com/models/4468/counterfeit-v30

関連


ComfyUI で画像生成 〜 なぜそこにつなぐのか:ComfyUI, Stable Diffusion
ComfyUI を、クラウドのコンテナに設置する:ComfyUI, Docker, GCP

検証


サーバ
クラウド:GCP
コンテナ:Docker
ホスト:Ubuntu 22.04
ゲスト:Ubuntu 22.04
クライアント
コンテナ:Docker Desktop
ホスト:macOS
ゲスト:Ubuntu 22.04

概要


ComfyUI の API は、とてもシンプルです。

たんに目的のワークフローを取得し、その内容(JSON 形式)を、やりたいことに沿って書き換えるだけです:

https://github.com/comfyanonymous/ComfyUI/tree/master/script_examples

作成


次の手順で作成します:

API で使うワークフローを、開発モードで取得します:

images
> settings
  > enable dev mode options: <yes>
> [save (api format)]

API のスクリプトは、たとえば次のようになります(このスクリプトでは、CFG の値をすこしずつ変えて、画像を出力しています):

標準入力から読み込んだワークフロー(文字列)を、ディクショナリ形式に変換し、変更したいところを書き換えます。それを、ウェブの GET リクエストの形でサーバに送ることで、アプリの挙動が、書き換えた内容に沿ったものになりますーー必要なら、これを所定の回数、繰り返します:

${directory_application}/exeapi.py
import sys
import time
import json
from urllib import request

def reqcmf(dctflw):
  prompt = {'prompt': dctflw}
  conweb = json.dumps(prompt).encode('utf-8')
  reqweb = request.Request(f"{urltgt}prompt", data=conweb)
  request.urlopen(reqweb)

urltgt = sys.argv[1]
strflw = sys.stdin.read()
dctflw = json.loads(strflw)

l = [0.0, 2.5, 5.0, 7.5, 10.0, 12.5, 15.0, 17.5, 20.0]
for i in l:
  dctflw['3']['inputs']['cfg'] = i
  reqcmf(dctflw)
  time.sleep(1)

利用


スクリプトを解釈できる環境で(この場合はPython)、取得したワークフローを標準入力から読み込み、実行します:

cat ${directory_download}/workflow.json | python ${directory_application}/exeapi.py http://<address_server>:<port_target>/