ComfyUIにネイティブループを追加: Start LoopノードとEnd Loopノード

ComfyUI Wikinews

ComfyUIコアがワークフローをネイティブにループできるようになりました。Start LoopとEnd Loopを組み合わせれば、回数、インデックス範囲、またはリストでグラフを反復でき、値の引き継ぎと出力の蓄積が可能です。

ComfyUIコアがカスタムノードなしでグラフをループできるようになりました。 PR #16227 が2つの境界ノード、Start LoopEnd Loopで構成される汎用ループ機構を追加しました。これは2026-09-15に公開されたコアリリースに含まれています。ComfyUIをアップデートすると、両ノードがutilities/loopingカテゴリに表示されます。

ループの描き方

設定するループコンテナはありません。ループはノードのペアであり、本体はそれらの間に位置するものです。Start LoopからEnd Loopまで配線されたものはすべて、1回の反復ごとに実行されます。

ループ構造は通常のプロンプト検証中にチェックされるため、不正なループは実行開始前に失敗します。すべてのStart Loopは正確に1つのEnd Loopと曖昧さなく対応しなければならず、ネストされたスコープは一貫している必要があり、ループブランチはそのEnd Loopの外へ抜け出せません。Start LoopとEnd Loopはノードスキーマで自身をループ境界として宣言し、ペアリングチェックはこれを読み取ります。

実行時には元の本体が抑制され、最初の反復を含めて各反復が新しくキューに入れられたグラフノードとして投影されます。反復は別個のループインタプリタで処理されるのではなく通常のスケジューラ作業のままであり、反復の進捗はノード上でIteration n / totalとして報告されます。

反復回数を指定する3つの方法

Start Loopのmode入力は反復カウンタの生成方法を選択し、選択したモードの入力のみが表示されます。

モード反復対象独自の入力
simple固定の繰り返し回数num_iterations(デフォルト4)
For数値のインデックス範囲start_iteration_index(デフォルト0)、max_iteration(デフォルト4、排他的)、step(デフォルト1)
List接続されたリストの項目ごとに1回list

stepは最小1で、値が0の場合はエラーになります。計算された反復回数がゼロの場合、ループ本体は実行されず、is_lastはtrueとして報告されます。

Start Loopが返すもの

出力意味
iteration_index現在の反復のインデックス
is_first最初の反復でtrue
is_last最後の反復でtrue
list_itemListモードでの現在の項目。他のモードでは空
current_iteration_valueこの反復で引き継がれる値

is_firstは最初のパスだけを変えるための一般的なフックです。たとえば、前のウィンドウの最後のフレームではなくソースフレームからビデオループを開始する場合などです。

小さな画像生成グラフを包むStart LoopとEnd Loop

最小構成: 1つのStart Loop、小さな生成本体、1つのEnd Loop。画像を保存のパススルーはtermination入力に配線されているため、各反復ごとに1回実行されます。

ループを閉じる

End Loopはスコープを閉じ、何がスコープから出るかを決めます。

入力役割
output_valueEnd Loop後に返される値
next_iteration_value次の反復のためにcurrent_iteration_valueとしてStart Loopに送り返される
accumulate有効にすると、最後の1つだけでなく、すべての反復のoutput_valueが返される
termination入力プレビュー、保存、その他すべての反復で実行する必要がある副作用のための動的に増加する入力。値は返されない

End Loopには、型がoutput_valueに従う単一の出力ソケットがあります。accumulateを有効にすると、値は通常のComfyUIリストとして反復順に連結されて出てきます。

termination入力はよくある驚きへの対策です。本体の内部にある画像プレビューや画像を保存ノードは、そうしないと最後の反復でしか実行されません。これは以前に投影された本体が上書きされるためです。そのノードのパススルーをtermination入力に配線すると、各反復で1回実行され、ループ境界内に保たれます。

すべての反復の出力を蓄積する

