Skip to main content
Comfy Router はまだ一般提供されていません。 以下のルート POST /v1/models/{provider}/{model} と、そのカタログおよびスキーマの関連ルートは、 まだリクエストを処理していません。現在、認証付きの呼び出しは 404 を返します。このページは、 これらのルートが将来提供する契約を文書化したものであり、ロールアウトに先立って公開されているため、 統合をその契約に合わせて作成する準備ができます。これは、現在実際に試すことができる動作の説明ではありません。
Comfy Router は、パートナーモデルを1つのホスト、1つの資格情報、1つのルート形状の背後で実行します。このページは、生成済み画像への最短の完全なパスです。クライアントをインストールし、キーを設定し、1つのリクエストを送信し、結果を読み取り、そして最初の失敗に遭遇する前に、その失敗がどのようなものかを確認できます。 ベース URL: 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 を読み取り、キーをリテラルとして受け取らないため、コピー&ペーストしたスニペットが認証情報をコミットに持ち込むことはありません。
comfyui- キーは X-API-Key ヘッダーで送信してください。Authorization: Bearer ではありません。 2つのヘッダーは異なるバリデータを選択します。X-API-Keycomfyui- キーを受信時に読み取る唯一のヘッダーであり、Authorization 内の値は JWT ブランチにルーティングされます。そこでは、非JWTトークンはターミナルの 401 Invalid token となり、キーは決して参照されません。(Authorization: Bearer は Cloud/Firebase の JWT に対して正しい方法です。これは、生成済みの APIリファレンス が「bearer token」という言葉で意味しているものです。)
キーはワークスペースごとに作成され、そのワークスペースのモデル利用権限とクレジット残高を保持します。有効な認証情報のないリクエストは 401X-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

Python 3.9+ と httpx が必要です:
quickstart.py として保存し、python quickstart.py で実行します:

TypeScript

Node 18+(組み込みの fetchAbortSignal.timeoutcrypto.randomUUID を使用)と、TypeScript を直接実行するための tsx が必要です:
quickstart.mts として保存します。.mts 拡張子は重要です。このファイルはトップレベルの await を使用するため ES モジュールが必要だからです。npx tsx quickstart.mts で実行します:

422 の読み方

422 は、最初の実呼び出しの前に理解しておく価値がある唯一のエラーです。なぜなら、それは自分自身が引き起こすエラーだからです。これは、Router がボディをモデル自身の入力スキーマに対して検証し、拒否したことを意味します。つまり、必須フィールドが不足している、値が範囲外、画像が小さすぎる、といったケースです。このチェックはプロバイダー呼び出しの前に実行されるため、422 はコストがかかりません。パートナーの支出もなく、後で請求に関する質問に答える必要もありません。これは 400 とは異なります。400 はリクエストレベルの失敗(不正なカーソル、読み取れないエンベロープ)であり、フィールド単位の失敗ではありません。 そのボディは fal/FastAPI の detail[] 形状です。問題のあるフィールドごとに1つのエントリを持つ配列で、各エントリは独自の loc(フィールドへのパス)、msgtype(プロバイダーレベルの具体的な理由: missingvalue_errorimage_too_small)、および理由に境界が含まれる場合は ctx を保持します。このフィールド単位の粒度こそが、上記のサンプルが配列を例外メッセージにフラット化せずにデータとして保持する理由です。
入力スキーマがまだ作成されていないモデルは、任意の JSON オブジェクトを受け入れる文書化された 寛容なフォールバックとして解決されるため、422 を返す代わりにボディを転送します。 上記のサンプルは、スキーマが存在する場合に処理する形状を示しています。422 ブロックは、 その特定のボディに対する保証された応答ではなく、エラーパスとして扱ってください。
このボディには独自の error_type フィールドがないため、422 では X-Comfy-Error-Type ヘッダーが唯一の機械可読なバケットになります。両方のサンプルはまさにその理由から、ヘッダーからバケットを最初に読み取ります。これにより、Router が返すすべての失敗を1つのエラークラスでカバーできます。 X-Comfy-Request-Id は、成功、4xx5xx を問わずすべてのレスポンスに含まれており、サポートリクエストで引用する ID です。両方のサンプルは、ヘッダーロギングを有効にして再実行する代わりに、例外に ID を添付します。

モデルのフィールドの由来

promptbfl/flux-2-pro が必須とする唯一のフィールドです。次に必要になるのは widthheightseedoutput_format です。時間とともにずれる可能性のあるフィールド一覧を再掲する代わりに、モデルのスキーマをライブで確認してください:
これは、サーバーがあなたの呼び出しの検証に使用するものと同じドキュメントで、スタンドアロンのOpenAPIドキュメントとして提供されます。そのため、公開されている仕様と実際に強制される仕様が食い違うことはありません。任意のモデルIDを選び、その呼び出しパスに /openapi.json を追加すれば、返ってきた内容に基づいて生成できます。

次のステップ

  • Comfy Router API リファレンス: すべてのエンドポイント、すべてのパラメータ、そして 15 種類すべてのエラー分類を網羅しています。
  • Comfy Router の制限事項: 現在 Router が対応していない機能と、その代わりに使用すべきものを説明しています。