Video Color
A proper colorist's node, not another brightness slider
- video
- video
Most "color" nodes in ComfyUI are a brightness and contrast slider with a coat of paint. Video Color is not that. It's the node you reach for when an AI render comes out looking like it was graded by a vending machine - too warm, milky shadows, no separation between tones - and you want to fix it the way an actual colorist would.
It's a ComfyTV VideoFX stage with the pack's canvas model: own Run button, snapshot output, and FX-chain participation so you can preview live and render once.
The inputs, grouped the way you'll actually use them
- Exposure and level:
exposure(−3 to 3, default 0),black(−0.1 to 0.1),blackpoint(−0.5 to 0.5),whitepoint(0.5 to 2, default 1). Exposure moves the whole midtone range like an f-stop; blackpoint/whitepoint set where the blacks clip and the whites sit. - White balance:
temperature(1000–40000 K, default 6500) withtemp_mix(0–1) to blend how hard it applies. The classic "too orange, cool it down" fix. - Saturation family:
hue(−180 to 180),saturation(−1 to 1),vibrance(−2 to 2). Vibrance is the one that protects skin tones while boosting everything else - reach for it before plain saturation, which will happily push faces toward the sun. - The wheel:
shadows_r/g/b,midtones_r/g/b,highlights_r/g/b(−1 to 1 each). This is the lift-gamma-gain structure: tint the shadows one way, the highlights another, independently. - preserve_lightness (default on) - when you tint with the wheel, keep the luminance steady so you're shifting color without shifting brightness.
The project_id / parent_output_id / force_run_token inputs are internal frontend plumbing - ignore them.
How it works
This is a real color-grade node in the "color wheels" tradition: nine zone-per-channel controls arranged as shadow/midtone/highlight wheels, plus exposure, temperature, and point controls on top. The pack's own docs call the wheel setup lift-gamma-gain, which is the pro vocabulary for "dark, middle, and bright tones get independent color." That separation is the whole point - a warm highlight and a cool shadow can coexist, which is exactly the look flat sliders can't produce.
Install
ComfyTV ships ~190 stages in one pack; installing the pack gives you this node.
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI fully and find it under ComfyTV → VideoFX. ComfyUI Manager also finds it by searching "ComfyTV". No model downloads, no extra Python deps - it's deterministic color math on the clip. On ComfyUI Desktop or macOS, clone into the running instance's absolute path from the startup log rather than trusting the relative cd.
Troubleshooting
- Colors shift but the image gets darker. Toggling
preserve_lightnessoff lets wheel tints drag luminance with them; keep it on unless you want that. - "Saturation" makes faces glow. Switch to
vibrance- that's literally the knob designed to not do that. - The grade looks flat. You're probably using exposure alone. Add a blackpoint/whitepoint pass to set contrast first, then wheel the shadows and highlights separately.
It's more knobs than a beginner wants, but that's the point: this is the one color node in the pack you'd actually use to finish a clip.
Inputs (23)
| 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. |
| exposure | FLOAT | 0.00-3–3 | — |
| black | FLOAT | 0.000-0.1–0.1 | — |
| temperature | INT | 65001000–40000 | — |
| temp_mix | FLOAT | 1.000–1 | — |
| hue | FLOAT | 0-180–180 | — |
| saturation | FLOAT | 0.00-1–1 | — |
| vibrance | FLOAT | 0.00-2–2 | — |
| blackpoint | FLOAT | 0.000-0.5–0.5 | — |
| whitepoint | FLOAT | 1.0000.5–2 | — |
| shadows_r | FLOAT | 0.00-1–1 | — |
| shadows_g | FLOAT | 0.00-1–1 | — |
| shadows_b | FLOAT | 0.00-1–1 | — |
| midtones_r | FLOAT | 0.00-1–1 | — |
| midtones_g | FLOAT | 0.00-1–1 | — |
| midtones_b | FLOAT | 0.00-1–1 | — |
| highlights_r | FLOAT | 0.00-1–1 | — |
| highlights_g | FLOAT | 0.00-1–1 | — |
| highlights_b | FLOAT | 0.00-1–1 | — |
| preserve_lightness | BOOLEAN | true | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |