Nodes/eric-color-correction/Apply Saved Correction (Eric_)
ComfyUI Node

Apply Saved Correction (Eric_)

Lock a color grade once, stamp it on every frame of a video batch

By EricRollei·Created 4 months ago·Updated 4 months ago· 4
Apply Saved Correction (Eric_)
  • image
  • wb_correction_matrix
  • skin_correction_params
  • image

Here's the problem this node exists to solve: if you run ColorCastRemover and SkinToneCorrector independently on every frame of a video, each frame gets a slightly different correction, and the result flickers like a bad fluorescent light. Apply Saved Correction (Eric_) is the answer - you grade one reference frame, capture the correction values, and replay the identical math on the whole batch. Temporal consistency without re-measuring anything.

How it works. It's deliberately boring, and that's the point. You feed it your image batch plus one or both of the two payloads this pack's correction nodes output:

  • wb_correction_matrix - the RGB scale factors from ColorCastRemover's correction_matrix output.
  • skin_correction_params - the rotation angle and saturation from SkinToneCorrector's correction_params output.

It applies the white balance scales first, then the skin chrominance rotation, to every frame. The math is the same on every frame because the parameters are fixed - that's exactly why it doesn't flicker.

The workflow, concretely: grade frame 0 with ColorCastRemover + SkinToneCorrector, wire their two payload outputs here, and feed the full video batch into this node's image input. One output: the corrected image batch, ready for a VAE decode and video combine.

The gotchas. Both payload inputs are optional, and that's a trap wearing a friendly face. If you wire neither, the node is a silent pass-through - your image comes back uncorrected and nothing tells you. Always hook at least one payload, and don't expect this to invent a correction; it only replays what you captured.

Second, those payload wires are CONDITIONING-typed, which looks alarming. They're not conditioning - no text encoder, no sampler involvement. This pack reuses the CONDITIONING type as a generic container for a dict (a common ComfyUI hack), and the node unpacks the dict internally. So: these wires go into ApplySavedCorrection and nowhere else. Drop them into a KSampler and you'll get confusing nonsense.

Installing it. It's part of the Eric Color Correction pack:

cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Eric_Color_Correction_ComfyUI
cd Eric_Color_Correction_ComfyUI
pip install -r requirements.txt

Restart ComfyUI (or install via ComfyUI Manager, searching "Eric Color Correction"). No model downloads, no GPU pressure - it's per-pixel math on tensors. Note the dual license before commercial use: non-commercial CC BY-NC-style by default, separate paid commercial license for work you sell.

One honest limitation, so you're not blindsided: this is a global correction replay. It doesn't track the subject between frames, so if the lighting changes mid-video or the skin genuinely shifts color, the locked parameters will eventually drift from reality. For steady shots - talking heads, static product video - it's exactly what you want. For a camera whip-pan through a sunset, you'd re-grade in segments instead.

CategoryEric_/Color Correction

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
wb_correction_matrixoptCONDITIONING
skin_correction_paramsoptCONDITIONING

Outputs (1)

NameTypeDescription
imageIMAGE