mrwick/notebook

drag or arrow keys to move · scroll to zoom · esc to exit

guides

Replace Spotify with Navidrome

Updated

This guide serves a music library that you already own, and plays it on a phone and in a browser. It does not cover where the files come from.

Prepare the library

Navidrome reads tags, not folder names. Each file needs correct artist, album, title, and track number tags. A tag editor such as MusicBrainz Picard fixes a messy library in one pass. A tidy layout still helps you:

music/
  Artist/
    Album/
      01 Title.flac

Run Navidrome

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    ports:
      - '4533:4533'
    volumes:
      - ./data:/data
      - /path/to/music:/music:ro

The :ro flag mounts the library read-only, so Navidrome cannot change your files. Open port 4533 once to create the admin account. Navidrome then scans the folder.

Reach it from outside

My Navidrome runs on a home machine that has no public address. The VPS proxies to it over the tailnet:

music.example.com {
	encode zstd gzip
	reverse_proxy 100.64.0.10:4533
}

The address 100.64.0.10 stands for the home machine’s tailnet IP. The block has no import sso. A phone app cannot pass a web login page, so Navidrome keeps its own login. Use a long password.

Play on the phone

Install Symfonium, a paid Android player for Subsonic servers. Add a server with the URL https://music.example.com and your Navidrome login. Turn on offline caching for the playlists that you want on a flight.

Play in the browser

Navidrome has its own web page. I find it plain. Feishin is a web client for Subsonic servers, and it runs as its own site. The browser then streams from the Navidrome hostname, so both hostnames must stay reachable.

Check the result

Play a track on the phone over mobile data. Then turn on flight mode and play a cached playlist. Both should work.

What is still open

I have requested my Spotify listening history export. I cancel Spotify only after the library is complete. The note Leaving Spotify tracks that decision.