Web In development · used in performance prep
Impulse
A node-based visual engine for live performance.
Generative visuals for live AV sets, built as a transparent, version-controllable TypeScript alternative to closed proprietary tools — and fully open to AI-assisted workflows.
The standard tool taught me the concepts. Its file format taught me to leave.
I perform live audiovisual sets — sound and visuals generated and modulated together in real time. For that work, TouchDesigner is the standard. It's powerful, brilliant people use it, and I found it genuinely painful to live with.
The UI is dense to the point of being hostile, and everything lives in a proprietary binary format — opaque to version control and closed to AI coding assistants. I build almost nothing without an AI agent in the loop anymore; a tool that locks out that accelerator adds drag to every single session. So I took what TouchDesigner teaches — node-based signal flow, the separation of input, processing, and rendering — and rebuilt it on a foundation where everything is plain TypeScript and the whole structure is transparent.
Four layers, one direction of flow
Impulse turns hardware and audio into visuals through a strict top-down pipeline: a signal layer ingests MIDI, live audio analysis, and UI values as named streams; a node graph — the user-facing part — wires pure transformations between them; an entity world simulates position, velocity, lifetime, and color at a fixed tick; and a render layer draws in a worker, fully decoupled, so a dropped frame never stalls the simulation.
-
Runs in the browser
No installer, no driver mismatches, no "does it work on the venue's laptop" moment before a show. You open a URL.
-
Everything is versionable
Nodes as functions, graph state as JSON, shaders as TypeScript. Patches diff cleanly in git like any other code.
-
Built for AI-assisted work
A transparent codebase an agent can read and modify. Describe a new node type in natural language, get a working implementation in seconds.
-
Hardware-first inputs
Web MIDI maps controllers to named signals; Web Audio supplies FFT, amplitude, and beat detection. Drive a parameter from a knob, a kick drum, or both.
Built by the performances it's built for
Impulse is in active development, and the roadmap is refreshingly honest: the node library grows in the order my own upcoming sets need it. The architecture and rendering pipeline are solid; the hard, interesting problem right now is making mid-performance patch edits feel instant — the one thing the old tool truly got right, and the bar this one has to clear.
I left a tool I couldn't see inside and built one where every moving part is a file I can read. Now my visual instrument evolves at the speed of a conversation.
Impulse at a glance
- Platform
- Web — Chromium with WebGPU
- Status
- In active development
- Model
- Open source
- Stack
- TypeScript · Vite · Web MIDI · Web Audio
- Architecture
- Signals → node graph → entity world → render worker
- Inputs
- MIDI hardware · live audio analysis · UI