Very Attractive Music Player In the Room as Expected
A self-hosted music player powered by YouTube Music as a data source. Clean interface, personal history, no ads.
Live demo: Vampire
- 🔐 User authentication — login required to access the app
- 🔍 Search and browse music, albums, artists, and playlists
▶️ Stream tracks directly from YouTube Music- 📜 Per-user playback history
| Layer | Technology |
|---|---|
| Frontend | Svelte + Bun |
| Backend | Python + FastAPI |
| Proxy | Go (Language) |
| Database | Python |
cd frontend
bun install
bun run build
bun run previewcd backend
uv sync
uv run main.pyvampire/
├── frontend/ # Svelte app (Bun)
│ └── src/
│ ├── routes/ # SvelteKit pages
│ │ ├── state.svelte.ts # App state definition
│ │ ├── app.html # The base of single page app
│ │ ├── (auth) # Auth handling pages
│ │ └── (app) # Music player & browser pages
│ └── lib/ # YouTubeMusic client, media player, state
│ ├── coerce.ts # Coerce math function
│ ├── color.ts # Theme color calculator
│ ├── cssVariable.ts # Global CSS variable editor
│ ├── hsla.ts # Color code transformer
│ ├── util.ts # Shared important functions
│ ├── mediaPlayer.ts # Base AudioPlayer class
│ ├── client # A custom http request library
│ ├── youtubemusic # YouTubeMusic class
│ └── tools # YouTubeMusic response parsers
├── backend/ # FastAPI server
│ ├── main.py
│ ├── .env # Some important credentials
│ ├── config.py # Base controls over JWT and more
│ ├── utils.py # Shared important functions
│ ├── database/ # Database layer
│ ├── auth/ # Authentication layer
│ ├── routes/ # Routes (Optional)
│ └── world/ # Languages & Country class for database
│
└── proxy/ # Proxy server in Go
├── main.go
└── streamer # 64-bit linux binary for running proxy server
- Start the backend server & proxy server
- Start the frontend dev server
- Open the app and log in
- Search for music or browse artists, albums, and playlists
- Your playback history is tracked per user account
GNU General Public License v3.0