A dynamic, real-time music visualizer that transforms sound into stunning visual experiences. Synchronize with your system audio, microphone and Music Assistant support (through Sendspin) and watch your music come alive.
https://github.com/sanderdw/hassio-addons
VoltViz comes with 30+ stunning visualization styles to choose from:
- Particle Effects: Cosmic Particles, Fireworks Show
- Abstract Patterns: Cyber Matrix, Cyber Grid Canvas, Neon Hex Tunnel, Neon Wave
- 3D Visualizations: Poly Sphere, Glow Sphere, 3D Equalizer
- Retro Styles: CRT Terminal, Vinyl, VU Meter, Sheet Music, Glitch Background, Glitch Databend
- Festival Vibes: Festival Stage, Defqon Mainstage, Disney Drone Show
- Organic Effects: Fluid Smoke, Ghost Rainbow, Psychedelic Skull, Flame
- Data Driven: Dutch Grid, Dutch Grid (WebGL), Data Dashboard
- And many more: Bars, Circular, Tunnel, Background Image, Blur Image, Your Logo, and Sendspin variants...
Core Capabilities:
- π€ Real-time Audio Input: Connect microphone, capture system audio, or stream from a Sendspin server
- π High-Performance Rendering: GPU-accelerated with Three.js and WebGL
- βοΈ Interactive Controls: Pause, resume, and switch between visualizations
- π― Responsive Design: Works seamlessly on desktop and tablet devices
- π³ Docker Ready: Pre-configured for containerized deployment
- Node.js (v18 or higher)
- npm or yarn
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open in your browser:
http://localhost:3000
Build and run the production container:
docker build -t voltviz . && docker run --rm -p 8080:80 voltvizThen open:
http://localhost:8080
| Command | Description |
|---|---|
npm run dev |
Start development server on port 3000 |
npm run build |
Build for production |
npm run preview |
Preview production build locally |
npm run clean |
Remove build artifacts |
npm run lint |
Check TypeScript for errors |
Frontend:
- React 19.2 - UI framework
- TypeScript 6.0 - Type-safe development
- Vite 8.0 - Next-gen build tool
- Three.js 0.183 - 3D graphics
- D3.js 3.1 - Data visualization
- Tailwind CSS 4.2 - Utility-first styling
- Lucide React 1.8 - Icon library
- @sendspin/sendspin-js 3.0 - Synchronized audio streaming client
Infrastructure:
- Docker - Containerization
- Nginx - Web server & reverse proxy
- GitHub Actions - CI/CD automation
src/
βββ components/
β βββ visualizers/ # 30+ visualization components
βββ data/ # Static data (geographic, etc.)
βββ images/ # Asset images
βββ App.tsx # Main app component
βββ main.tsx # Entry point
βββ types.ts # TypeScript definitions
βββ index.css # Global styles
nginx/
βββ default.conf # Nginx configuration for production
- Audio Capture: VoltViz captures audio from your microphone, system audio, or a Sendspin server
- Frequency Analysis: Uses Web Audio API to analyze frequency data in real-time
- Visualization: Renders synchronized visualizations using Three.js and Canvas
- Interactivity: Switch between different visual styles on-the-fly
VoltViz has Music Assistant support through Sendspin, an audio streaming protocol. Click the Sendspin button and enter your server URL to visualize audio from any Sendspin-compatible server.
Demo Sendspin server link: https://voltviz.com/?sendspin=https://sendspin-demo.voltviz.com
You can link directly to a specific visualizer with custom settings using URL parameters:
http://localhost:8080/?viz=tunnel&sensitivity=1.5&speed=2.0&hueShift=180&scale=1.2
| Parameter | Description | Default |
|---|---|---|
viz |
Visualizer name (e.g. tunnel, sphere, festival) |
sphere |
sensitivity |
Audio reactivity multiplier (0.1β3.0) | 1.0 |
speed |
Animation speed multiplier (0.1β3.0) | 1.0 |
hueShift |
Color shift in degrees (0β360) | 0 |
scale |
Element scale multiplier (0.5β3.0) | 1.0 |
The URL updates automatically as you change the visualizer or adjust settings in the UI, so you can share or bookmark your current configuration at any time. Only non-default settings are included to keep URLs clean.
You can link directly to VoltViz with a pre-filled Sendspin server URL by adding a sendspin query parameter:
http://localhost:8080/?sendspin=http://homeassistant.local:8927
This opens the connect dialog automatically with the URL pre-filled β just click Connect to start.
You can combine both: /?sendspin=http://homeassistant.local:8927&viz=vinylplayer&hueShift=90
NOTE: Mixed content is not supported in most browsers so it only works on local networks. So if you access Home Assistant by
http://homeassistant.local:8123it works by usinghttp://homeassistant.local:8927as Sendspin URL.
You can also quickly start a local Sendspin server using uvx:
uvx sendspin serve https://uto-mix.sanwil.net/DJ%20de%20Wildt%20-%20UTO%20Mix%201%20uto-oosterhout.nl.mp3Then in VoltViz, click Sendspin and enter http://localhost:8095 to connect.
The easiest way is to run the Docker version of VoltViz on your local network so that it can reach the Home Assistant instance directly.
npm run lintnpm run build
npm run preview # Test production build locallyThe app requires microphone or display-capture permissions to function properly. When you first load VoltViz, you'll be prompted to grant these permissions.
VoltViz includes a GitHub Actions workflow that automatically builds and publishes Docker images to GitHub Container Registry (GHCR).
The workflow triggers on:
- Push to main/master branches: Builds and publishes with
latesttag - Git tags (e.g.,
1.0.0): Publishes with semantic version tags - Pull requests: Builds images for testing (doesn't push)
- Manual trigger: Via GitHub Actions UI
Images are automatically tagged as:
ghcr.io/sanderdw/voltviz:latest(on main branch)ghcr.io/sanderdw/voltviz:1.0.0(on version tags)ghcr.io/sanderdw/voltviz:main(branch name)ghcr.io/sanderdw/voltviz:sha-abc123def(commit SHA)
docker pull ghcr.io/sanderdw/voltviz:latest
docker run -p 8080:80 ghcr.io/sanderdw/voltviz:latest# Build locally
docker build -t ghcr.io/sanderdw/voltviz:latest .
# Push to registry (requires authentication)
docker push ghcr.io/sanderdw/voltviz:latestFor authentication, follow the GitHub Container Registry documentation.
MIT Β© 2026 VoltViz
Contributions are welcome! Whether you want to add new visualizations, improve performance, or fix bugs, feel free to open a pull request.
- Best Experience: Use with headphones and a full-screen window
- GPU Performance: Works best in modern browsers (Chrome, Firefox, Edge)
- Audio Sources: Try different audio sources (music, podcasts, ambient sounds) for unique visual effects
Enjoy the show! β¨

