Color Grading
The color grade that works in HDR space and tonemaps its way back
- image
- image
Color Grading is the node people specifically recommend this pack for. It takes an image and runs a real color-grading chain on it - exposure, per-channel color filter, saturation, contrast, and tonemapping - but the thing that makes it interesting is where it does that work: in linear HDR space. Your sRGB image gets converted to linear light, graded there, tonemapped back to SDR, and quantized. That's the difference between this and the usual "nudge brightness with a Lerp" post-processing, and it's why it showed up as the recommended answer when someone on r/StableDiffusion asked how to do color grading in ComfyUI at all.
The input list is the whole control panel: image, then red, green, blue (each FLOAT, default 1), exposure_bias (default 0), saturation (default 1), contrast (default 1), and tonemap (a dropdown: Reinhard, Reinhard-Jodie, Uncharted 2, or ACES). Output is a single image.
What the knobs actually do
- red / green / blue - a color filter, applied as a per-channel multiplier on the linear values. 1.0 leaves that channel alone; 0.85 cools, 1.15 warms. This is your white-balance-ish control.
- exposure_bias - in stops, not percent. It's
2^exposure_bias, so +1 doubles the light, -1 halves it. This is the standard photographic meaning, which is more intuitive than it sounds once you get used to it. - saturation - 1 is unchanged, 0 is grayscale, above 1 pushes color. It blends toward luma in linear space rather than naively scaling RGB.
- contrast - pivoted around middle gray (log2 of 0.18), so it doesn't just crush the image; below 1 flattens, above 1 punches.
- tonemap - the required final step, because after exposure + color + saturation + contrast your values are HDR (they can exceed 1.0). The four options are the classic filmic curves: Reinhard is gentle and compresses highlights smoothly, Reinhard-Jodie is a punchier variant, Uncharted 2 is the well-known game-engine curve with a lot of character, and ACES is the Hollywood-standard look, subtle and balanced. For a first pass, Reinhard or ACES; switch to Uncharted 2 when you want a moodier grade.
There's a deliberate reason tonemapping is mandatory: it's what returns the HDR result to SDR. Skip it and you'd clip highlights - the author ships the node this way so you can't forget.
Where it fits
This is a deterministic grade - no model, no denoise, no hallucination. If you're batch-generating and you want a consistent filmic look applied to every output without a second diffusion pass, this is the node that does it in milliseconds. It's also honest about being a grade: it won't invent a look the way a LoRA would, it'll shift the one you already have. The photorealism lesson applies here - subtle is the goal; an exposure_bias of +1.2 with Uncharted 2 tonemapping is a mood, not a correction.
Installing
Same pack as everything else here:
cd ComfyUI/custom_nodes
git clone https://github.com/wmpmiles/comfyui-some-image-processing-stuff
Restart ComfyUI, or ComfyUI Manager → search "Some Image Processing Stuff". No models to download, no dependencies beyond PyTorch - it's pure tensor math, which is exactly why it's fast enough to sit at the end of every generation.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| red | FLOAT | 1.00 | — |
| green | FLOAT | 1.00 | — |
| blue | FLOAT | 1.00 | — |
| exposure_bias | FLOAT | 0.00 | — |
| saturation | FLOAT | 1.00 | — |
| contrast | FLOAT | 1.00 | — |
| tonemap | COMBO | 4 options: Reinhard, Reinhard-Jodie, Uncharted 2, ACES |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |