ComfyUI の API の使い方です。[※1]
- ※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 で使うワークフローを、開発モードで取得します:
> 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>/