Nodes/MKRShift_Nodes/Vectorscope
ComfyUI Node

Vectorscope

A real vectorscope inside ComfyUI — check skin tones like a colorist

By criskb·Created 7 months ago·Updated 5 months ago· 0
Vectorscope
  • image
  • mask
  • image
  • mask
  • vectorscope_info
settings_json{"scope_gain":1.0,"trace_strength":0.95,"graticule":0.42,"scope_resolution":440,"sample_step":2,"show_skin_line":true,"show_targets":true,"mask_feather":12.0,"invert_mask":false}

Every serious colorist works with scopes - the waveform and vectorscope are how you know what's actually in the image instead of what your eyes think is there. A vectorscope plots every pixel by hue and saturation on a circular target, and the single most useful fact it tells you: where your skin tones land. When a render's faces look green, or the whole image is tinted, the vectorscope shows it as a cloud shifted off the skin-tone line. Vectorscope puts that instrument inside ComfyUI, and it's the kind of node that changes how you grade - you stop guessing and start reading.

How it works

The node samples the image (sample_step skips pixels for speed), converts each to hue/saturation, and plots the points on a circular scope - hue is the angle, saturation is the radius. scope_gain is the input gain (how hot the signal is), trace_strength is the brightness of the plotted points (turn it down for a cleaner read on dense clouds), and graticule controls the target-ring overlay. scope_resolution sets the plot size. The two features that make it genuinely useful: show_skin_line draws the standard skin-tone reference line - if your cloud sits off it, your color is off - and show_targets draws the classic target markers for the primary colors, so you can see immediately if red is veering toward magenta. The optional mask limits the analysis to a region (skin-only reads are the killer feature for portrait work).

Outputs: image (the scope plot itself - wire it to a preview or save it), mask, and vectorscope_info with resolved settings.

The inputs that matter

  • scope_gain - input gain; bump it if the cloud hugs the center and you can't read it
  • show_skin_line - the skin-tone reference, keep it on
  • show_targets - the RGB target markers
  • mask - analyze only a region, e.g. skin

Installing it

Ships in MKRShift Nodes from criskb. ComfyUI Manager → "MKRShift Nodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart ComfyUI; it's under MKRShift Nodes → Color → Analyze. No models or extra deps - numpy/Pillow/torch.

Common gotchas

New pack, no community lore, so trust the code. Standard MKRShift JSON traps: broken settings_json silently reverts to defaults, out-of-range values clamp. The actual grading gotcha is reading it wrong: a vectorscope shows saturation direction, not brightness - a "washed out" complaint is a waveform problem (luma), not a vectorscope problem. Also, this is a diagnostic node, so it belongs in a separate review workflow or after your grade, not inline in your main chain. And remember the scope samples pixels - at default sample_step 2 it skips every other pixel, which is fine for a read but means a very small region needs a mask (or step 1) to show up meaningfully.

CategoryMKRShift Nodes/Color/Analyze

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"scope_gain":1.0,"trace_strength":0.95,"graticule":0.42,"scope_resolution":440,"sample_step":2,"show_skin_line":true,"show_targets":true,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
vectorscope_infoSTRING