Nodes/Simple Video Effects/Color Adjustment (Image)
ComfyUI Node

Color Adjustment (Image)

Brightness/contrast/saturation in-graph

By scofano·Created 10 months ago·Updated 20 days ago· 0
Color Adjustment (Image)
  • images
  • images
  • info
brightness100
contrast100
saturation100

The most basic video-editing verbs - brighter, punchier, more saturated - are exactly the ones you'll want a dozen times per project, and this node is the in-graph version of them. Color Adjustment (Image) takes a batch of images and applies brightness, contrast, and saturation with PIL's ImageEnhance under the hood, GPU-accelerated via PyTorch when CUDA is available. It's the counterpart to the pack's file-based Color Adjustment (Video File) node: this one stays in the graph as IMAGE tensors, so you can put it in the middle of a chain rather than at the end of a file path.

The scale is the thing to internalize, and it's worth saying twice because it's unusual: 100 means no change. Not "100% strength" - neutral. Brightness 100 = original, 0 = black, 200 = twice as bright. Contrast and saturation behave the same way, 100 as the pivot. Once that clicks, the node is dead simple.

How it works

The node validates your tensor is in B, H, W, C form, converts the 0–200 scale values into PIL ImageEnhance factors, and per frame converts to PIL, applies brightness, contrast, and saturation (via the Color filter, which handles RGB→HSV conversion internally for accurate saturation), then converts back to a 0–1 tensor. It uses ComfyUI's progress bar so long batches don't feel frozen. The README claims 30–60% faster than the naive path on typical batches and up to 5x on large GPU batches - it's a small win, but a real one on long frame sequences.

Inputs and output

  • images - batched frames.
  • brightness - 0–200, default 100.
  • contrast - 0–200, default 100.
  • saturation - 0–200, default 100.

Outputs are images (same shape as input, so it slots anywhere a frame batch flows) and info - a metadata string with the applied parameters and frame count, useful for logging what a batch got.

Installing it

One of ~25 nodes in the Simple Video Effects pack:

cd ComfyUI/custom_nodes
git clone https://github.com/scofano/ComfyUI-Simple-video-effects
cd ComfyUI-Simple-video-effects
pip install -r requirements.txt

Restart ComfyUI, or install via ComfyUI Manager (search "Simple Video Effects"). No models, no ffmpeg needed - pure torch + PIL.

Common issues

The 100-means-no-change scale is where people get burned: they set brightness to 50 expecting "half strength" and get a dark frame. Read it as "percentage of original" instead - 50 brightness is 50% brightness. Also, because this uses PIL per-frame, it's a float round-trip; on long batches it's fast but not free, and if you're doing heavy color work on video you might prefer the ffmpeg-based Video File variant which bakes the grade in one pass. For in-graph tweaks and stills, this is the easy one.

CategorySimple Video Effects/Utility & Special Effects

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE
brightnessINT1000–200
contrastINT1000–200
saturationINT1000–200

Outputs (2)

NameTypeDescription
imagesIMAGE
infoSTRING