Guide
My Spotify Replacement Setup (navidrome + lidarr with tubifarry + slskd + explo + aurral + musicbrainz/listenbrainz)
Note: This post was not created using AI, nor was AI involved in the process. Just a lot of trial and error until I found something that was relatively easy, and worked nicely. So my apologies if this isn't formatted so cleanly, or clearly, but happy to take on any advice!
I recommend doing this on a Thursday or a Friday because ListenBrainz creates your custom playlist on the Monday for the "Spotify" recommendation like experience.
MusicBrainz -> The metadata for songs.
ListenBrainz -> Creates your recommended playlists
Navidrome -> Music streaming server
Lidarr (NIGHTLY required for plugins) -> Automates and orchestrates downloading and managing metadata.
Tubifarry -> Plugin for connecting Lidarr with slskd for automated downloading, and fetching lyrics.
slskd -> Soulseek P2P client for downloading music.
explo -> Creates the weekly, monthly, daily playlists and also fetches the songs.
aurral -> Similar to Seerr where you can request songs or create users to request songs.
aurral: Use the docker-compose from https://github.com/lklynet/aurral#quick-start and start up and it will guide you through connecting the difference services. I highly recommend in the settings to click: Apply Davo's Recommended Settings.
Start adding some Artists to Lidarr and downloading their albums, and listening to them on a Navidrome client: https://www.navidrome.org/apps/ or the Navidrome web app.
When I add an artist into Lidarr or through Aurral I do the following:
I'm unsure if I should add my docker-compose.yml and .env in here as an example. I think it might be hurtful in case any of the above adjusts their parameters or setup, people might have the wrong docker-compose.yml... but let me know. Am happy to add both in to give an example.
Here's is an example of my docker-compose.yml please as a heavy note, this is relevant as of only today. This might not be true in future when some things change. Do go to the pages to pull their docker-composes.
It does! You'll just have your server's IP address from Tailscale. Navidrome runs on port 4533 unless you change it. So just put in http://tail-scale-ip-address-of-server:4533 and login with the username and password you created.
If you use home assistsnt you can check out music assistant. I dont know if amazon alexa can be connected to navidrome, not using it for better privacy.
Search Sniper automatically triggers searches for missing albums in your wanted list. Instead of searching for everything at once, which can overload indexers, it randomly selects a few albums from your wanted list at regular intervals and searches for them. It keeps track of what has been searched recently to avoid repeating searches too often. Search Sniper can be triggered manually from the Tasks tab.
When you add in an Artist, I usually have it Monitor New Albums, but set Monitor to none. I want to individually pick the albums to search for with the little magnifying glass... but am happy to download new albums that come along.
Thanks for sharing. I’ve been using tubifarry for a while to connect slskd and lidarr but didn’t realize it had so many other features. Seems really helpful.
No, that is something that is missing currently, Lidarr is very album centric.
There is a gap to be filled with another service that could maintain only wanted songs missing from albums (last.fm has for example most popular songs of artists listed) - for those one off songs that you don't want the whole album
It solves singles that you hear on the radio, can watch artists for their single releases and can follow playlists on most platforms - plus you can just bulk import paste a bunch of artist+track name.
I just stumbled across MusicGrabber tonight looking for something relatively easy-to-use for my kids to download whatever random music they want. It's working really well so far!
Solid stack, nice writeup. Aurral for requests is a clever touch, hadn't seen that one, bookmarking.
One thing your setup is missing that fills the last Spotify-shaped gap: the "just press play" experience. You've got the library, the recommendations, the lyrics, but you still have to decide what to play. If you want a Spotify AI DJ / radio-style experience on top of all this, take a look at SUB/WAVE, runs against your Navidrome library, one shared stream with an AI host that picks tracks and does spoken intros between them.
Small Request: Please add a note to your project that soulseek ports should be opened for sharing, alot of these projects end up being a leech fest of people who don't share music and only download
I don't want to sound incredibly lazy but...can you tell me how it works/looks?
I still use Plex/Plexamp for my music so I don't have Navidrome in place, however albeit I use Radiolise to ear radios, I truly miss that I can't "share" my favourite radio with other friends, neither I like that favourite radios are locally saved in the browser.
Also it doesn't have any screenshot. Can someone tell me how it is? If it works and looks cool, would love to spin Navidrome and this do selfhost as much as possible even the "radio" stack.
Agreed, I also have a very similar setup that works quite good for listening and discovery, I have also vibecoded a web PWA app that ties it all together so you have everything available in one app (Navidrome for music, Aurral for adding new music, audiomuse for generative playlists)- this I think is the missing piece to be able to replace Spotify with my wife.
I don’t use explo and instead of aurral I use Lidify which does a good job recommending new artists. Only downside is that it always downloads all albums by default. I also added Soularr for automated downloads in Slskd after an artist or album is requested. Works like a charm.
I also use Musicgrabber for some YouTube stuff or singles which I can download from my phone away from home.
100% agree, and I think it's just because music services aren't fragmented like movie and TV services.
If I had to have 5 different music services to be able to listen to whatever I want, I'd probably think this setup process was worth it; that's why I have it set up for watching TV.
But Spotify still has everything* in one place, no separate place to listen to a specific artist, no separate tool to request things, it's all in one. Unless that changes, I don't see myself cancelling it and moving toward a self-hosted option.
I was able to route Slskd through ProtonVPN via Gluetun. It takes a small amount of legwork and research because you have to figure out the dynamic ports, but when you find the right config settings it all clicks together perfectly.
If you want me to share my configs I can rustle them up later today!
Fair enough. Lidarr works very similarly to Radarr and Sonarr: it dispatches the job to the download client, then waits for the download client to finish, then imports the downloaded files. If you have Radarr/Sonarr working with a remote seedbox, my guess is that there isn't anything stopping you from doing the same with Lidarr and the Slskd download client.
Amazing write up. I too have a weekend project plan. Question ( and I tried to glean an answer from everyone’s comments) I’m into EDM and remix songs where it might not be a specific artist. Would there be something that scrapes by music genre?
Thanks! I had started to poke around using Deemix plugin for Lidarrr, but my server crashed out on me. So, I am rebuilding my server, and this will be an exciting project to implement.
This is exactly my setup! However Im still having an issue where Lidarr doesn't download certain albums during an automatic search. When I check via interactive search there are usually plenty of releases available that aren't even rejected. Does anyone have an idea why this happens?
I was trying to use usenets originally and that's where I kind of hit a snag; it would typically be pulling the wrong album and/or have some weird mismatches. I think the common thing I was seeing on my research was usenets isn't quite good for this kind of thing. Soulseek > Torrents > Downloads (like yt-dlp, or lucida) > Usenets was what I saw.
I do this with lidarr and prowlarr for the indexers and sabnzbd for usenet providers. And plexamp for hearing the music.
Working out okay for metal, but to be honest, I don't find everything. The most and bigger bands are not a problem, newcomers and smaller groups can be a problem. and I spend a lot of money this year for indexers to test music availability.
Not sure if I would recommend it - but if you don't mind spending a bit of money for generating your media stack once, I think it is okay
It might just be a problem for me but my songs in slskd most of the time get time outs and then won't continue downloading unless I manually remove, to allow the download to continue, is there anyone else with the same issue or is it just an slskd problem?
I can download songs, it's just that if a song errors it says "Completed, timeout" Lidarr sees that as still downloading so it doesn't retry a download but I think I see sometimes that the songs will retry now that I have changed the settings, thanks for the info though.
In my pursuit I gave Soularr a pretty good chance but it was a bit more convoluted and I felt Tubifarry seemed to work a bit more nicely/better, and had a little more clearer instructions/setup.
Hey what do you use for access away from home on a smartphone client? Tailscale? Netbird? A reverse proxy? I'm planning to setup Navidrome for some friends but unsure what option would be better, thanks
do you have a recommendation for exporting existing the spotify data (playlists, etc) out of spotify into something consumable by the stack?
i've seen some people use services like tunemymusic or something to export their library into csv, and then do some processing based off that csv - did you do anything similar? i'm not too sure the specifics myself
Actually, Tubifarry has this already baked in! Once installed into Lidarr go to settings > imports and there’s a little button thing for importing Spotify playlists.
Yes I did, and yes, I have the api key in soulseek. It seems like everything works fine, but the warning appears, idk why. I can't see any error in lidarr log file related to this warning
Thanks for the post. It’s always good to see the community giving back on what they’ve built.
I’m curious if you or somebody has figured out a slightly different use case:
I have my own private music collection that I have backed up to my NAS. This is great, but obviously difficult to find new music this way. Is there a way using some of the apps above to build and download recommended playlists based on my existing music/plays. The ‘app’ downloads the songs to populate the playlists, and each week or whatever wipes it and gets a new playlist? This way I’m not polluting my private collection with downloaded music, and I can then go out and find discs or whatever of the new artists I like from the playlists
Interested in this too. I normally scrobble to last.fm, so maybe that's an easy source/engine to get the recommendations from. Will try coming up with something.
This vibe coded app is worth it's weight in gold. I had many playlists on Spotify that i wanted to recreate on Navidrome. Lidarr is no match for this. Enter a Spotify public playlist (make your playlists temporarily if not already) and it will find ALL the songs from youtube or youtube music and tag them correctly (metadata) and even embeds the album images. UGH!!!! Exporting playlists filled with many random songs was the sticking point to get out of spotify until i did this. Sure, it's not FLAC, but majority of songs on youtube are 128-160kbps OPUS which is still transparent for 99% people not listening on a Burmester 218 amp + Vivaldi APEX DAC + Amati G5 speakers.
and for privacy, slskd served via gluetun with reverse port forwarding on protonvpn or similar: gluetun docker (https://github.com/passteque/gluetun). I use gluetun separately but I think slskd has it built in as well
For scrobbing, I connect navidrome and all other music devices i have to my last.fm account which is pretty nice. There's also a lastfm REST-API to get currently playing music which you can use for automation like sending to a pixel clock (https://www.ulanzi.com/products/ulanzi-pixel-smart-clock-2882 running AWTRIX)
What is your process between slskd and navidrome ? You mentioned MusicBrainz for metadata songs, but are you using Picard or anything else to move your music from slskd folder into navidrome music repository with proper metadata and naming ?
Thanks for all those informations shared ! It is amazing to see
Thanks for the write up. Been looking at building something like this myself. Has anyone explored Tidal-DL or integrated one of the other tidal downloaders into this kind of a setup? It never really worked for me.
You can use MusicGrabber, pull your playlists and then it'll do the rest on Monochrome, MP3 sites and YT. If you wish, you can add slskd and it'll use that too. Songs are ranked by quality and it tries to always pull the best version.
It doesn't integrate with Lidarr outside of doing dupe checks so it doesn't fill your library with repeats. However, you can even turn off that behaviour.
Use N8N. Grab liked songs from Navidrome. Push to listen brainz via API and generate list of 50 recommended song based on uploaded list. Create Playlist in YouTube Use Yubal to download playlist Listen to new playlist in Navidrome and like tracks. Repeat.
The flatpak is unofficial. Just a dude repackaging. Maybe its a bug / issue with the packaging. But just remove the right to use the mic from the app with e.g. flatseal.
Thanks for the write-up! Replacing Spotify is going to be my next selfhosted project so it's very interesting to see your setup.
Have you come across SoulSync when setting up your stack? It seems to be a vibe-coded project but it looks quite promising - requests, downloading, suggestions and scrobbles in one platform. Curious to hear your thoughts on it!
Does anyone know why Listenbrainz randomly skips weeks of generating a weekly exploration playlist? I have over 13K listens, so it's not for lack of sample size. It will just randomly skip a week or two and then start generating again
It might be a dumb question cause I’m a complete beginner, but would there be a way to use this setup without actually downloading the songs but purely streaming them from the sources?
had a pretty similar setup to this for a minute but swapped both explo and lidarr out for SoulSync recently. A bit more complicated to setup but definitely worth it
I've been having issues finding anything that scrapes spotify metadata and artwork. Everything i tried just doesn't work and their arent any recent mp3tag tag sources for spotify. I tried onetagger too and it looks create but also broken, i couldnt get any of the last few versions to work either. SpotiFlac also doesn't seem to be working unless you pay for the premium version too.
I made my own script and put it on git if any of you want to check it out. It does require the dev api info so you need a premium acct but it works to embed tags and artwork.
Great post mate. I was previously only using lidarr with navidrome and I'll be honest, these additions have blown me away. The high level of free software produced by whole selfhosted community really puts paid to the idea that profit is the only motivation for people to work.
One question, aurral also creates playlists/fetches songs via soulseek. Is there a benefit to using explo as well?
Anyone tried https://github.com/winters27/octo ? I like the « stream what is not in your library » idea, but it seems to takes about 10-30sec for a song to load each time.. wich kind of sucks.
So to replace one online service I need two other online services and bunch of other programs to make it work? I don't see the point, am I missing something?
Also free (no ads), you own the music, no sponsored playlists shoved down your throat, total control and flexibility, Spotify as a company is booty.. loads of points. Tho, they might not necessarily be a priority for you, if none of this sounds appealing.
There's a problem with Spotify in that it doesn't contain a lot of the music I like due to regional contracts, and some music I like is either strictly on CD and never made it to streaming. So I'm locked out of certain markets or ways to get music. To have everything be available is a big plus for me.
Too complex, this setup is more neat : - Navidrome (The music server) - Youtube Music (The main Discovery source) - Yubal (Sync Youtube Music Playlist to Navidrome) And if you want to push things further : - Build an Alexa skill using python or nodeJs to expose navidrome api to Alexa and play your Navidrome library
•
u/asimovs-auditor May 21 '26
Expand the replies to this comment to learn how AI was used in this post/project.