Files
Lyra/README.md
T
2026-07-11 18:34:00 +02:00

43 lines
2.2 KiB
Markdown

# 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
Built in three slices:
1. **Acquisition engine** — ✅ **done**. Resolve a request against MusicBrainz,
match/rank across Qobuz/Soulseek/YouTube, download the best source into an
isolated staging dir, verify completeness, tag (mutagen), and atomically promote
the clean album into `Artist/Album (Year)/## Title.ext`.
2. **Library manager** — ✅ **done**. Watched artists (live MB search + follow),
per-release monitor toggles + auto-monitor-future, a wanted list with retry +
quality-upgrade window, and a worker "monitor" that discovers new releases and
auto-grabs through the acquisition pipeline. Plus a **library scan** that ingests
existing on-disk albums as have + monitored + followed, and a per-artist
studio-only / show-all release-type filter.
3. **Discovery** — ⬜ **not started**. Spotify/recommendation-driven finding of new music.
**Operational notes:** the monitor is **off by default** — set `monitor.enabled=true`
(+ optional `monitor.*` tuning) in the `Config` table to activate auto-grab/upgrade.
Credentials are entered in Settings and persist across `docker compose up -d --build`
rebuilds (don't use `down -v`). Tests run against a separate `lyra_test` database (a
guard blocks the live DB). Deferred hardening + the full roadmap live in the
implementation-plan "Notes" sections under [`docs/superpowers/plans/`](docs/superpowers/plans/).
## 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/`](docs/superpowers/specs/) for the full design.