Web-based Spotify "Now Playing" visualizer, inspired by the Zune desktop software.
Spune displays album artwork from related artists in a Zune-style mosaic while you listen to Spotify. It discovers related artists via Last.fm and ListenBrainz, renders their album covers as an animated background, and can cast the visualization to a TV via Chromecast.
- Client: React 19, Vite, TypeScript — details
- Server: Node.js, Express, TypeScript, PostgreSQL — details
- APIs: Spotify Web API, Last.fm, ListenBrainz/MusicBrainz
- CI/CD: GitHub Actions, Docker, GHCR
- Node.js 22+ (see
.nvmrc) - pnpm
- Docker (for local PostgreSQL)
- Spotify Developer Application
git clone git@github.com:cdtinney/spune.git
cd spune
pnpm install
cp packages/server/.env.example packages/server/.env
# Edit packages/server/.env — see the file for descriptions of each variable
pnpm devpnpm dev starts PostgreSQL (via Docker), the Express server, and the Vite dev server. Open http://127.0.0.1:3000.
Important: Add http://127.0.0.1:3000/api/auth/spotify/callback to your Spotify app's redirect URIs in the developer dashboard. Spotify requires 127.0.0.1 (not localhost).
| Command | Description |
|---|---|
pnpm dev |
Start everything (DB + server + client) |
pnpm dev:stop |
Stop the dev database |
pnpm client:test |
Run client tests |
pnpm server:test |
Run server tests |
pnpm client:lint |
Lint client |
pnpm server:lint |
Lint server |
pnpm client:build |
Build client for production |
Spune can cast the visualization to a Chromecast-enabled TV. See docs/chromecast.md.
CI auto-builds and pushes a Docker image to ghcr.io on every merge to master. See docs/deployment.md.
Quick version:
# On a fresh Ubuntu droplet:
curl -fsSL https://raw.githubusercontent.com/cdtinney/spune/master/scripts/setup-droplet.sh | bash- Desktop Zune software is awesome to look at on your TV
- Desktop Spotify software sucks to look at on your TV
- Therefore, a client that shows what you're listening to in the style of Zune must be awesome

