My Music, My Way
music jellyfinNick’s post on moving to Navidrone inspired me to write briefly about how I solved a similar problem in a somewhat different way.
Like Nick, I was over the application formerly known as iTunes. I’ve posted here before about the issues that I had with iTunes wrecking my music files. After ditching Apple Music, I landed up in largely the place Nick started – with a hard drive full of audio files.
In my case, I had a solution looking for some problems: I’d installed a Proxmox server and it is a truth universally acknowledged that a man in possession of a server must be in want of some applications to run on it. As it turns out, a number of media servers are well supported on Proxmox, including Jellyfin.1
I can’t recall why I chose Jellyfin – presumably I’d read somewhere that it was the place to go when you were fed up with Plex (which I was).
Jellyfin is not just a music server, but it does music pretty well. So, like Nick, I pointed it at my collection of music files and let it go. About then was when I discovered that a lot of the metadata on my files was horrible, so I spent some quality time with MusicBrainz Picard, fixing it.
I don’t actually have a good workflow for adding new music yet; mostly I do it manually, downloading it from Bandcamp or where ever, running Picard over it and dragging and dropping it into the folder on my server. It’s not terribly efficient, but I tend to buy (and add) music in bursts.
On the listening side of things I have tried a couple of different things. My go-to on the phone is Manet, which does everything I want except Airplay 2 streaming (it does Airplay 1, but it has that characteristic lag that Airplay 2 does away with). It works particularly well in Carplay mode.
I have Tailscale installed on my Jellyfin server and on my phone so I can stream music from the server from anywhere without exposing the server to the open Internet, which works well. For saving bandwidth Manet also supports downloading music locally to the phone. It does force the music to be recompressed when it downloads, and this isn’t something that’s configurable (last time I checked). This puts quite a load on the server and like most iOS network things it’s unpredictable what will happen if you let your phone lock while it’s transferring. Not a good solution for moving your whole library to your phone.
Two other things that Nick’s post highlighted were play counts and playlists.
I hadn’t considered attempting to import my play counts into Jellyfin, and I’m not even sure what I’d get if I did, or even if it’s supported. I suspect my years in the Apple Music wilderness killed my iTunes play count recording.2
Playlists, however, are a serious limitation of Jellyfin. Smart playlists are not a thing there, sadly (though I presume a player could do them locally). Even transferring playlists between instances of Jellyfin is a nightmare.
Jellyfin does support M3U playlists, though, so what I did to transfer some of my old playlists and favourites from iTunes was manually built M3U files from my iTunes playlists, import them into Jellyfin and then used them to build Jellyfin native playlists. A lot of effort, really.
One thing I have been experimenting with is using AudioMuse-AI to create thematic plugins. I’m not sure yet whether I actually like the results, and I’m also not sure if this is an ethical use of AI (it’s using local models, and all it’s doing is classifying tracks, but I don’t know how the foundation models were built). But even if this isn’t the solution it does give me hope that the Jellyfin playlist API is flexible enough for knowledgeable people to do something useful with.
Still, smart playlists aside, Jellyfin and Manet has been a good way for me to continue to enjoy my music library, which is seriously the most Gen-X thing ever in the age of streaming.
-
Amazingly, last.fm still exists, and scrobbing plugins also exist for Jellyfin, and so, albeit with a multi-year gap, my play counts are still recorded there. ↩︎