Nodes/MKRShift_Nodes/Selective Color
ComfyUI Node

Selective Color

Photoshop's deadliest grading tool, reborn as a node

By criskb·Created 7 months ago·Updated 5 months ago· 0
Selective Color
  • image
  • mask
  • image
  • mask
  • selective_color_info
settings_json{"range_mode":"blues","custom_hue_center":220.0,"custom_hue_width":30.0,"hue_shift":0.0,"sat_shift":0.2,"value_shift":0.0,"softness":20.0,"amount":1.0,"preserve_luma":true,"mask_feather":12.0,"invert_mask":false}

Selective color is the grading technique every photographer leans on and nobody can explain to their friends: you isolate a hue family - just the blues, just the reds - and shift its hue, saturation, or value without touching anything else. Skies get richer without your skin tones going orange; product colors get dialed in without the background shifting. x1SelectiveColor brings that exact Photoshop/print-historically workflow to ComfyUI, and it's one of the pack's VFX/Concept nodes worth knowing.

What separates this from a hue-shift filter is the isolation math. It builds a soft hue window and only acts inside it, so the boundary between "the blues" and "the cyans next to them" fades naturally instead of cutting hard edges.

How it works

Pick your target with range_mode, straight from the classic six: reds, yellows, greens, cyans, blues, magentas - or custom, where you set custom_hue_center and custom_hue_width yourself. Then apply shifts:

  • hue_shift - rotate hue within the range (make the sky more cyan)
  • sat_shift (default 0.20) - boost or cut saturation in the range (richer reds)
  • value_shift - brighten or darken within the range
  • softness (20°) - the width of the feather at the range edges, so the correction bleeds off gently
  • amount (1.0) - wet-dry for the whole operation
  • preserve_luma (on) - keep tonal structure while the color shifts. This is what stops a selective saturation boost from making the image look brighter instead of more colorful

Settings live in a settings_json string, the pack's house style. The default is a blue-range saturation lift - a tasteful starting point that demonstrates the effect immediately.

Inputs and outputs

Required: image and settings_json. Optional: mask for restricting the selective correction to part of the frame on top of the hue range.

  • image - the corrected result
  • mask - the effective influence mask (the hue range × optional mask, after feathering)
  • selective_color_info - summary string of the resolved range and settings

Where it fits

It's the precision tool in the pack's color stack. Where x1PaletteMap makes big directional look decisions, x1SelectiveColor is for surgical moves: deepen the sky, push the product toward brand red, pull magenta out of skin without desaturating the whole frame. The mask output is genuinely useful here - wire it to a grade and you get the "only these hues" selection as a usable mask for even more control downstream.

The custom range mode is where it stops being a preset tool and becomes a real one: set a narrow custom_hue_width around a problematic color and you can target it with surgical precision that no global saturation slider can touch.

Installing it

ComfyUI Manager (search "MKRShift Nodes") or:

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart, no requirements, no model downloads, no ffmpeg. As with every node in this pack: big repo, small node. If you grade regularly, the Color and VFX/Concept branches together justify the install.

Where people get burned

Ignoring softness. With softness near zero, the range edges cut hard and you get banding along the boundary - skin that suddenly stops being corrected halfway across a cheek. The other classic: forgetting preserve_luma exists, cranking sat_shift on a highlight, and wondering why the image brightens instead of just getting more colorful. Turn luma preservation on for anything that isn't a deliberate stylize.

CategoryMKRShift Nodes/VFX/Concept

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"range_mode":"blues","custom_hue_center":220.0,"custom_hue_width":30.0,"hue_shift":0.0,"sat_shift":0.2,"value_shift":0.0,"softness":20.0,"amount":1.0,"preserve_luma":true,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
selective_color_infoSTRING