Nodes/MKRShift_Nodes/Waveform Scope
ComfyUI Node

Waveform Scope

A waveform monitor in ComfyUI — see your luma and channel values like a colorist

By criskb·Created 7 months ago·Updated 5 months ago· 0
Waveform Scope
  • image
  • mask
  • image
  • mask
  • waveform_info
settings_json{"scope_mode":"rgb_parade","gain":1.15,"trace_strength":0.9,"graticule":0.38,"scope_resolution":560,"sample_step":2,"mask_feather":12.0,"invert_mask":false}

If your images come out looking washed out or crushed and you can't tell why, you're missing the waveform monitor. A waveform shows exactly how your luma (brightness) is distributed across the image left-to-right - where it peaks, where it clips, where it craters - so you can see that your blacks are actually at 0.25 and your whites at 0.9 before anyone tells you it looks flat. Waveform Scope is that instrument as a ComfyUI node, and it pairs with the pack's Vectorscope to give you the full colorist's readout without leaving the graph.

How it works

The node samples the image and plots pixel brightness against horizontal position - dark pixels trace low, bright pixels trace high, and the shape of the trace tells you the tone distribution across the frame. scope_mode picks the view: luma (brightness only), rgb_overlay (all three channels overlaid - you see a color imbalance as the traces separating), and rgb_parade (the three channels side by side, the standard mode for spotting channel clipping and casts). gain is input gain (1.15 default), trace_strength is trace brightness, graticule is the target/scale overlay, scope_resolution sets plot size, and sample_step skips pixels for speed.

The practical read: in rgb_parade, if the red trace tops out at 1.0 while green and blue sit lower, your highlights are red-clipped. If the blue trace floats high in the shadows, that's the classic cold-shadow cast. That's the whole point - you see the numbers instead of vibes. Optional mask restricts the analysis to a region (checking skin-luma on a face, for instance).

The inputs that matter

  • scope_mode - luma / rgb_overlay / rgb_parade; parade is the diagnostic default
  • gain - how much to amplify the trace when it hugs the middle
  • graticule - the scale overlay
  • mask - analyze a specific region

Outputs: image (the waveform plot), mask, and waveform_info with resolved settings.

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

The pack has no community footprint yet, so trust the code. Standard MKRShift JSON traps: malformed settings_json silently reverts to defaults, out-of-range values clamp. Two color-science notes. First, the scope only shows what's in the image as delivered - ComfyUI tensors are in 0–1, so if you're exporting to a broader range or a different transfer function, read it accordingly. Second, don't confuse a waveform with a vectorscope: the waveform answers "is the brightness right," the vectorscope answers "is the color right." Washed-out is a waveform problem; green skin is a vectorscope problem. Use them together and you'll finally know what your images are doing.

CategoryMKRShift Nodes/Color/Analyze

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
settings_jsonSTRING{"scope_mode":"rgb_parade","gain":1.15,"trace_strength":0.9,"graticule":0.38,"scope_resolution":560,"sample_step":2,"mask_feather":12.0,"invert_mask":false}
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
waveform_infoSTRING