Nodes/ComfyTV/Color Grade
ComfyUI Node

Color Grade

Six instant color tools that never touch the queue

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Color Grade
  • image
  • image
force_run_token0
project_id
parent_output_id0
grade_state

Most "color grade" nodes in ComfyUI route pixels through a model or at least a queue. Color Grade does neither. It's a set of six real-time GLSL color tools running entirely in your browser - pick an effect, move sliders or curves, and the preview updates instantly. No ▶ Run, no ComfyUI queue, no diffusion models. It's the fastest way in the pack to fix a flat generation, match a product's color temperature, or put a unified "film look" across shots before anything heavier happens.

That "instant" framing is the whole point, and it lines up with what the KB says about this layer: almost none of post-processing is AI, and the right instinct is to reach for the deterministic, free, millisecond operation instead of burning a diffusion pass on work a curve does perfectly. This node is that instinct made into a node.

How it works

The Python side is a formality - the stage stores its state in a single hidden grade_state input (JSON of the selected effect plus slider values, driven by the Vue panel) and passes the image through. The real work is a WebGL fragment shader: the pack's docs describe useGLSLRenderer loading the selected .frag shader and rendering in your browser's GPU. Because the result is a COMFYTV_IMAGE snapshot, downstream generative stages still need their own ▶ Run to pick up the graded image - the docs are explicit that after grading you re-run the next stage.

The six effects

  • Brightness / Contrast - overall exposure.
  • Color Adjustment - temp, tint, vibrance, saturation: white balance.
  • Color Balance - per-channel shadow/mid/highlight with a preserve-luminosity option: split toning.
  • Hue / Saturation - selective HSL with a master-or-per-color mode, plus colorize.
  • Curves - master / R / G / B curve editing.
  • Levels - Photoshop-style in/out black/white and gamma, per channel.

Input is image (COMFYTV_IMAGE), output is image (COMFYTV_IMAGE). One effect per node - stack nodes or chain them if you need more.

Installing it

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Restart the ComfyUI backend (a real restart, not a tab refresh); nodes appear under the ComfyTV category. ComfyUI Manager finds the pack by searching "ComfyTV". The README's two recurring gotchas: on Desktop/macOS/multi-install setups the relative cd can clone into the wrong instance - read the startup log for the base path it loaded and clone into that absolute path, quoted - and the first level of custom_nodes/ComfyTV/ must contain __init__.py, not a nested ComfyTV/ComfyTV/ folder. No Python dependencies to install; the GLSL runs in your browser.

Troubleshooting and tips

  • Curves not editing? Make sure you've selected the Curves effect, then click on the curve to add points - the pack's FAQ is specific about this being the usual stumble.
  • Upscale still looks ungraded? It's reading the last snapshot. Re-run the Upscale (or any downstream generative stage) after you grade.
  • This isn't Relight. Color Grade is traditional, instant grading; Relight is AI relighting with a Run and a workflow. If you want the lighting itself changed, that's the other node.
  • One effect per node. For a temp+curves look, chain two Color Grade nodes rather than hunting for a combined mode.
CategoryComfyTV/Image

Inputs (5)

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.
grade_stateSTRINGJSON of the selected effect + slider values. Hidden — driven by the Vue panel.
imageoptCOMFYTV_IMAGE

Outputs (1)

NameTypeDescription
imageCOMFYTV_IMAGE