メインコンテンツへスキップ

長さ 1 の処理

内部的には、Comfy サーバーはノード間を流れるデータを、関連するデータ型の Python list(通常は長さ 1)として表現します。 通常の動作では、ノードが出力を返す際、出力 tuple 内の各要素は個別にリスト(長さ 1)にラップされます。その後、次のノードが呼び出される際、データはアンラップされてメイン関数に渡されます。
Comfy がラップとアンラップを自動で行うため、通常これを気にする必要はありません。
これはバッチ処理に関するものではありません。バッチ(例えば、潜変量や画像など)はリスト内の単一のエントリーです(テンソルデータタイプ を参照)。

リスト処理

場合によっては、単一のワークフロー内で複数のデータインスタンスが処理されることがあり、その場合、内部データはデータインスタンスを含むリストになります。 例えば、VRAM 不足を防ぐために一連の画像を 1 つずつ処理したり、異なるサイズの画像を扱ったりする場合がこれに該当します。 デフォルトでは、Comfy はリスト内の値を順次処理します。
  • 入力が異なる長さの list である場合、短い方は最後の値を繰り返してパディングされます
  • メインメソッドは、入力リスト内の各値に対して 1 回ずつ呼び出されます
  • 出力は list であり、それぞれの長さは最も長い入力と同じになります
関連するコードは、execution.py 内の map_node_over_list メソッドで見つけることができます。 しかし、Comfy はノードの出力を長さ 1 の list にラップするため、カスタムノードが返す tuplelist が含まれている場合、その list はラップされ、単一のデータとして扱われます。 返されるリストをラップせず、順次処理用のデータシリーズとして扱うことを Comfy に指示するには、ノードはクラス属性 OUTPUT_IS_LIST を提供する必要があります。これは RETURN_TYPES と同じ長さの tuple[bool] であり、どの出力をそのように扱うべきかを指定します。 ノードはデフォルトの入力動作を上書きし、単一の呼び出しでリスト全体を受け取ることもできます。これは、クラス属性 INPUT_IS_LISTTrue に設定することで実現します。 以下は組み込みノードからの(軽く注釈付きの)例です。ImageRebatch は 1 つ以上の画像バッチを受け取り(INPUT_IS_LISTTrue であるためリストとして受け取ります)、それを要求されたサイズのバッチに再バッチ処理します。
INPUT_IS_LIST はノードレベルです。すべての入力が同じ扱いを受けます。そのため、batch_size ウィジェットの値は batch_size[0] によって得られます。

INPUT_IS_LIST