INDG Flexible Image Batch
Batch up to 7 images into one tensor — no dummy wires required
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- images
Honest framing first: this isn't a node you'll meet in a hundred shared workflows. It's a small utility from SorenWeile's INDG_CustomNodes pack, and it exists to kill one specific annoyance - turning up to seven separate images into a single batched IMAGE tensor without leaving a spiderweb of optional sockets behind.
Here's the situation it solves. Plenty of things in ComfyUI want a batch of images on one wire: ControlNet reference passes, IPAdapter, face-swap pipelines, img2img over a set of source shots. But unless your images already came out of one generator in one batch, they arrive in your graph as separate tensors, and you have to glue them together yourself. The usual approaches are fiddly - you either wire a stack of optional inputs into a dynamic batch node, or you add dummy placeholder wires so the graph stays connected. INDG Flexible Image Batch takes the simpler route: it declares its seven image inputs up front, and any slot you leave unconnected is silently skipped. No dummy wiring, no special backend logic. That's also the point of its design, per the README: it replaces a dynamic "BatchImagesNode" pattern so an external workflow builder (the author's "RP Interface") can patch every input as a plain node_id → input_key → value assignment.
How it works
Mechanically it's about fifteen lines. The node collects whatever image inputs are actually connected, and:
- if only
image_1is present, it returns that tensor unchanged - no pointless copy, - otherwise it makes sure every image matches
image_1's spatial dimensions (bilinear resize, center-aligned) and stacks them along the batch dimension withtorch.cat.
That resize step is the one behavior you need to understand. Whatever you put in image_1 sets the resolution of the whole output. A 1024×1024 image in slot 2 gets squashed to match a 512×512 slot 1, and vice versa. So the rule is: put the image whose dimensions you actually want in image_1, not just the first one you grabbed. If everything already matches, nothing gets resized and the node is a pure passthrough-glue.
The inputs that matter
image_1(required) - always connected, sets the output resolution.image_2…image_7(optional) - connect as many as you need; the rest are ignored.- Output
images- the batchedIMAGEtensor,[B, H, W, C], which is what a KSampler, ControlNet, IPAdapter, or any batch-aware node expects on its image input.
That's the whole surface. If you only ever batch two or three images, you have two or three inputs doing real work and four empty sockets that don't cost you anything.
Installing it
Same as the rest of the pack - it's one of three nodes in INDG_CustomNodes, so you get all of them at once. Either install via ComfyUI Manager (search for "INDG_CustomNodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/SorenWeile/INDG_CustomNodes.git
Restart ComfyUI after cloning. No model downloads, nothing heavy - the pack's only pinned dependency is psutil, and even that is optional in practice (the code falls back gracefully without it). If you're the kind of person who checks the source before trusting a pack: this one is a single-commit, one-author repo, which means it's fresh and small rather than battle-tested. The usual caveats about running third-party code apply.
When to reach for it
If you're assembling a reference-image batch for a ControlNet or IPAdapter workflow, this is the one I'd grab over a dynamic batch node - the fixed seven sockets keep the graph readable and the skip-the-empties behavior means you can share a workflow where some inputs are optional without forcing everyone to wire dummies. It's not going to do anything a couple of core nodes can't, but "plain and predictable" is the whole job here.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image_1 | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| image_4opt | IMAGE | — | |
| image_5opt | IMAGE | — | |
| image_6opt | IMAGE | — | |
| image_7opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |