Nodes/ComfyTV/Video Color
ComfyUI Node

Video Color

A proper colorist's node, not another brightness slider

By jtydhr88·Created 4 months ago·Updated 3 days ago· 1,054
Video Color
  • video
  • video
◄force_run_token0►
◄project_id►
◄parent_output_id0►
◄exposure0.00►
◄black0.000►
◄temperature6500►
◄temp_mix1.00►
◄hue0►
◄saturation0.00►
◄vibrance0.00►
◄blackpoint0.000►
◄whitepoint1.000►
◄shadows_r0.00►
◄shadows_g0.00►
◄shadows_b0.00►
◄midtones_r0.00►
◄midtones_g0.00►
◄midtones_b0.00►
◄highlights_r0.00►
◄highlights_g0.00►
◄highlights_b0.00►
◄preserve_lightnesstrue►

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) with temp_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_lightness off 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.

CategoryComfyTV/VideoFX

Inputs (23)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
exposureFLOAT0.00-3–3—
blackFLOAT0.000-0.1–0.1—
temperatureINT65001000–40000—
temp_mixFLOAT1.000–1—
hueFLOAT0-180–180—
saturationFLOAT0.00-1–1—
vibranceFLOAT0.00-2–2—
blackpointFLOAT0.000-0.5–0.5—
whitepointFLOAT1.0000.5–2—
shadows_rFLOAT0.00-1–1—
shadows_gFLOAT0.00-1–1—
shadows_bFLOAT0.00-1–1—
midtones_rFLOAT0.00-1–1—
midtones_gFLOAT0.00-1–1—
midtones_bFLOAT0.00-1–1—
highlights_rFLOAT0.00-1–1—
highlights_gFLOAT0.00-1–1—
highlights_bFLOAT0.00-1–1—
preserve_lightnessBOOLEANtrue—
videooptCOMFYTV_VIDEO—

Outputs (1)

NameTypeDescription
videoCOMFYTV_VIDEO—