Self-hosting music
A friendly starting point for homelabbers who want a clean music stack: Lidarr for the permanent library, Aurral for discovery, Navidrome for streaming, and Tailscale for private access.
At a glance
Section titled “At a glance”| Core idea | Treat discovery as temporary until music proves it belongs in your permanent library. |
| Default posture | Add artists as taste anchors. Keep album monitoring at none. Add full albums intentionally. |
| Daily listening | Use flows for fresh music, then move the best finds into static Aurral playlists. |
The stack
Section titled “The stack”Self-hosting music works best when each tool has a narrow job.
| Tool | Role |
|---|---|
| Lidarr | Artists, albums, metadata, imports, and long-term library state |
| Aurral | Discovery, flows, imported playlists, and Lidarr adds |
| Navidrome | Main library and Aurral-generated playback over Subsonic |
| slskd | Soulseek client used by Aurral for flow and playlist downloads |
| Tubifarry | Optional Lidarr plugin for Soulseek-backed album searches in Lidarr |
| Amperfy | Native-feeling iOS playback against Navidrome |
| Tailscale | Private remote access without exposing admin tools publicly |
Two download paths
Section titled “Two download paths”Keep these separate in your head:
- Library albums — Lidarr (optionally with Tubifarry + slskd as indexer and download client) pulls full albums into
/data/music. - Flows and playlists — Aurral talks to slskd directly, picks candidates, and moves completed files into
DOWNLOAD_FOLDERunderaurral-weekly-flow/.
Aurral does not route flow downloads through Lidarr. Lidarr and Aurral can both use the same slskd instance, but they serve different jobs.
The guiding idea
Section titled “The guiding idea”The biggest mistake in self-hosted music is treating discovery as collection. Every saved album becomes storage, metadata, scans, backups, and maintenance. Let discovery stay temporary until the music proves it deserves to be permanent.
Aurral gives that temporary layer a real home. It surfaces new artists, builds rotating flows, imports outside playlists, and writes generated tracklists into its own folder instead of dumping every find into the main music library.
Practical rules:
- Add artists when you want discovery to learn from them.
- Add full albums only when you really enjoy the album.
- Use flows as the main source of new listening.
- Move standout tracks into static Aurral playlists.
- Let Lidarr focus on music you actually want to keep.
Recommended Lidarr defaults
Section titled “Recommended Lidarr defaults”For a discovery-heavy setup, keep Lidarr and Aurral defaults conservative. The important choice is monitoring.
| Default | Recommendation |
|---|---|
| Artist monitoring | Enable when you want the artist in your library graph |
| Album monitoring | Default to none. Add albums intentionally. |
| Search on add | Search for albums you know you want, not every artist |
| Tags | Use an Aurral tag for discovery-driven additions |
| Quality profile | Pick the profile you actually want long term |
In Aurral onboarding, you can optionally apply Davo’s Community Lidarr Guide — an Aurral-friendly quality profile, custom formats, and naming scheme. You can also apply it later from Settings → Integrations → Lidarr.
Map this to Aurral by setting default album monitoring to none while still adding the artist. The artist library becomes a set of taste anchors. Albums become deliberate commitments.
Lidarr, Tubifarry, and slskd
Section titled “Lidarr, Tubifarry, and slskd”If you want Soulseek-backed album downloads inside Lidarr:
- Run Lidarr nightly for plugin support.
- Install Tubifarry from its GitHub plugin URL.
- Run slskd as the Soulseek client.
- Add slskd in Lidarr as both an indexer and download client.
- Align download paths or configure remote path mapping so imports land in
/data/music.
For Aurral flows and playlists, connect slskd directly in Aurral onboarding or Settings → Integrations → slskd. Aurral sends searches to slskd, selects the best candidate, and moves completed files from slskd’s download directory into your DOWNLOAD_FOLDER.
Aurral and slskd are separate from Lidarr album downloads
Section titled “Aurral and slskd are separate from Lidarr album downloads”- slskd finished downloads:
/data/downloads/slskd/complete - Aurral output:
/data/downloads/aurral/aurral-weekly-flow/<playlist-id>/ - Lidarr library:
/data/music
Mount the same host tree at /data in Aurral, Lidarr, slskd, and Navidrome. See Shared storage for the full layout.
Use Aurral as the glue
Section titled “Use Aurral as the glue”Aurral works best when it connects the stack without trying to own every part of it.
Use Aurral for
Section titled “Use Aurral for”- Discovering related artists and browsing trends
- Searching artists and albums before sending them to Lidarr
- Building scheduled flows and discover playlists that stay fresh
- Importing outside playlists into a self-hosted format
- Publishing generated libraries and playlists to Navidrome
- Tracking requests, downloads, and playlist jobs in History
Use Lidarr for
Section titled “Use Lidarr for”- Long-term artist and album state
- Metadata, quality profiles, root folders, and imports
- Album searches for releases you want to keep
A low-storage workflow
Section titled “A low-storage workflow”- Add only meaningful artists to Lidarr through Aurral.
- Keep default album monitoring set to
none. - Let Aurral discovery use those artists as taste anchors.
- Build one or more flows for regular listening.
- Listen in Navidrome or Amperfy.
- Move standout tracks into a static Aurral playlist.
- Add full albums to Lidarr only when they clearly earn it.
Flow strategy
Section titled “Flow strategy”Treat flows like radio stations you control. Start with a small number of useful flows instead of creating one for every genre.
| Flow idea | Recipe |
|---|---|
| Weekly discovery | Balanced mix of Discover, Trending, and Focus |
| Library adjacent | Related picks connected to artists already in your library |
| Deep cuts | Adventurous tags and related artists, with Deep Dive on |
| Comfort rotation | Mostly Library with a small amount of Discover |
You can also adopt discover playlists such as Release Radar from the Discover page and promote them into your Playlists library.
Keep flow sizes moderate — roughly 25 to 75 tracks. Schedule them weekly unless you listen through them faster. Use Focus when you know the mood, tag, or related-artist lane you want.
Static Aurral playlists are the memory layer. They preserve individual finds without pretending every find should become part of the core library.
For source mix, focus matching, and fallback behavior, see Flows.
Storage, Navidrome, and file reuse
Section titled “Storage, Navidrome, and file reuse”Keep the main Lidarr library and Aurral-generated folders separate on disk. That makes scans, cleanup, backups, and permissions easier to reason about.
Example stack compose (matches docker-compose.example.yml):
services: aurral: image: ghcr.io/lklynet/aurral:latest restart: unless-stopped ports: - "3001:3001" environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} volumes: - ${MEDIA_ROOT:-/srv/media}:/data - ${CONFIG:-./config/aurral}:/config
lidarr: image: lscr.io/linuxserver/lidarr:latest restart: unless-stopped ports: - "8686:8686" environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} volumes: - ${MEDIA_ROOT:-/srv/media}:/data - ${LIDARR_CONFIG:-./config/lidarr}:/config
slskd: image: slskd/slskd:latest restart: unless-stopped ports: - "5030:5030" volumes: - ${MEDIA_ROOT:-/srv/media}:/data - ${SLSKD_CONFIG:-./config/slskd}:/app
navidrome: image: deluan/navidrome:latest restart: unless-stopped ports: - "4533:4533" environment: - ND_SCANNER_PURGEMISSING=always - ND_DATA=/config volumes: - ${MEDIA_ROOT:-/srv/media}:/data:ro - ${NAVIDROME_DATA:-./data/navidrome}:/configAfter startup:
- Lidarr root folder:
/data/music - slskd downloads:
/data/downloads/slskd/complete - Aurral
DOWNLOAD_FOLDER:/data/downloads/aurral(set during onboarding) - Navidrome scans:
/data/musicand/data/downloads/aurral
File reuse
Section titled “File reuse”In Settings → Playlists, choose how generated playlists handle files that already exist:
| Mode | When to use |
|---|---|
| Download | Simple first setup and troubleshooting |
| Reuse existing files | Same-disk efficiency when Aurral or Lidarr already has a matching track |
Reuse requires Aurral to mount Lidarr’s library paths at the same container locations Lidarr reports. See Playlist imports — file reuse.
iOS and remote access
Section titled “iOS and remote access”For daily iOS playback, use Amperfy with Navidrome:
- Run Navidrome at home.
- Connect Amperfy through Subsonic.
- Install Tailscale on the server and phone.
- Use the server’s Tailscale address or MagicDNS name.
For Aurral discovery on iOS, join the Aurral Discord for beta app access.
Maintenance rhythm
Section titled “Maintenance rhythm”A self-hosted music setup stays healthy when the routine is light. The goal is a smaller, better library with a discovery system around it.
Weekly
Section titled “Weekly”- Listen through current flows.
- Move standout tracks into static playlists.
- Add only the albums that clearly deserve it.
Monthly
Section titled “Monthly”- Review recommendation feedback and tune Discover sections.
- Remove stale static playlists.
- Check History for failed Lidarr imports and playlist downloads.
Aurral keeps fresh music moving. Lidarr keeps the permanent collection orderly. Navidrome and Amperfy make listening easy. Tailscale keeps it reachable without turning the whole stack into a public service.