A browser-based audio visualizer with multiple rendering modes, real-time audio analysis, and video recording. Part of the ToneParadise project.
| Mode | Description |
|---|---|
| Spectrum Bars | Classic frequency spectrum analyzer with logarithmic scaling and gradient colors |
| Waveform Scope | Symmetrical geometric oscilloscope driven by frequency data |
| Ambience Wash | WebGL fragment shader creating color fields driven by FFT data |
| Milkdrop | Butterchurn-powered Milkdrop visualizer with 100+ presets, auto-cycling |
| Piano Roll | Real-time pitch detection with falling notes, on-screen keyboard, and particle effects. Adjustable amplitude and frequency sensitivity sliders |
| Smoke Flow | GPU-accelerated Navier-Stokes fluid simulation with rainbow-tinted smoke that responds to music dynamics |
| Samantha OS | Dual interlocking ribbon helix on a warm background, inspired by the film Her. Rotation speed and wave amplitude respond to audio |
# macOS
brew install yt-dlp
git clone <repository-url>
cd Visualizer01
npm install
cd server && npm install && cd ..
Start both the frontend and the YouTube proxy server:
# Terminal 1 — Frontend (http://localhost:5173)
npm run dev
# Terminal 2 — YouTube proxy (http://localhost:3001)
cd server && npm run dev
Open http://localhost:5173 in Chrome or Edge. Click the splash screen to grant microphone access and start visualizing.
The YouTube proxy is only needed for the YouTube source. Microphone and Audio File work without it.
npm run build
npm run preview
| Layer | Technology |
|---|---|
| Framework | Svelte 5 |
| Build | Vite 8 |
| Audio Analysis | Web Audio API (FFT 8192) |
| 2D Rendering | Canvas 2D |
| 3D / Shaders | WebGL 2 |
| Milkdrop | Butterchurn |
| Fluid Sim | Navier-Stokes (WebGL, RGBA16F) |
| Recording | MediaRecorder API |
| MP4 Export | FFmpeg WASM |
| YouTube Proxy | Fastify + yt-dlp |
| Feature | Chrome/Edge | Firefox | Safari |
|---|---|---|---|
| All visualizations | Yes | Yes | Yes |
| Microphone | Yes | Yes | Yes |
| YouTube source | Yes | Yes | Yes |
| Video recording | Yes | Limited | No |
| MP4 conversion | Yes | Yes | No |
src/
App.svelte # Root component — audio routing & visualizer switching
components/ # UI: header, dropdowns, transport, file upload, recording
lib/
audio/ # Audio sources (mic, file, YouTube) & central AudioEngine
visualizers/ # 7 visualizer implementations + VisualizerManager
recorder/ # Canvas recording & MP4 export
utils/ # FFT constants, MIDI note mapping
server/
index.js # Fastify proxy that streams YouTube audio via yt-dlp
All rights reserved.