Nodes/ComfyUI-QG-Tools/Color Correct
ComfyUI Node

Color Correct

Six sliders, in the order a colourist actually reaches for them

By live1617·Created 17 days ago·Updated about 22 hours ago· 3
Color Correct
  • image
  • IMAGE
◄temperature0►
◄hue0►
◄brightness0►
◄contrast0►
◄saturation0►
◄gamma1.00►

Re-rolling a seed because "the colours look off" is the expensive way to fix a colour problem. A gamma tweak and a nudge of warmth does the same job in twenty milliseconds, deterministically, and the same way every time you run it.

That's the whole post-sampler layer in one sentence: reach for the cheap deterministic primitive before you throw another diffusion pass at it. Color Correct is that primitive for exposure and colour - six sliders, one pass, done.

What it is

A single node that takes an IMAGE and gives you back an IMAGE, with six parameters doing the work a colourist would do in order: temperature → brightness → contrast → gamma → saturation → hue. That order isn't arbitrary decoration - it's the order the node applies them in, and it's the sensible one, because you want white balance settled before you stretch contrast, and you want the tonal range locked before you start pushing saturation around.

The author names comfyui-art-venture's ColorCorrect (MIT) as the reference for the parameter split and the order, and says the implementation is a rewrite rather than a copy. The three things the rewrite is meant to fix are worth knowing because two of them are classic: a per-frame 8-bit round trip that produced banding in gradients, a saturation control that was secretly adjusting the lightness channel of HLS, and a temperature shift that brightened the image as a side effect of scaling one channel. This version stays in float end to end, works on the whole batch at once, and doesn't touch OpenCV.

The six sliders

  • temperature (−100 to 100, default 0). Negative goes blue, positive goes yellow. The three channel gains are normalised by luminance weight, so it shifts colour only and never brightness - which is the thing most hand-rolled white balance gets wrong.
  • brightness (−100 to 100). Multiplies. −100 is black, +100 doubles.
  • contrast (−100 to 100). Stretches around mid grey 0.5. −100 flattens the frame to flat grey; +100 doubles the light-to-dark spread, so highlights and shadows clip sooner.
  • gamma (0.1 to 5, default 1.0). Midtones only, both ends held. Above 1 darkens, below 1 lifts. This is the one you want when an image reads flat or washed - a power curve doesn't clip the way a multiply does.
  • saturation (−100 to 100). Mixed by luminance, so −100 is genuine black and white with the brightness intact, and +100 doubles colour intensity.
  • hue (−180 to 180). A hue rotation in HSV that leaves saturation and value alone, so red at 120 is green, not mud.

Defaults are no-ops, and the code genuinely skips each step when it's at default - gamma 1.0 with everything else at 0 returns your input byte for byte. That makes it safe to leave parked in a workflow, and it means a re-render with the same settings is a cache hit rather than a re-run.

The only output is IMAGE, same size and same batch count as what went in. If your input carries an alpha channel it comes back untouched, because the node only ever touches the first three channels.

Installing it

ComfyUI Manager → Install Custom Nodes → search ComfyUI-QG-tools. If it doesn't come back (the pack needs to be on the Comfy Registry for that listing), clone it:

cd ComfyUI/custom_nodes
git clone https://github.com/live1617/ComfyUI-QG-tools

Then restart ComfyUI properly - not just a browser refresh - and look for this in the console:

  QG-tools v0.9.7  |  38 nodes loaded  |  8 categories

There is nothing to pip install and no models to download. The pack's requirements.txt is deliberately comment-only, and this node needs nothing but torch, which you already have. Color Correct lives under QG-tools/Image.

Where people get burned

Brightness is the wrong knob for flat images. If the midtones are washed out, brightness multiplies and clips; gamma moves the midtones and holds the ends. This is the first branch of the decision tree for a reason.

Stacking brightness and contrast clips before gamma sees it. Brightness and contrast are applied first, and the value is clamped to 0–1 before the gamma step runs (gamma needs a non-negative base). So a heavy brightness push followed by a gamma lift will lose highlight detail that the gamma alone would have kept. Think about gamma first in your head, even though the node applies it fourth.

It's an image node, not a colour node for latents. It wants an IMAGE with at least three channels: a latent dict fails the type check, a 2-D mask fails the shape check, and two-channel data is rejected outright. Convert to an image first.

Contrast at the extremes isn't a subtle tool. +100 doubles the spread; anything bright goes to white and anything dark goes to black. If you're chasing "punchier", try 15–30 and a gamma nudge instead of 80 contrast.

CategoryQG-tools/Image

Inputs (7)

NameTypeDefaultDescription
imageIMAGEThe images to correct. A batch is handled in one pass, and an alpha channel is passed through untouched.
temperatureFLOAT0-100–100Temperature: negative runs cooler and adds blue, positive runs warmer and adds yellow. The three channel gains are normalised by luminance weight, so this shifts colour only and never brightness.
hueFLOAT0-180–180Hue: how many degrees to rotate the hue of the whole image. 0 leaves it alone and plus or minus 180 is a full turn; around 120 swaps red for green and green for blue, which suits a wholesale palette shift.
brightnessFLOAT0-100–100Brightness: multiplies everything by a factor. 0 keeps it, -100 goes fully black, +100 doubles the brightness.
contrastFLOAT0-100–100Contrast: stretches around mid grey 0.5. 0 keeps it, -100 flattens the whole frame to 0.5 grey, +100 doubles the light to dark spread, so highlights and shadows clip sooner.
saturationFLOAT0-100–100Saturation: blended by luminance. 0 keeps it, -100 goes pure black and white with the brightness intact, +100 doubles the colour intensity.
gammaFLOAT1.000.1–5Gamma: moves the midtones only and leaves both ends alone. 1.0 keeps it, above 1 darkens the midtones, below 1 lifts them; it holds the highlights better than plain brightness does.

Outputs (1)

NameTypeDescription
IMAGEIMAGEThe corrected images, same size and batch count as the input.