Stoatworks Labs

Old Cathode

Analogue TV signal path for Resolume

Field provenv1.0.6Plugin & ModuleC++ / GLSL
Old Cathode — Analogue TV signal path for Resolume
Rendered by the plugin's own offline harness, which drives the real plugin class through a headless GL context — not a Resolume screen capture.

What it does

An analogue television signal path for Resolume Arena and Avenue. It encodes the picture onto a colour subcarrier the way a broadcast encoder would have, damages the resulting composite waveform as a single signal, and decodes it again with a synchronous demodulator that has no more information than a real receiver had. Only then does it paint the result onto a phosphor screen with a shadow mask, a beam that defocuses when it is bright, a curved glass face, and a viewer sitting somewhere in particular.

Almost everything you recognise as the CRT look is a consequence of that path rather than something drawn on top. Dot crawl happens because the subcarrier sits inside the luminance band. Cross-colour happens because fine detail near that frequency gets demodulated as if it were colour. Noise added to the composite is un-mixed by the decoder along with everything else, so it arrives as grey grain and coloured speckle in the right proportion without being asked for.

The practical upshot is that the controls interact the way the real thing did. Dropping the chroma bandwidth smears colour sideways and suppresses cross-colour, because in the hardware those were the same filter. Losing signal costs the colour before it costs the picture. Switching from NTSC to PAL changes what the Tint control does, because a PAL decoder averages each line with the one above it and a phase error cancels.

Also available as an OpenFX plugin for DaVinci Resolve, Vegas Pro, Nuke and Natron — the same signal path mirrored on the CPU, constant for constant, with the subcarrier phase walk driven by the timeline frame number so any frame renders identically however the host reaches it.

  • Four dot mask patterns — delta shadow mask, aperture grille with its damper wires, slot mask, and a hard RGB stripe
  • NTSC or PAL, from broadcast or three grades of VHS, each with its own bandwidths and colour-under delay
  • Noise, dropouts, multipath ghosting and adjacent-channel interference, all injected before the decoder rather than painted on after it
  • Tracking error, head-switch tear, line jitter, mains hum, vertical hold and interlace
  • A scanning beam that gets fatter where it is brighter, phosphor persistence with per-colour decay, and halation through the glass
  • Screen curvature with overscan, rounded tube corners, true perspective and vignette — the mask lives on the glass, so it foreshortens with the tube
  • Universal macOS bundle, a Windows DLL, and an OpenFX bundle for macOS, Windows and Linux

Where it stands

Released at v1.0.6, on the 1.0 line. The OpenFX build for Resolve, Vegas, Nuke and Natron arrived in v0.2.0; the releases since have been dependency and CI maintenance, v1.0.5's Windows installer no longer touches the system PATH — the earlier one could overwrite it — and v1.0.6 gives the effect a real description in the field Resolume shows for it. Needs Resolume Arena or Avenue 7.3.1 or newer. It loads in Arena 7.27.0 with all six shader stages compiling in the host, and has been run there on real content rather than only through the offline harness.

Watch it running

Old Cathode video thumbnail

Nothing loads from YouTube until you press play.Watch it there instead