Skip to main content
ベータ: Comfy API v2 は 0.1.x であり、API サーフェスはまだ変更される可能性があります。v2 内の変更は追加的なものになります。破壊的な変更がある場合は v3 としてリリースされます。
外部アプリケーションから ComfyUI ワークフローを実行するための、公式のバージョン管理された HTTP API です。入力のアップロード、ワークフローの送信、実行の監視、結果の取得を行うことができます。 ほとんどのユーザーは、この API を Python と TypeScript でラップした Comfy SDK から始めることをお勧めします。別の言語で開発している場合は、これらのエンドポイントを直接呼び出してください。 このセクションの API Reference ページに、OpenAPI 仕様から生成された完全なエンドポイントドキュメントがあります。

v2 が動作する場所

同じ API は 3 つのサーフェスで提供されているため、ベース URL を変更するだけで 1 つの統合をそれらの間で移行できます。 Comfy Cloud。 https://cloud.comfy.org で提供されるマネージド型のマルチテナントサービスです。API キー を作成すれば、任意のワークフローを送信できます。クレジット、モデルの閲覧、キューの管理といった Cloud 固有の機能は v2 ではなく v1 Cloud API にあります。 Comfy API デプロイメント。 Developer Platform を通じてデプロイした環境には、https://{deployment}.run.comfy.app という専用のエンドポイントが割り当てられ、同じ API キーで同じ v2 API を提供します。Comfy API デプロイメントは 1 つの固定された環境に対してワークフローを実行するため独立してスケールし、GET /workflow は実行されたグラフを返します。構築とデプロイの手順については、Comfy API デプロイメントガイド を参照してください。 オープンソースの ComfyUI(プロキシ経由)。 ベータ期間中、セルフホストの ComfyUI は comfy-api-proxy を通じて v2 を利用できます。これは ComfyUI と並行して動作する小規模なオープンソースサービスです:
デフォルトでは 127.0.0.1:8188 の ComfyUI をプロキシし、127.0.0.1:8189 で v2 API を提供して、ループバックにのみバインドします。認証はデフォルトで無効であり、オプションで静的なベアラートークンを使用できます。このプロキシは暫定的な手段です。v2 が安定すれば ComfyUI のコアに統合され、プロキシは不要になります。設定の詳細については、SDK ガイドの 独自の ComfyUI を参照してください。

設計原則

  • ポーリング優先。 すべての機能は、単純な GET ポーリングで利用できます。SSE ストリームはライブ拡張機能であり、正本(source of truth)にはなりません。
  • すべて再開可能。 送信は冪等であり、ジョブの状態と出力は expires_at まで ID で取得できます。出力用に返される URL の有効期間はそれよりも短くなります。出力 URL とその有効期間 を参照してください。
  • コンテンツアドレス型アセット。 アセットは、サーバーが計算した blake3 ハッシュをキーとする blob 上の UUID 識別レコードです。そのため、同一の入力が 2 回アップロードされることはありません。
  • URL を組み立てず、リンクに従う。 レスポンスには後続の URL が埋め込まれています。
これらの背景にある設計上の理由については、設計メモ を参照してください。

ベース URL

エンドポイントのカテゴリ

出力URLとその有効期間

「自分の出力のURL」には3つの異なる寿命があり、それらは同じ数字ではありません。出力を自社のユーザーに表示するアプリケーションは、この3つすべてを考慮に入れる必要があります。

2つのURL形状

実用上の結論: Output.url は共有できるリンクではありません。これをユーザーのブラウザが読み込む <img src> に入れると、そのブラウザはあなたのAPIキーを持っていないため 401 が返ります。配布できるのは署名付きURLの方です。 comfy-api-proxy の背後のセルフホスト ComfyUI には署名付きURLがまったくありません。プロキシがコンテンツエンドポイントからバイトを配信し、通常の認証が適用され、SDKは有効期限を null (Python: None) として報告します。

署名付きURLの有効期限を読み取る

Comfy Cloud と Comfy API のデプロイメントでは、署名付きURLは約6時間の有効期間で発行されます。この数値はAPIコントラクトの一部ではなくサーバー側の設定であるため、桁数程度の目安として扱い、決してハードコードしないでください。有効期限は与えられたレスポンスから読み取ってください:
  • Asset レスポンスの url_expires_at は、同じレスポンス内の url の実際の有効期限です。
  • getDownloadUrl() はURLとともにこれを返します。TypeScript では expiresAt、Python では expires_at です。

ジョブ出力の url_expires_at は別の数値

ジョブの outputs のエントリにある url_expires_at は、署名付きURLの有効期限ではありません。Comfy Cloud では、ジョブ自身の expires_at を繰り返しており、現在これはジョブの created_at に固定の30日間のウィンドウを加えたものです。 このウィンドウはプレースホルダーです。プラットフォームにはまだこれを裏付けるジョブ保持やガベージコレクションのポリシーがないため、30日間はフィールドを null 以外にするための代用値であり、出力がいつまで取得可能かを約束するものではありません。これを約束事として読んだり、キャッシュのキーにしたりしないでください。実際の保持ポリシーがこれに取って代われば、このページは更新されます。

自分のプロダクトで出力を表示する

1日後にも出力を表示し続けるには、次のいずれかを行ってください:
  • バイトを再ホストする。 出力を一度ダウンロードし、自分のストレージにコピーします。ほとんどのアプリケーションはここに落ち着きます。
  • オンデマンドで再発行する。 アセットの id を永続化し、レンダリングする時点でそれを新しいURL (GET /api/v2/assets/{id}、または getDownloadUrl()) に解決し、そのURLをすぐに使用します。
  • プロキシする。 すでにAPIキーを保持している自分のバックエンドから Output.url を取得し、バイトをユーザーにストリーミングします。
うまくいかないのは、署名付きURLを永続化することです。有効なのは数時間であり数日ではないため、保存したコピーはローカルテストでは動き続けますが、有効期限が切れるとユーザーに対しては壊れてしまいます。

Comfy Router

Comfy API v2 は、送信してポーリングする永続的なジョブとしてワークフローを実行します。モデルを直接呼び出す場合(パートナーモデル 1 つ、リクエスト 1 つ、モデル固有のネイティブな入出力)は、Comfy Router をご覧ください。先に Router の制限事項 をご確認ください。Router はまだ一般提供されていません。