12 ms·
Music Library and MusicBrainz Picard
- LeoPanthera 5y agoI use the astoundingly flexible "beets" to manage my music library: https://beets.io 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.
- BowBun 5y agoWas 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!
- noxvilleza 5y agoLove 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.
- LeoPanthera 5y agoFor multiple identically-named albums you probably want to use the "aunique" template function. https://beets.readthedocs.io/en/stable/reference/pathformat.html#aunique https://beets.readthedocs.io/en/stable/reference/pathformat....
- noxvilleza 5y agoYeah 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).
- saladuh 5y agoSame. 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.
- Hamuko 5y agoIt'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 https://github.com/Hamuko/beets-mpdqueue
- saladuh 5y agoThat'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.
- Hamuko 5y agobeets version 1.5.0 Python version 3.9.9 …is what my beets --version says.
- aorth 5y agoI 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.
- acidburnNSA 5y agoSame. 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.
- f1refly 5y agoIt'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.
- raffraffraff 5y agoI 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.
- LeoPanthera 5y agoMusicBrainz, 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.
- dqv 5y agoThere 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.
- dannyobrien 5y agoI wrote a little on the history of MusicBrainz and how such projects can be built to last here: https://www.eff.org/ar/deeplinks/2021/06/organizing-public-interest-musicbrainz https://www.eff.org/ar/deeplinks/2021/06/organizing-public-i...
- kaladin-jasnah 5y agoThat link links to an RTL-rendered English text for me (likely due to the "ar" in the URL). I found https://www.eff.org/deeplinks/2021/06/organizing-public-interest-musicbrainz https://www.eff.org/deeplinks/2021/06/organizing-public-inte... renders LTR.
- captn3m0 5y agoThanks for sharing this
- deckard1 5y agoMy current self-hosted home server setup: - Picard for import/metadata - Navidrome for a web interface + Subsonic server - 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.
- terinjokes 5y agoDoes 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.
- deckard1 5y agoAFAIK, 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.
- terinjokes 5y agoAh 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.
- SloopJon 5y agoI 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.
- kenrick95 5y agoI 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 :)
- deleted 5y ago[deleted]
- theden 5y agoI 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 1. https://thoughts.theden.sh/posts/organising-music/ https://thoughts.theden.sh/posts/organising-music/
- radlad 5y agoMusicBrainz 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.)
- hanklazard 5y agoDamn, that’s like my nightmare. Did you rebuild your collection?
- marvin 5y agoThe 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.
- bardan 5y agoIt 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.
- Fnoord 5y agoThis. 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.
- raffraffraff 5y agoI 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.
- chungy 5y agoPicard 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: $if2(%albumartist%,%artist%)/%album% $if(%originaldate%,\($left(%originaldate%,4)\))/ $if($gt(%totaldiscs%,1),Disc %discnumber% $if(%discsubtitle%,: %discsubtitle%,)/,) $num(%tracknumber%,$if($lt(%totaltracks%,10),1,$if($lt(%totaltracks%,100),2,3))) %title% 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. ;)
- niedzielski 5y agoHere's mine. I am not sure how to format this without breaking it. $truncate($if2(%albumartist%,%artist%),143)/$truncate($if($if2(%originaldate%,%date%),$left($if2(%originaldate%,%date%),4) )%album%,143)$if(%discsubtitle%,/$truncate(%discsubtitle%,143))/$truncate($if($gt(%totaldiscs%,1),$if($gt(%totaldiscs%,9),$num(%discnumber%,2),$num(%discnumber%,1))-,)$if($ne(%tracknumber%,),$if($gt(%totaltracks%,99),$num(%tracknumber%,3),$if($gt(%totaltracks%,9),$num(%tracknumber%,2),$num(%tracknumber%,1))),) %title%,138) 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. https://picard-docs.musicbrainz.org/v2.7/en/extending/scripting.html https://picard-docs.musicbrainz.org/v2.7/en/extending/script...
- mxmilkiib 5y agoHere's my personal system so far; $noop(requires: album-artist script) $noop(# define once what characters should be removed) $set(_unwantedchars,[’`'\\"”/\\-\\\\\\|;:\*\\?!&\\[\\]\\{\\}\(\)<>\\\,\\._\$\\#]) $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% Workings out on https://wiki.thingsandstuff.org/Tagging_script https://wiki.thingsandstuff.org/Tagging_script Also, some of https://github.com/murdos/musicbrainz-userscripts https://github.com/murdos/musicbrainz-userscripts have been handy
- adrianwaj 5y agoThis project is over 20 years old. 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?
- femiagbabiaka 5y agoplease do not put a blockchain in my functioning software
- adrianwaj 5y agoWell just a non-deletable public record that acoustic fingerprint-x was first created by user-x at time-x.
- buggeryorkshire 5y agoWhy?
- adrianwaj 5y agoArtists 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.
- buggeryorkshire 5y agoJust what we need for perfectly functioning software, a Blockchain crowbar.
- MrDresden 5y agoOver 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.
- hashhar 5y agoI have my Picard and beets configs hosted here - https://github.com/hashhar/picard-beets-config https://github.com/hashhar/picard-beets-config I currently have a workflow like: 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)" missing: to list missing tracks from an album [1]: https://github.com/hashhar/picard-beets-config/blob/master/beets/sample_secrets.yaml https://github.com/hashhar/picard-beets-config/blob/master/b...
- rapht 5y agoMy 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.)
- app4soft 5y agoHere is Eric Buijs[0] thread[1] on Fosstodon (Mastodon instance). [0] https://news.ycombinator.com/from?site=homehack.nl https://news.ycombinator.com/from?site=homehack.nl [1] https://fosstodon.org/@ericbuijs/107530056245156549 https://fosstodon.org/@ericbuijs/107530056245156549