Greetings Lemmings!
I am not new to self hosting; been at it for a few years. And I have neglected a very important part of my home lab; MUSIC!
So I stream music from Navidrome to all of my devices.
My music library has grown organically over the years, for probably the past 17 years. And a few times I had manually organized and fixed up some of the tags. But ultimately I ended up with a mess of a library.
I am working on cleaning that up. Though I absolutely should have cleaned it up before I created 2 backup scripts.
In short, I have a script that is called from a systemd service on a timer that runs my backup script that essentially more or less uses rsync to mirror the files in LiveMusicDir to MusicArchive1. This happens on my docker host where my Navidrome lives. The Music is on an NFS share hosted outside of the docker host.
The next step I run another similar setup on my desktop; systemd service running a script on a timer that uses rsync and other dependencies to track changes.
What I plan to do is organize the source. I am using beets, and learning as I go.
What methods do you use for managing a large music library?
Beets for importing, ascii only, lastgenre, fetchart, whatever other plugins I’m forgetting,
/artist/yyyy_album_name/directory structure,01_title.extfor single disc,01-01_title.extfor multi disc. I invoke beets manually just to keep an eye on how things get matched up and tagged during the process. I deal in full albums, LPs, compilations and such because it’s often easier to maintain and match metadata than with individual tracks. I guess it’s a data hoarder / archivist compulsion too, but it’s rare I can’t find at least one other track on an album appreciable so… why not?A weekly rsync pushes the beets DB and library from my TrueNAS server to another server with a 8TB external dedicated to backing up my most important stuff (personal projects, password store, compose files, confs, etc). I’ve got an rsync alias set up on my laptop I invoke manually because I’m nearing the limit of what I want to allot to music. At least until I decide to get a larger drive.
That’s local in triplicate, with zraid on the NAS and a fourth copy on my phone, which leaves me feeling pretty good about not losing any music outside of a house fire or tornado. I was also rsync’ing all my media (music, movies, shows) to another TrueNAS setup at a relative’s but some things have changed with that so it’s on hold. Not fond of missing my off-site backup but hopefully can resolve it soon.
Everything is local only right now. The library is mounted read-only in Jellyfin so can play music from pretty much any phone, TV, computer, my Steam Deck, etc throughout the house. If I ever decide to open things up, reverse proxy or whatever, I might look into Finamp but I buy a flagship phone every six to ten years for the storage space so I can just take my music with me. Might eventually switch that to a dedicated music device.
A mishmash of beets and the old ways got me to where I am, navidrome with a bit of mpv & kodi.
I’m currently trying to ignore it and plan to return with a new workflow over the next year or so. Beets will be part of this but also need some python, shell glue and other tools working together, and things are changing at little faster than they once were.
I spent a little time a few months back grabbing NPR and KEXP audio at scale with yt-dlp and having them land with decent tags as navidrome compliant albums and now feel a little more confident incorporating oddities into sacred realm of jazz flacs.
But the one folder to rule them all is still in the planning stages.
The way I used to do, I can’t believe I spent that much time. I would literally go folder by folder and rename things. Then when I got a little older and a little smarter used MusicBee or MediaMonkey to tag and rename music files. But even that became too much for me to want to do.
Ultimately I want the most automated way I can do it. But luckily all new music coming in is named with the same format every single time, and is properly tagged.
It’s all of my legacy stuff I have to clean up really.
Yeah, I’m not about to rush in but I suspect over the next year or so I’ll be letting an llm loose on my old crates to see what happens and MacGyver some sort of Dread Pirate Robot that can run locally and is a frankenstein of beets, plugins and other projects that will eat music and shit albums.
I just use lidarr to rewrite the tags to be consistent and that seems to be enough for navidrome to put the correct cover art 90% of the time.
My music is on my PC hard drive and synced to my server. Last year I spent a few weeks tagging my old stuff and i tried beets, kid3, and picard but ended up liking picard the most just since it was a lot better at grouping albums together and finding the best matches ime. Any new music is tagged with picard. Then i run a navidrome docker container with the music library mounted. And i use feishin for desktop and symfonium for mobile use.
If you’re interested, i wrote about my experience migrating from iTunes to navidrome and tagging my music here (no ads, monetization, or tracking)
Feishin, and Symfonium are fantastic.
Though, if you at all care about whether or not it’s open source, I would argue Tempus is another good option for Android.
https://github.com/eddyizm/tempus
Which I have been trying out a bit as of late. And works with Android Auto on GrapheneOS
Thanks for mentioning that, I’ll take a look!
Any clue if Tempus supports Jellyfin music servers? Their readme seems to indictate its for Subsonic servers only.
My dream is an open source android music player that supports Jellyfin music servers and automatically requests transcoded/full quality audio based on if I’m on a WiFi or mobile data connection.
Haven’t found one quite yet.
Lidarr manages my large library easily
What methods do you use for managing a large music library?
I have a physical collection I have been accumulating for decades now, that goes as far back as 1937. I have converted everything to flac and it resides on a NAS drive. I have used Beets and Picard, and back in the day MP3Tag for tagging, and surprisingly, MusicBee (Windows) is great for embedding lyrics. It takes a while to embed lyrics in a large collection. Currently I have everything tagged, in their respective artists/albums, and embedded lyrics for about 75-80% of them. I run Navidrome and stream via Feishin locally, and Substreamer on my mobile.
ETAL I have also used czkawka_gui in the past to clean out duplicates.
MusicBee, I loved that player back when I was a Windows user. And MediaMonkey if you didn’t mind paying. Those two were the best music players. Now that I am full time Linux, there isn’t a player that even compares.
However, Feishin is about as close as I can get to a UI I like for a player, and luckily it works with Navidrome (jellyfin and others too)
Whenever I have to sift through a big collection, Feishin is no longer the right tool. In that case I use Quod Libet with the 3 panes layout. Resembles Musicbee/MediaMonkey pretty well, while being very fast!
OP: Don’t forget to have some fun with your collection: Mixxx - mixing and looping, so much fun!
MusicBee
It was, and imo, still is a great piece of software. I’m not always on a Windows machine, but MusicBee is a staple when I am. Every so once in a while, someone writes a piece of software for Windows that just kicks ass. Few and far between, but it’s pretty good stuff.
I do wish they made a Linux port. Because I’m never going back to windows.
It would be nice. I’ve hung on to my stripped down Windows 10 now because I use a program called BlueBeam for one of my business ventures that absolutely has to run on Windows. There is no Linux equivalent, and there is no running it in Wine.
I am not familiar with bluebeam. Wine has come a long way and so have other runners based on Wine too.
There is one Windows app I won’t ditch, and I’ve found running via Wine wasn’t working well, but bottles using their SODA runner work well for it. (GuitarPro) and other programs, even non games work in Proton or ProtonGE.
Though I totally understand, as some other music software I need doesn’t work ib Linux no matter the option.
I did have USB Pass-through working on Virt-Manager install of Windows for my Line 6 equipment.
BlueBeam: So I get a complete set of new construction plans sent to me. Basically I count for money. Say it’s an HVAC contractor that wants all the HVAC equipment counted For example: all grilles, all air handlers, all everything it takes to complete the HVAC portion of the new construction. BlueBeam will just about count for you if you set it up with some special scripts and macros that have been programmed in. Then when I’ve counted everything for HVAC, I call vendors for pricing and work up an estimate to send to the contractor for his approval. He then takes all of that, decides what he might need to add as far as $$. We call it the ‘D’ factor or the difficulty factor because working in and around trusses, tight spaces, crawl spaces, etc takes extra. Then he puts his O&P on it and sends it out for bid.
But if you boil the ox down to the bouillon cube it goes like this: Count with the count 1, ah ah ah, 2 ah ah ah… that’ll be $4500 Mr. contractor sir.
My experience is similar to a lot of people here. I see that we’ve all had our hurdles over the decades while moving OS’s and I’ve used many of the apps mentioned here (Windows/Linux). I couple of years ago i decide to stream my music because i was already into self-hosting and i really needed to properly tag my music for whatever server app I would use.
I always had my music structured by folder, i was using desktop apps for playback so it kinda worked for me. But i wanted to have better tagging. I had already used kid3 and picard but it lacked automation so I used beets for the albums on my collection (about 12K of songs). It wasn’t perfect but the software is not blame and it was a great way to tag automatically and move files for a consistent folder structure to match my needs.
Right now, since i don’t add music all the time ( a couple per week) i mainly stick to picard to tag new albums. it has 3 actions to manage the files on disk (move, rename, tag), I have script rules for naming files (if required) and i use the ReplayGain plugin. But I also have to point out that the learning curve of picard is rather high, the UI is a mess and it took me a really long time to understand how it works or where the options are.
After trying airsonic for a while i moved to Navidrome and have been using symfonium (android) and Feishin (desktop). It’s the best experience I’ve had since i started listening to music on my pc (199…6/7).
Regarding the source files, it lives on a disk and is backed up to another disk, managed on openmediavault.I did putz around with Picard way back but didnt stick with it because of its UI. Though I may set up a docker container just to have the option to use it…
Navidrome + Feishin for desktop + Symfonium for Android is the route I went too.
Though I am playing with Tempus as well for Android too. Its a nice Open Source option.
Degoogling my life was a motivator to self host.
Why docker though? The desktop app is available on all OS’s.
I like having as many apps accessible via the browser as possible. Makes it portable for me.
No matter how many machines, experience is the same. With these apps, I can allow other users access.
Its accessible through my phone as well that way.
And if I ever have to reinstall my OS its quicker because of less that I need to install. And on top of that I only update that one container vs updating every machine I have a program installed to.
That makes a lot of sense and I also like the idea of having apps on the browser. I might take your approach to create a VM and spin it up whenever I need it. Thx.
Always happy to share!
Right now I have 53 containers going on a box with 16gb of ram, and an 8th gen i5.
Wow. Just finished setting it up and tagged 2 álbuns. From slskd to Picard to Navidrome. This really makes my life easier.
Thank you very much kind stranger!!!
Big beets fan here. Only thing I don’t like, other than the odd album missing from their index, is the weak genre naming. I acknowledge this is murky territory, I’m wondering how other users handle the genres.
You can use the https://beets.readthedocs.io/en/stable/plugins/lastgenre.html plugin to write genres
Great suggestion, will try it out today, thanks!!
Just thought I’d also comment that beets does not have a metadata index, it relies on Musicbrainz for metadata fetching. There are also plugins for other services like Bandcamp or Spotify.
I use self hosted nextcloud for backup, synchronization is so fast, I got a cron job that synchronizes every 15 mins.
Before that I was using rclone for backups in idrive (super cheap s3 equivalent)
I have a bunch of actions setup in mp3tag which strips out all but the absolute necessary tags, and uses the cover from the directory to add the cover to the files… once tagging is correct, you can use any library.
“unsorted” folder contains input. “Music” folder has full library; any imports must go through beets. rsync to remote backups; one scripted/automatic, one manual & password-protected. Restores (needed once or twice) are done with beets import, but whatever flag that does “just import, don’t tag”
Once I have my music gone through and deduped, as well as tagged, I will likely never have to run it again; as the music my server ingests is already properly tagged.
The deduping is a little difficult. Obv matching files are caught with regular dedupe tools, but I’ve been meaning to make a script to use fingerprinting (dejavu is the library I think?) to find matches. Problem is the fingerprints are about as big as the music files themselves.
Beets can do some sort of fingerprint with ffmpeg and in another comment I posted a snippet that I used ti generate a log. I’ve only done dry runs.
NFS / Shares - over complicated. Just syncthing it around (and snapshot on backup server), for nearly static data as music it is perfect.
I already have a symcthing server setup, as well as it setup on a few devices. It really isnt the solution for me considering where my music lives. Can’t run Syncthing on my NAS.
Either way I’d have to mount the share whether it be NFS or smb.
I just manually clean up the tags/directory structure and use rsync. I have tried a few other things, but they always end up being more trouble than it is worth for me.
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
Fewer Letters More Letters NAS Network-Attached Storage NFS Network File System, a Unix-based file-sharing protocol known for performance and efficiency Plex Brand of media server package
[Thread #56 for this comm, first seen 19th Jul 2026, 03:30] [FAQ] [Full list] [Contact] [Source code]
I actually made a copy of my library (for safety) and had hermes agent scan it and fix it so that it would register well with navidrome and be named coherently. It was very impressive what local AI could do. If you have a gpu with 12+ GB VRAM, you can do it local with an uncensored model. Cloud providers can probably do it too, but might throw safety warning.
I luckily do, I have a 3090 with 24GB of vram that copper modded. Hermes you say, may have to investigate.
I have 3 copies of my library
Yeah, it’s all the rage now. Qwen3.6 35B or Google Gemma 26B should work fine for the task. Llmfan on hugging face uses the heretic framework to “abliterate” them and remove any safe guards that might prevent working with “pirated” content.
You can run hermes in a container or vm if you’re worried about the ai hallucinating, though I haven’t seen that happen. Use as high of a Q quant value as you can and run llama.cpp for speed. Or just try a free cloud model with hermes and see if it works.
The agent installed a bunch of mp3 scanning tools, did an inventory of my library and generated a list of actions for me to approve before it ran. Feels like the future.
If I run Hermes, or anything AI, I’ll want to investigate how to containerize it. Which may be difficult with one GPU.
Podman/docker works fine and doesn’t need the entire gpu like a vm. Hermes has a supported method for just that.





