Nodes/ComfyTV/Video Scopes
ComfyUI Node

Video Scopes

The colorist's instruments, one frame at a time

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Video Scopes
  • video
  • image
force_run_token0
project_id
parent_output_id0
scopewaveform
at_seconds-1.00

Your monitor lies to you. Exposure and color judgment need instruments, not eyeballs, and that's what scopes are - the same waveform, parade, and vectorscope displays colorists live on. Video Scopes gives you those instruments inside ComfyTV, rendering one from a frame of your clip as a COMFYTV_IMAGE.

What it does

It samples a single frame of a COMFYTV_VIDEO, runs it through the corresponding FFmpeg scope filter, and outputs the scope as an image snapshot. scope picks the instrument:

  • waveform (default) - luma waveform with graticule, for spotting clipping highlights and crushed shadows.
  • waveform_parade - RGB parade, channels side by side; the fastest way to see a color cast.
  • vectorscope - hue/saturation distribution with named targets; where you check skin-tone alignment.
  • histogram - tonal distribution.
  • cie - CIE chromaticity scope (HDTV gamut, white point shown) for gamut coverage.

at_seconds picks which frame to measure - -1 (default) means the middle of the clip; any other value 0–3600 targets a specific timestamp. Set it to check the blown window at 0:42 or the skin tone at the close-up.

Output is a single image (COMFYTV_IMAGE). It scopes one still, not the whole clip - if exposure changes across the shot, sample a few timestamps.

Why you'd actually use this

If you grade in ComfyTV's Video Color / Curves / LUT stages, scopes are your QC loop: check the waveform for clipping, then pull highlights down until the trace clears the top. The classic beginner move is trusting the preview, blowing highlights, and only noticing on export - scopes catch it in the edit. The docs' practical tips: waveform_parade for a cast, vectorscope for skin tones along the I-line.

Install and quirks

Pack-standard: git clone https://github.com/jtydhr88/ComfyTV into ComfyUI/custom_nodes, restart, under ComfyTV → Video. No models - this is PyAV media analysis, no GPU involved.

  • at_seconds at -1 measures the middle - that's by design, and it's the right default for a general check.
  • The scope image won't wire into a normal ComfyUI node - it's a COMFYTV_IMAGE snapshot; Bridge it if you need a tensor.
  • Scope looks empty or wrong at -1 - some clips are short; pick an explicit timestamp instead.

One honest note: it's scope rendering, not scope analysis - you read the result with your eyes. For that job it's fast, free of models, and infinitely better than guessing.

CategoryComfyTV/Video

Inputs (6)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
scopeCOMBOwaveform5 options: waveform, waveform_parade, vectorscope, histogram, cie
at_secondsFLOAT-1.00-1–3600-1 = middle of the clip
videooptCOMFYTV_VIDEO

Outputs (1)

NameTypeDescription
imageCOMFYTV_IMAGE