Electron-based VJ tool for live performance with a multi-window architecture — a high-performance canvas window rendering audio-reactive visuals, a control window for real-time manipulation, and an on-demand NodeGraph window for per-layer audio→param modulation. The v2 rewrite of BinaryVJ — a faithful port of the original 2011–2018 Processing 4 / Java VJ application (v1), bringing its layered rendering to the web stack and extending it with scenes, a timeline, post-FX, Syphon/Spout output, OSC and an AI assistant.
Built with TypeScript, React 18 and Three.js (React Three Fiber / drei), with Zustand stores read directly inside the render loop to avoid per-frame React re-renders. ~80 ported visual layers are organized in a stack, each rendering to its own target and blended by a compositor with an optional post-FX chain (including a custom datamosh effect). A built-in audio engine captures system audio and exposes 3-band scalars, smoothed/normalized variants and raw FFT bins to every layer; each layer can be driven by a per-layer NodeGraph (@xyflow/react) of audio/math/shaping nodes that write into its parameters every frame. Scenes snapshot the full layer stack and a timeline engine automates parameters. The canvas streams out via Syphon (macOS) or Spout (Windows) at native backing-pixel size, with an OSC bridge for external controllers and an optional in-app AI assistant (Anthropic / OpenAI SDKs) that can read and mutate the layer stack. The MUI control panel auto-generates widgets from declarative per-layer params. Packaged with electron-builder for macOS/Windows/Linux; Vitest covers pure-logic modules (audio math, layer registry).
TypeScript, Electron, React, Three.js, React Three Fiber, Zustand, MUI, Vite, Web Audio API, Syphon, Spout, OSC, Anthropic, OpenAI, Vitest