Pendulum

2026Performance

Live visual system for two-person experimental music performances. Generative scenes react to MIDI, audio analysis, and pose tracking via MediaPipe.

Live visuals for a two-person improvised music set — no timeline, no cue list, nothing scripted. The visuals run autonomously and listen.

How it works

  • Every input writes to one flat signal bus: MIDI CCs from a controller, Web Audio analysis of the synth line-in (RMS, spectral centroid, onsets), MediaPipe pose and face tracking from two cameras, and a phone sending OSC. Scenes read smoothed signals through the bus, so a page reload never freezes the picture.
  • Hydra, Three.js, and p5 scenes coexist behind one renderer interface. Switching scenes swaps in a fresh canvas, so each engine gets a clean WebGL context and no orphaned render loops.
  • Landmarks and audio envelopes pass through a one-euro filter (Casiez et al., CHI 2012) rather than a fixed low-pass — smooth without the lag.
  • A CodeMirror panel livecodes Hydra mid-performance; saved sketches register into the scene rotation and persist across sessions.
  • The phone's panic button blacks everything out in ~250 ms using a CSS overlay on the body — renderer-agnostic, so the kill switch works identically whichever engine is on screen.

Setup

A two-machine rig on a dedicated travel router: a Node bridge takes OSC over UDP and fans it out to the browser over WebSocket; the visuals machine runs the scenes. Built as a performance instrument, tuned in rehearsal.

TypeScriptHydraMediaPipeViteNode.js
GitHub
live-visualshydramediapipeperformance