Skip to main content
POST /v2/models/{provider}/{model} は、モデルの処理が完了するまで接続を保持します。キュー経由の配信は同じモデル ID と同じネイティブなリクエストボディを使用しますが、Router が実行を受理した時点で応答を返します。request_id をすぐに受け取り、準備ができたときに同じプロセスまたは別のプロセスから結果を取得します。 キューは、1 回の生成が保持できる接続時間よりも長くかかる場合、Web リクエストが今すぐ応答を返す必要がある場合、あるプロセスで送信して別のプロセスで収集する場合、あるいは多数の生成を同時に進行させたい場合に使用します。順序付け、受付、リトライ、タイムアウト、課金、有効期限はすべてサーバー側で決定されます。SDK はその上にポーリングと使いやすさを追加するだけで、それ以外は何も行いません。

2つの配信モード、1つのリクエスト

SDK(comfy-sdk および @comfyorg/sdk、0.3.0 以降)は、run の隣にキューを3つのメソッドとして公開しています:
  • submit(model, body) はリクエストを送信し、すぐにハンドルを返します。ハンドルは status()get()cancel()、そしてイベントイテレータ(Python では iter_events()、TypeScript では events())を備えています。
  • subscribe(model, body, ...) は送信、ポーリング、収集を1回の呼び出しで行い、進捗コールバックを備えています。
  • handle(model, request_id) は2つのIDから別のプロセスでハンドルを再構築します。呼び出しは発生しません。
両方の ID がリクエストの指定に関わるため、どの場面でも両方の ID が必要です。ルートは /v2/models/{provider}/{model}/requests/{request_id} です。

4つのルート

statusIN_QUEUEIN_PROGRESSCOMPLETED のいずれかです。失敗やキャンセル済みを表す独立したステータスはありません。成功しなかったリクエストは error_type を持つ COMPLETED になるため、4つ目のステータス値ではなく、このフィールドの有無で分岐してください。SDK はこれを自動で処理します。get() は失敗を結果として返すのではなく、型付きの Router エラーを送出または reject します。 進捗イベント、webhook、優先度レベルはありません。リクエストを追跡する手段はステータスルートです。API リファレンスに、各ルートの完全なコントラクトが記載されています。

Queue a request

This queues the same request the quickstart sends and collects the image. Export your key as COMFY_API_KEY first.
Every model page carries this shape for its own model under Queue and collect later, beside the synchronous snippet.

Follow progress and collect in one call

When you do want to wait but also want to show progress, subscribe folds submit, poll and collect into one call:
The timeout is a client-side bound with no server-side meaning. When it runs out, subscribe makes one best-effort cancel before raising. A cancel only takes effect on a request that has not started running: a generation already in flight at the partner completes and is charged whether or not anyone collects it. Use submit when the request should outlive the caller.

Collect from another process

Store the request_id next to the model ID. Both are needed to rebuild a handle, and no call is made until you use it.

Check status or cancel

status() is one poll and returns the current state. cancel() asks the server to stop a request that has not finished. It is a request, not a guarantee: a run already on the wire at the partner may complete anyway, and the next status() is what is true.

Async Python

AsyncComfy mirrors every name, argument and argument order. There is no submit_async, for the same reason there is no run_async.

Errors the SDKs raise

A request that finished without succeeding is reported as COMPLETED with an error_type. get() and subscribe() turn that into the typed Router error for the bucket: the classes in comfy_sdk.router_exceptions in Python, and routerErrors.* in TypeScript. The event iterator does not raise for that case, because it is a view of the queue’s progress: a completion carrying an error_type is yielded as the last observation, and get() is what collects. A 403 not_enabled on submit arrives as NotEnabled and is terminal, so the SDKs do not retry it.

レスポンスの形式

送信、201 この時点で status は常に IN_QUEUE です。3 つの URL は絶対 URL で、送信時と同じキーで認証されます。
request_id は送信時の X-Comfy-Request-Id ヘッダーの値でもあります。モデル ID も一緒に控えておいてください。リクエストはその両方で指定されます。 ステータス、200 同じ形状で、現在の状態が入ります。queue_position は自分の前にあるリクエストを数え、実行が先頭に来ると 0 になります。このレスポンスの Retry-After は、再度ポーリングする価値があるのはいつかについての Router の推定値です。これはヒントであり制約ではなく、キューの後方にあるリクエストはすでに実行中のものよりも長く待つよう通知されます。より速くポーリングしても早く何かが分かるわけではなく、自身のレート制限の許容量を消費するだけです。
成功せずに完了したリクエストは COMPLETED で、error_type を持ち、結果の読み取りが X-Comfy-Error-Type に付けるのと同じ粗いバケットを運びます。このフィールドは成功時には null ではなく存在しません。
結果。 200 はモデル自身のネイティブ出力を、同じモデルと入力に対して同期ルートが返すものとバイト単位で完全に同一のまま、プロバイダー自身の Content-Type で返します。リクエストが未完了の間、読み取りは上記のステータスボディを伴う 202 を返すため、結果 URL だけをポーリングするクライアントは 1 つの型だけを解析します。失敗したリクエストは、X-Comfy-Error-Type が設定されたエラーレスポンスとして返り、同期ルートと同じバケットです。 キャンセル。 CANCELLATION_REQUESTED を伴う 202 は、要求が受け付けられたことを意味し、実行が停止したことを意味するものではありません。パートナー側ですでに実行中のランはそのまま完了する可能性があり、完了したパートナー生成は、誰かがそれを取得するかどうかに関わらず課金されます。その後ステータスを読み取ってください。有効になったキャンセルは error_type: cancelled を伴う COMPLETED として表示されます。実行される前に期限切れになったリクエストも同様に queue_timeout を表示します。すでに完了していたリクエストは ALREADY_COMPLETED を伴う 409 を返します。

冪等性と課金

  • 同期ルートと同じ課金。 課金はプロバイダーが Comfy に課金したタイミングで発生します。キューでの待機に費やした時間は課金されません。
  • 送信ごとに 1 つの Idempotency-Key SDK は submit 呼び出しごとに新しいキーを生成するため、同じ入力に対する意図的な 2 回の送信は 2 つのリクエストになります。同じキーでの同じ呼び出しの再試行は、2 回目の実行をキューに入れません。オリジナルのハンドルを Idempotent-Replayed: true とともに返します。レスポンスの消失によって request_id を失う可能性がある場合は、独自のキーを渡してください。Headers を参照してください。
  • 結果は失効します。 完了したリクエストは、完了後 24 時間保持されます。その後、ステータスと結果の読み取りは 410 を返し、結果は失われます。速やかに収集し、出力が持つアセット URL をダウンロードしてください。
  • ポーリングもリクエストです。 ステータスと結果の読み取りも、呼び出し元ごとのリクエストレートにカウントされます。固定の短い間隔でポーリングするのではなく、Retry-After に従ってください。

エラー

すべてのエラーレスポンスには X-Comfy-Request-Id が含まれる。サポートに連絡する際はこれを伝えること。

Next

クイックスタート

同じモデルに対する同期呼び出しを、ゼロから画像生成まで。

モデル

各モデルのページには、そのモデルとボディに対応するキュー用スニペットがあります。

ヘッダー

認証、冪等性、リクエスト ID、エラーバケット、リトライのペーシング。

API リファレンス

4 つのキュールートを、フィールドごとに解説します。