◎ Radiance Grade Apply
Stop eyeballing the viewer, bake the grade into the pixels
- image
- image
The Radiance Viewer is a lovely place to grade - scopes, lift/gamma/gain, temperature, all live and interactive. But a viewer's grade lives in the viewer. The moment you want that look in the image tensor, wired into an export or fed to a further node, you need this one: FXTD_RadianceGradeApply. Its description is exactly right - "Bakes Radiance grading math into the image tensor permanently."
This is the node you reach for when the deliverable matters and the "it looked good in the preview" workflow keeps betraying you. Run the workflow, set the grade in the viewer, then mirror those controls here and the same apply_grading function the viewer uses runs on the actual pixels, frame by frame.
The inputs
This is a long control surface, mirroring the viewer's panel:
- exposure (±10 stops), offset (±1) - global brightness moves.
- lift / gamma / gain - the three color-wheel primaries, as single (per-luma) values. contrast with pivot (default 0.18 - linear mid-gray, matching the pack's fixed pivot), plus shadows and highlights for zone work.
- saturation, temperature (2000–12000K), hue_shift (±180°) - the color axis.
- lut_name - a 26-entry LUT menu that includes real camera log curves: LogC3 (ARRI EI800), LogC4 (Alexa 35), F-Log2 (Fujifilm), C-Log3 (Canon), Log3G10 (RED IPP2), DaVinci Intermediate, plus looks like ACES Filmic and Reinhard Tonemap. lut_intensity (0–1) blends how hard the LUT is applied.
- color_science -
Linear (sRGB)orACEScct, which changes the working assumption for the whole grade.
Output is a single image, 32-bit float. Crucially, the source notes it does not hard-clamp to [0,1] - HDR values survive; only NaN/Inf get sanitized.
The thing people get wrong
There are two "grade" nodes in this pack and they look like the same node. RadianceGrade is the interactive one with per-channel RGB lift/gamma/gain, presets, and a grade_info JSON output for replicating looks. Grade Apply is the bake node - it applies the viewer's grading math (temperature, hue shift, the LUT stack) and produces a plain image with no grade metadata out. If you're trying to copy a look between shots, that's RadianceGrade → RadianceApplyGradeInfo, not this node.
Second trap: the controls here are baked-in values, not linked to the viewer. If you change the viewer's exposure after wiring this node, the pixels don't follow. Set the grade, copy the numbers, run.
Install
Same pack as everything else - ComfyUI Manager → search Radiance, or:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt
Restart and you'll find it under FXTD Studios/Radiance/Color. On Linux, install libopenexr-dev first if the dependency install complains.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| exposure | FLOAT | 0.00-10–10 | — |
| offset | FLOAT | 0.000-1–1 | — |
| lift | FLOAT | 0.000-1–1 | — |
| gamma | FLOAT | 1.000.01–4 | — |
| gain | FLOAT | 1.000–10 | — |
| contrast | FLOAT | 1.000–4 | — |
| pivot | FLOAT | 0.180–1 | — |
| shadows | FLOAT | 0.00-1–1 | — |
| highlights | FLOAT | 0.00-1–1 | — |
| saturation | FLOAT | 1.000–5 | — |
| temperature | FLOAT | 65002000–12000 | — |
| hue_shift | FLOAT | 0.0-180–180 | — |
| lut_name | COMBO | None | 26 options: None, sRGB (Display), Rec.709 (Broadcast), Filmic (Cinematic), Reinhard Tonemap, ACES Filmic, +20 |
| lut_intensity | FLOAT | 1.000–1 | — |
| color_science | COMBO | Linear (sRGB) | 2 options: Linear (sRGB), ACEScct |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |