Selective Color
The Old Photoshop Trick, Done Per-Zone
- video
- video
Selective color is that grade every colorist secretly loves and every beginner skips because Photoshop buried it. The trick: instead of adjusting hue or saturation globally, you nudge one color zone - reds, cyans, greens, and so on - without touching anything else. ComfyTV's Selective Color stage is a faithful port, under ComfyTV/VideoFX, and it's the quietest way to fix a cast in footage without nuking the whole grade.
The inputs are a sc_method dropdown - absolute (default) or relative - plus nine zone sliders: sc_reds, sc_yellows, sc_greens, sc_cyans, sc_blues, sc_magentas, sc_whites, sc_neutrals, sc_blacks. Each runs -1 to 1 (default 0 = untouched). You add or remove the opponent color inside a zone: want cooler shadows? Pull cyan up in sc_blacks (or red down). Skin tones too green? Nudge magenta in sc_yellows/sc_reds. Because it works inside the zone, the effect is surgical - adjust reds, and the grass doesn't move.
sc_method decides how the zone sliders apply. Absolute is the classic Photoshop mode - a fixed adjustment per zone regardless of the source pixel's magnitude. Relative scales the adjustment with how strongly a pixel belongs to that zone, so a mild red pixel gets a mild correction and a saturated red gets the full amount. Relative is usually the safer default for footage; absolute is where you go to force a decisive shift. Video in (optional video), video out, rendered through the pack's shared FX engine - live preview in the node, single-pass bake when you run an FX Chain.
The mental model
Think of the nine zones as nine buckets, and each slider as "add/subtract the opponent color inside this bucket." If all sliders are 0, the node short-circuits and passes the video through untouched - which also tells you the common failure mode: nothing happens because you forgot to move a slider. The other failure mode is expecting hue change - selective color changes the amount of the opponent channel within a zone, not hue. If you want to actually rotate greens toward cyan, that's a curves or hue-rotate node; this one is for tasteful cast correction and zone-specific saturation shaping.
Install
With the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI; under ComfyTV → VideoFX. ComfyUI Manager: search "ComfyTV". Desktop/macOS: clone into the running instance's absolute custom_nodes (startup-log path), unwrap any ComfyTV/ComfyTV/ nesting, full backend restart. No models, no extra dependencies.
Troubleshooting
- Nothing changes. All nine sliders at 0 = identity pass by design. Move one.
- Grade looks heavy-handed. You're in
absolutepushing a zone hard. Switch torelativeor halve the slider - a 0.1–0.2 nudge is usually plenty on footage. - Skin tones get blotchy. You're adjusting a zone that overlaps skin heavily (
sc_reds/sc_yellows). Dial back and lean onsc_neutralsinstead, which hits midtones more gently.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| sc_method | COMBO | absolute | 2 options: absolute, relative |
| sc_reds | FLOAT | 0.00-1–1 | — |
| sc_yellows | FLOAT | 0.00-1–1 | — |
| sc_greens | FLOAT | 0.00-1–1 | — |
| sc_cyans | FLOAT | 0.00-1–1 | — |
| sc_blues | FLOAT | 0.00-1–1 | — |
| sc_magentas | FLOAT | 0.00-1–1 | — |
| sc_whites | FLOAT | 0.00-1–1 | — |
| sc_neutrals | FLOAT | 0.00-1–1 | — |
| sc_blacks | FLOAT | 0.00-1–1 | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |