Nodes/MachinePainting Nodes/πŸ‘Ύ Selective Color Pro
ComfyUI Node

πŸ‘Ύ Selective Color Pro

Photoshop-style CMYK color grading β€” target the reds, leave the blues alone

By machinepaintingΒ·Created 10 months agoΒ·Updated 4 months agoΒ· 9
πŸ‘Ύ Selective Color Pro
  • image
  • mask
  • IMAGE
β—„target_colorredsβ–Ί
β—„cyan0β–Ί
β—„magenta0β–Ί
β—„yellow0β–Ί
β—„black0β–Ί
β—„invert_maskfalseβ–Ί

The problem with most color sliders is they're global: push red up and everything gets redder, including the sky you liked. Photoshop's Selective Color has a better idea - you pick a color range (reds, yellows, greens, cyans, blues, magentas, whites, neutrals, blacks) and adjust only that range's ink mix. πŸ‘Ύ Selective Color Pro brings that exact workflow to ComfyUI: one target color, four CMYK sliders, and a smooth falloff so the adjustment blends naturally instead of hard-clipping.

How it works

The node computes a smooth selection mask for your chosen target_color using RGB color math - chroma, saturation, and lightness per-pixel - so "reds" isn't a hard bin but a weighted falloff that also catches oranges and leaning-magenta reds. Then it applies the four CMYK-style sliders - cyan, magenta, yellow, black - each βˆ’100 to +100, only within that mask. Because the mask is smooth, you get Photoshop's natural result: the core of the color range shifts hardest, the edges fade out, nothing pops.

The mechanism is grounded in the source: get_color_mask builds the per-range mask from channel differences (e.g. red dominance = (r βˆ’ max(g,b)) / chroma, times saturation), and apply_cmyk_adjustment applies the ink changes through that mask. No hidden model, no API - pure, reproducible pixel math, which is exactly what you want in a color-grading step.

Inputs that matter

Required: image, target_color (the 9-range dropdown), and the four sliders. Optional: mask (limit the adjustment to a region) and invert_mask.

The one thing to internalize: this node adjusts one range at a time. Unlike Photoshop's persistent per-range panel, you set target_color to "reds," dial the sliders, then switch to "neutrals" for the next pass. To build a multi-range grade, chain two Selective Color Pro nodes in series - each one's output feeds the next, and the order becomes part of your grade. There's a Reset-All convenience in the pack's UI so you can zero the sliders without hunting each one back to 0.

When you'd reach for it

This is the precise tool for the "grade the skin, don't touch the background" move - push yellows/magentas down in the reds range to clean up skin tones without shifting the scene - or for teal-and-orange work where you deepen the cyans in shadows and warm only the highlight range. It sits naturally with the pack's other color nodes: run Curves Adjust Pro for tonal shape, then Selective Color Pro for targeted hue work, then LUT Apply for the final look. Compared to a blind "saturation" slider, it's surgical; compared to a full curves node, it's friendlier.

Installing it

Ships in the MachinePainting Nodes pack. ComfyUI Manager β†’ search "MachinePaintingNodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/machinepainting/ComfyUI-MachinePaintingNodes.git

Restart ComfyUI. The pack's dependencies (opencv-python-headless, numpy<3, rembg) are only needed for its other nodes - Selective Color Pro is numpy math and runs instantly on CPU.

Gotchas

  • Range definitions aren't Photoshop's exactly. The RGB falloff is "smooth like Photoshop," not bit-identical to it - if you're matching a specific commercial grade, expect to re-tune the slider values.
  • Black slider is "keep black," not "add contrast." In CMYK selective color, raising black adds black ink to the range, which darkens and desaturates it. That trips up people expecting a levels-style black-point control.
  • Chain order matters. Adjusting "reds" then "neutrals" gives different results than the reverse. If a grade feels muddy, swap the order - the second node operates on the first's output.

For targeted, natural-looking color grading without a wall of nodes, this is the pack's best color tool - and the mask input makes it genuinely compositing-ready.

CategoryMachinePaintingNodes/Color

Inputs (8)

NameTypeDefaultDescription
imageIMAGEβ€”
target_colorCOMBOreds9 options: reds, yellows, greens, cyans, blues, magentas, +3
cyanFLOAT0-100–100β€”
magentaFLOAT0-100–100β€”
yellowFLOAT0-100–100β€”
blackFLOAT0-100–100β€”
maskoptMASKβ€”
invert_maskoptBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”