Nodes/ComfyUI-RndNanthu/πŸŽ›οΈ Pro Color Grading
ComfyUI Node

πŸŽ›οΈ Pro Color Grading

A full colorist panel in one node β€” lift/gamma/gain, temp/tint, levels, the lot

By rndnanthuΒ·Created about a year agoΒ·Updated 9 months agoΒ· 28
πŸŽ›οΈ Pro Color Grading
  • image
  • graded_image
β—„shadows0.00β–Ί
β—„midtones0.00β–Ί
β—„highlights0.00β–Ί
β—„exposure0.00β–Ί
β—„hue_shift0.0β–Ί
β—„saturation1.00β–Ί
β—„vibrance0.00β–Ί
β—„contrast1.00β–Ί
β—„pivot0.50β–Ί
β—„color_boost1.00β–Ί
β—„temperature0.00β–Ί
β—„tint0.00β–Ί
β—„levels_in_black0.00β–Ί
β—„levels_in_white1.00β–Ί
β—„levels_out_black0.00β–Ί
β—„levels_out_white1.00β–Ί

ProColorGrading is the manual node in the RndNanthu color pack, and it's the one that makes the whole pack make sense. AutoGradePro fixes your image on its own, the scopes tell you what's wrong, the log nodes flatten things for you - and this is where you actually get your hands on it. Sixteen grading controls in one node, from the classic shadows/midtones/highlights to temperature, tint, vibrance, contrast with a pivot, and full input/output levels. If you've used the color wheels in any editor, you already know what this does. It's that, as a single ComfyUI node.

For generated images this matters more than it looks. The KB's photorealism notes are blunt about it: AI output runs oversaturated and high-contrast, and the reliable fix is pulling saturation back and adding a subtle cast. ProColorGrading is built for exactly that move - plus everything heavier, if you want it.

How it works

The processing order in the source is the same order a colorist would do things manually:

  1. Exposure - a 2^exposure multiplier, so +1 is a real stop up and βˆ’1 a stop down.
  2. Input levels - levels_in_black/levels_in_white remap the range (that's your black and white points).
  3. Tone wheels - shadows, midtones, highlights each get a luminance-derived mask (shadow mask is 1 - 2*luma, highlight is (luma - 0.5)*2, midtones are what's left) and add to the image within that range. That's genuine lift/gamma/gain behavior, not a global brightness slider.
  4. Temperature/tint - channel gains: temperature pushes red vs blue, tint pushes green vs magenta.
  5. Hue/saturation/vibrance - in OpenCV HSV. Vibrance is the smart one: it only boosts pixels whose saturation is below the mean, so already-popping colors stay put.
  6. Contrast around pivot (default 0.5) - so you can hold your shadows and lift your highlights without the whole curve swinging.
  7. Color boost - pushes each channel toward the pixel's mean luminance, a saturation-adjacent move that reads more "film" than plain saturation.
  8. Output levels - levels_out_black/levels_out_white for the final reshape.

The inputs that matter

You can't touch all sixteen at once - nobody should. The set I'd actually reach for:

  • shadows, midtones, highlights - your main tool. Start with midtones, then lift or sink shadows.
  • temperature / tint - for the "AI is too green/cool" fix. A touch of warmth kills the plastic look on skin.
  • contrast with pivot - the underrated combo. Drop pivot to 0.4 and contrast 1.2 and you get that rich, held-shadow grade.
  • vibrance - safer than saturation for portraits because it leaves skin-adjacent colors alone-ish.
  • saturation - the blunt instrument; use it when vibrance isn't enough. A value below 1.0 is the classic AI realism fix (KB's "pull saturation down 5–10%").
  • levels_in_black / levels_in_white - nudge the black point up a hair (0.01–0.03) for a faded film look, or push white down to tame blown highlights.

Output is a single graded_image (IMAGE). Wire it to SaveImage - or into the pack's FilmGrain node if you want the full film finish.

A warning about hue_shift

hue_shift runs in OpenCV's 0–180 hue space, so its max of 180 is a full rotation, not the half you'd expect from a "degree" label. A value of 180 wraps every hue back to where it started. Treat it as "0–90 is a meaningful hue shift, beyond that you're chasing your tail."

Install

Standard pack install:

cd ComfyUI/custom_nodes
git clone https://github.com/rndnanthu/ComfyUI-RndNanthu
pip install -r requirements.txt

Then restart ComfyUI - or search "ComfyUI-RndNanthu" in ComfyUI Manager. Dependencies: torch, numpy, opencv-python, Pillow, matplotlib, imageio. No models. And the usual pack caveat: CC BY-NC 4.0, so non-commercial use only.

Where people get burned

  • First frame only. Like most of this pack, it grades image[0] and ignores the rest of a batch. Single images or per-frame.
  • The order is fixed. Exposure runs before levels, which runs before the tone wheels. If you're applying a big exposure bump and then wondering why your shadows masks look off, that's why - the masking happens on already-scaled luma.
  • Don't do all sixteen at once. The node is capable of way more than is tasteful, and with no previews on the sliders it's easy to drift into "technically graded, actually ruined." Grade in twos or threes, check the ColorAnalysisPlotNode scopes, repeat.

For a single-node grade it's hard to beat in this pack - it's the control room, the rest are the instruments. It's not Resolve in a box, but for finishing an AI image it's comfortably the most useful node RndNanthu ships.

Categoryrndnanthu/🎨Color Tools

Inputs (17)

NameTypeDefaultDescription
imageIMAGEβ€”
shadowsFLOAT0.00-1–1β€”
midtonesFLOAT0.00-1–1β€”
highlightsFLOAT0.00-1–1β€”
exposureFLOAT0.00-2–2β€”
hue_shiftFLOAT0.0-180–180β€”
saturationFLOAT1.000–3β€”
vibranceFLOAT0.000–3β€”
contrastFLOAT1.000–3β€”
pivotFLOAT0.500–1β€”
color_boostFLOAT1.000–3β€”
temperatureFLOAT0.00-1–1β€”
tintFLOAT0.00-1–1β€”
levels_in_blackFLOAT0.000–1β€”
levels_in_whiteFLOAT1.000–1β€”
levels_out_blackFLOAT0.000–1β€”
levels_out_whiteFLOAT1.000–1β€”

Outputs (1)

NameTypeDescription
graded_imageIMAGEβ€”