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を取得し、バイトをユーザーにストリーミングします。