Batch Color Corrector
One click of color grading across every frame of a video
- images
- reference_image
- mask
- images
- palette_data
- histogram
- palette_image
- frame_count
The tell that a video was generated frame-by-frame instead of in one shot is usually color: each segment has its own white balance and saturation, and the cuts are visible. Batch Color Corrector exists to kill that flicker. It processes an entire frame sequence at once with the same correction applied consistently, so your iterative video looks like it was shot by one camera instead of fifteen.
Despite the "AI-powered" in its description, don't expect a neural network drop-in. It's a statistical color engine - histogram and percentile analysis, HSV-space adjustments - implemented in torch, which means it can run on GPU and batch-process frames efficiently. That's actually a good thing: it's fast, deterministic, and needs no model download.
How it works
You feed it images (a batch, e.g. your accumulated video frames) and pick a mode:
- Auto - analyzes each batch's brightness and saturation statistics and derives corrections automatically (percentile-based midtone analysis, saturation/contrast heuristics). The fastest path to "less ugly, more consistent."
- Preset - applies one of 30 named looks (
Natural,Warm,Teal & Orange,Film Noir,Golden Hour,Cyberpunk…), blended byeffect_strength. - Manual - full control:
white_balance_strength,warmth,vibrancy,brightness,contrast,tint,lift,gamma,gain,noise. All run -1.0 to 1.0 exceptnoise(0 to 1).
The two that matter most for a beginner are frames_per_batch and use_gpu. The tooltip spells the trade-off out: 1–4 frames per batch is best quality but slow; 8–16 is the recommended balance; 32–64 is fastest but eats VRAM. use_gpu trades VRAM for speed, CPU uses system RAM instead.
The reference-image trick
The underrated feature is reference_image + reference_strength. Feed it a frame you like - from a previous generation you want to match, or a real shot you're matching against - and the correction leans toward that reference's color character. That's the workflow-saver for keeping later iterations consistent with your first segment: grab frame 0 of the first pass as the reference and every subsequent batch gets pushed toward it.
Outputs
images- the corrected batch (this is the one you use).palette_data/palette_image/histogram- extracted palette and histogram of the middle frame, handy whenextract_paletteis on.frame_count(INT) - how many frames went through.
It's marked as an output node, so it can stand at the end of a branch.
Where it fits
This is squarely aimed at the pack's iterative video workflows - run it per iteration with IterationSwitch so correction only kicks in after the first pass, and use the reference-image match to keep each segment locked to the first. It's also a decent one-stop for batch color-grading a folder of stills before training.
Installing
Same pack, same story - ComfyUI Manager, search "Mickmumpitz", install, restart:
cd ComfyUI/custom_nodes
git clone https://github.com/mickmumpitz/ComfyUI-Mickmumpitz-Nodes
Needs numpy, Pillow, opencv-python (cv2 is optional and only used if present - the torch path works without it). No models to download.
One honest caveat: "Auto" is a heuristic, not a film-grade colorist. For subtle corrections it's great; for a scene that needs real grading you'll want Preset or Manual. And keep frames_per_batch at 8–16 on a mid-range card - cranking it to 64 to save time is exactly when the VRAM spike bites.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| mode | COMBO | Auto | 3 options: Auto, Preset, Manual |
| frames_per_batch | INT | 161–64 | Batch Size Guide: 1-4: Best Quality but Slow 8-16: Balanced (recommended) 32-64: Fastest but Resource Heavy |
| use_gpu | BOOLEAN | true | GPU: Faster but uses VRAM. CPU: Slower but uses system RAM. |
| ai_analysisopt | BOOLEAN | true | — |
| presetopt | COMBO | Natural | 30 options: Natural, Warm, Cool, High Key, Dramatic, Epic Fantasy, +24 |
| effect_strengthopt | FLOAT | 0.40–1 | — |
| enhancement_strengthopt | FLOAT | 0.80–1.5 | — |
| adjust_for_skin_toneopt | BOOLEAN | true | — |
| white_balance_strengthopt | FLOAT | 0.0-1–1 | — |
| warmthopt | FLOAT | 0.0-1–1 | — |
| vibrancyopt | FLOAT | 0.0-1–1 | — |
| brightnessopt | FLOAT | 0.0-1–1 | — |
| contrastopt | FLOAT | 0.0-1–1 | — |
| tintopt | FLOAT | 0.0-1–1 | — |
| liftopt | FLOAT | 0.0-1–1 | — |
| gammaopt | FLOAT | 0.0-1–1 | — |
| gainopt | FLOAT | 0.0-1–1 | — |
| noiseopt | FLOAT | 0.00–1 | — |
| extract_paletteopt | BOOLEAN | false | — |
| reference_imageopt | IMAGE | — | |
| reference_strengthopt | FLOAT | 0.50–1 | — |
| maskopt | MASK | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| palette_data | STRING | — |
| histogram | IMAGE | — |
| palette_image | IMAGE | — |
| frame_count | INT | — |