🎨 Latent Color Match (Simple)
The no-dependency color match that just works
- latent
- reference
- LATENT
Its bigger sibling in this pack wants kornia and color-matcher installed. 🎨 Latent Color Match (Simple) wants none of that - it's the pure-PyTorch fallback that ships in the same Latent Color Tools pack, and it's exactly what you reach for when pip is being difficult or you're on a locked environment where you can't add the fancy libs. Same idea as the full version: take two latents off the sampler, shift one's color statistics toward the other's, skip the VAE round trip entirely.
The trade for zero dependencies is fewer algorithms and fewer knobs. Instead of twelve methods you get two, and both are basic statistics - there's no kornia color-space conversion and no Monge–Kantorovich anything going on here. It's a blunt instrument, but blunt instruments are still useful when the goal is "this render's colors are close but not quite."
How it works
Two methods, both straightforward torch math over the latent tensor:
mean_std(default) - matches the latent's overall mean and standard deviation to the reference's, across spatial dimensions. A global tone shift.channel_wise- does the same normalization per channel, so each latent channel gets its own stats matched to the reference. Slightly more faithful, slightly more prone to odd artifacts if your channel layout isn't what the model expects.
Either way, the result is blended with the original by strength, and unlike the full node there's no non-linear factor trickery - what you set is what you get. One forgiving touch: the whole thing is wrapped in a try/except, so if anything goes wrong it returns your input latent untouched rather than crashing the graph. Silent, but safe.
The inputs that matter
latent- the source, straight from a KSampler.reference- the latent whose color you're borrowing.method-mean_stdorchannel_wise; the default is fine to start.strength(0 to 2) - the blend amount. Start at 1.0, dial from there.
Output is a single LATENT, wired into VAEDecode. There's no batch_size control here - it just processes the whole batch - and device defaults to auto. It's the least configurable node in the pack, which is honestly part of the appeal.
Installing it
Same pack as the others: Latent Color Tools (DenRakEiw/Latent_Nodes), via ComfyUI Manager by searching "Latent Color Tools", or:
cd ComfyUI/custom_nodes/
git clone https://github.com/DenRakEiw/Latent_Nodes
cd Latent_Nodes
pip install -r requirements.txt
Restart and it appears under latent/color. requirements.txt lists kornia and color-matcher, but here's the thing - this node genuinely runs without either installed. If you want the whole pack minus the heavy optional deps, this is the node that still works. The README's manual-install snippet has a placeholder URL in it; the real repo is the one above.
Common issues
- Output looks identical to the input. Your source and reference are probably already statistically close - that's not a bug. Lower
strengthexpectations or pick a reference with a more distinct grade. - Something broke and you can't tell. Because failures return the input silently, an "error" looks exactly like a no-op. If the node isn't matching at all and you expect it to, check the terminal - it prints errors there instead of surfacing them in the graph.
- Result looks slightly off. Same caveat as its big sibling: it's matching stats on latent channels, not real RGB. It'll get you in the neighborhood, not pixel-perfect.
If this is the only node in the pack you're using, the simple version is also a fine permanent choice - you're not giving up much by skipping the fancy methods, and you get the comfort of zero dependency pain.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| reference | LATENT | — | |
| method | COMBO | mean_std | 2 options: mean_std, channel_wise |
| strength | FLOAT | 1.000–2 | — |
| device | COMBO | 3 options: auto, cpu, gpu |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |