60f3cd0df9a991c46b3ba01cc1f1c1fd70c15122
Adds Candidate (per-job download candidates found by the pipeline) and LibraryItem (per-request imported album, deduped on artist+album) tables. LibraryItem.requestId is @unique since Request.libraryItem is a one-to-one back-relation (required for Prisma validation, matching the existing Job.requestId pattern).
Lyra
Self-hosted, multi-source music acquisition and library tool — a replacement for Lidarr + NZBget. Lyra discovers, ranks, downloads, tags, and organizes music across sources of differing quality: Qobuz (lossless/hi-res), Soulseek (P2P), YouTube (universal lossy fallback), and Spotify (discovery/metadata only).
Status
Early design. Built in three slices:
- Acquisition engine — in progress. Given an album/track, find the best available source, download it, tag it against MusicBrainz, and file it into a clean library.
- Library manager — Lidarr-style monitoring, wanted lists, auto-grab of new releases.
- Discovery — Spotify/recommendation-driven finding of new music.
Architecture
Three Docker containers on a home server:
- Next.js app — UI + API (search, request, queue, progress, settings).
- Python worker — all source integration (streamrip, yt-dlp, slskd client, beets/mutagen), running the six-stage acquisition pipeline.
- slskd — off-the-shelf headless Soulseek daemon.
Postgres is the shared source of truth; a shared /music volume is the library.
See docs/superpowers/specs/ for the full design.
Description
Self-hosted multi-source music acquisition tool replacing Lidarr (Qobuz/Soulseek/YouTube/Spotify)
Languages
Python
50.8%
TypeScript
45.3%
CSS
3.6%
Dockerfile
0.2%
Shell
0.1%