ComfyUI Node

Vectorscope

The scope that keeps skin tones honest

By jeremieLouvaert·Created 5 months ago·Updated 3 days ago· 101
Vectorscope
  • image
  • scope
size512
gain1.00
log_scaletrue
show_skin_linetrue

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.

CategoryAKURATE/Darkroom/Scopes

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
sizeINT512192–2048Scope canvas size in pixels (square)
gainFLOAT1.000.25–4Radial scaling of the trace. 1.0 = normal, >1 zooms in on low saturation
log_scaleBOOLEANtrueLog-scale the density (single-hue scenes read better with log)
show_skin_lineBOOLEANtrueDraw the I-line at 123 degrees (natural skin-tone axis)

Outputs (1)

NameTypeDescription
scopeIMAGE