◎ Radiance Grade Match
Radiance Grade Match — color match your AI frame to a reference in one step
- source
- reference
- matched_image
- grade_info
You know the feeling: the image is structurally perfect but the colors are wrong. The skin tones don't match the plate, the sky is too cyan, the whole thing doesn't sit in the scene. The common instinct is to re-roll the generation and pray. The correct tool is a color match - take a reference image and move your source's color statistics toward it. Radiance Grade Match does exactly that, and it's deterministic, instant, and costs nothing.
The KB calls color matching "the underrated one" - the honest alternative to re-rolling because the colors are off. In a compositing context it's also the workhorse for making an outpainted region agree with the original, or a generated element sit in a plate's light. This node is that operation with a strength knob and a reproducible grade output.
How it works
The mechanism is the classic Reinhard-style color transfer, upgraded to CIE L*a*b*: it converts both images to L*a*b*, computes the mean and standard deviation of each channel, then scales and shifts the source's L*a*b* channels so their statistics match the reference's. The README calls it "shot-to-shot color statistics transfer using CIE L*a*b* mean/std math," and the node source confirms it. Mean/std matching is deliberately global - it gets the palette right, but it won't add the reference's local contrast or its specific grade decisions. That's the honest limit: it matches the mood and white balance, not the art direction.
Because it runs in 32-bit float like the rest of the pack, it won't introduce banding the way an 8-bit color balance hack might. It also plays nice with the pack's wider pipeline: instead of just returning the matched image, it returns the grade_info JSON that Radiance Grade produces too.
The inputs that matter
Only three, and that's the charm:
source- the image to be modified.reference- the image whose look gets applied to the source.strength- 0 = no change, 1 = full match, in 0.05 steps. This is your whole interface for "how much of the reference look do I want."
Outputs: matched_image (the color-matched result) and grade_info - a JSON string of the grade parameters that produced the match. That second output is the batch trick: wire grade_info into the pack's ApplyGradeInfo and you can replay one shot's matched grade across a whole sequence, keeping everything consistent frame to frame.
Where you'll actually use it
- Matching an AI-generated frame to the live-action plate it's composited into.
- Fixing an outpainted or inpainted region whose colors don't match the surrounding image.
- Making an upscaled or regenerated tile agree with its neighbors.
All three are the jobs the KB's color-match section calls out, and they're the ones people keep doing by hand with a saturation slider and a prayer.
Installing
Same pack, same steps:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt # or requirements_windows.txt / requirements_linux.txt / requirements_mac_silicon.txt
Or search Radiance in ComfyUI Manager and restart. Linux needs libopenexr-dev first.
Gotchas
The trap is expecting too much. Mean/std matching in L*a*b* is a global statistics transfer - it won't make your image look like the reference, it makes your image's color distribution resemble the reference's. If the source has a blue-ish cast and the reference is warm, it'll warm up; if you were hoping for the reference's exact teal-and-orange grade, you'll need Radiance Grade on top for that. Second, matching works best when both images are in the same working space - feeding it a log-encoded source against an sRGB reference is comparing apples to oranges. Third, the same data rule as the rest of the pack applies: garbage in, garbage out. A clipped 8-bit source has no hidden color detail to recover.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| source | IMAGE | Image to be matched (will be modified). | |
| reference | IMAGE | Target image whose look is applied to source. | |
| strength | FLOAT | 1.000–1 | 0 = no change, 1 = full match. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| matched_image | IMAGE | Source image color-matched to reference. |
| grade_info | STRING | JSON grade parameters used — connect to ApplyGradeInfo for batch use. |