Comfy Router はまだ一般提供されていません。 以下のルート
POST /v1/models/{provider}/{model} と、そのカタログおよびスキーマの関連ルートは、
まだリクエストを処理していません。現在、認証付きの呼び出しは 404 を返します。このページは、
これらのルートが将来提供する契約を文書化したものであり、ロールアウトに先立って公開されているため、
統合をその契約に合わせて作成する準備ができます。これは、現在実際に試すことができる動作の説明ではありません。https://api.comfy.org。ルートは POST /v1/models/{provider}/{model} です。リクエストボディはモデル独自のネイティブ JSON 入力であり、200 応答にはモデル独自のネイティブ JSON 出力が含まれます。Router は入力と出力のどちらもラップしないため、パートナーの API に対して既に作成した呼び出しは、ホストを変更するだけで Router の呼び出しになります。
このページで bfl/flux-2-pro を使用する理由
bfl/flux-2-pro は p50 で約 3.1 秒で応答を返します。これは Router 上で測定された中で最速の経路であり、5 分での最初の結果を現実的にするものです。より遅いモデルでは、その予算は読むことではなく待つことに費やされることになるでしょう。
これは便宜上のものであり、必須ではありません。Router 上の他のすべてのモデルもまったく同じ方法で呼び出されます。同じルート、同じ認証情報ヘッダー、同じエラーバケット、同じ X-Comfy-Request-Id です。変更されるのは、モデル ID、リクエスト本文内のフィールド、そして読み取る結果の形状だけです。たとえば Gemini は、p95 の 72.8 秒を余裕を持ってクリアします。Router は、ポーリング用のジョブハンドルを返すのではなく、生成全体にわたって接続を保持します。長時間の呼び出しを途中で打ち切るエッジ側の上限はありませんが、Router は呼び出し自体に制限を設けています。Router 自身のサーバーデッドライン(デフォルトで 10 分)が接続を保持する最長の時間であり、それを過ぎると 504 / deadline_exceeded を返し、課金は行われません。ID を差し替えて、そのモデルのフィールドを(後述の)モデル自身のスキーマから読み取ってください。
APIキーを取得する
RouterはComfy APIキーで認証します。platform.comfy.org/profile/api-keys で作成し、環境変数に設定してください。以下の2つのサンプルはどちらもCOMFY_API_KEY を読み取り、キーをリテラルとして受け取らないため、コピー&ペーストしたスニペットが認証情報をコミットに持ち込むことはありません。
401 と X-Comfy-Error-Type: unauthorized を返します。ワークスペースがモデルを実行できないリクエストは、403 / forbidden を返します。
cURL
スクリプト、スモークテスト、ターミナルへのコピー&貼り付けに最適な、最短の呼び出し方法です:X-Comfy-Error-Type ヘッダーがエラーの分類を示します。後で問い合わせる必要があるレスポンスからは、X-Comfy-Request-Id ヘッダーを保存しておいてください。macOS と Linux にはどちらも uuidgen が同梱されています。Windows では、New-Guid または任意の UUID ソースを使用して Idempotency-Key を生成してください。
Python
Requires Python 3.9+ andhttpx:
quickstart.py and run it with python quickstart.py:
TypeScript
Requires Node 18+ (for built-infetch, AbortSignal.timeout and crypto.randomUUID) and tsx to run TypeScript directly:
quickstart.mts — the .mts extension is load-bearing, because the file uses top-level await and that needs an ES module — and run it with npx tsx quickstart.mts:
422 の読み方
422 は、最初の実呼び出しの前に理解しておく価値がある唯一のエラーです。なぜなら、それは自分自身が引き起こすエラーだからです。これは、Router がボディをモデル自身の入力スキーマに対して検証し、拒否したことを意味します。つまり、必須フィールドが不足している、値が範囲外、画像が小さすぎる、といったケースです。このチェックはプロバイダー呼び出しの前に実行されるため、422 はコストがかかりません。パートナーの支出もなく、後で請求に関する質問に答える必要もありません。これは 400 とは異なります。400 はリクエストレベルの失敗(不正なカーソル、読み取れないエンベロープ)であり、フィールド単位の失敗ではありません。
そのボディは fal/FastAPI の detail[] 形状です。問題のあるフィールドごとに1つのエントリを持つ配列で、各エントリは独自の loc(フィールドへのパス)、msg、type(プロバイダーレベルの具体的な理由: missing、value_error、image_too_small)、および理由に境界が含まれる場合は ctx を保持します。このフィールド単位の粒度こそが、上記のサンプルが配列を例外メッセージにフラット化せずにデータとして保持する理由です。
入力スキーマがまだ作成されていないモデルは、任意の JSON オブジェクトを受け入れる文書化された
寛容なフォールバックとして解決されるため、
422 を返す代わりにボディを転送します。
上記のサンプルは、スキーマが存在する場合に処理する形状を示しています。422 ブロックは、
その特定のボディに対する保証された応答ではなく、エラーパスとして扱ってください。error_type フィールドがないため、422 では X-Comfy-Error-Type ヘッダーが唯一の機械可読なバケットになります。両方のサンプルはまさにその理由から、ヘッダーからバケットを最初に読み取ります。これにより、Router が返すすべての失敗を1つのエラークラスでカバーできます。
X-Comfy-Request-Id は、成功、4xx、5xx を問わずすべてのレスポンスに含まれており、サポートリクエストで引用する ID です。両方のサンプルは、ヘッダーロギングを有効にして再実行する代わりに、例外に ID を添付します。
モデルのフィールドの由来
prompt は bfl/flux-2-pro が必須とする唯一のフィールドです。次に必要になるのは width、height、seed、output_format です。時間とともにずれる可能性のあるフィールド一覧を再掲する代わりに、モデルのスキーマをライブで確認してください:
/openapi.json を追加すれば、返ってきた内容に基づいて生成できます。
次のステップ
- Comfy Router API リファレンス: すべてのエンドポイント、すべてのパラメータ、そして 15 種類すべてのエラー分類を網羅しています。
- Comfy Router の制限事項: 現在 Router が対応していない機能と、その代わりに使用すべきものを説明しています。