Nodes/ComfyUI-OldTimeRadio/ Scene-Aware Scopes (v2)
ComfyUI Node

Scene-Aware Scopes (v2)

Audio-reactive scopes that know where the scene actually is

By jbrick2070·Created 5 months ago·Updated about 16 hours ago· 7
Scene-Aware Scopes (v2)
  • audio
  • scopes_mp4_path
clip_manifest_json
out_w1920
out_h1080
ffmpegffmpeg
landscape_barsoff

The SIGNAL LOST aesthetic has those CRT scope visuals - the circular rings, the waveform, the frequency bars - that pulse with the audio. OTR_SceneAwareScopes is the v2 version of that, and the "scene-aware" part is the upgrade. The v1 scopes lived inside the procedural floor video, where they couldn't possibly know what scene was playing. This node renders the scopes late and additively - after the real per-beat clip plan exists - and draws them into the actual gutters: at the edges on landscape clips, in the center on the signal-lost gaps, suppressed on the credits tail.

The output is a scopes_only.mp4: green-only scopes on pure black, so it can be screened and lightened over the final video by OTR_PostUpscaleProcgenBlend's third input with zero generation loss. It renders its own silent encode (-an) because it doesn't carry audio - it only analyzes it.

How it works

The required clip_manifest_json comes from OTRVideoRenderBatch - the per-beat engine_id, start_s, and clip path. That manifest is where the portrait-vs-landscape aspect split first exists (HuMo portrait at 480×832 vs LTX/Wan landscape), which is exactly what the scopes have to adapt to. The optional audio input is for analysis only - per-frame RMS and spectrum - and is never decoded into the video; absent it, you get silent idle scopes (still drawn, just not pulsing).

The render is deterministic (stable-hash seeded RNG - a fix over the floor's old unseeded np.random) and honors a pair of invariants: 100% local, and green-only - it deliberately does not import the colored CRT constants. The retro color discipline is part of the look.

Output size defaults to 1920×1080 (out_w/out_h), ffmpeg is the shell-out binary, and landscape_bars (off default, bottom opt-in) adds the old-school green audio bars along the bottom of landscape clips - always below the caption safe-area.

Install and gotchas

Pack-level install (ComfyUI Manager → ComfyUI-OldTimeRadio, restart; v2.0-alpha). Needs ffmpeg on PATH and Pillow (a pack dependency). The one wiring rule: OTR_SignalLostVideo's draw_scopes should be set off when you use this node, or you get v1 scopes and v2 scopes fighting each other. And remember the manifest is a hard requirement - this node can't be scene-aware without the per-beat plan, so it refuses rather than guessing. Feed it an empty manifest and you'll get loud, not graceful.

CategoryOldTimeRadio/v2/video

Inputs (6)

NameTypeDefaultDescription
clip_manifest_jsonSTRINGclip_manifest_json from OTRVideoRenderBatch (per-beat engine_id + start_s + path).
audiooptAUDIOMaster audio for analysis ONLY (never decoded into the video). Absent -> silent idle scopes.
out_woptINT1920320–7680Scopes output width (px, even values). Profile/platform-owned; matches the final master canvas, not the render-tier canvas.
out_hoptINT1080240–4320Scopes output height (px, even values). Profile/platform-owned -- see out_w.
ffmpegoptSTRINGffmpegDEPRECATED and IGNORED (2026-09-04). A workflow value cannot name the binary this pack runs -- it arrives over an unauthenticated /prompt request. Set the OTR_FFMPEG environment variable to pin a build.
landscape_barsoptCOMBOoffOptional old-school green audio bars along the bottom of landscape video (any engine). off = unchanged; captions always stay on top.

Outputs (1)

NameTypeDescription
scopes_mp4_pathSTRING