Nodes/ComfyUI-Utility-Suite/Image Batch To Image List
ComfyUI Node

Image Batch To Image List

ComfyUI's Two Kinds of 'Many Images', and How to Switch

By tom-m-2020·Created about a month ago·Updated 7 days ago· 1
Image Batch To Image List
  • image
  • images

Ask any ComfyUI user where they got stuck around week three and you will hear some version of this: "I have five images, but the node only processed one." There are two completely different ways to hold a stack of images in this graph, they look identical on the canvas - both are typed IMAGE - and they behave nothing alike. A batch is a single tensor with N in dimension 0. One call to the receiving node, one execution, everything happens inside. A list is N separate values. The receiving node runs N times, and its outputs come back as lists too.

This node converts the first into the second. That sounds like a no-op and it is the most consequential wire in an intermediate workflow, because list-ness is what gives you per-image control: per-image seeds, per-image prompts, per-image upscalers, per-image filenames.

How it works

It slices. Given an [N, H, W, C] tensor, it emits a list of N singleton tensors, each [1, H, W, C] - each a legitimate one-image batch. Each output item keeps the spatial dimensions they all shared in the first place, so nothing is resampled or re-encoded; it is a view-level split of what was already there.

It also sanity-checks its input honestly: it needs a rank-4 tensor and at least one image, and it says so plainly if it does not get one.

Inputs and outputs

One input, image. One output, images, marked as a list. That flag is the entire behavioural change.

Wire it into anything that should act per image. A list-aware sampler runs once per image so each gets its own noise from the same seed widget. A list-aware save node writes N files. A per-item model loader can pick a different upscaler or LoRA per image. That is what a list buys you: the fan-out happens in the engine, not inside a node that is secretly looping.

The counterweight is that everything downstream of the list now runs N times, including the expensive parts. Split deliberately, do the per-image work, then rejoin with Image List To Image Batch - or feed the per-item results into the list-inspection and pipe nodes if you are collecting them.

Install

Part of ComfyUI-Utility-Suite. ComfyUI Manager → search ComfyUI-Utility-Suite → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/tom-m-2020/ComfyUI-Utility-Suite

Restart ComfyUI. No models, and the pack's declared dependency (opencv-python-headless) is unrelated to this node. It is written against ComfyUI's V3 node API, so run a current backend; the pack's own README is bare - the info panel and the source are the documentation.

Traps

A batch of four and a list of four look the same and are not. If a downstream node "only processes the first image", it is not a list input - it took one item from a list, and that item happens to be a singleton batch. If a downstream node runs four times when you wanted once, it is a list input and you handed it a list. List / Batch Inspector exists precisely to tell you which world you are in; drop it on the wire before you debug anything else.

Lists propagate and multiply cost. The graph does not warn you that a save node is now writing 40 images, or that a detail pass is now running 40 times. That multiplication is the feature, but it is also how a 90-second workflow becomes a nine-minute one.

Do not hand this node a mask or a latent. It requires a rank-4 IMAGE with N ≥ 1 and rejects everything else. Masks are rank-3 in ComfyUI, so a mask batch is a different shape problem, and the pack handles mask batches with its own nodes.

Single-image batches are still batches. Splitting a batch of one gives you a list of one, which is a perfectly reasonable thing to have - just be aware that "list of one" and "one image" behave very differently downstream, and that is the difference that confuses people who test on a single image and then run a batch of eight.

CategoryUtility Suite/Image/Batch

Inputs (1)

NameTypeDefaultDescription
imageIMAGE—

Outputs (1)

NameTypeDescription
imagesIMAGE—