Nodes/ComfyUI-SA-Nodes-QQ/Create Image List (QQ)
ComfyUI Node

Create Image List (QQ)

Batch multiple images into one tensor — and color-match them to a reference

By siraxe·Created 11 months ago·Updated 2 days ago· 72
Create Image List (QQ)
  • image1
  • image_ref
  • images
  • masks
export_alphatrue
methodmkl
strength1.00
multithreadtrue

If you've ever hand-built a batch of images in ComfyUI by stuffing them through an empty latent and hoping, you know how awkward the stock path is. CreateImageList is the direct version: give it several image inputs, get one batched IMAGE tensor out the other side. And it has a genuinely useful party trick - if you connect an image_ref, it color-matches every input image to that reference so your batch doesn't look like it came from three different cameras.

It's part of siraxe/ComfyUI-WanVideoWrapper_QQ, the "(QQ)" Wan pack. In that world this node earns its keep preparing start/middle/end frames for multi-frame I2V - you want a batch where all the frames sit in the same color space before they hit the VAE.

How it works

The node collects its (dynamically-added) image inputs and concatenates them along the batch axis into one tensor. The interesting machinery is the optional color matching: if image_ref is connected, every input image is passed through the color-matcher library, which transfers the reference image's color statistics onto each batch member. The method dropdown picks the algorithm - the defaults here are the standard color-transfer family:

  • mkl - MKL (Monge-Kantorovitch linear), the usual all-rounder default
  • hm - histogram matching
  • reinhard - the classic Reinhard color transfer
  • mvgd - Monge-Kantorovitch with linear adjustment (good for realistic looks)
  • hm-mvgd-hm, hm-mkl-hm - chained hybrid passes

strength scales how aggressively the match applies (0 = no change, 1 = full), and multithread parallelizes the per-image work. For alpha: export_alpha preserves RGBA through the batch, and the node traces back through your graph to the original LoadImage to grab the true source file so it can keep the alpha channel - that's why it can also emit a masks output.

Inputs and outputs that matter

  • image1 (and friends) - the dynamic IMAGE inputs you stack up. Wire as many as you need.
  • image_ref - optional reference IMAGE. Leave it disconnected and color matching is skipped entirely.
  • method + strength - the color-transfer algorithm and how hard to apply it.
  • export_alpha - keep the alpha channel through the batch (default on).

Outputs: images (the batched IMAGE) and masks (MASK, one per image when alpha is preserved).

Installation

cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git

Restart ComfyUI (or ComfyUI Manager → search "WanVideoWrapper_QQ"). Here's the gotcha the README and code both warn about: color matching needs the color-matcher Python library, and the pack's requirements.txt is empty, so nothing auto-installs it. If you hit the "Can't import color-matcher" error, run:

pip install color-matcher

in your ComfyUI Python environment. Basic batching works without it; only the image_ref path requires it. And as always with this pack post-v1.3.4, remove any old wanwrapper_qq folder to avoid duplicate-node warnings.

Common issues

Most surprises are around image_ref. If it's a different resolution or aspect than your inputs, the color transfer still runs (it's statistics-based, not pixel-aligned), but results get weirder the further apart the images are - matching a portrait to a cityscape is a lottery. Also, strength is 0–10 but the useful range is roughly 0–1.5; past that you're pushing posterization. And don't expect masks to be segmentation masks - they come from the alpha channel handling, so if your source images have no alpha, the mask output is effectively uniform.

CategoryWanVideoWrapper_QQ/image

Inputs (6)

NameTypeDefaultDescription
export_alphaBOOLEANtrue
image1optIMAGE
image_refoptIMAGE
methodoptCOMBOmkl6 options: mkl, hm, reinhard, mvgd, hm-mvgd-hm, hm-mkl-hm
strengthoptFLOAT1.000–10
multithreadoptBOOLEANtrue

Outputs (2)

NameTypeDescription
imagesIMAGE
masksMASK