63

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?

you are viewing a single comment's thread
view the rest of the comments
[-] __hetz@sh.itjust.works 5 points 12 hours ago

Beets for importing, ascii only, lastgenre, fetchart, whatever other plugins I'm forgetting, /artist/yyyy_album_name/ directory structure, 01_title.ext for single disc, 01-01_title.ext for 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.

[-] hellmo_luciferrari@lemmy.zip 1 points 12 hours ago

Right now I am running beets against my live music dir and running a few different commands on it to see:

Duplicate albums:

  beet duplicates \
    --album \
    --full \
    --strict \
    --key albumartist \
    --key album \
    --path \
  > config/duplicate-albums.txt 

Searching across different albums:

docker exec -i -u abc beets \
  beet duplicates \
    -F \
    -s \
    -k artist \
    -k title \
    -f '$id | $artist | $album | $title | $format | $bitrate | $length | $path' \
  > config/duplicates-across-albums.txt

And running this right now for audio checksum comparison:

docker exec -i -u abc beets \
  beet duplicates \
    -F \
    -C 'ffmpeg -i {file} -f crc -' \
    -f '$id | $artist | $album | $title | $format | $bitrate | $path' \
  > config/duplicates-audio-checksum.txt

And when that is done I know I can inspect candidate based on ID with something like this:

docker exec -it -u abc beets \
  beet ls 'id:1524' \
  -f '$id
Artist: $artist
Album: $album
Title: $title
Format: $format
Bitrate: $bitrate
Sample rate: $samplerate
Bit depth: $bitdepth
Length: $length
Path: $path'

I have the main music I am scanning mounted in read only right now; but when I am done collecting some information about it, I am going to remount and restart the container, along with modifying some config options.

Ultimately, I am going to go Artist by artist with something like this:

docker exec -it -u abc beets \
  beet duplicates \
    -s \
    -k artist \
    -k album \
    -k title \
    --move /quarantine \
    'albumartist:"Example Artist" album:"Example Album"'
this post was submitted on 18 Jul 2026
63 points (98.5% liked)

Selfhosted

60758 readers
174 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

Detailed Rules Post

  1. Be civil.

  2. No spam.

  3. Posts are to be related to self-hosting.

  4. Don't duplicate the full text of your blog or readme if you're providing a link.

  5. Submission headline should match the article title.

  6. No trolling.

  7. Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details. Tags [CBH] or [AIP] are required, see the links in Rule 8 for details.

  8. AI-related discussions and AI-involved promotional posts have additional requirements for tagging, as noted in Rule 7 and the AI & Promotional Post Expanded Rules post, and find example disclosures here.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 3 years ago
MODERATORS