PERSONAL PROJECT
BETA

Vynl

Your own private Spotify — built from scratch. Self-hosted music streaming with Beets at the core, AI-powered playlists, karaoke with synced lyrics, and an experimental AI DJ that mixes sets for your party. After years of trying every library system out there, Beets came closest to perfect — so I built everything else around it.

STACK

Docker · Python · Claude AI · FFmpeg · Beets · Tailscale · Whisper

YEAR

2025-present

PROGRESS
75%
Vynl main interface
PROBLEM

I've spent years searching for the perfect music library system.

Beets is the closest — brilliant at management, tagging, deduplication.

But it's a CLI tool, not a streaming platform.

Spotify controls what you hear through paid algorithms, charges monthly fees, and offers zero ownership.

Every self-hosted alternative I tried was missing something: no AI discovery, no smart home integration, no karaoke, no proper duplicate handling.

THE SOLUTION

I built Vynl around Beets as the core engine — it handles the library management, metadata, and deduplication.

Everything else is custom: a mobile-friendly streaming UI (your own private Spotify), AI-powered playlist generation, cover art fetching, lyrics downloading for a built-in karaoke system, Sonos integration for multi-room playback, and remote access via Tailscale.

The experimental AI DJ takes a brief — party size, music style, duration — and generates a mixed set that actually crossfades between tracks.

It's not perfect yet, but it's fun.

HOW IT WAS BUILT

The whole thing came together over a weekend — about two and a half days, end to end.

It's fully vibe-coded: I didn't write a single line of code by hand.

The entire codebase came out of a session with Anthropic's Claude Sonnet 4.5, prompt by prompt.

The project is fully open source.

A lot of features are already baked in, with a long backlog of ideas I want to add when I find the time.

It already works really well as a daily-driver music library — and a mobile app is in the pipeline, designed to fully replace Spotify on the go.

KEY FEATURES

Beets Core

Beets is hardcoded into the backend. Auto-tagging, deduplication, metadata repair, album art fetching — all wrapped with custom logic to ensure a clean library with zero duplicates.

AI DJ (Experimental)

Tell it: 30 people, birthday party, 4 hours, mix of 80s and current pop. It creates a set and actually mixes the tracks with crossfading. Still experimental, but surprisingly good.

Karaoke Mode

Auto-downloads lyrics for your entire library. Fullscreen karaoke with synced text display — play at home karaoke nights with friends.

AI Playlists

Rate tracks and Claude AI builds your taste profile. Generates playlists by mood, activity, or vibe — entirely from your own library, not an algorithm selling you ads.

Mobile Streaming

Your own private Spotify. Stream from anywhere via Tailscale. Lossless at home (FLAC/ALAC), automatic AAC transcoding on mobile.

Sonos Integration

Discover, control, and group Sonos speakers. Play any track to any room. Party mode groups all speakers.

Music Discovery

Search and identify music. Find what you're looking for across your library, or discover tracks you forgot you had.

TECH STACK
DockerPythonClaude AIFFmpegBeetsTailscaleWhisper
CHALLENGES & LEARNINGS
01

Building an AI DJ that actually mixes tracks — crossfading, BPM matching, and energy flow — not just a shuffled playlist

02

Context-aware music intelligence: Spotify sends you the same songs on repeat. The real challenge is understanding what you need right now — are you working and need fast BPM to stimulate focus? Winding down and need something ambient? The AI needs to profile not just your taste, but your current state. Still actively experimenting with this.

03

Making the whole thing genuinely simple to self-host: Docker compose up, done