Tagging music with MusicBrainz Picard
Part of the "fun" that comes with curating a self-hosted music library is tagging music so that it has accurate and uniform metadata, such as the band names, album titles, cover images, and so on. This can be a tedious endeavor, but there are quite a few open-source tools to make this process easier. One of the best, or at least my favorite, is MusicBrainz Picard. It is a cross-platform music-tagging application that pulls information from the well-curated, crowdsourced MusicBrainz database project and writes it to almost any audio file format.
MusicBrainz
MusicBrainz was founded in 2000 by Robert Kaye to fill the void left when the Compact Disk Database (CDDB) was sold and then rebranded as the proprietary Gracenote service. CDDB, until it was privatized, served as a central resource for users to upload CD metadata and use it to tag ripped media. MusicBrainz served as a CDDB-compatible service for many years but has evolved to include information well beyond CD releases and developed its own protocol for accessing information along the way. It launched a CDDB-compatible gateway in 2007, but that was discontinued in 2019. A more complete history of the project is available on the site.
In 2004, Kaye started the MetaBrainz Foundation, which is a nonprofit that now hosts a number of projects related to cataloging music and other media, including MusicBrainz and Picard. In part, I was moved to start writing about my music-management tools after Kaye's untimely passing in February. I've been using Picard and other tools from MusicBrainz for many years, but hadn't gotten around to writing about them; putting a spotlight on the tools seemed a good way to say a belated thanks to Kaye for his work, which has made the hobby of building a music library easier and much more enjoyable.
The MusicBrainz data set is divided into two categories: core data and supplementary data. The core data is available under the Creative Commons Zero 1.0 Universal (CC0 1.0) license, which is meant to put a work into the public domain or a close equivalent (depending on jurisdiction). The core set of data includes information about artists, releases, record labels, and so forth. The supplementary data includes user-submitted ratings, edit history, statistics, non-personal data about users, and so on; it is available under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 (CC BY-NC-SA 3.0) license.
The database has entries for many media formats beyond CD these days, including digital downloads, vinyl records, cassette tapes, and even wax cylinder phonographs. If ripping wax cylinders to digital is too much of a chore, the Internet Archive's cylinder collection has a few hundred that are already ripped to choose from. Picard is the official music tagger developed by the foundation, but quite a few others make use of the service as well. The MusicBrainz web site has a list of applications and music players that have built-in support for acquiring information from the service.
It's possible to use the MusicBrainz information anonymously, but users may want to create an account to be able to submit edits to existing entries, add new entries, and more. See the MetaBrainz privacy policy for what information is collected and how it can be used.
To go boldly
The first public release of Picard was in 2007, according to its changelog. The name is obviously a reference to Star Trek's Captain Jean-Luc Picard, but I haven't been able to find the reason for this; if there's a connection between Picard and its namesake, I'm not quite sure what it would be. (A more logical choice might be Commander Data, since the application can command one's music data, but I digress.) The most recent stable release, 2.13.3 was announced in February 2025. The project is written in Python and is licensed under the GPLv2; most major Linux distributions package Picard, and it is also available as a Flatpak and Snap for users who prefer those formats.
Picard supports most audio formats (a list is available in its FAQ) that users might want to work with, with some caveats. For example, the FAQ notes that the Waveform Audio File Format (WAV) does not have a standard format for tagging, so Picard uses the ID3v2.3 standard, which may not be supported by all software that reads WAV files.
Using Picard is straightforward: begin by adding a set of music files to be tagged, either by dragging and dropping them into the left-hand pane or selecting files from menu options or via the toolbar. There are a number of ways to query the MusicBrainz database for metadata to tag files with; the best way to do so depends a bit on how the files were acquired and the state of the files' tags to begin with. For example, if the files were ripped from a CD that happens to be handy, Picard can read the CD (or a log file) to try to find the correct entry in the MusicBrainz database.
If the CD is not readily available, Picard can try to read any existing tags from the files and attempt to make a match that way. If files have little or no metadata, Picard can attempt to match them with entries using the AcoustID system to determine the files' acoustic fingerprint.
If all else fails, and it sometimes does, another method is to go directly to the source and look up the proper release on the MusicBrainz web site. By default, Picard listens on port 8000 on localhost as long as browser integration is enabled. Clicking the green "tagger" icon on a release page (such as this one) sends a request to Picard to download the data for the appropriate release ID. (If the "tagger" button is not displayed, add ?tport=8000 to the end of the URL.) This can also be helpful when Picard suggests the wrong release entry for an album, which does happen from time to time. This is especially true for albums that have had many releases with slight variations by country, or reissues with added tracks, etc.
On some occasions MusicBrainz will not be able to make a match because the album has not been added to its database. In that case, users can add the information manually in Picard's tag editor or log into the MusicBrainz site and submit the album and artist information there, then pull it into Picard. I've done this with a few albums and it is a fairly painless process; it's also nice to contribute back to the project this way whenever possible.
Picard Scripting
Once the data is available, and if everything looks correct, it's time to save that to the files. If something is amiss, all the values (e.g., artist, album title, release date) can be edited manually. Readers might note that this is a somewhat fiddly process and might be a bit time-consuming when processing a lot of music files, which is true. However, the project's philosophy is quality over quantity; Picard is designed for users who are fairly picky about their music collection and do not mind spending the time to fuss over details.
Picard displays a message on each startup (until it's disabled) that warns users it can make changes to files; it can rename files and move them based on file-naming scripts, but those features have to be enabled first in Picard's options. The way I prefer to add music to my collection is to put unprocessed files into a "Rip" directory when I've ripped them from CD or downloaded them from one of the sites I purchase music from. From there, I pull new albums into Picard to adjust the tags and let it move files into my "Music" directory when it writes the new tags.
Picard has a scripting language to be used in creating file-renaming scripts. This makes it possible to standardize the file-naming conventions used by Picard when moving files. Picard includes a few sample scripts that can be used or modified to handle file naming; the script editor provides a preview of the before and after so that users can verify the script will work as intended before hitting the "Make it so!" button. This is the default script that I use:
$if2(%albumartist%,%artist%,Unknown)/ \(%originalyear%\) $if(%album%,%album%/,Untitled/) $if($gt(%totaldiscs%,1),$num(%discnumber%,2)-,) $num(%tracknumber%,2) - %title%
The $if2() function returns the first non-empty argument; in this case the album artist if that tag is populated, then the artist tag, and then "Unknown" if neither are populated. It should be rare that a track has no artist listed, though. This is useful since many works, such as soundtracks, have different artists depending on the track; to avoid sorting files from the same album in a bunch of different directories, it's better to nest them under the album artist. (I usually go with "Various Artists" for soundtracks, and the primary artist for other collections where only one or two tracks have different artists.)
The $if() function looks to see if the tag is populated (e.g., the album tag) and then returns the second argument if so, or the third one if not. So, in this case, the first returns the name of the album or "Untitled" if there is no album tag present. The next $if() function returns the disc number if one is specified, or no disc number if not. The $num function tells Picard how many digits to use, so the disc and track number will be written as "01", "02", etc. That results in this kind of file structure in practice:
XTC/(1986) Skylarking/02 - Grass.mp3
See the scripting functions reference for a full list of available functions.
It also has a plugin API and there are a number of plugins available to extend its functionality or change the way it formats tags. For example, some people include the disc number in an album title tag (e.g. "The Wall (disc 1)" or similar), which may not be appealing to other collectors. There is a "Disc Number" plugin (script) to automatically remove that and copy the data to the appropriate "discnumber" tag instead. Another plugin allows remapping genre names, so that (for example) all rock subgenres are simply tagged "rock" rather than "alternative rock", "country rock", "hard rock", and so forth. Plugins can be downloaded and managed via the "Plugins" tab in Picard's Options dialog.
Make it so
Overall, Picard is an easy-to-use music tagger backed by an expansive data set in the form of MusicBrainz. It is well worth trying out for users who are particular about music metadata. Its user guide is well-written and extensive; even though the application is already intuitive, I'd recommend reading through the guide before putting Picard to use.
The project is currently working on a 3.0 release with some major changes, including an update to Qt6, a new plugin system, saving user sessions, as well as new tags and variables. It's unclear when a stable 3.0 is likely to be finished, but the project did push out a fourth alpha release on March 20 that is said to have all major features implemented. It is, of course, potentially buggy and may mangle music files or tag the Dead Kennedy's albums as polka music; the project suggests making a backup of the Picard configuration file before taking it for a spin, because the configuration is not backward compatible.
