MusicBrainz Picard: album-oriented tagging with AcoustID fingerprints
Picard is a cross-platform music tagger powered by the MusicBrainz database
At a glance
- What is it?
- Picard is the official MusicBrainz tagger, a Qt desktop application that identifies audio files by AcoustID fingerprint or disc ID and writes tags from the community database. This review covers how the album-oriented matching works, how to install it, and where it stops being the right tool.
- Who is it for?
- Adopt Picard if your library is album-shaped and you want tags anchored to MusicBrainz release entities rather than to a filename guess. Do not adopt it as a batch renamer for a folder of loose singles with no release behind them, and do not expect it to fix a collection whose files are already mis-tagged beyond recognition.
- Can I use it commercially?
- Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem Picard solves: tags that point at releases, not at filenames
Most taggers work from what is already in the file or from the folder name. Picard works from the other direction. It is the official MusicBrainz tagger, and the README describes an album-oriented approach whose stated purpose is to use the MusicBrainz data as effectively as possible. The unit of work is a release, not a track. You load files, Picard groups them, and it looks up the matching release in the MusicBrainz database, then writes the release's metadata back into the files.
The audience follows from that. This is for people who care that MusicBrainz Identifier fields end up in their files, because those identifiers are what let a player or a library tool resolve an album to a canonical entity later. It is also for people with physical CDs, since the README lists CD lookups and disc ID submissions as features. It is less obviously for someone who just wants artist and title fields filled in from a filename pattern. That job exists, but the album-oriented model is more machinery than it needs.
How matching works: AcoustID fingerprints, disc IDs and release lookup
The README names two identification paths that do not depend on existing metadata. AcoustID audio fingerprints let files be identified by the actual music, which the README describes as working even when files have no metadata at all. Separately, Picard can look up entire music CDs and submit disc IDs. Both routes exist to answer the same question: which release is this?
Once a release is chosen, Picard writes the tags. The README lists MP3, FLAC, OGG, M4A, WMA and WAV among supported formats, and the project depends on mutagen for tag handling, as the pyproject.toml dependency list shows. Cover art is fetched and written as part of the same pass. The scripting language controls how files are named and how tags are shaped, which is where the album-oriented model becomes visible: scripts operate on the whole release context, so a track number can be padded against the total track count rather than against a guess.
There is a real cost hidden in this design. Fingerprint matching is a network round trip, and it is a probabilistic match. A compilation, a live bootleg, or a release with several pressings can resolve to the wrong MusicBrainz release, and the tags written will be internally consistent but wrong. The album-oriented model amplifies that: one bad release choice propagates across every track in the group.
Installing MusicBrainz Picard and tagging a first album
The README points at the Picard download page for binary downloads and at INSTALL.md for building the codebase. If you are building from source, the project requires Python 3.10 or newer according to pyproject.toml, and the GUI is built on PyQt6. The dependency list also includes discid for CD lookups, mutagen for audio metadata, and pygit2 for plugin repositories.
On a source checkout, the documented build entry point is setup.py. The repository ships a uv.lock and a requirements.txt generated by uv, so a uv-based environment is the path the project's own files describe.
uv venv
uv pip install -r requirements.txt
uv pip install -e .The first two commands create a virtual environment and install the pinned dependency set. The third installs Picard itself in editable mode from the checkout, which is what makes the gui-scripts entry point available to run the application.
For a first real use, the workflow the documentation describes is: add files or a folder, let Picard cluster them, then run the lookup so it can match against MusicBrainz. AcoustID matching is the path for files with no metadata. After matching, review the release choice before saving, because the save step is what writes tags and moves or renames files according to the active script. The README recommends the illustrated quick start guide at picard.musicbrainz.org/quick-start/ for the detailed walkthrough, and that guide is the authority on the exact dialog sequence in the version you installed.
Plugins and scripting: the extension surface and its limits
Picard ships a plugin system, and the README says plugins can be chosen from the available plugin list or written from scratch, with the docs pointing at the extending/plugins page. The pyproject.toml dependency on pygit2 is consistent with plugin installation pulling from git repositories, which means plugin installation is a network operation against a remote.
Scripting is the other extension surface, and it is the one that decides what your files actually look like afterwards. The README calls the scripting language flexible and easy to learn, and says it lets you specify exactly how files are named and how tags look. That is accurate as far as it goes, but it also means the tool's output is only as good as the script. A default script and a hand-written script can produce very different directory trees from the same release.
The limitation worth naming is that neither surface is documented in the README itself. Plugin installation steps and the scripting variable reference live in the external documentation site, not in the repository README. If you are evaluating Picard from the repository alone, you will not find the script syntax or the plugin install procedure there.
Where Picard is the wrong tool
Picard assumes there is a release in MusicBrainz that corresponds to your files. When that assumption fails, the album-oriented model works against you. Unreleased material, private recordings, DJ sets, and anything a label never submitted has no release to match, so the lookup returns nothing useful and you are back to manual tagging with a heavier interface than a plain tag editor.
The second failure mode is the wrong-match case described above. Because matching is probabilistic and because a release choice applies to a whole group, a single incorrect match can rewrite an entire album's tags with plausible but incorrect data. The tool does not know your collection; it knows MusicBrainz.
The third case is scale and automation. Picard is a desktop GUI application, classified under X11 Applications :: Qt in pyproject.toml and intended for end users at the desktop. There is no documented headless batch mode in the README. If your requirement is to tag ten thousand files on a server as part of a pipeline, the README describes nothing for that, and the GUI-first design is a poor fit regardless of how good the matching is.
Alternatives and the actual difference in approach
The closest comparison point is beets, which also resolves files against MusicBrainz but takes a fundamentally different shape. Beets is a command-line library manager with a database at its centre: you import files, it stores them in a database, and queries and plugins operate on that database. Picard has no such persistent library database. It operates on files in front of you, writes tags into them, and the files themselves are the record. That difference decides a lot. If you want a queryable catalog of your collection, a database-centric tool answers a question Picard does not ask. If you want to fix the tags inside files and then walk away, Picard's model is more direct.
A second comparison is the plain tag editor category, tools that edit ID3 and Vorbis comments directly without any online lookup. Those are strictly more predictable, because nothing is inferred. They are also strictly less useful for a large untagged collection, which is the case Picard was built for. The trade you are making with Picard is inference in exchange for coverage.
Release cadence, licence and upgrade cost
The repository is not archived, and the last push was on 2026-09-22. The recent release list shows release-3.0.0rc4 on 2026-09-22, release-3.0.0rc3 on 2026-09-13 and release-3.0.0rc2 on 2026-09-10. Those are release candidates for 3.0.0, not stable releases, so anyone installing today from the release list is installing a pre-release. That matters for upgrade planning: release candidates can change behaviour between builds, and the three listed here landed within twelve days of each other.
Upgrade cost is dominated by the Python and Qt stack. Picard requires Python 3.10 or newer and PyQt6 6.6.1 or newer, with platform-specific dependencies on Windows (comtypes, pywin32) and macOS (pyobjc-core, pyobjc-framework-Cocoa, pyobjc-framework-MediaPlayer). The macOS pyobjc packages are pinned below version 13. Those pins mean a source install is sensitive to your interpreter version, and the requirements.txt is hash-pinned and generated by uv, so the project expects reproducible installs rather than loose version ranges.
On licensing, Picard is GPL-2.0-or-later, stated in pyproject.toml and shipped as COPYING.txt. That is a copyleft licence. If you are only running Picard to tag your own files, the practical effect is limited. If you intend to embed Picard's code or its plugins in another product, the copyleft terms are the thing to read, and that is a question for your own counsel rather than for a review.
Editorial conclusion
Adopt Picard if your library is album-shaped and you want tags anchored to MusicBrainz release entities rather than to a filename guess. Do not adopt it as a batch renamer for a folder of loose singles with no release behind them, and do not expect it to fix a collection whose files are already mis-tagged beyond recognition. Before committing, verify on one album that AcoustID matching returns the release you expect, and check that the scripting variables you rely on are documented for the version you installed.
Frequently asked questions
How do I install MusicBrainz Picard?
The README points to the Picard download page for binary downloads. Building from source is covered in INSTALL.md, and pyproject.toml requires Python 3.10 or newer with PyQt6 6.6.1 or newer.
How do I install Picard plugins?
The README states that plugins are available from the plugin list and that you can write your own, with the docs pointing at the extending/plugins page. The installation steps themselves are not in the repository README, so the external documentation is where to look.
How do I use Picard with MusicBrainz?
Picard is the official MusicBrainz tagger and uses the MusicBrainz database for release metadata. The README describes an album-oriented approach: you load files, Picard matches them to a release, and the release data is written into the tags.
How do I set up MusicBrainz Picard?
The README recommends the illustrated quick start guide and the documentation site for setup. For a source build, the repository ships a uv.lock and a requirements.txt generated by uv, and setup.py is the build entry point.
How do I install MusicBrainz Picard on Ubuntu?
The README only says that binary downloads are on the Picard download page and that INSTALL.md covers building the codebase. It does not document an Ubuntu-specific package or repository, so the download page and INSTALL.md are the two sources the project itself names.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/metabrainz-picard)
Community notes