All projects
Music Light Visualizer logo

Music Light Visualizer

A browser light show that listens to your music.

Jun 2026 – present

The visualizer starts as a blank canvas in silence and births a layered scene from the center as music plays — a pulsing core ring, aurora ribbons, particle blooms, kaleidoscope shards, a warp starfield, lightning arcs, and drop explosions, all gated progressively by a smoothed energy envelope and rendered in raw Canvas 2D at 60fps.

Audio can come from a microphone, tab capture, or an uploaded file. Live input runs through per-frame Web Audio FFT analysis — frequency bands, onset detection, tempo estimation, beat tracking, drop detection — while uploaded tracks get a deeper offline pass in a worker (essentia.js compiled to WASM) that precomputes a full timeline: beat grid, downbeats, structural sections, and drops with anticipation ramps, so the show sees moments coming before they hit.

Live capture: the riser builds into the drop at 0:08 — recorded straight off the scene canvas
Music Light Visualizer mid-track: band-colored orb and particle field with the waveform transport showing BPM, bar, and section
Mid-drop on an analyzed track — orb, particles, and the neon waveform transport

Key features

Real-time audio analysis

Per-frame FFT into bands, onset detection, tempo estimation, beat tracking, and drop detection from mic, tab, or file input.

Offline track analysis

Uploaded files are fully decoded and analyzed in a WASM worker, producing a precomputed timeline of beats, sections, and drops.

One cohesive generative scene

Not separate modes — a single layered show born from the center of the screen that recedes to blank in silence.

Structure-aware drops

Phrase and section detection lets the visuals anticipate builds and detonate on drops instead of reacting late.

Neon HUD + waveform transport

A band-colored scrolling waveform with BPM, bar, and section info, fullscreen mode, and an idle auto-hiding controls dock.

Built with

Next.jsTypeScriptCanvas 2DWeb Audio APIessentia.js / WASMWeb WorkersVitest
View the source on GitHub