Nodes/ER VFX Nodepack/ER Color Correct
ComfyUI Node

ER Color Correct

A real grading suite in one node — Kelvin, color wheels, secondaries and a vectorscope

By esperandoelrender·Created 2 days ago·Updated 2 days ago· 0
ER Color Correct
  • images
  • images
params{}
wheels[[0,0],[0,0],[0,0]]

Most ComfyUI color tools give you one knob. ER Color Correct gives you the whole daVinci-grade, in a single node, with a live preview that updates as you drag - no re-running the workflow to see what you did. It comes from the ER VFX Nodepack by Héctor Gallego (ER Academy), a VFX artist, and it shows: the parameter list reads like a proper colorist's toolkit, not like a filter.

Which is the pitch. When an image just needs work - it's too cool, too flat, the reds are bleeding - you want the deterministic primitives, not another diffusion pass. The KB's post-processing doc makes this exact point: a gamma curve is a gamma curve, and doing color correction with img2img is the failure mode to avoid. This node is the curated version of that idea, wrapped in a grading UI.

The correction stack

The controls apply in a fixed order, and the ones a beginner actually touches are:

  • temperature - in real Kelvin, not a vague "warm/cool" slider. 6500K is neutral daylight, lower goes warm/orange, higher goes cool/blue, and it's luma-compensated so the exposure doesn't shift while you tint. It's computed from a blackbody color curve, the same math a camera's white balance uses.
  • contrast - with a pivot at 0.18 (the filmic mid-gray), plus gamma (v^(1/gamma), a true power curve - lifts shadows without clipping white), gain (master multiplier) and offset (additive lift).
  • saturation - Rec.709 luma-weighted, so 0 is genuinely monochrome and colors don't punch past their luminance.
  • hue - rotation in degrees.

Then the grading part kicks in: three color wheels for Shadows / Midtones / Highlights - drag the dot from center toward a color to tint that tonal range, luma-weighted so you don't lift or crush anything while you do it - and hue-band secondaries, which let you isolate and regrade just the reds, the cyans, whatever band, with a mask view so you can see exactly what you're touching. Grey and near-black pixels are protected from the secondaries so you don't get noise rot on skin or shadows. There's a vectorscope with a skin-tone line for the technically minded.

How the live preview works

Here's the genuinely clever bit: the preview you see in the browser is computed in JavaScript with the same math as the Python node. Tweak, see, and when you finally run the workflow the exact same correction is applied to the full-resolution image through the images output. Preview is capped at 768px for snappiness; the output is always full-res. Hold 👁 to compare with the original, Reset wipes everything, and the foldable panels keep the node from being a wall of sliders.

The schema, in brief

  • Inputs: images in; a params string and a wheels string carry the UI state (you don't type these - the node's widgets do it for you).
  • Output: images, corrected, full resolution.

Installing

ER Color Correct ships as part of the ER VFX Nodepack. In ComfyUI Manager search "ER VFX Nodepack" → install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/esperandoelrender/ComfyUI-ER-VFX-Nodepack.git

Restart, search "ER" (image/adjust category). No extra dependencies - it uses ComfyUI's own torch/numpy, with the preview running in your browser. If you have older standalone er_* packs, delete them first so nodes don't register twice.

Tip: since the preview loads automatically when your source is a Load Image that's already executed, you can grade without running at all - tweak until it looks right, then run once for the final. And because it works on frame batches too, the same workflow node grades video, which is what ER Video Color Correct formalizes for playback.

Categoryimage/adjust

Inputs (3)

NameTypeDefaultDescription
imagesIMAGE
paramsoptSTRING{}
wheelsoptSTRING[[0,0],[0,0],[0,0]]

Outputs (1)

NameTypeDescription
imagesIMAGE