Waveform Scope
A waveform monitor in ComfyUI — see your luma and channel values like a colorist
- image
- mask
- image
- mask
- waveform_info
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 defaultgain- how much to amplify the trace when it hugs the middlegraticule- the scale overlaymask- 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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| settings_json | STRING | {"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} | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| waveform_info | STRING | — |