Granularr
Per-user music discovery and live playlists for a Lidarr / Navidrome stack.
Granularr is an orchestrator, not an all-in-one. It tracks each user's taste through Last.fm or ListenBrainz, asks Lidarr for music the library doesn't have yet, and curates playlists the user owns in Navidrome — while every other tool in your setup keeps doing what it does best.
No extra downloaders, indexers or metadata editors. It never grabs files, never retags them, and never plays music.
How it works
- Log in with Navidrome. There are no Granularr accounts — if you can log into Navidrome, you're a user. Link Last.fm and/or ListenBrainz.
- Pick a playlist. Adopt one you already have, or make a new one, and set how many of its slots Granularr may manage.
- Granularr fills the slots. Candidates from your listening history get resolved to MusicBrainz IDs first, so you never get the wrong artist with the right song title.
- Missing songs get requested. Lidarr is asked by MBID; Prowlarr, Tubifarry and slskd do the actual work, exactly as they always have.
- Keep what you like. New songs arrive as visitors on a timer. Favorite one, mark it kept, or drop it into another playlist and it becomes a permanent resident. Ignore it and it quietly phases out again.
Playlists are written as you, with your own credentials, so they stay yours and work in any Subsonic client. Granularr only ever touches the entries it added itself — your own picks are never moved or removed.
What it does and doesn't
Granularr does
- Taste tracking, per user
- Candidate generation from playlist recipes
- MusicBrainz resolution and dedup
- Acquisition requests to Lidarr
- Collaborative playlist sync
- Visitor / resident lifecycle and an audit log
Granularr doesn't
- Download or grab anything itself
- Tag, fix or rename your files
- Serve or play music
- Talk to slskd directly, ever
- Choose releases or pick indexers
- Manage music it didn't bring in
Status
Granularr is written in Go, keeps its own SQLite database, and speaks to everything over HTTP APIs only. It's in active development and not yet released — the source isn't public here yet. This page is a placeholder while that changes.