Color Correction Analyzer (Eric_)
Finally, a real vectorscope inside ComfyUI — and the skin numbers to match
- image
- skin_mask
- vectorscope
- skin_deviation_deg
- skin_ire
- cast_consistency
- skin_pixel_count
- diagnostics_text
If you've ever tried to fix a portrait's color by eye and given up, you're not the one who's wrong - ComfyUI just doesn't ship a vectorscope. Color Correction Analyzer (Eric_) fixes that. It renders the kind of scope a broadcast colorist stares at, then hands you the actual numbers behind it: how far your skin tone sits off the line, its luminance in IRE, and how consistent the lighting is across the face. It's the "measure twice" half of a color workflow, and it's meant to sit at the front of this pack's chain: build a skin mask, analyze, correct, re-analyze.
It's also a decent hint at who wrote this pack. The author's other life is photography (the historic.camera email address isn't an accident), and it shows - skin tone line at 127°, IRE units, L* space. This isn't a filter that slaps a teal-orange LUT on; it's someone translating a broadcast monitor into nodes.
How it works. The node converts your image to YCbCr and plots the chrominance of pixels on the scope. Gray dots are the whole frame, yellow dots are the skin pixels, the green line is the standard skin-tone line at 127°, and the red crosshair is the confidence-weighted center of the skin's color. Concentric circles mark 25/50/75/100% saturation targets so you can eyeball saturation without a second tool. The color science here is the classic one: healthy skin lives along that 127° line, and its brightness should sit around 70 IRE.
The inputs that matter. You mostly touch two things:
image- feed the shot you want to grade.skin_mask- optional, but do yourself the favor. Without it the analyzer measures the whole frame, and a background-tinted reading is noise. Wire in a mask from FaceParsingSkinMask or HumanParsingSkinMask and the yellow cloud means something real.
The rest are display toggles: scope_size (256–1024, default 512) is just output resolution of the scope image, and show_skin_line / show_centroid turn the overlay markers on and off. Leave them alone until you want a cleaner screenshot.
The outputs are the point. Beyond the vectorscope image you get five scalars: skin_deviation_deg (degrees off the 127° line), skin_ire (mean skin luminance), cast_consistency, skin_pixel_count, and a diagnostics_text string that reads like a lab report. The consistency score is the sneaky useful one: ~1.0 means one clean light source and a single global correction will work; below ~0.4 means strong split lighting, and one global pass will be a compromise - that's when you either run left/right passes or hit apply_globally on the SkinToneCorrector.
Installing it. The whole pack installs at once - there's no way to get just this node:
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. ComfyUI Manager also lists it if you search "Eric Color Correction," though for a pack this new the clone path is the dependable one. Be aware of the license before you use it commercially: it's dual-licensed, CC BY-NC 4.0-style for non-commercial use, with a separate commercial license required. No model downloads for this node, no heavy deps - it's pure tensor math, so it runs instantly even on CPU. If the first run feels slow, it isn't this node; the model loading happens in the mask nodes.
Where people get tripped up: they wire the vectorscope into a Save Image node and expect a literal picture of the subject. It's not. The scope is a diagnostic readout - save it, flip it next to the corrected image, and check that the yellow cloud collapsed onto the 127° line. That's the whole feedback loop, and it's genuinely satisfying the first time you watch a cast vanish on the scope before your eyes.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| scope_size | INT | 512256–1024 | — |
| show_skin_line | BOOLEAN | true | — |
| show_centroid | BOOLEAN | true | — |
| skin_maskopt | MASK | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| vectorscope | IMAGE | — |
| skin_deviation_deg | FLOAT | — |
| skin_ire | FLOAT | — |
| cast_consistency | FLOAT | — |
| skin_pixel_count | FLOAT | — |
| diagnostics_text | STRING | — |