Nodes/RC Image Compositor/RC Color Balance
ComfyUI Node

RC Color Balance

The color-correction node that thinks in CMY

By kj863257·Created 11 months ago·Updated 10 months ago· 16
RC Color Balance
  • image
  • IMAGE
cyan_red0
magenta_green0
yellow_blue0
tone_rangemidtones
preserve_luminositytrue

When a color grade is just slightly off - too green in the shadows, too blue in the highlights - you don't need a curves node or a color match algorithm. You need the oldest tool in the retoucher's kit: color balance. RC Color Balance is a faithful port of Photoshop's Color Balance adjustment layer, which means it thinks in CMY opponent pairs rather than RGB channels. That's not a quirk; it's the entire point. You don't ask "how much red?" - you ask "cyan or red?" which matches how the human eye perceives color casts.

It's part of the RC Image Compositor pack, slotting in alongside the pack's other Photoshop-style adjustments (Levels, Curves, Hue/Saturation, Channel Mixer). If you've ever used Photoshop's Color Balance, you'll be home in seconds.

How it works

Three sliders, each an opponent pair:

  • cyan_red - negative pushes cyan, positive pushes red.
  • magenta_green - negative pushes magenta, positive pushes green.
  • yellow_blue - negative pushes yellow, positive pushes blue.

Each runs −100 to 100. The second key control is tone_range - shadows, midtones, or highlights - which limits the adjustment to one tonal zone. This is what separates color balance from a naive RGB tint: a global shift in the red channel moves everything, but a color-balance shift applied to shadows only lets you cool the darks while leaving the mids and highlights alone. That's the professional move for matching skin tones or separating foreground from background color-wise.

The third control is preserve_luminosity, on by default. When it's on, the node adjusts hue and saturation without shifting brightness - so you can push color hard without also making the image darker or lighter, which is the classic failure mode of naive color shifting. Leave it on unless you have a specific reason to let brightness wander.

The inputs that matter

  • image - input tensor.
  • cyan_red / magenta_green / yellow_blue - the three opponent sliders.
  • tone_range - shadows / midtones / highlights; midtones is the default and the usual starting point.
  • preserve_luminosity - keep brightness stable.

Output is a single IMAGE tensor.

How to install it

Ships with the RC Image Compositor pack:

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

Restart ComfyUI, or install via ComfyUI Manager by searching "RC Image Compositor". Deps: pillow, numpy, opencv-python.

Common issues

The beginner trap is treating it like an RGB mixer and hammering a single slider - you'll chase the cast, overshoot, and end up with a weird cross-tint. Color balance is an iterative discipline: nudge cyan_red, re-check, then balance the pair with its opposite.

Second, remember the zone limitation. If your cast is everywhere, "midtones only" won't fix it - you'll need to also touch shadows and highlights. And if the image has a white balance problem rather than a creative problem, color balance is the wrong first move; that's what RC Auto Color Correction with find_dark_light_colors is for. Color balance is for sculpting an already-exposed image, not rescuing one.

CategoryRC/Adjustments

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
cyan_redFLOAT0-100–100Cyan-Red balance (negative=cyan, positive=red)
magenta_greenFLOAT0-100–100Magenta-Green balance (negative=magenta, positive=green)
yellow_blueFLOAT0-100–100Yellow-Blue balance (negative=yellow, positive=blue)
tone_rangeCOMBOmidtonesTone range: - midtones: Midtones (main adjustment area) - shadows: Shadows (dark areas) - highlights: Highlights (bright areas)
preserve_luminosityBOOLEANtruePreserve luminosity: - True: Keep image brightness unchanged - False: Allow brightness changes

Outputs (1)

NameTypeDescription
IMAGEIMAGE