〽️ Image Ops Color Color Correct
A color-correction node that thinks it lives in a grading suite
- image
- mask
- image
- mask
ImageOps Color Correct is the node that makes ComfyUI feel like a grading suite for a few minutes. It takes the usual brightness/contrast/saturation trio and then goes way past it: temperature, tint, vibrance, gamma, hue rotation, and - the part that sets it apart - per-range corrections for shadows, midtones, and highlights. Instead of building a ladder of separate adjustment nodes, you get the whole grading panel in one place, with a live preview so you're not queueing a render to see what +5 contrast looks like. It's the flagship of the ComfyUI-Majoor-ImageOps pack.
The controls that matter most
All processing happens in linear float32 space, which is the right call - contrast and gamma behave like a colorist expects when you're not fumbling around in gamma-encoded space. The headline set, all on a −100…100 scale:
temperatureandtint- warm/cool and green/magenta balance. This is your "make it feel like golden hour" and "kill the green cast from a bad light" lever.hue(−180…180) - full hue rotation, for stylized shifts or fixing a baked-in color cast.brightness,contrast,saturation,vibrance- the standard quartet. Note vibrance is separate from saturation: it boosts the less-saturated colors, so skin tones don't go nuclear while the sky pops.gamma(0.2–2.2) - midtone lift/compress, the one knob you'll grab more than any other.
The shadow/midtone/highlight section
This is the differentiator. For each of shadows, midtones, and highlights you get a *_amount (how much of the range the correction applies to) plus its own hue, temperature, tint, brightness, contrast, saturation, vibrance, and gamma. In practice you'll mostly use two things from here: shadows_* to lift or cool the blacks, and highlights_* to warm or tame the top end. That's a classic filmic look - warm highlights, slightly cool shadows - and you can dial it in entirely on this node.
Inputs and outputs
Inputs are image (IMAGE or VIDEO frame source) and an optional mask with invert_mask if you only want to grade part of the frame. Outputs are image and mask, both batch-friendly - a full clip grades in one pass, which is exactly what you want when every frame needs to match. bypass gives you a clean on/off for A/B comparison.
Install
ComfyUI Manager (search "ComfyUI-Majoor-ImageOps"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/MajoorWaldi/ComfyUI-Majoor-ImageOps
Restart and hard-refresh the browser (Ctrl+F5 / Cmd+Shift+R). No models, no heavy dependencies.
Where it gets fiddly
The honest gotcha: this node has a lot of sliders, and the panel auto-collapses controls when there are more than four - double-click any slider to reset it to default, which is the escape hatch when you've twisted twenty knobs and want to start over. The other trap is the split-tone section confusing people into thinking they need to touch all of it. You don't. Ignore the per-range hue sliders until you're doing serious stylization; temperature + contrast + gamma on the main panel will get 90% of jobs done. And remember it operates on linear data - a gamma of 1.0 is neutral, so don't read the 0.2–2.2 range as a 0–100 scale.
Inputs (39)
| Name | Type | Default | Description |
|---|---|---|---|
| bypass | BOOLEAN | false | — |
| temperature | FLOAT | 0-100–100 | — |
| tint | FLOAT | 0-100–100 | — |
| hue | FLOAT | 0-180–180 | — |
| brightness | FLOAT | 0-100–100 | — |
| contrast | FLOAT | 0-100–100 | — |
| saturation | FLOAT | 0-100–100 | — |
| vibrance | FLOAT | 0-100–100 | — |
| gamma | FLOAT | 1.00.2–2.2 | — |
| shadows_hue | FLOAT | 0-180–180 | — |
| shadows_amount | FLOAT | 00–100 | — |
| midtones_hue | FLOAT | 0-180–180 | — |
| midtones_amount | FLOAT | 00–100 | — |
| highlights_hue | FLOAT | 0-180–180 | — |
| highlights_amount | FLOAT | 00–100 | — |
| shadows_temperature | FLOAT | 0-100–100 | — |
| shadows_tint | FLOAT | 0-100–100 | — |
| shadows_contrast | FLOAT | 0-100–100 | — |
| shadows_saturation | FLOAT | 0-100–100 | — |
| shadows_vibrance | FLOAT | 0-100–100 | — |
| shadows_gamma | FLOAT | 1.000.2–2.2 | — |
| shadows_brightness | FLOAT | 0-100–100 | — |
| midtones_temperature | FLOAT | 0-100–100 | — |
| midtones_tint | FLOAT | 0-100–100 | — |
| midtones_contrast | FLOAT | 0-100–100 | — |
| midtones_saturation | FLOAT | 0-100–100 | — |
| midtones_vibrance | FLOAT | 0-100–100 | — |
| midtones_gamma | FLOAT | 1.000.2–2.2 | — |
| midtones_brightness | FLOAT | 0-100–100 | — |
| highlights_temperature | FLOAT | 0-100–100 | — |
| highlights_tint | FLOAT | 0-100–100 | — |
| highlights_contrast | FLOAT | 0-100–100 | — |
| highlights_saturation | FLOAT | 0-100–100 | — |
| highlights_vibrance | FLOAT | 0-100–100 | — |
| highlights_gamma | FLOAT | 1.000.2–2.2 | — |
| highlights_brightness | FLOAT | 0-100–100 | — |
| invert_mask | BOOLEAN | false | — |
| imageopt | IMAGE,VIDEO | Images/Video input. Accepts IMAGE batches and VIDEO frame sources. | |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |