8.4 KiB
ComfyUI-List-Utils
ComfyUI で「複数の値を順番に処理する」「Python の list 値としてまとめて扱う」「型つきの値セットを受け渡す」ためのプリミティブなカスタムノード集です。
この拡張では、似ているけれど役割が違う 3 種類のコンテナを扱います。
| 名前 | 意味 | 主な用途 |
|---|---|---|
List |
ComfyUI 公式の Data list / List processing | 複数の値を ComfyUI の逐次処理として流す |
PyList |
生の Python list 値 |
値の配列を 1 つの値として保持・加工する |
Pack |
List-Utils 独自の、型情報つきコンテナ | 複数の異なる型の値をまとめて渡し、後で元の型で取り出す |
Installation
ComfyUI/custom_nodes ディレクトリで clone して、ComfyUI を再起動してください。
git clone https://github.com/godmt/ComfyUI-List-Utils.git
ノードは list_utils カテゴリに追加されます。
GUI Help
各ノードには ComfyUI 上で確認できる説明を追加しています。
- ノード自体の説明は、ノードにマウスを重ねたときの説明として表示されます。
- widget / input には、用途を説明する tooltip を追加しています。
- output には、何が出力されるかを説明する tooltip を追加しています。
Create List、Create PyList、Merge List、Merge PyList、Pack、Execの動的入力にも tooltip が付きます。
List / PyList / Pack の使い分け
List
List は ComfyUI の List processing 用です。たとえば 10 個の prompt、seed、画像、パスなどを順番に処理したいときに使います。
List-Utils の List 系ノードは、ComfyUI の OUTPUT_IS_LIST / INPUT_IS_LIST を使います。出力ソケットの型は STRING、INT、IMAGE など元の型として扱われます。
よく使う場面:
- 複数の文字列を 1 件ずつ downstream ノードへ流す
Create Rangeで連番 seed を作るList Dirでファイルパスを列挙して順番に処理するList: Get By Index/List: Sliceで ComfyUI List を取り出す
PyList
PyList は Python の list そのものを 1 つの値として受け渡す型です。ComfyUI の逐次処理にはならず、配列をまとめたまま扱いたいときに使います。
よく使う場面:
- 文字列や数値の配列をまとめて保持する
- Python list として index / slice / merge / cast する
List To PyListで ComfyUI List を 1 つの Python list にまとめるPyList To Listで Python list を ComfyUI の逐次処理へ戻す
Pack
Pack は複数の値を 1 本の PACK ソケットにまとめるためのコンテナです。各入力の値だけでなく、入力名と ComfyUI の型も保持します。
Pack / Unpack は、型の違う値をまとめて受け渡したいときに便利です。たとえば MODEL、CLIP、VAE、CONDITIONING、IMAGE のように、通常は 1 つの list に入れづらい値をまとめて運べます。
Typical Workflows
文字列を分割して順番に処理する
Split Stringに複数行テキストや区切り文字つきテキストを入力します。STRING出力を使うと、ComfyUI のListとして順番に流れます。PYLIST出力を使うと、Python list 値としてまとめて扱えます。length出力で要素数を取得できます。
PyList を ComfyUI List に変換する
Create PyList、Split String、Create RangeなどでPYLISTを作ります。PyList To Listに接続します。- 出力は ComfyUI の
Listになり、下流で逐次処理できます。
逆に、ComfyUI の List を Python list としてまとめたい場合は List To PyList を使います。
複数の型をまとめて渡す
Packに値を接続します。- 最後の空ソケットに接続すると、次の入力ソケットが自動で追加されます。
Unpackに接続すると、Pack側の入力数と型に合わせて出力が作られます。
Unpack は一度 Pack に接続すると出力型を確定できます。Switch ノードや Anything Everywhere 系ノードを間に挟んだ構成でも、上流の Pack をたどれる場合は型を復元できます。
Nodes
Create / Generate
| Node | Output | Description |
|---|---|---|
Split String |
STRING List, PYLIST, length |
文字列を delimiter または行で分割します。空要素は除去されます。 |
Create List |
List |
複数入力を ComfyUI List として作成します。 |
Create PyList |
PYLIST |
複数入力を Python list として作成します。 |
Create Range |
INT List, PYLIST, length |
Python range(start, stop, step) で整数列を作ります。 |
Create Arange |
FLOAT List, PYLIST, length |
numpy.arange(start, stop, step) で数値列を作ります。 |
Create Linspace |
FLOAT List, PYLIST, length |
numpy.linspace(start, stop, num) で等間隔の数値列を作ります。 |
List Dir |
STRING List, PYLIST, length |
指定フォルダから glob pattern に一致する項目を列挙します。 |
Merge / Convert
| Node | Output | Description |
|---|---|---|
Merge List |
List |
複数の ComfyUI List を連結します。 |
Merge PyList |
PYLIST |
複数の PyList を連結します。 |
List To PyList |
PYLIST |
ComfyUI List を Python list 値に変換します。 |
PyList To List |
List |
PyList を ComfyUI List processing 用に展開します。 |
Get / Slice
| Node | Output | Description |
|---|---|---|
List: Get By Index |
item | ComfyUI List から指定 index の要素を取り出します。 |
PyList: Get By Index |
item | PyList から指定 index の要素を取り出します。 |
List: Slice |
List |
ComfyUI List を start:end で切り出します。 |
PyList: Slice |
PYLIST |
PyList を start:end で切り出します。 |
Pack / Unpack
| Node | Output | Description |
|---|---|---|
Pack |
PACK |
複数入力を、名前・型・値つきで 1 つの Pack にまとめます。 |
Unpack |
original types | Pack から元の値を取り出します。出力型は接続元の Pack に合わせて動的に変わります。 |
Inspect / Utility
| Node | Output | Description |
|---|---|---|
Get Length |
INT |
len(value) を返し、ノード上にも表示します。 |
Get Shape |
width, height, PyList_size, channels |
IMAGE、LATENT、MASK の形状を取得します。 |
Any To Dict |
DICT, str() |
オブジェクトを dict または文字列に変換して確認します。 |
Get Widgets Values |
PYLIST |
接続元ノードの widget values を取得して表示します。 |
Any Cast |
selected type | 値を指定型として出力します。基本的な STRING / INT / FLOAT / BOOLEAN 変換にも使えます。 |
PyList Item Cast |
PYLIST |
PyList 内の各要素を STRING / INT / FLOAT / BOOLEAN などへ変換します。 |
Exec |
any | 入力値 x[0], x[1], ... を使って Python コードを実行し、result を返します。 |
Dynamic Inputs
一部のノードは入力ソケットを動的に増やします。
Create ListCreate PyListMerge ListMerge PyListPackExec
最後の空ソケットに接続すると次のソケットが追加されます。接続を外すと未使用ソケットは整理されます。
Create List / Merge List は、最初に接続した入力の型に合わせて出力型が変わります。Pack は入力ごとの型を保持します。
Notes
ListとPyListは別物です。接続できない、または期待どおりに逐次処理されない場合はList To PyList/PyList To Listで変換してください。List: Get By IndexとPyList: Get By Indexは、index が範囲外の場合Noneを返します。- Python の slice と同じく、
start:endのendは含まれません。 Execは任意の Python コードを実行します。信頼できる workflow でだけ使ってください。