accumulateを有効にすると、4つの生成結果すべてが1つのリストとして返されます。画像プレビューはterminationで処理されるため、各反復の完了が順に確認できます。

反復ごとに処理を変える

iteration_indexは通常の整数出力なので、解像度、ステップ数、プロンプトのバリエーション、LoRA強度のランプなど、下流のあらゆるものを制御できます。

Forモードで反復ごとに異なる解像度を駆動する

Forモードがiteration_indexを解像度に渡し、サイズの異なる結果が最後に蓄積されます。

反復間で状態を引き継ぐ

initial_iteration_valueは最初の反復で引き継ぎ値を初期化し、各反復のnext_iteration_valueが次の反復のcurrent_iteration_valueになります。これが状態チャンネルのすべてであり、Start LoopとEnd Loopのペアごとに正確に1つ存在します。

複数のものを引き継ぐには、それらをリストに入れます。既存のCreate Listノードは異種入力を受け入れるようになったため、1つの引き継ぎ値で画像とそれを生成したテキストプロンプトのような混在した状態を保持できます。utilitiesカテゴリの2つのノードがこのパターンをサポートします。

  • Create List: 混在した入力から引き継ぎ値を構築します。
  • Get Item From List: 同じリリースで新登場。リストとインデックスを受け取り、その項目を通常の値として返すため、引き継いだ状態の構成要素を次の反復内で取り出せます。
引き継いだ画像とプロンプト値を介して2つの生成が相互作用する

Z-Imageによる生成とvision-languageによるキャプション付けが、単一の引き継ぎ画像とテキスト値を通じてやり取りされます。

ネストとキャッシュ

Start Loopのparent_iterationはforce入力です。外側のループのiteration_indexをこれに接続すると、ループを別のループ内にネストできます。ネストは推測ではなく明示的で、各Start Loopは依然として正確に1つのEnd Loopを必要とします。

Start Loopのcache_iterationsは高度な機能で、デフォルトではオフです。有効にすると、投影された反復ノードが以前の実行のキャッシュ結果を再利用する場合があります。End Loopノード自体は通常の実行ノードなので、いずれの場合も最終出力は通常どおりキャッシュされます。

外側のリスト駆動ループに入れ子になった内側のループ

プロンプトに対するListモードの外側ループがあり、parent_iterationを介して生成ループがその内側にネストされています。

ビデオと潜在の例

この機構は、各ウィンドウが前のウィンドウに依存するビデオ拡張を念頭に置いて構築されました。公開されている2つの例がこのパターンを直接示しています。

引き継いだ最後のフレームを通じてビデオウィンドウを連結する

最後のフレームから最初のフレームへのビデオループ: ソース画像がinitial_iteration_valueを初期化し、生成された各ウィンドウの最終フレームが次のウィンドウの最初のフレームになり、フレームのバッチが蓄積されて1つのクリップに再バッチされます。

潜在をループ内で引き継ぎ、LoRAをランプさせる

accumulateをオフにして潜在をループ内で直接引き継ぐため、最後の潜在のみが返されます。さらに最初の反復処理のためのlazyスイッチと、サンプリングが進むにつれて徐々に変化するLoRA強度を組み合わせています。

最もシンプルな出発点である、引き継ぎ値のない4回反復の生成ループは、Start LoopとEnd Loopのペア1組だけです。

ノードの場所

Start LoopとEnd Loopはutilities/loopingカテゴリのコアノードで、ComfyUI本体に同梱されているためノードパックは不要です。Create ListとGet Item From Listはutilitiesにあります。ループの動作は公式の組み込みノードページ(Start LoopEnd Loop)に記載されています。

既存のワークフローは影響を受けません。ループはオプトインであり、Start LoopとEnd Loopのペアがないグラフはこれまでどおりキューに入ります。

コメント

GitHubでサインインしてディスカッションに参加しましょう。

コメントを読み込み中…
ComfyUIにネイティブループを追加: Start LoopノードとEnd Loopノード | ComfyUI Wiki