Picard is amazingly powerful and I've used it for many years to manage my Music directory. I've done many tweaks to my file naming script over the years and I'm sure I'm not done. My current one looks like this:
I have "Replace non-ASCII characters" and "Windows compatibility" both unchecked. At present I'm kind of 50/50 on single-digit track numbers for albums that have less than 10 tracks, kind of just used to everything being two digits (though I have a handful with greater than 99 tracks, so there's the concession there for triple-digit track numbers).
It's also very much optimized for my own use of the file system being my library management. I just change directory and play. ;)
I think the truncations are necessary to avoid exceeding filename length limits on some systems. The if2s are to fallback to another field. Similar to yours, there is also logic for zero-padding as needed on discs and track numbers and to omit discs when there is only one.
$noop(# if the id of release is "Various Artists", or the release is a dj-mix, or there is a djmixer name present, return true)
$set(_variousrelease,$if($or($eq(%musicbrainz_albumartistid%,89ad4ac3-39f7-470e-963a-56509c546377),$inmulti(%releasetype%,dj-mix),$ne(%djmixer%,)),true,))
$noop(# if this is a Various Artists release, prepare to return trackartist later in the file path)
$set(_trackartist,$replace($strip($if(%_variousrelease%, $rreplace(%artist%,%_unwantedchars%,)-,)), ,_))
$noop(# artist path variable, sort out characters)
$set(_releaseartist,$replace($strip($rreplace(%albumartist%,%_unwantedchars%,)), ,_))
$noop(# prefer earliest date in release group over release date, sort out spaces and delimiters)
$set(_releasedate,$replace($if(%originaldate%,%originaldate%,%date%),-,_)-)
$noop(# cat name, sort out characters)
$set(_catalognumber,$replace($strip($rreplace(%catalognumber%,%_unwantedchars%,)), ,_)-)
$noop(# release name, sort out characters)
$set(_releasealbum,$replace($strip($rreplace(%album%,%_unwantedchars%,)), ,_))
$noop(# release disc number, sort out characters)
$set(_releasediscnum,$if($gt(%totaldiscs%,1),$num(%discnumber%,$if($gt(%totaldiscs%,99),3,$if($gt(%totaldiscs%,9),2,1)))-,))
$noop(# release track number, sort out characters)
$set(_releasetracknum,$num(%tracknumber%,$if($gt(%totaltracks%,99),3,2)))
$noop(# release track name path variable, sort out characters)
$set(_releasetrack,$replace($strip($rreplace(%title%,%_unwantedchars%,)), ,_))
$noop(# build the full path up from the variables set above)
%_releaseartist%/ %_releaseartist%-%_releasedate%%_catalognumber%%_releasealbum%/ %_releaseartist%-%_releasedate%%_releasealbum%-%_releasediscnum%%_releasetracknum%-%_trackartist%%_releasetrack%
MusicBrainz once rewrote my entire media library (over 100 GB of 320Kbps MP3s - this sounded slightly more impressive at the time) to all have the exact same metadata as a single song. I'm sure I clicked the wrong button. There was no undo button. I never used it after that (probably 8+ years ago.)
It would be cool if there was a program that built a database out of your raw audio files, and that database was read by media servers like mpd. I want the user contributed data, but I don't necessarily want it to replace the original files.
I would pay for a music metadata service that stored tags, ratings and playlists. It wouldn't even have to provide music streaming at all, as long as it could integrate with YouTube, Spotify, Apple, Dropbox or local files. Something that treated a playlist with the same respect as an album, capturing creation date, comments, tags, author.
If I lost my whole music collection tomorrow, I could recover the actual tracks from Bandcamp/7Digital/rip etc. But my custom tags and ratings that I use to generate playlists, and the history of saved playlists found back over 15 years, would be impossible to recover.
This. I want my scene releases to be and remain SFV OK. But that doesn't mean the metadata is necessarily good. Its about data preservation as-is. That's why I never bothered with MusicBrainz Picard.
The rebuild sounds like a fun project involving some online service that detects a song based on a snippet. This was probably not available when 100 gigabytes was very impressive, though.
1. Add tags, move and rename files using MusicBrainz Picard.
2. Run beets on the files with the writing, tagging and renaming options disabled.
The keys which are left empty in the yaml need to be provided by a local config file like beets -c secrets.yaml. A sample secret file can be seen here[1].
This means that I can still use beets to do things like fetching lyrics (but not writing to ID3 tags), creating smart-playlists, updating my MusicBrainz collections etc.
Due to this workflow you might find that the beets config is lacking a lot of plugins and configuration that would allow it to replace MusicBrainz Picard like the chroma plugin, fetchart etc.
Some of the cooler beets plugins that complement Picard are:
mbsync: It can fetch updated metadata for existing tracks solving my biggest issue with Picard.
lastimport: To import playcounts from Last.fm
smartplaylist: To generate rule-based playlists. Now I can have playlists by decade or by genre or even something like "songs from 2000-2010 with danceability > x (from AcoustID)"
I use the astoundingly flexible "beets" to manage my music library: https://beets.io
Highly recommended for anyone who always has a terminal window open. It pulls data from MusicBrainz by default, but can also be configured for other sources, such as Discogs.
Was gonna post the same recommendation! I've been lucky to add a couple of contributions to the lyrics plugin. The project is maintained by a lovely CS professor who really puts in a lot of time and effort. I've been using it for a couple of years now and it fits perfectly in my music pipeline. Great project!
Same. Don't know what I'd do without beets, can't imagine using Picard.
The rich set of plugins are equally amazing. For instance, I use the Playlist plugin, and whenever I update any metadata on a music file that results in a file name change (thus changing the song path), it'll scan my MPD (a completely separate program) created playlists (.m3u) and update the paths for the effected songs. Just one of the many things it automates for me, besides metadata.
Although not the fault of Beets, I wish there was a decent source for Japanese albums. Between metabrainz and discogs, it only gets me 70-80% of the way there. The new Deezer plugin helps with digital only releases but it's not as accurate. Unfortunately I don't have the time to contribute to metabrainz, as that 20% missing is quite large in the context of my library.
It's also pretty easy to make your own plugins, although the API documentation isn't the greatest. I for example wanted to add all new music to my MPD queue, so I wrote a Beets plugin to do that automatically for me: https://github.com/Hamuko/beets-mpdqueue
That's a pretty nice plugin. I don't know if you're using it with the latest version of beets, but I'll give it a go, and hopefully it'll work. If not I'll try to get it working and send a patch if I do.
At the moment I use smart playlists and generate an "added today" playlist with all the songs imported to beets today, and add that playlist to my queue, appending it to the end of the queue.
I use Picard first to do the initial cleanup of the metadata where I can look it over, then beets to copy it to my music directory and extract the album art to cover.jpg. :) It works for me! Love them both.
I haven't used it, and I don't add new music to my collection in such bulk that I need a special tool for tagging. The thing that used to boil my blood about MusicBrainz and Discogs was album dates. I couldn't give a shit if this damn release was a 1998 remaster, what I care about is that the album was recorded in 1968, and therefore it is music of the 60s. Do not add it into my smart playlist of highly rated music from the 90s!
Anyway, after automatically trashing the dates on a whole load of albums a while back I stopped using all of those tools.
MusicBrainz, and beets, has separate date fields for both those things. "original_year" is the year of the original release, and "year" is the year of the release of your version of the album.
I have my beets configured to include original_year at the beginning of the album folder name, and then the release year in parenthesis at the end, but only if it is different.
Same. I import with beets and then serve it up via Mopidy-MPD with the Iris plugin for UI and snapcast for sending it around to different devices in the house. Super nice.
Love beets, used it now for a few years with foobar2000/cmus as my media player. A few tasks I've found somewhat irky (most recently handling the Blue / Green / Red / White / Teal / Black albums by Wheezer which are all officially just named 'Wheezer'), but otherwise very easy and accurate tagging interface.
I also just rsync my music library to an external SSD so that it's backed up, and up-to-date when I'm travelling.
Yeah I found out about the solution via that exact part of the docs, I'm just saying it seemed like a bug when I first came across it - and some users might not realize the default behaviour (for example, if you're importing a large preexisting collection you might not miss a few albums being deleted).
It's also possible to add beatport as a tag source, which is incredibly useful for more electronic collections since musicbrainz is always lacking in that niche.
I recently wrote about how I manage my music library[1], and really the paid software organisers don't really have much on offer over free open source software
- DSub on Android to play (+ permanent cache for offline playback of various "deserted island" albums)
If you have Poweramp (Android), it can read the cache folder of DSub. This is the best audio configuration I've found thus far. It's great. Navidrome is one of the best software packages I've found recently. Love it. Picard is equally amazing once you get the hang of the UI.
I just started looking at music streaming software last week, and installed Navidrome on an Oracle Cloud instance as a test. So far, so good, although it took a while to discover that Oracle's Ubuntu image uses iptables, after which I found that the network connection with unlimited ingress and 10 TB of egress is a lot slower than the advertised 1 Gbps, at least on a free-tier ARM instance.
My impression has been that MusicBrainz has more typos and weirdly formatted metadata than FreeDB. Now that I know more of its background, I'll look into it more. My CD collection is mostly ripped to full-album FLAC + CUE, so correct metadata will likely be an important part of converting to MP3 for streaming.
I have been doing this for a long time, and FreeDB's metadata is way, way worse than MusicBrainz's, and has less coverage too.
If you find any issues in MusicBrainz metadata you can submit a correction, which will be reviewed and voted on by community members. I've done this maybe 4-5 times for my collection of about 2000 releases and in each case, my correction was quickly accepted.
Does Navidrome care about the file structure of the music folder? Does it properly respect embedded tags?
I've tried to use various web-based music streaming servers in the past, but keep finding they fetched their own metadata in the background, ignoring the tags I've curated and modified to my liking.
AFAIK, it only uses the metadata embedded in the files. I don't think folder structure matters at all. There may be a way to turn on optional musicbrainz integration or something, but I haven't looked into it. If something isn't right I go back into Picard and it's usually a quick fix. It's surprisingly decent for being a two year old project.
Ah cool, I'll give a try then. The last go around with different options was so frustrating, I've just been mounting the music directory with sshfs and playing with foobar2000 in Wine. Which is not as practical for mobile though.
There is one weird bug with MusicBrainz Picard I see every so often. When I try to add album art, sometimes it doesn’t apply to all the files. Sometimes it takes several tries to get every file to have the album art on my MP3 player. If anyone knows what could be going wrong and how to fix it, I would be grateful.
I get weird looks from people when I say that I still use Winamp. It used to have integration with Gracenote to update songs metadata but it has stopped working for a few years now so I've been doing them manually. This MusicBrainz Picard would definitely help me here :)
Over the last 6 years I've built up a rather extensive media collection that I run from a dedicated Kodi server on the LAN.
MusicBrainz Picard has played a key role in organizing it.
My reasons for starting this home collection was the endless amount of ads and the surprising amount of times content would disappear from the streaming platforms.
My problem with the libraries that recognize and tag music such as MusicBrainz is simple: they suck at properly tagging classical music. (To their credit, ID3 tags are not very classical music friendly in the first place.)
Maybe the key pivot is having MusicBrainz actually connect with real artists and have each artist create an NFT for each track they unleash onto the net. Listeners can then donate according to what they listen to most. So artists should leverage the fact that they are the first to own and hold their masters.
Can also apply to video. So a MusicBrainz (SuperBrainz) blockchain? Does that make sense?
Artists and content creators don't need to worry about piracy and distribution, all they have to worry about is correct metadata (and blockchain entries) on all their media so they can collect 100% of all tips. A tipping culture.
I am definitely a contrarian... great to see.
The blockchain entries can also point to a place to get the media for free... eg a P2P network or download page.
Maybe a streaming network could be created as well that actually allowed downloads.
It's also very much optimized for my own use of the file system being my library management. I just change directory and play. ;)