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.

  • TypeScript
  • WebGPU
  • Web MIDI
  • Web Audio
  • Live Performance
Why it exists

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.

What it does

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.

Where it is now

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.
Fact sheet

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