Nodes/ComfyUI-RndNanthu/๐Ÿ“ˆ Color Analysis Scope
ComfyUI Node

๐Ÿ“ˆ Color Analysis Scope

Every colorist's scope โ€” parade, waveform, vectorscope โ€” inside ComfyUI

By rndnanthuยทCreated about a year agoยทUpdated 9 months agoยท 28
๐Ÿ“ˆ Color Analysis Scope
  • image
  • scope_image
โ—„plot_typeโ–พโ–บ
โ—„exposure1.0โ–บ

ColorAnalysisPlotNode is the scopes from your NLE, bolted into ComfyUI. You've seen these in every color grading tutorial ever - the RGB parade, the waveform, the vectorscope, the false-color overlay - and normally you'd need to export your image and open Resolve or DaVinci to look at them. This node renders them as an image right in your graph, so you can check what your pipeline is actually doing without leaving ComfyUI.

It's the diagnostic node in the RndNanthu color pack, and the one I'd actually describe as a tool rather than a filter. The README marks it experimental, which is a fair warning - it works, but it's the least polished of the five and it has a couple of sharp edges.

How it works

You feed it an image and pick one of six scope types via plot_type:

  • histogram - RGB histogram, drawn with matplotlib.
  • parade - R, G, B each stacked side by side. The one you look at to judge channel clipping.
  • waveform - luma/color intensity across the frame, left-to-right matching the image.
  • vectorscope - chroma mapped to U/V space, the classic green blob. Skin tones sit on a familiar line here; if you know the skin-tone axis, this is how you spot a color cast in a portrait.
  • false_color - luma mapped through the MAGMA colormap. Bright highlights and deep shadows get distinct colors, which is the fastest way to eyeball exposure.
  • gamut_warning - paints pixels that clipped above 1.0 red and below 0.0 blue. I use this more than I expected: it's an instant "am I blowing out the highlights?" check.

There's also an exposure input (0.1โ€“5.0, default 1.0). It multiplies the frame before plotting, so you can preview what a +1 stop grade would clip without actually grading anything. Genuinely useful for deciding whether that highlight rolloff is going to survive.

The scope comes back as an IMAGE output named scope_image, rendered at the same resolution as your input. Wire it to a PreviewImage and it shows up like any other image in the graph.

The one setting that actually matters

Just plot_type. It's a dropdown, so no fiddly numbers. The exposure input is the only other thing you'll touch, and only when you're stress-testing a grade. That's the whole node - deliberately narrow, which is the right call for a scope.

Where it slots into a workflow

Grading blind is how you end up with skin that's technically colorful but looks wrong. The comfortable loop: run your image through ColorAnalysisPlotNode โ†’ spot the problem on the vectorscope or gamut warning โ†’ fix it in ProColorGrading (the pack's manual grading node) โ†’ check again. AutoGradePro in front also pairs well: auto-correct, then verify on the scopes that it didn't nuke your highlights.

Install

It ships with the RndNanthu pack, so it installs with the rest of it:

cd ComfyUI/custom_nodes
git clone https://github.com/rndnanthu/ComfyUI-RndNanthu
pip install -r requirements.txt

Then restart ComfyUI. Manager users: search "ComfyUI-RndNanthu" and install. The dependencies are the pack's standard set - numpy, opencv-python, Pillow, matplotlib (this is the node that actually needs matplotlib), torch. No models, no downloads. Note the license is CC BY-NC 4.0: non-commercial only.

Where people get burned

  • It rejects batched images outright. The code raises a ValueError unless the input is exactly one image. If your pipeline outputs a batch, put an ImageBatch-to-single node (or just grab frame 0) before this - it will not silently handle it, it will error.
  • The scope is a rendering, not data. You read it with your eyes. There's no numeric output you can feed into automation, and the matplotlib histogram is drawn at your input's resolution, so at small sizes it gets chunky.
  • Don't chain it into a generation pass. It's an analysis branch - tap it off your output image with a separate connection rather than inserting it into the image path, or you'll be coloring your image based on a picture of its own histogram.

Honestly, for a quick "am I clipping?" check there are lighter options out there. But if you want parade, waveform, and vectorscope all in one graph without exporting, this is the node. It's not glamorous - it's the thing you glance at while the other nodes do the real work, and for that it's exactly right.

Categoryrndnanthu/๐ŸŽจColor Tools

Inputs (3)

NameTypeDefaultDescription
imageIMAGEโ€”
plot_typeCOMBO6 options: histogram, parade, waveform, vectorscope, false_color, gamut_warning
exposureFLOAT1.00.1โ€“5โ€”

Outputs (1)

NameTypeDescription
scope_imageIMAGEโ€”