AI活用

Comfy Routerのsubmitで連続生成する|再送・待機・キャンセルの設計

Comfy Routerで複数の生成を扱うときに、submitの受付と完了を分けて管理する方法。リクエストID、冪等性キー、再開とキャンセルの注意点を整理します。

この記事の目次
  1. 一件の仕事を、送信前から記録する
  2. 受付、処理の終了、保存完了を区別する
  3. 通信が切れたら、まず元の仕事を探す
  4. 並列数は小さく始め、待機を増やしすぎない
  5. キャンセルした仕事も、最後まで追跡する

複数の商品画像を順番に生成するなら、生成要求を送る処理と、結果を回収する処理を分けると扱いやすくなります。Comfy Routerのsubmitは、受付後のリクエストIDを使って状況を確認する方式です。「送信できた」を「画像が保存できた」と同じ状態にしないことが、連続処理の出発点になります。

一件の仕事を、送信前から記録する

アプリ側で商品番号などの業務IDを作り、モデルID、入力、冪等性キーを保存してからsubmitします。受付後にリクエストIDを追記すれば、途中でアプリが終了しても、未送信と結果待ちを区別できます。

{
  "job_id": "catalog-0042",
  "model_id": "catalogから選んだID",
  "idempotency_key": "送信前に保存した一意なキー",
  "request_id": null,
  "local_state": "ready"
}

これは自分のアプリで使う管理データの例であり、Routerへ送る入力ではありません。生成入力はモデルのスキーマに合わせて別に持ちます。入力を変えた再制作には新しい業務上の版を作り、同じ入力の通信再試行と分けましょう。

スポンサーリンク

受付、処理の終了、保存完了を区別する

場面 確認すること 次の処理
submitへの応答 受付IDが返ったか IDを永続化する
状態照会 待機中か実行中か終了か 終了まで間隔を空けて待つ
終了後の結果取得 エラーがないか、成果物があるか 成功した結果を保存する
自分の保存先への書込み 実ファイルを開けるか 業務の完了にする

Routerの状態がCOMPLETEDでも、成功とは限りません。失敗やキャンセルも終了として扱われるため、エラー情報を確認します。SDKを使う場合も例外処理を用意し、「終了した全件を納品済みにする」集計は避けてください。

通信が切れたら、まず元の仕事を探す

送信後に応答を受け取れなかったとき、無条件で新規submitを繰り返すと重複生成につながります。同じ論理要求を再送するために、保存済みの冪等性キーを使います。SDKが自動発行するキーだけに頼ると、別のsubmit呼び出しでは別キーになる点に注意が必要です。

リクエストIDが分かる仕事は、モデルIDと組にして元の処理を照会します。再起動のたびに全件を作り直す設計では、処理量も結果の候補も増えてしまいます。運用画面には「再照会」と「新しく生成」を別の操作として置くと、判断しやすくなります。

並列数は小さく始め、待機を増やしすぎない

最初は一件ずつ処理して保存まで確かめ、その後にアプリ側の同時実行数を増やします。待機列が伸びたことと、生成そのものが遅くなったことを分けて計測してください。受け付けた時刻、実行開始を観測した時刻、結果を保存した時刻があれば、どこで時間を使ったかを説明できます。

状態照会を短い間隔で繰り返しても生成は速くなりません。応答のRetry-Afterなどに従い、レート制限時は待ちます。エラーを隠して即時再送するループは、かえって回復を遅らせます。

キャンセルした仕事も、最後まで追跡する

キャンセル要求の受付は、実行の停止保証ではありません。既に動いている仕事は完了し、課金される場合があります。キャンセルを押した直後にIDを消さず、最終結果まで追ってから不要な成果物を扱う方針を決めます。

2026年11月8日確認の仕様は公式キューガイドが確認先です。ローカルComfyUIのキュー操作については既存のAPIキュー解説を参照してください。RouterのリクエストIDとローカルのprompt IDは、別の仕組みとして管理します。

スポンサーリンク