It’s been over a year since I wrote the first post about setting up my own music library. To my surprise, since setting up the initial apps on my phone, I haven’t made any real attempts to switch at all. But, that doesn’t mean I have a list of nitpicks and other things I’ve noticed while running this setup. Here goes!
The general interface design of the main app I use (play:Sub) has still left a lot to be desired, but this is purely subjective to me who’s used to native-looking Swift apps like Apple Music1 and Apollo (rest in peace). Hell, even the app I use for SyncThing has a nicer interface than play:Sub. I already complained about it in the original post, but the now playing screen still is kinda ass.
The majority of the music in my library is manually tagged because I’m stubborn, usually matching the track names and lists to what is there on Spotify (and yes, I admit it’s for scrobbling purposes), using consistent genres, and removing any extra fluff like “2077 Remaster” or “Deluxe Edition” from album titles depending on where I got the rip from. And so whenever I’d make a change to tags or find a higher quality rip, I’d need to replace the files in the folder. What ends up happening is that the album will appear twice on play:Sub and only play:Sub. Now, it’s probably an easy fix like re-adding my server but that really shouldn’t be required when there’s already a “Reload Server Media” button in the app that doesn’t remove these old entries from the database (is my assumption, at least).
![]() | ![]() |
HELP! HEEEEEELLLP! |
Now for scrobbling, I have actually run into a few hiccups, mainly to do with my connection to the server when I’m commuting or something like that. If my VPN connection drops suddenly or I pause a song mid-way and continue playing at a later time where I don’t have any connection, on the next time I reconnect the scrobbles will start spamming as if I had listened to it again after each new track plays on the new connection. Word salad meaning they get out of sync if my connection isn’t consistent. Thankfully, nine times out of ten simply closing whatever I’m playing on the app and restarting while connected resolves the issue (and I need to delete scrobbles but usually only a few erroneous ones pop up), so to me it still beats having to log into Spotify on a browser to reconnect last.fm API for the eighth time this year.
Navidrome’s half-finished Smart Playlists feature is a fucking godsend for replacing what used to be my monthly rotation playlists, consisting of albums I’m listening to for that month. I used to do this manually in Spotify and it always clogged up my playlist views. Nowadays with scrobbling I don’t really need to keep track of that myself, so I’d rather focus on the “present”.
I’ve basically got a few “smart” playlists that consist of:
and you get the idea. I remember when Spotify used to do similar playlists with Discover Weekly and the Wrapped playlists, but you probably know how I feel about Spotify’s algorithm at this point.
If I actually bothered using my RYM ratings on albums/tracks and/or “favouriting” songs on Navidrome, I could also have a playlist effectively matching Spotify’s “Liked Songs” with even more granularity if I desired. I might start doing that now that I think about it.
If you actually want a GUI to edit these smart playlists, your only option
at the moment is to use the open-source Electron-based
Feishin client. The only other way
to edit them at the moment is to use a text editor and editing the smart
playlist’s JSON object in a .nsp
file. Thankfully, even play:Sub on iOS
recognizes these smart playlists and updates them, so the only friction
is running Feishin on desktop just to edit some damn playlist queries, but
I’ll take what I can get. Once I figure out the best setup for my playlists,
theoretically the server will just auto update and it will then also update
on my phone and so on. Maybe I’ll hack together a shitty CLI or GUI for doing
this outside of a music client I’d rather not use.
I also synced up my server’s music folder to Jellyfin to see how some iOS apps ran. Long story short, it’s pretty good, but not there yet. Ampfin was my favorite of the bunch, being native Swift, the interface is very similar to Apple Music.
![]() | ![]() |
Your choices are lossless and AAC in either 128kbps or 256kbps |
You can adjust audio quality based on network conditions, but it’s only in AAC (which is fair, I guess, given AAC is probably better optimized for iOS). There are less options for audio downloads overall (ie. you can’t just change ffmpeg arguments). Not to mention you need to install a last.fm plugin on your Jellyfin server to get it to scrobble, and not all apps will know about this. Another tiny nitpick I have is if the album’s only tagged with a release year and not the entire date, Ampfin will say it released on 1 January of the album’s release year. This is only really a problem for rips that aren’t exactly from streaming services. I think MusicBrainz would help with that, but Jellyfin isn’t my primary server for music anyways.
![]() | ![]() |
God I need this now playing screen on play:Sub |
Anyways, I still like the Navidrome-centric setup over Jellyfin and only plan on improving my own organization of my library from here on out. Next up on my list for the music server is figuring out smart playlists and maybe some more metadata/tag cleanup for some music I’ve had in my library for almost ten years now, dating back to when I used classic iTunes…
Unfortunately I still use Apple Music for one-off playlists. I haven’t yet figured out a good way to sort singles without them clogging up my album views. Maybe a filter? Though it would be too much effort to rip… unless I were to subscribe to Deezer again. ↩
comments? kirby(a)onlytomorrow.net