Nodes/Qwen2.5-VL GGUF Nodes/🧩 Dynamic Multi-Image Collector
ComfyUI Node

🧩 Dynamic Multi-Image Collector

Eight optional image ports, one clean batch — for VLM comparisons that don't fall over

By walke2019·Created 11 months ago·Updated about a month ago· 32
🧩 Dynamic Multi-Image Collector
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • images
  • summary

Vision models are at their best when they can compare. "What changed between these two renders", "which of these four frames is sharpest", "caption all of these the same way" - those are batch jobs, and batch jobs need a single IMAGE tensor to feed the model. Dynamic Multi-Image Collector is the plumbing that gets you there: up to eight optional image inputs, concatenated into one IMAGE batch.

The word that makes it worth having is "optional". Every image_1 through image_8 port can be left disconnected, and the node only concatenates what's actually plugged in. In a workflow where a comparison sometimes has three images and sometimes six, you don't rewire anything - the batch just reflects what's present. (There's no way around at least one being connected; the node raises "At least one image input is required" if you send nothing in.)

Outputs

  • images - the IMAGE batch, frames stacked along the batch dimension. This is what you feed into a batch VLM runner or a multi-image analysis node.
  • summary - a STRING like Collected 4 image input(s), batch=4, which is a handy quick sanity check in the UI and can be logged.

The implementation is trivial - torch.cat(images, dim=0) - but that's the point: this is the boring glue node that keeps your graph tidy instead of hand-wiring a batch concat widget.

Where it fits

The most useful pairing in this pack: Dynamic Multi-Image Collector → Batch Remote VLM Task. The collector gives you the batch, the batch runner gives you per-image JSON with labels. Add Video Frame Sampler on the front and you've got a video-understanding pipeline that samples a video, collects the frames, and captions them all in one run. It also pairs with the local V2 analysis nodes, which accept a video/frame sequence as IMAGE input.

A genuine quirk to know about

Batch dimension semantics. The node concatenates whole tensors along dim 0, so if each input is itself a batch (a video of 30 frames, say), you get 30+ frames, not one tensor per input. That's usually what you want - the VLM sees each frame as one image - but it means "8 inputs" can be "hundreds of frames" if someone feeds videos in. Keep an eye on the summary string; it tells you the real batch count.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/walke2019/ComfyUI-GGUF-VLM.git
cd ComfyUI-GGUF-VLM
pip install -r requirements.txt

Restart ComfyUI, find it under GGUF-VLM → 🚀 Business. No model downloads, no extra deps beyond what the pack already installs (it needs torch, which ComfyUI gives you anyway).

Troubleshooting

If the node throws "At least one image input is required," you genuinely have nothing connected - check for a broken link from a load node. If your batch looks wrong (frames out of order, unexpected count), remember inputs stack in port order image_1 to image_8, and the summary string is your friend for confirming what actually arrived. Shape mismatches between inputs are the other classic: every input needs the same resolution and channels, so if you're mixing differently-sized images, normalize them before the collector.

Category🤖 GGUF-VLM/🚀 Business

Inputs (8)

NameTypeDefaultDescription
image_1optIMAGE
image_2optIMAGE
image_3optIMAGE
image_4optIMAGE
image_5optIMAGE
image_6optIMAGE
image_7optIMAGE
image_8optIMAGE

Outputs (2)

NameTypeDescription
imagesIMAGE
summarySTRING