ComfyUIを画面以外から動かす経路は、自分のPCで動く「ComfyUI Server API」、公式SDK付きでバージョン管理される「Comfy API v2」、Comfy Cloud専用の「Cloud API」の三つです。どれも「API形式のworkflow JSONを送り、Queueに入れ、結果を取りに行く」という同じ流れで動きます。三経路の違い、全体像、ローカルServer APIでの最小実行、Cloudとローカルの差分を整理します。
情報確認日:2026年8月22日(日本時間)
結論:ローカルで試すならServer API、長く使う統合ならAPI v2+SDK
責任範囲
- 三つのAPI経路の役割・対象・認証・URLを一枚の表で比べる
- JSON送信からQueue、結果取得までの流れを経路共通の形で示す
- ローカルServer APIの
/prompt・/history・/viewで1枚生成する最小サンプルを載せる - Python/TypeScript SDKの詳細、WebSocketでの進捗取得、認証やLAN公開の設計は別記事で扱う
- workflow JSONの読み込み・保存・依存確認はComfyUIのworkflow JSONを読み込む方法に任せる
ComfyUIにはどのAPI経路があるか
公式ドキュメント(2026年8月時点)は外部からComfyUIを動かす方法を三つに分けています。「どこで実行されるか」と「互換性の約束があるか」で区別します。
| 項目 | ComfyUI Server API | Comfy API v2+SDK | Cloud API |
|---|---|---|---|
| 実行場所 | 自分のマシン | Comfy Cloud、またはローカルプロキシ経由の自分のマシン | Comfy Cloud(管理されたGPU) |
| 互換性 | リリース間の保証なし | バージョン管理。v2内では追加変更のみ | 実験的。予告なく変わる場合あり |
| 認証 | なし(ローカル)。Partner Node利用時はAPIキー | CloudはAuthorization: Bearer。セルフホストは既定でなし |
X-API-Keyヘッダー |
| ベースURL | 例:http://localhost:8188 |
https://cloud.comfy.orgまたはhttp://127.0.0.1:8189 |
https://cloud.comfy.org |
| 公式クライアント | なし(HTTP直接) | Python SDK・TypeScript SDK | なし(HTTP直接) |
| プロトコル | REST+WebSocket | REST+SSE | REST+WebSocket |
Server APIは8188番で動く普段のComfyUIそのもので、UIが内部で使う経路と同じです。API v2はローカルでも8189番のプロキシ経由で同じ形で呼べるため、「最初はローカル、あとでCloud」がURL差し替えで済む設計です。
状態の明記:公式はAPI v2とSDKを「0.1.xで表面は変わり得る」、Cloud APIを「実験的」、Server APIを「保証なし」としています。三つとも確認日を記録しながら使います。
WorkflowをAPI実行する全体像
経路が違っても、やることは同じ四段階です。出発点はどれも「GUIで動いたworkflowをAPI形式へ出す」ことです。
- 1
API形式のJSONを用意する
現行UIの
File → Export Workflow (API)で書き出す。GUI保存用JSONとは構造が違う - 2
送信する
Server APIなら
POST /prompt、API v2ならPOST /api/v2/jobsにJSONを入れて送る - 3
Queueで待つ
返ってきた
prompt_id(v2ではjob id)を手がかりに、完了をポーリングかWebSocket/SSEで待つ - 4
結果を取りに行く
Server APIは
/history/{prompt_id}で出力ファイル名を知り、/viewで取得。v2はjobのoutputsからアセットURLをたどる
GUI用JSONとAPI形式JSONの構造差は別記事で扱います。ここでは「GUI保存のJSONをそのまま送ると動かない」ことだけ押さえてください。API v2は、UI形式を送るとworkflow_format_uiという理由で拒否すると公式に明記しています。
ローカルServer APIの基本
Server APIは起動中のComfyUIがすでに提供しているHTTPルートで、追加インストールは不要です。公式のルート一覧(2026年8月22日確認)の主なものを挙げます。
| ルート | メソッド | 役割 |
|---|---|---|
/prompt |
POST | workflowをQueueに送る。本文はprompt、任意でclient_id・extra_data・front |
/prompt |
GET | 現在のQueue状態と実行情報を返す |
/history、/history/{prompt_id} |
GET | 実行履歴。完了後の出力ファイル情報を含む |
/view |
GET | filename・subfolder・typeを指定して画像を取得 |
/upload/image、/upload/mask |
POST | 入力画像・マスクのアップロード |
/object_info |
GET | 全ノードの定義(入力名・型)を返す |
/system_stats |
GET | OS・Python・デバイス情報 |
/ws |
WebSocket | 進捗・状態のリアルタイム通知 |
動作確認として次を実行し、JSONが返ればAPIとして話せる状態です。
# 2026-08-22 に公式ルート一覧で確認したエンドポイント
curl http://127.0.0.1:8188/system_stats
curl http://127.0.0.1:8188/object_info -o object_info.json
/object_infoは、書き換える入力名に迷ったときの辞書です。保存したファイルをKSamplerで検索すれば、seed・steps・cfgの入力名をUIを開かずに確かめられます。
互換性の約束がない:Server APIは本体更新でルートやレスポンスが変わっても告知されない前提です。スクリプトには確認日とComfyUIのバージョンを残し、更新後は/system_statsから再確認します。
API v2・SDKを使う場面
「一度書いたコードを、更新やCloud移行をまたいで動かし続けたい」ならAPI v2とSDKが候補です。公式は新規統合にこの経路を推奨しています。
- Server API:追加導入なしで
8188番へ直接HTTP。Queue操作やノード定義まで全機能に触れるが、更新で壊れたら自分で追従する - API v2+SDK:
pip install comfy-sdk/npm i @comfyorg/sdk。ローカルは8189番のプロキシ経由で、ベースURLの差し替えでCloudへ移れる。Beta(0.1.x)で、workflow管理やノード定義の取得は現時点で対象外
v2の設計原則として公式は「Poll first」を掲げています。すべての機能はGET /api/v2/jobs/{id}のポーリングで到達でき、SSEストリームは補助という位置づけです。jobのstatusはqueued → running → succeeded | failed | expiredと遷移し、outputsには実行中から順次アセットが入ります。
SDKの導入と入力差し替え、出力保存はPython・TypeScriptそれぞれの記事で扱います。ここでは「SDKはServer APIの薄いラッパーではなく、v2という別経路を包んでいる」ことだけ覚えてください。
Cloudとローカルを混同しない
cloud.comfy.orgにはAPI v2とCloud APIの両方があり、SDKもCloudを既定にしています。ローカルのつもりでCloudを叩く事故を防ぐため、次を分けて確認します。
| 確認点 | ローカル(Server API/v2セルフホスト) | Comfy Cloud(v2/Cloud API) |
|---|---|---|
| 認証 | 既定でなし。v2セルフホストは任意の静的Bearerトークン | APIキー必須。v2はAuthorization: Bearer、Cloud APIはX-API-Key |
| 課金 | 自分の電気代とGPU | Comfy Cloudアカウントに紐づく。Partner Nodeも別途APIキーが必要 |
| URL | 127.0.0.1:8188(Server)/127.0.0.1:8189(v2) |
https://cloud.comfy.org、serverlessはhttps://<deployment>.run.comfy.app |
| 生成物の保存場所 | ComfyUIのoutputフォルダ。/viewで取得 |
Cloud側のアセット。jobのoutputsに入るURLから取得 |
SDKのサンプルはapi_keyを渡す形で始まるため、ローカルで使うときはベースURLをhttp://127.0.0.1:8189へ明示します。「Server APIの8188とv2の8189は別物」です。Server APIをLANや外部へ公開するときの認証・TLS・リバースプロキシは別記事で扱います。
最小APIサンプル:Promptだけ差し替えて1枚生成する
GUIで動くことを確認済みのworkflowを使い、Server APIで正のPromptだけ変えて1枚生成します。公式リポジトリのscript_examples/basic_api_example.pyと同じ考え方です。
手順
- GUIでいつものworkflowを1回実行し、生成できることを確認する
File → Export Workflow (API)でworkflow_api.jsonを保存する(現行UI、2026年8月時点)- JSONを開き、正のPromptを持つ
CLIPTextEncodeノードのキー(数字)を控える - 下のスクリプトのノードキーを自分のものに合わせて実行する
outputフォルダの新しい画像と/historyのレスポンスを確認する
# 確認日: 2026-08-22 / 公式 script_examples/basic_api_example.py と
# comms_routes のルート一覧に基づく。ComfyUI を 127.0.0.1:8188 で起動済みの前提。
import json
import time
from urllib import request
SERVER = "http://127.0.0.1:8188"
POSITIVE_NODE = "6" # 自分の workflow_api.json で正の Prompt を持つノードのキー
with open("workflow_api.json", encoding="utf-8") as f:
prompt = json.load(f)
prompt[POSITIVE_NODE]["inputs"]["text"] = "a quiet harbor at dawn, watercolor"
body = json.dumps({"prompt": prompt}).encode("utf-8")
req = request.Request(f"{SERVER}/prompt", data=body,
headers={"Content-Type": "application/json"})
with request.urlopen(req) as res:
prompt_id = json.load(res)["prompt_id"]
print("queued:", prompt_id)
while True:
with request.urlopen(f"{SERVER}/history/{prompt_id}") as res:
history = json.load(res)
if prompt_id in history:
break
time.sleep(1)
for node_id, output in history[prompt_id]["outputs"].items():
for image in output.get("images", []):
print(node_id, image["filename"], image["subfolder"], image["type"])
表示されたfilename・subfolder・typeをそのまま/viewのクエリに渡せば画像本体を取得できます。
curl "http://127.0.0.1:8188/view?filename=ComfyUI_00001_.png&subfolder=&type=output" -o result.png
何を見て成功と判断するか
POST /promptのレスポンスにprompt_idがある。入力名の誤りはこの段階でエラーとして返る/history/{prompt_id}がoutputsを持つ。完了前はキー自体が存在しない- GUIのQueueパネルにも同じ実行が現れる。UIとAPIは同じQueueを共有している
ポーリングではなく/wsのexecuting通知で完了を待つ方法は別記事で扱います。
よくある質問
GUIで保存したworkflow.jsonをそのまま/promptに送れますか?
送れません。/promptが受け取るのはclass_typeとinputsからなるAPI形式です。File → Export Workflow (API)で書き出し直してください。
Server APIとAPI v2はどちらを覚えるべきですか?
自分のPCで試すだけならServer APIが最短です。アプリに組み込んで更新やCloud移行をまたぐならAPI v2+SDKを最初から使うほうが書き直しが少なくなります。v2はBetaなので確認日を残します。
APIキーはローカルでも必要ですか?
ローカルのServer APIには不要です。必要なのはComfy Cloudを使うときと、Partner Node(有料の外部API連携ノード)をworkflowに含めるときです。
まとめ
ComfyUIのAPI経路はServer API、API v2、Cloud APIの三つで、「API形式JSONを送り、Queueを待ち、結果を取りに行く」流れは共通です。違うのは実行場所・認証・互換性の約束です。
最初の一歩は、GUIで動くworkflowをFile → Export Workflow (API)で書き出し、/promptへ送って/historyで確認することです。workflow JSONそのものの扱いはComfyUIのworkflow JSONを読み込む方法を参照してください。