Today the Picard team is releasing an early alpha version of the long awaited major update to MusicBrainz Picard. Picard 3 has a lot of changes over the previous versions, and this is the first time we make it available for a larger audience to test.
Please be clear that this is an early alpha release. While we have all the major features implemented and we are rather confident in the current code, it is still a development release and it is expected there will be bugs. If you use this, do so with care, backup your files and please report any issues you encounter.
Some of the changes are also backward incompatible, hence we recommend you make a backup of your Picard.ini config file before trying the alpha version. You can do so in Picard’s Options under Advanced > Maintenance.
Below is an overview about the most significant changes and new features.
What’s new?
Updated to use Qt6
Qt is the application framework Picard is built upon. Qt simplifies the implementation of cross-platform desktop applications as it abstracts away many of the differences between various operating systems. Picard 2 was based on Qt5. With Picard 3 we have updated to Qt6. Besides ensuring that Picard stays up-to-date and available on modern desktops, this version change also brings some advantages like much improved support for screen scaling. Specifically on Windows the old issues of having fonts scale inconsistently are now resolved.
New plugin system
Apart from the Qt6 migration the new plugin system is the most significant change in Picard 3. While the previous plugin system enabled a lot of flexibility in Picard, it has a couple of limitations. For example, Picard would load, and partially run, the code of each installed plugin on every start, whether the plugin was enabled or not. This could lead to unwanted side effects and unexpected behavior. On the development side it proved also difficult for third-party developers, especially for more complex plugins, as all code had to be checked into the central picard-plugins Git repository.
The new plugin system provides:
- Separation of plugin metadata and code
- A defined plugin API with typing support
- Git based versioning and updating of plugins
- Plugins can be installed and updated from a central plugin registry, or from third-party Git repositories
- Several trust levels (official, trusted, community, untrusted)
- The ability to blacklist plugins centrally allows us to react on security issues
- A
picard-pluginscommand line tool to manage (install, uninstall, update…) plugins - Plugins can have their user interface texts translated
- Plugins have their own configuration namespace
This also means that Picard v2 plugins are not compatible and need to be migrated to the new system. The Picard team has already migrated over 20 plugins, have a look at the plugins v3 list on the Picard website.
If you are a developer and want to update your plugins to Picard 3 or maybe write a new one, we have some initial documentation of the new plugin system.
Configurable columns and filtering
Picard already supported customizing the file and album list views by selecting the columns to display. In previous versions this was limited to a couple of pre-defined columns, though. New contributor knguyen1 implemented full custom column support. You can now define your own columns, where you can define the actual column content using scripting. This gives a lot of flexibility showing exactly the information you need. There is also a new pre-defined “Match” column that allows to sort releases by match quality. For more details see the chapter Custom Columns in the documentation.
Another new feature, implemented by jpmsousa03, is the ability to filter the list views. You can select the fields to search and enter a search term. Only items matching this filter will be shown.
Cover art processing
It is now possible to both filter and process cover art loaded from cover art providers. The new options in Cover Art / Processing allow you to ignore images below a certain size or automatically resize loaded images or convert them to a specific file format.
Cover art processing was implemented as part of Google Summer of Code 2024 by twodoorcoupe. You can read more about this in twodoorcoupe’s blog post GSoC 2024: Picard image processing.
Save and restore user session
Picard can save and restore your current workspace state as a session file under the main File menu. Sessions preserve file placement (unclustered, clusters, albums, specific tracks, and standalone recordings), your manual metadata edits, and selected configuration options so you can resume work later. Thanks to knguyen1 for this feature. See the chapter Sessions Management in the documentation for more details.
Copying multiple metadata values
It is now possible to select and copy multiple tags in the metadata view and paste them on e.g. another tag, updating all corresponding tags. It is also possible to paste multiple copied values into a spreadsheet tool. This feature was provided by StevilKnevil.
New tags and variables
The %_filesize% variable contains the file size in bytes (if the script is running in a context where a file is available, i.e. on tracks with a matched file or in a file naming script).
The new %_genres% and %_folksonomy_tags% variables give you access to the raw list of genres or folksonomy tags as loaded from MusicBrainz.
Also full support for synced lyrics was added. In scripting this is available by using the %syncedlyrics% tag.
The variables %_albumartists_countries% and %_artists_countries% contain all country codes for all credited album artists / track artists.
Improved media player
The built-in media player was at risk of getting removed from Picard. But instead we improved it. As before the player is based on QtMultimedia. With Qt6 this component brings better cross-platform support for various audio formats and pitch-adjustment if playback speed changes (requires Qt 6.10).
The player has also been internally refactored to better separate the player and UI. This allows better integration with the OS. The player now supports macOS “Now Playing” and on Linux can be controlled by MPRIS2 compatible tools. The refactoring also allows plugins to interact with the player.
Operating system support
Picard is now available for macOS ARM64 aka Apple silicon. While it was previously possible to run Picard on such systems using Apples Rosetta 2 emulation layer, the native builds offer better performance. Please note that as of now we offer separate downloads for the ARM64 and Intel versions of Picard. Please make sure to download the file appropriate for your hardware. We would like to offer a single universal download in a future release.
Due to the updated dependencies, in particular Picard now using PyQt6 / Qt6 and the minimum supported Python version being 3.10, support for older operating systems had to be dropped.
Picard 3 requires Windows 10 or later or macOS 11 or later. Linux users should have Qt 6.6 or later and at least Python 3.10 available.
Reworked documentation
The documentation is being updated for Picard 3. Most of the changes are already documented . You can find the latest version of the documentation at https://picard-docs.readthedocs.io/en/latest/ .
Code refactoring
Under the hood there was a lot of refactoring of the source code, improving the existing code, making it more maintainable and removing outdated and deprecated code.
And more…
There have been many more improvements and bug fixes. Please see the changelog below for a complete list of changes.
Known issues
- [PICARD-3116] – On macOS ARM64 machines, sorting the columns might not work.
- [PICARD-2833] – On macOS, the application menu is not shown when the “new user warning” dialog is being displayed.
Download
As this is an initial pre-release and early alpha version it is not available on all the channels where Picard’s current stable version is available.
We appreciate your interest in trying this new version. Use with care, backup your files and please use the MetaBrainz community forums and the ticket system to give feedback and report bugs.
- MusicBrainz Picard for Windows (installer)
- MusicBrainz Picard for Windows (portable)
- MusicBrainz Picard for macOS (Intel)
- MusicBrainz Picard for macOS (ARM64)
- Source code
Picard is free software and the source code is available on GitHub.
Helping out
This is an alpha release, and there is still some work to do for a solid, stable release of Picard 3.
The easiest way to help is by giving feedback in the MetaBrainz community forums and report bugs and issues in the ticket system.
The many changes all over Picard’s user interface also mean that a lot of the translations need to be updated. You can help translate Picard into your language, see the instructions for Picard, Picard Website and Picard User Guide Internationalization. Also several of the plugins now support translations and are available for translation on Weblate in the Picard Plugins project.
Also you can help improve the documentation on https://picard-docs.readthedocs.io/en/latest/.
Last but not least if you find bugs and you can code we are happy to review your pull request on the Github repository.
Acknowledgements
We had a lot of contributions by various people for the Picard 3 release. This includes many new contributors. This release contains code contributions by zas, rdswift, outsidecontext, twodoorcoupe (cover art processing, synchronized lyrics), knguyen1 (sessions, custom columns), zytact (filepath in metadata view), jpmsousa03 (list view filters), Goldmaster (avoid overwriting existing additional files), kellnerd (separate standardized instruments/vocals options), rakim0 (_genre variable), pranavsource1 (_broadcast_date variable), Thuna-Cing (fix $rsearch), leo60228 (redumper TOC file support), nullHawk (_filesize variable), StevilKnevil (copy and paste multiple tags).
Many thanks also to all the translators. Special thanks for the continuous translation support to mfmeulenbelt (Dutch), marcriera (Catalan), oleh_hishak (Ukrainian), Vac31 (Lithuanian), ninjum (Galician), MonkeyPython (Norwegian Bokmål), salo.rock (Italian).
Changelog
Below is the full list of changes since the last stable release 2.13.3.
Bugfixes
- PICARD-428 – Plugins body gets executed when picard starts, even if plugin is disabled
- PICARD-1498 – Allow uninstalling plugins that cannot be loaded
- PICARD-1616 – Windows: File currently played in internal player cannot be saved
- PICARD-2003 – Picard installed via pip cannot find locales
- PICARD-2657 – “Open in Player” unclear in meaning
- PICARD-2675 – On GNOME Wayland the file chooser dialog is not transient to the main window
- PICARD-2678 – Wrong configuration and plugins path opened/shown in MSIX install
- PICARD-2782 – Extremely small font in dialogs and toolbar on Windows with display scaling
- PICARD-2826 – After saving the file info does not update
- PICARD-2829 – macOS: multi directory selection dialog does not allow access to external drives
- PICARD-2847 – Switching option profiles does not update menu items
- PICARD-2857 – Picard returns non-zero when loading files on the command line
- PICARD-2863 – Barcode sometimes not shown in “other versions” context menu
- PICARD-2873 – Cover art cells aren’t updated when displayed after Search dialog resize
- PICARD-2878 – Crash in cover art when scan triggers recursion beyond python limits (e.g. 1000)
- PICARD-2879 – macOS: Chosen starting directory might not be used in file browser
- PICARD-2954 – Cannot scroll up while dragging items on Wayland
- PICARD-2990 – Disabled format plugins will still be used
- PICARD-3016 – Logging relative path broken on Windows with Python 3.13
- PICARD-3019 – Switching option profiles in application menu is not persisted and does not update menu quick options
- PICARD-3029 – Deleted Record Label field from m4a file persists in file
- PICARD-3038 – edittagdialog.py:271: IndexError: list assignment index out of range (dumped core)
- PICARD-3043 – Impossible to delete
performertag in ID3 - PICARD-3045 – Copying the value of “length” tag crashes if multiple files are selected
- PICARD-3056 – Picard crashes and closes if cover art is not provided in the file picker
- PICARD-3065 –
$rsearchfails if matching pattern contains a group that didn’t match - PICARD-3067 – Dot remaining in title after track number parsing
- PICARD-3073 – Album covers download is inconsistent in search results dialog
- PICARD-3074 – Problem editing search text in search results dialog
- PICARD-3081 – On Windows, artist named “NUL.” causes “Move Files” to fail
- PICARD-3093 – Sanitize HTTP origin header values in browser integration
- PICARD-3109 – Error saving option settings with new profile
- PICARD-3128 – Collections menu not usable with keyboard
- PICARD-3139 – Incorrect settings key used
- PICARD-3149 –
tracknum_and_title_from_filename()raises an exception with a file like ‘1.opus’ - PICARD-3164 – Network drive for remote hostname ending with dot is broken
New Features
- PICARD-150 – Support for internal search/filter of the main two panes
- PICARD-860 – Add cover art processing to the plugins API
- PICARD-1861 – New plugin API and plugin management
- PICARD-2121 – Add cover art image processing options
- PICARD-2287 – Support copy and paste of one or multiple tags
- PICARD-2607 – Add
_genresand_folksonomy_tagsvariables - PICARD-2783 – Provide separate options for embedded and external cover art
- PICARD-2817 – Add support for macOS “Now Playing”
- PICARD-2842 – Add a CLI command to install a plugin
- PICARD-2921 – Allow manual setting of cover art from web url
- PICARD-2926 – Add option to filter out images below a given size
- PICARD-2936 – Add option to change cover art images’ formats
- PICARD-2945 – Provide
_broadcast_datevariable - PICARD-2966 – Show file type in list views
- PICARD-3054 – Add artist country variable
- PICARD-3104 – Allow user to set plugin execution order
- PICARD-3107 – Add profile save warning on option settings page
- PICARD-3108 – Allow user to select checkbox option settings to include in a Quick Menu
- PICARD-3165 – Translate album names and track names to these locales where possible
- PICARD-3118 – Allow user to save/load current Picard session
- PICARD-3157 – Add support for MPRIS2
- PICARD-3165 – Support parsing raw SCSI TOC data file as created by redumper
Tasks
- PICARD-2393 – Code cleanup and refactorings
- PICARD-2784 – Drop support for Python 3.9 and below
- PICARD-2871 – Get rid of QtCore.QObject.tagger
- PICARD-3007 – Document
_genresand_folksonomy_tagsvariables - PICARD-3017 – Update documentation for
_filepathvariable - PICARD-3050 – Update documentation for lookup disc
- PICARD-3077 – Update documentation for main page filters
- PICARD-3079 – Support Python 3.14
- PICARD-3082 – Update documentation for new standardized instrument and vocal credits option
- PICARD-3106 – Use uv for dependency management
- PICARD-3112 – Update documentation for Quick Settings menu
- PICARD-3119 – Refactor: all standard, icon, delegate columns to use new column API
- PICARD-3159 – Document broadcast date variable
- PICARD-3162 – Document keyboard shortcuts for internal player
- PICARD-3167 – Document new
redumperSCSI TOC file import option
Improvements
- PICARD-3170 – Drop parameters from
$matchedtracks() - PICARD-237 – Allow embedding cover art with lower resolution
- PICARD-271 – Avoid overwriting additional files when moving into folders that already have same file
- PICARD-442 – Allow sorting by whether release is complete
- PICARD-489 – Add extra field for ALL folksonomy tags in Picard
- PICARD-1092 – Add support for preserving the SYLT tag, for synchronised lyrics
- PICARD-1241 – Resize cover art to the new size configured in a new option
- PICARD-1248 – Show more technical details (Bitrate, Size) for tracks
- PICARD-1274 – Allow moving music files to system trash
- PICARD-1403 – Add explicit API for album requests
- PICARD-1404 – Management of third-party plugins
- PICARD-1477 – Option to never replace an image with a smaller one
- PICARD-1507 – Cancel outstanding album requests if album gets removed
- PICARD-1583 – Player: Adjust pitch when changing playback speed
- PICARD-1685 – Add
_filesizevariable - PICARD-2025 – Display old/new path/filename in Metadata list
- PICARD-2101 – Dynamic variable list for script editor auto completion
- PICARD-2103 – Support custom columns in panel views
- PICARD-2122 – Add a “cover dimensions” column to show primary cover art size
- PICARD-2192 – macOS: Support ARM (Apple Silicon)
- PICARD-2300 – Linux: Support org.freedesktop.appearance.color-scheme to detect dark / light appearance user preference
- PICARD-2331 – Update to PyQt 6
- PICARD-2529 – Move plugin directory to QStandardPaths.StandardLocation.AppDataLocation
- PICARD-2561 – Add context menu entry to play file(s) on internal player
- PICARD-2580 – Add keyboard shortcut for Artwork/Show more details
- PICARD-2729 – Allow disabling date sanitization for APE and Vorbis tags
- PICARD-2759 – “Clear Log” button is missing an ellipsis at the end
- PICARD-2765 – Use consistent quotation marks in translatable strings
- PICARD-2807 – Search-as-you-type text box in Options | Plugins
- PICARD-2828 – Separate options for standardized instrument and vocal credits
- PICARD-2832 – Add warning when select multiple directories option is enabled
- PICARD-2855 – Add an option to control network cache size
- PICARD-2856 – Improve logging regarding plugin paths
- PICARD-2858 – Make profile highlights colors configurable
- PICARD-2864 – Enable HTTP/2 for requests
- PICARD-2869 – Register a global exception handler to show the crash dialog
- PICARD-2875 – Options > Advanced > Maintenance: let the user choose the backup directory
- PICARD-2876 – Allow viewing unused options list without having to enable removal
- PICARD-2884 – Show icon tooltips for errors and unmatched tracks
- PICARD-2897 – Load supported file formats with unknown / uncommon extension
- PICARD-2899 – Number displayed in Other Versions submenu title isn’t the actual number of versions available
- PICARD-2904 – Let the user restore default for one color only in Options > Interface Colors
- PICARD-2905 – Seed date when adding cluster as release
- PICARD-2912 – Highlight missing functions in script editor
- PICARD-2913 – Let the user configure script syntax highlighting colors
- PICARD-3003 – Allow setting disable-autoupdate on build with PEP 517 build system
- PICARD-3020 – Submit disc subtitles in add cluster release
- PICARD-3042 – Show medium format in disc ID lookup result
- PICARD-3060 – Script variable/function completer popup should limit number of choices
- PICARD-3062 – Add tag documentation to script editor help
- PICARD-3066 – Links displayed in dark mode are not using an appropriate color, hard to read
- PICARD-3069 – Add Disambiguation Field to Album Search Results Dialog
- PICARD-3072 – Add an optional
groupparameter to$rsearch - PICARD-3084 – Allow up to 3 characters for Windows file name compatibility replacements
- PICARD-3085 – Cover Art View – Display file size and dimensions on default view
- PICARD-3114 – Do not auto-close the menu when enabling/disabling Profiles
- PICARD-3123 – Rename ‘dont_write_tags’ to ‘enable_tag_saving’ (value reversed)
- PICARD-3127 – Do not auto-close the menu when picking columns
- PICARD-3130 – Allow searching scripting help documentation
- PICARD-3132 – Add ReadTheDocs support
- PICARD-3133 – Pre-Save File Hook for Plugins
- PICARD-3146 – Allow plugins to register global tools menu actions
- PICARD-3147 – Remove
ui_initextension point - PICARD-3148 – Use Python docstring for registered scripting functions
- PICARD-3161 – Add keyboard shortcuts to control internal player
- PICARD-3169 – Show hierarchical options tree for option profiles
I’m looking forward to this version upgrade once fully released! Hopefully the plugins I use will be updated or have replacements made by that time. Looks like a lot of good stuff both in bugfixes as well as features. Great work people! I’m just a user, not a developer, but I overall get what is going on here. Just want to share my excitement and praise!
Cool to hear this. What are the plugins you absolutely rely upon?
So far we have mainly ported the plugins that were developed by someone from the Picard team anyway, and a few selected plugins we considered especially important (view script variables, replaygain2).
Greetings,
I have just discovered Musicbrainz et. Al and I’m very excited to dive Into and explore.
I shall check out Picard
Regards