Real-time graphics
Kaleidoscope. A local, capture-based WebGL visualizer with six engines that folds live audio into projected geometry, beat-locked and driven by a Wii remote.
It began as a replacement for an old kaleidoscope app that had stopped keeping up. The obvious route was to pull track and beat data from the streaming service, except those audio endpoints had been deprecated, so there was no supported way in. That closed door turned out to be the better design. Instead of asking a service for metadata about the music, the visualizer captures the audio already leaving the machine and analyses it directly. No API, no account, no permission to revoke.
System or tab audio is captured through the browser, analysed by an FFT, and split into bass, mid and treble bands with separate kick detection. Rendering is WebGL1 with ping-pong feedback buffers in a two-pass simulation and display architecture, which is what gives the trails their persistence. Six engines share that pipeline: kaleidoscope, tunnel, plasma, a radial FFT spectrum, starfield and a Julia-set fractal, with smooth fades between them and optional auto-cycling.
The room this runs in includes ADHD and autistic guests, so intensity control is a feature rather than an afterthought. Flash guard routes every kick through a smoothed pulse envelope instead of letting it hit brightness directly, and caps how fast brightness and hue can change. A master intensity slider scales all reactivity, and a calm key eases the whole system down over about a second and a half rather than snapping. The palette runs to deep blacks for a dark room, and the operating system reduced-motion setting is honoured on load.
The page says plainly that none of this is a photosensitive-epilepsy guarantee. A false claim of safety would be worse than no claim at all.
A Wii Remote connects over WebHID for live control: accelerometer motion drives a wand energy value, tilt steers, buttons switch engines and intensity, and the remote rumbles on the beat. Getting there involved a genuinely instructive dead end. The newer Wii Remote Plus hardware does not pair cleanly with the Windows 11 Bluetooth stack, and a keyboard-emulation layer and direct WebHID access cannot hold the same device at once. Knowing which of those two paths you are on turns out to be most of the debugging.
A seventh engine, not yet built. Scene mode takes a still image and its depth map and turns it into a living painting: subtle parallax displacement, a slow breathing zoom, animated god-rays, and beat-reactive shimmer, crossfading between scenes. Depth maps are produced offline rather than at runtime, and the first scene is a dragon painting of my own, photographed, perspective-corrected and colour-graded for projector blacks.
The constraint is worth stating honestly, because it shapes the whole design. Realism has to come from imagery brought in, not from the GPU inventing it live. Real-time generative video synced to audio is not happening on a 4GB card, so the plan is stills with parallax first, with the door left open for pre-rendered video textures later. Every new effect still has to respect flash guard, which rules out the easiest ways to make something look impressive.
Real-time graphics, audio DSP and live hardware input, plus a bias toward local-first tools that do not depend on a vendor keeping an endpoint open. The parts I care about are the boring ones: a single state object that made later integrations cheap, and accessibility constraints treated as architecture rather than a setting.