Jonathan aafd8b15d5 fix: scan populates each followed artist's full discography (unmonitored)
A followed artist previously showed only the one owned album ("of 1")
because scan_library recorded just the resolved release. Now scan
browses each artist's full MusicBrainz release-group list once per
run and stores it as unmonitored MonitoredRelease rows, matching
web-follow behavior. The owned album keeps its monitored/fulfilled
state via ON CONFLICT DO NOTHING.
2026-07-11 17:49:26 +02:00

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:

  1. Acquisition enginein progress. Given an album/track, find the best available source, download it, tag it against MusicBrainz, and file it into a clean library.
  2. Library manager — Lidarr-style monitoring, wanted lists, auto-grab of new releases.
  3. 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.

S
Description
Self-hosted multi-source music acquisition tool replacing Lidarr (Qobuz/Soulseek/YouTube/Spotify)
Readme 2.5 MiB
Languages
Python 50.7%
TypeScript 45.4%
CSS 3.6%
Dockerfile 0.2%
Shell 0.1%