Music Discovery & Metadata — Navidrome Plugin Stack
Self-hosted Discover Weekly + automatic cover art / artist metadata via Navidrome's plugin system.
Active plugins
| Plugin | Capability | Source |
|---|---|---|
apple-music v0.1.1 |
MetadataAgent (album art, artist images, bios, similar artists) | navidrome/apple-music-plugin |
listenbrainz-metadata-provider v2.0.2 |
MetadataAgent (MusicBrainz / Cover Art Archive fallback) | kgarner7/navidrome-listenbrainz-plugin |
listenbrainz-daily-playlist v5.0.2 |
Daily Jams playlist generator | kgarner7/navidrome-listenbrainz-daily-playlist |
lrclib-lyrics v3.0.1 |
Synced + plain lyrics fetcher | LRCLIB |
All .ndp files live at ~/.navidrome/data/plugins/.
Critical config — ~/.navidrome/navidrome.toml
MusicFolder = "/Users/karthik/Music/Library"
DataFolder = "/Users/karthik/.navidrome/data"
Port = 4533
Address = "0.0.0.0"
ScanSchedule = "@every 6h"
EnableTranscodingConfig = true
RecentlyAddedByModTime = true
GroupAlbumReleases = true
CoverArtPriority = "cover.*, folder.*, front.*, embedded, external"
Agents = "apple-music,listenbrainz-metadata-provider"
LogLevel = "info"
[Plugins]
Enabled = true
Folder = "/Users/karthik/.navidrome/data/plugins"
Two non-obvious settings that matter
Agents = "apple-music,listenbrainz-metadata-provider"— without this, Navidrome ignores plugins and only tries the built-in (unconfigured)lastfmagent. Plugins must be explicitly listed in priority order; first hit wins. Symptom of missing: album/artist art never auto-fetches even when albums are opened. Pluginkvstore.dbfiles never get written to.CoverArtPriority = "cover.*, folder.*, front.*, embedded, external"— default putsembeddedfirst, which is wrong when m4a/MP3 files have stale or wrong embedded art (e.g. Apple Music's Telugu poster baked into Tamil tracks). Folder priority lets you drop acover.jpginto an album folder and have it win over embedded.
How metadata fetching actually works
- Agent chain only fires when you open an album in any client (calls
/rest/getAlbumInfoSubsonic endpoint internally). - Once fetched, results are cached forever in the album's
external_info_updated_at/large_image_urlDB columns. - It does NOT bulk-fetch during scan. 127 missing covers won't auto-fix; they fix one-by-one as you browse.
- For albums where Apple Music + MusicBrainz both miss (e.g. obscure Tamil EPs), drop a
cover.jpginto the album folder manually.
Per-plugin DB activation (after install)
Plugins must have enabled=1 AND all_users=1, all_libraries=1 in the plugin SQLite table, or they're inert. UI doesn't always set these correctly — verify with:
sqlite3 ~/.navidrome/data/navidrome.db "SELECT id, enabled, all_users, all_libraries FROM plugin;"
For apple-music, also enable album images (off by default):
UPDATE plugin SET config = json('{"enable_album_images":true,"enable_artist_biography":true,"enable_artist_images":true,"enable_artist_url":true,"enable_similar_artists":true,"enable_top_songs":true,"countries":"in,us,gb","cache_ttl_days":7}') WHERE id='apple-music';
countries="in,us,gb" — India first for Tamil catalog coverage.
Daily Jams playlist (recs only, no downloads)
- Plugin runs on configurable hour (24-hour clock)
- Hits ListenBrainz API for daily/weekly recs (Weekly Exploration, Weekly Jams, Daily Jams)
- Creates Navidrome playlist containing only tracks already in your library that match
- Skips anything you don't own — no downloads, no library pollution
ListenBrainz user mapping: karthik ↔ imkarthikk.
Why this beats Explo
Explo was tried first (binary at /Users/karthik/Developer/explo) but downloaded all recommendations as MP3s into Music/Library/explo/. Each track had its own album metadata in ID3 tags, so Navidrome surfaced 50 single-track "albums" in Recently Added — visually polluted.
Removed: Explo source tree, binary, archive folder, and cron entry.
Requirements
- Navidrome ≥ 0.61.0 (current: 0.61.2 ✓)
- ListenBrainz account with listening history (more history = better recs)
Manual cover-art recipe (when agents miss)
- Search MusicBrainz:
https://musicbrainz.org/ws/2/release/?query=release:NAME+AND+artist:ARTIST&fmt=json - Pick the release ID, hit Cover Art Archive:
https://coverartarchive.org/release/<MBID>/front-1200 - Save as
cover.jpgin the album folder touchthe folder to trigger Navidrome watcher rescan
Backups of replaced art kept as cover.jpg.<reason>-bak in each folder (per the "never delete" rule in music/CLAUDE.md).