Nodes/Post Processing PRO/Cinematic Color Match PRO
ComfyUI Node

Cinematic Color Match PRO

Steal the exact grade of any movie frame, statistically

By Guillaume-127·Created 5 months ago·Updated 5 months ago· 2
Cinematic Color Match PRO
  • image
  • reference_image
  • IMAGE
strength1.00

You found a movie frame with exactly the mood you want - teal shadows, warm skin, that specific contrast curve - and you want your render to look like it. Hand-matching a grade by eye takes forever. Cinematic Color Match PRO does it in one connection: you feed it your image and a reference image, and it transfers the reference's color palette and contrast onto your render using Reinhard color transfer in Lab* space, with a strength slider to blend how far the match goes. It's the pack's "grab a still from Blade Runner and go" node.

The family lineage is legit: Reinhard et al.'s 2001 color transfer paper is the canonical algorithm for this, and it's the statistical core behind a lot of "match color" tools you've used in photo editors. It matches the distribution of color, not pixel-for-pixel content - which is exactly what you want for a grade.

How it works

For each image it converts to Lab* color space (perceptually uniform - the "L" is lightness, "a" and "b" are the color axes), then computes the mean and standard deviation of every channel. The transfer is pure statistics: it shifts your image's channels so their mean and standard deviation match the reference's, then converts back to RGB. Because it's a global stats match, it transfers the mood - overall temperature, contrast, saturation spread - rather than the geometry of the reference scene. The strength slider then crossfades between the fully-matched result and your original, so you can borrow 40% of the grade and keep the rest of your render.

The inputs that matter

  • image - your render to be regraded.
  • reference_image - the frame whose look you're stealing. The node uses the first image of the reference batch as the statistical target.
  • strength (default 1.0, 0–1) - how much of the match to apply. 1.0 is full transfer; ~0.5–0.7 is the sweet spot when the reference is very different from your image, because a 100% stats match can overreach.

Output: a single IMAGE of the same size.

Installing it

Same pack as everything else - ComfyUI Manager → search "Post Processing PRO", or:

cd ComfyUI/custom_nodes
git clone https://github.com/Guillaume-127/ConfyUI_Post_Processing_PRO

Restart. No requirements, no models - OpenCV color space conversions and mean/std math, runs on CPU.

Where people get tripped up

The honest limitation: it's a global match. It aligns overall mean and spread, but it can't do a local grade (e.g., "shadows teal, highlights warm" when the reference's local structure differs). That's a real gap - a pure Reinhard match on a frame with a big bright window will drag your whole image brighter than you wanted. Two practical fixes: keep strength under 1 so the render keeps its own character, and pair it with FPE Kodak 2383 PRO afterward - the 2383 node's split-tone (cyan shadows, warm highlights) is exactly the local grade that a global stats match can't produce. That pairing - statistical mood match, then a film-print density pass - gets you shockingly close to "I want this to look like that film."

CategoryPost_Processing_PRO/Grading

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
reference_imageIMAGE
strengthFLOAT1.000–1

Outputs (1)

NameTypeDescription
IMAGEIMAGE