Navidrome
Greetings Tinkerers!
In the past couple of months I’ve been tinkering with some cool ways of modifying my homelab and writing k8s operators (work stuff!).
Alright so … as y’all know I am a huge music addict…
(cough!.)
… and my Spotify Premium membership just ended ( forgot to create a mandate … I guess a good thing? ), while looking to renew I was wondering why don’t I just self host something which can replace spotify for me.
I had couple of requirements for me to consider something as a spotify replacement-
- Scrobble things to last.fm
- Now playing on my discord through rpc
- Able to add/remove songs easily along with multi device syncing.
Previously, I used to have a single SMB server and used Mixplorer to pull songs to all my devices but … come on good UI is needed as well and Mixplorer isn’t really a music player lol.
Navidrome setup

On r/selfhosting, I’ve come across the very same thing I was looking for Navidrome.
Navidrome can be used as a standalone server, that allows you to browse and listen to your music collection using a web browser.
It can also work as a lightweight Subsonic-API compatible server, that can be used with any Subsonic compatible client.
Off I went into the Installation, Got the arm64 for my raspberry pi cluster and got it running on my k8s setup,
The provided docker-compose configuration was modified to a k8s-deployment manifest alongside creating a hostpath PersistantVolumes and PersistantVolumeClaims, since I had a dedicated SSD to store needed things
Future TODO need to look at backup solutions now!
Now for exposing it publicly we got Cloudflare tunnels. I came across this amazing k8s controller STRRL/cloudflare-tunnel-ingress-controller which lets you have cf-tunnels as Ingress class, This very blog is using cf-tunnels to be exposed to my domain pacsui.me
1pacchu@pacsrv:~$ kubectl get ing -n blog blog-via-cf-tunnel
2NAME CLASS HOSTS ADDRESS PORTS AGE
3blog-via-cf-tunnel cloudflare-tunnel _REDCATED_ 4f5a42b3-3ce7-4cdc-87c1-813b4e743fdb.cfargotunnel.com 80 35d
So yeah pretty handy instead of tinkering with nginx ingress controller and openvpn things that I’ve been doing previously.
I’ll attach the repo of all the manifest files and scripts later here
Navidrome UI
Its a pretty minimalistic UI which has all essential things needed, Alongside has its own authentication as well.
K8s
1pacchu@pacsrv:~/navidrome$ kubectl get -f ./
2NAME READY UP-TO-DATE AVAILABLE AGE
3deployment.apps/navicord-discord-rpc-deployment 1/1 1 1 15h
4
5NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
6persistentvolume/navidrome-pv 50Gi RWO Retain Bound navidrome/navidrome-pvc manual <unset> 17d
7
8NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
9persistentvolumeclaim/navidrome-pvc Bound navidrome-pv 50Gi RWO manual <unset> 17d
10
11NAME READY UP-TO-DATE AVAILABLE AGE
12deployment.apps/navidrome 1/1 1 1 17d
13
14NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
15service/navidrome ClusterIP 10.43.57.30 <none> 4533/TCP 17d
16
17NAME CLASS HOSTS ADDRESS PORTS AGE
18ingress.networking.k8s.io/navidrome-cf-tunnel cloudflare-tunnel navidrome.prashantnook.in *** 80 17d
Clients!
Now for Clients, I’ve decided to go with just the web application for my desktop since its pretty slick and lightweight to be run, While for android there are many cool ones but I am using Tempo@fdroid
Android
Now that I have basic ecosystem setup now have to get some content into it. I have had attached a 256G SSD to my PI dedicated for music and video storage.
Spotify <-> Navidrome migrations
Now for the important things … how do I bring my spotify songs into navidrome, I have over 1600+ Songs on spotify, Sadly spotify didnt have any google takeaway like feature, also Downloading songs is Piracy (duh) so we’re going off legal stuff here ;)
If Buying isnt owning, Pirating isnt stealing :D
To be honest Streaming is far better than buying songs induvidually for 23 INR like back on google play music days (2014s).
Spotdl
Anyhow, To download spotify songs I came across this amazing tool spotdl which queries youtube for the song name and downloads via ytdlp.
Wrote a simple script to fetch all my liked songs and make a long txt file containing urls. This was using spotipy.
1pacchu@pacsrv: $ cat liked_song_urls.txt | head
2https://open.spotify.com/track/3RXUgPNIbUgFxsDWuBQEt6
3https://open.spotify.com/track/0MHStU0muAIEMbwdnebYu2
4https://open.spotify.com/track/0tCbGwXOpEiYIxkr8S2FAr
5https://open.spotify.com/track/02sy7FAs8dkDNYsHp4Ul3f
6https://open.spotify.com/track/5sBDrrtLGbV64QJnEqfjer
Now its just a matter of looping the big list and downloading via spotdl.
and viola populated the entire pv with some of my spotify songs.
1pacchu@pacsrv: $ ls
2...
3'美波 - DROP.mp3'
4'美波 - ホロネス.mp3'
5'藤澤慶昌 - 魔術の授業.mp3'
6'양방언 - No Boundary - Live at Sejong Center for the Performing Arts in Seoul, 2018.11.21.mp3'
7'양방언 - 暁のヨナ/Akatsuki-no-YONA.mp3'
8
9pacchu@pacsrv: $ ls | wc -l
10707
Although it didn’t alot of niche songs I listen to (over 1000+) this really suffices me since all my recents are included in this!
Another missing thing was Spotify Discovery and its Smart Shuffle, Sadly can’t do anything on the AI side of things so currently working on a script that will periodically poll spotify api for Discover Weekly playlist.
spotdl supports full album downloads so I can essentially download Discover Weekly basically.
Last.fm Integration
I use itspacchu@lastfm to keep track of my scrobbing data, Luckily lastfm is natively supported by navidrome
Popping in my client and secret and I got scrobbing working!! (The cool chart in beginning of this blog ^^)
One issue I’ve noticed is during listening to songs made by multiple artists like
Stephen Schwartz/Ariana Grande/Stephen Oremus
instead of
Stephen Schwartz, Ariana Grande, Stephen Oremus
which sorta ruins the Lastfm album arts and Scrobbing history, Maybe I can work on a fix for this?
Discord RPC Integration
Now for the final (not so) important thing, Discord Listening to.. Status messages, Spotify integration is strong with discord but navidrome doesn’t really have any native support for discord RPC.
I found this which claims to connect with navidrome server and send discord rpc status logixism/navicord.
I am in process of rewriting this on my own with some additional features with proper album art fetching and in GO!
It works!
Well now I shall be now binging songs through Navidrome, There are alot more things to do to make it as seamless as spotify,
Maybe have a discord bot to automatically download songs based on spotify link being provided to it, or
Anyhow hopefully I will see how long I can run this before my laziness kicks in :D
Bonus ramblings (Asahi Appreciation)

If you’re wondering why it says pacashi… I am now running Asahi Linux on my Mac :D
Daily driving this is really fun compared to Macos, Although its sometimes pain to run this due to limited 8G ram of my M1 air and lack of USB C Display out support (yet as of now).
If y’all haven’t heard of asahi linux project, Enjoy
Maybe I might write a post about it in future about my experiences with Asahi!
Cheers!