🖼️ 图片列表合并 (Make Image List)
A list, not a batch — the node that keeps your images separate on purpose
- image1
- image2
- image3
- image4
- image5
- image6
- image7
- image8
- image9
- image10
- images
There's a subtle but critical difference between "a batch of images" and "a list of images" in ComfyUI, and most people only learn it when a node rejects their carefully-stacked tensor. A batch is one tensor with a batch dimension - every frame must be the same size. A list is a Python list of separate tensors - each one can be a different resolution, and the downstream node receives them one at a time. ZH_MakeImageList ("🖼️ 图片列表合并") is the list side of that coin: it collects up to 10 image inputs and hands them down as a list, untouched.
It lives in the video corner of ComfyUI-ZhiHui (category ZhiHui/video) because frame pipelines - animation, shot sequences, keyframe chains - are where mixed-size lists actually show up. If every image in your graph is the same resolution, this node is pointless; if they aren't, it's the difference between a working workflow and a wall of shape errors.
How it works
Under the hood it's embarrassingly simple: OUTPUT_IS_LIST = (True,) tells ComfyUI the return value is a list rather than a single tensor, and the node just gathers whatever's connected to image1…image10. The one real behavior knob is skip_empty:
- True (default) - unconnected inputs are dropped entirely. Only live images come through.
- False - empty slots are filled with an 8×8 black placeholder tensor, so the downstream always sees a full list of exactly 10. You'd want this if downstream logic assumes positional indexing.
If everything is empty it returns a single black placeholder rather than an empty list, so the graph never feeds a None.
The inputs and outputs that matter
- skip_empty - the only widget, described above.
- image1 … image10 - optional IMAGE inputs.
The single output is images, typed IMAGE but delivered as a list. It feeds naturally into nodes that declare list inputs - timeline/sequence tools, frame compositors, or anything you've seen request a "list" rather than a "batch."
Install
cd ComfyUI/custom_nodes
git clone https://github.com/zhuyungen/ComfyUI-ZhiHui.git
Restart ComfyUI. No models, no extra dependencies beyond the pack's base torch/numpy/Pillow. ComfyUI Manager search "ComfyUI-ZhiHui" also works.
Where people get burned
The trap is conflating this with a batch maker. ZH_MakeBatch in the same pack stacks images into one tensor (forcing a common size); this node keeps them as separate tensors in a list. Feeding a list into a node expecting a batch tensor - or vice versa - produces a mismatch error that reads like the node is broken when it isn't. Check which one your downstream actually wants. Also note the list is ordered by slot number, not by any sorting - if you need a specific frame order, wire the inputs in that order.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| skip_empty | BOOLEAN | true | — |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| image4opt | IMAGE | — | |
| image5opt | IMAGE | — | |
| image6opt | IMAGE | — | |
| image7opt | IMAGE | — | |
| image8opt | IMAGE | — | |
| image9opt | IMAGE | — | |
| image10opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |