ComfyUIを呼び出すためのAPIの使用

1. 描画タスクの提出

描画タスクを提出するには、以下のPOSTリクエストを使用する必要があります:

POST /prompt

リクエストパラメータ:

  • client_id string タスクの発起人を識別するためにクライアントが生成したタスクID
  • prompt json 描画パラメータを含むJSONデータ

{
  "client_id": "unique_client_id",
  "prompt": {
    "width": 768,
    "height": 512,
    "text": "美しい風景"
  }
}

2. WebSocketを使用してタスクのステータスを受信

タスクを提出した後、WebSocketを介してリアルタイムの更新を受信できます。以下のアドレスに接続します:

ws://<your_server>:<port>/ws?client_id=unique_client_id

接続が完了すると、タスクの実行ステータス、進捗状況などの情報を受け取ります。

データフォーマット

  • テキストデータ: タスクの変更、現在の実行ステップ、および進捗を通知するために使用されます。
  • バイナリデータ: 生成された画像のプレビューを伝送するために使用されます。

Pythonの例コード

以下は、PythonとWebSocketクライアントライブラリを使用して、描画リクエストを提出し、結果を受信する例コードです:

import websocket
import json
import uuid

server_address = "127.0.0.1:8188"
client_id = str(uuid.uuid4())

def queue_prompt(prompt):
    p = {"client_id": client_id, "prompt": prompt}
    data = json.dumps(p).encode('utf-8')
    req = urllib.request.Request(f"http://{server_address}/prompt", data=data)
    response = urllib.request.urlopen(req)
    return json.loads(response.read())

def on_message(ws, message):
    print(f"受信: {message}")

ws = websocket.WebSocketApp(f"ws://{server_address}/ws?client_id={client_id}",
                            on_message=on_message)
ws.run_forever()

# 描画リクエストを提出
prompt_data = {
    "width": 768,
    "height": 512,
    "text": "美しい風景"
}
queue_prompt(prompt_data)