Nodes/NN-custom-nodes/Image Adjust
ComfyUI Node

Image Adjust

One node for all your color-correction chores

By bandifiu·Created about a month ago·Updated about a month ago· 0
Image Adjust
  • image
  • image
contrast0.00
brightness0.00
saturation1.00
red0.00
green0.00
blue0.00

Most of the time an image comes out of the sampler and needs a nudge before it's done: a little more contrast here, the highlights pulled back, skin tones slightly less orange, or the whole thing desaturated to look moodier. You can assemble that from a chain of dedicated nodes, or you can drop in NNImageAdjust and do all of it in one place with six sliders.

What it is

"Image Adjust" is the combined color-correction node in the ComfyUI-NN-custom-nodes pack - the README's words: "Combined image adjustment node" supporting brightness, contrast, saturation and RGB channel adjustments. If you own this pack you're meant to reach for it instead of three separate nodes, and it replaces the trio of NNImageAdjustContrast, NNImageAdjustColor and saturation work in one shot.

How it works

The implementation is refreshingly plain, and reading it tells you exactly what each slider does to your pixels:

  • brightness is additive - a constant offset added to every pixel. It shifts everything including blacks, so it flattens contrast and clips highlights fast. Keep it small.
  • contrast is multiplicative around the mean luminance: it computes the per-image average luma, then scales each pixel's distance from that mean by 1 + contrast. Contrast 0 is a no-op; positive values stretch apart, negative values compress.
  • saturation blends each pixel toward its luma value - 1.0 is unchanged, 0.0 is full grayscale, above 1.0 pushes color. Set it to -1 and you get a hard inversion of the luma blend, so in practice 0–1.5 is the usable band.
  • red / green / blue are multiplicative per-channel gains: each channel is scaled by 1 + value. Slightly negative red is the classic "fix skin that's too warm" move.

Every adjustment is applied to the 0–1 float tensor and the result is clamped to [0, 1], so you can't blow out to garbage - values just clip, the same way they would in Photoshop.

The inputs that matter

Six sliders, all with sane defaults (all zeros except saturation at 1.0, meaning "no change"). The ones you'll actually touch:

  • contrast - range −0.5 to +0.5. +0.1 to +0.2 is a gentle pop; don't go hunting for more.
  • brightness - range −0.5 to +0.5. Remember it's additive, so it's for global exposure shifts, not shadow lifting.
  • saturation - 1.0 default, 0 to kill the color entirely.
  • red/green/blue - the channel gains for white balance fixes.

Output is a single image socket, same batch and dimensions as the input, ready to feed a preview or a save node.

When to reach for it

This is a deterministic, millisecond, no-model operation - the exact layer the KB's post-processing doc tells you to use instead of "fixing color with img2img." Flat output, too-warm skin, a composition that wants a desaturated grade: all here, instantly. Where it won't help is matching colors between two images (that's the reference-statistics job of NNContrastAdjustRef in the same pack), or proper exposure curves - this is brightness and contrast, not gamma.

Installing and using

It's part of the bandifiu/ComfyUI-NN-custom-nodes pack:

cd ComfyUI/custom_nodes
git clone https://github.com/bandifiu/ComfyUI-NN-custom-nodes

then restart ComfyUI (or use Manager and search "NN-custom-nodes"). No model downloads, just torch/numpy/pillow. This being one node in a bigger pack, you'll get the pack's other utilities alongside - the profiler and wildcard processor come with it.

One habit worth picking up: because every slider is a widget with a smooth step, you can convert any of them to an input and drive them from a scheduler node if you want the grade to vary across a batch or over video frames. The node doesn't care where the values come from.

CategoryNN/image

Inputs (7)

NameTypeDefaultDescription
imageIMAGE
contrastFLOAT0.00-0.5–0.5
brightnessFLOAT0.00-0.5–0.5
saturationFLOAT1.00-1–2
redFLOAT0.00-0.5–0.5
greenFLOAT0.00-0.5–0.5
blueFLOAT0.00-0.5–0.5

Outputs (1)

NameTypeDescription
imageIMAGE