Selective Color
Photoshop's deadliest grading tool, reborn as a node
- image
- mask
- image
- mask
- selective_color_info
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 rangesoftness(20°) - the width of the feather at the range edges, so the correction bleeds off gentlyamount(1.0) - wet-dry for the whole operationpreserve_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 resultmask- 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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings_json | STRING | {"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} | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| selective_color_info | STRING | — |