Vectorscope
The scope that keeps skin tones honest
- image
- scope
A histogram tells you about brightness. A vectorscope tells you about color - specifically, what hues are in your image and how saturated they are. It's the tool colorists use to keep skin tones natural, to see a color cast you can't quite name, and to nail the teal-and-orange look instead of approximating it. The Darkroom pack ships one as a node, and it's the closest ComfyUI gets to DaVinci Resolve's color tools.
How to read it
The vectorscope is a circle. Distance from the center = saturation (center is neutral grey, the rim is fully saturated). Angle around the circle = hue, with the standard color wheel laid out: red at roughly 0°, yellow around 60°, green 120°, cyan 180°, blue 240°, magenta 300°. Your image's pixels get plotted as a density cloud - the more pixels share a hue, the brighter that region of the trace.
Three things make this node genuinely colorist-grade:
- 75% and 100% saturation rings - reference circles so you can see whether your colors are pushed past broadcast-safe saturation.
- Six primary target boxes - R/Yl/G/Cy/B/Mg markers showing where pure primaries sit. If your trace is inside the box, that hue is close to true; if it's way off, you have a cast.
- The 123° skin-tone line (the I-line) - the diagonal on the wheel where natural skin tones fall. This is the famous one: on a healthy portrait, skin pixels cluster near that line. If they've drifted toward green or magenta, the skin has a cast your eyes were too forgiving to catch.
The controls
size- the square canvas size (192–2048). 512 default is a good working size.gain(0.25–4) - radial scaling of the trace. At 1.0 the trace is "normal"; crank it above 1 and you zoom into the low-saturation region. The tooltip nails the use case: low-sat scenes plot near the center where everything overlaps, and gain spreads them out so you can actually read them.log_scale- log-scale the density, on by default. A single-hue scene (think: one-color product shot) concentrates everything in one spot; log makes the faint edges of the trace visible.show_skin_line- toggle the I-line. Keep it on; it's free information.
Using it in practice
Wire image in, and the scope output goes to a PreviewImage node. Sit it next to your main preview and grade with both.
The classic moves: fix a skin cast by watching the skin trace drift back toward the I-line as you adjust White Balance tint; build a teal-and-orange grade by pushing the shadows toward 240° and highlights toward 45° and seeing both populations land where you want. The vectorscope is also merciless on AI output - that slightly-too-green look on generated faces shows up immediately as the skin trace sitting below the line.
One tip: if the trace looks like a solid smear, turn on log_scale (if it isn't already) or raise gain. A readable scope beats a pretty one.
Installing it
Part of the full ComfyUI-Darkroom pack:
cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom.git
pip install -r ComfyUI-Darkroom/requirements.txt
Or search "Darkroom" in ComfyUI Manager. Needs scipy, opensimplex, rawpy, exifread, Pillow (the scope renders via PIL). Restart and it's under AKURATE/Darkroom/Scopes. No GPU, no models, no API.
Histogram tells you the exposure is right; the vectorscope tells you the colors are right. If you're grading portraits or aiming for a specific cinematic palette, this is the scope you'll actually live on.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| size | INT | 512192–2048 | Scope canvas size in pixels (square) |
| gain | FLOAT | 1.000.25–4 | Radial scaling of the trace. 1.0 = normal, >1 zooms in on low saturation |
| log_scale | BOOLEAN | true | Log-scale the density (single-hue scenes read better with log) |
| show_skin_line | BOOLEAN | true | Draw the I-line at 123 degrees (natural skin-tone axis) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| scope | IMAGE | — |