Summer of Code ’16 with Picard

Hi! I’m Rahul Raturi, GSoC participant for Picard. This was my first GSoC, and it’s been a pretty awesome experience. Following is the overview of my project.

About the project

The outline of the project is to allow searching for albums, artists and tracks from within Picard. This avoids switching back and forth between web browser and Picard for searching, say release. If Picard fails to auto tag a file usual flow to tag the file with correct metadata is to first select the file, then click on “Lookup in Browser”, then search correct release, and load it into Picard by clicking the green “Tagger” button. In some systems, the “Tagger” button wouldn’t show, which was also a nuisance. With this patch, the entities can be searched and optionally loaded into Picard using built-in search dialogs, so no application switching.

Search dialogs

Picard already provides search options (through a web browser) for three entities; namely track, artist, and album. So I’ve built search dialogs for these three.

  1. Track Search Dialog — Searches for tracks and allows optionally loading corresponding album back into Picard. track_dialog
  2. Album Search Dialog — Searches albums and optionally allows loading the selected one into Picard. Screenshot from 2016-08-15 17-08-09
  3. Artist Search Dialog —  Displays basic information about the artists. To get more information about the selected artist, there’s an option to lookup him/her in browser. Screenshot from 2016-08-20 15-55-42

Searching similar tracks/releases

This is another important part of the project. Sometimes Picard fails to auto tag a file (or a cluster), or incorrectly tag it. These dialogs may prove useful here. To get expected data, right click on the file (should be in “Unmatched Files” cluster), and select “Search for similar tracks…”. The track search dialog would pop up, and expected release can be looked up there. Same procedure is for searching clusters.

Links to my work

Each PR is based on the previous one. A new dialog in each, plus some improvements to existing dialog. For trying the dialog, clone the artist search branch, until it gets merged into master. It has the most recent changes.

Note: To use these dialog for searching, an option in User Interface setting about built-in search needs to be enabled.

Conclusion

It was quite fun doing this project. Thanks to Michael Wiencek (mentor) for the guidance and leniency :). Also the Picard team for the reviews. I look forward to contribute more to Picard, now that I’ve a better understanding of the code. Also for another Summer of Code.

Picard 1.3.2 released

Picard 1.3.2 is now available on the Picard download page. This again is only a small maintenance release which mainly updates the OS X build to fix crashes some users experienced with Picard 1.3.1. Here is the complete list of fixes:

Bug

  • [PICARD-681] Fixed tags from filename dialog not opening on new installations
  • [PICARD-682] Picard 1.3.1 crashes on OSX on start

For Ubuntu users we have also finally updated our stable PPA.

Picard 1.3.1 released

This is a maintenance release, mostly bug fixes. All users are encouraged to upgrade.

Binary packages are available at http://picard.musicbrainz.org/downloads/

Bug

  • [PICARD-273] – Picard should use the correct Accept header when talking to web services.
  • [PICARD-589] – Picard refuses to load files if any path component happens to be hidden
  • [PICARD-642] – ConfigUpgradeError: Error during config upgrade from version 0.0.0dev0 to 1.0.0final0
  • [PICARD-649] – Windows installer sets working directory to %PROGRAMFILES%\MusicBrainz Picard\locale
  • [PICARD-655] – Last.fm plus tooltip help elements are all messed up
  • [PICARD-661] – Regression: Tagger script for cover art filename does not work anymore
  • [PICARD-662] – Retrieving collections causes AttributeError: release_list
  • [PICARD-663] – Artist name makes it impossible to save

Improvement

  • [PICARD-658] – Support the new pregap and data tracks
  • [PICARD-659] – Set the originalyear tag when loading a release
  • [PICARD-665] – Web service calls to ports 80 and 443 do not need explicit port specification. 443 should be automatically made https.

Picard 1.3 released

Version 1.3 of Picard has been released today, with some notable features and bug fixes.

This release has few visible changes, but overall performance and stability were much improved. A lot of minor annoying issues were fixed. Cover art code was reworked, and notably one can now enable fallback on release group cover art if no cover art exists for a specific release.

Logging was improved, user can now enable debug mode from About →View Error/Debug Log, it may help to see what is going on if needed, passwords and sensible information were hidden from the log, so user can now safely post his log to get help.

To report any issue concerning this release, please use our bug tracker. As usual you can also get help on forum or on IRC (freenode, #musicbrainz).

Special thanks to Sophist, Wieland Hoffmann, Michael Wiencek, Johannes Dewender, Lukáš Lalinský, Frederik “Freso” S. Olesen, and the whole MusicBrainz Team.
Many thanks to all users, developers, bug reporters and translators. Code contributions since 1.2 are visible on Github Contributors graph.

Unfortunately the OAuth support patch (PICARD-305) didn’t make it in this release.

Picard 1.3 can be downloaded on the Picard’s website.

Be aware that downgrading from 1.3 to 1.2 may lead to configuration compatibility issues, better save your configuration before installing 1.3 if you intent to go back to 1.2.

Among changes since 1.2:

  • The “About” window now displays the versions of libraries used by Picard
  • Picard now correctly handles matching of MP3 files saved in ID3v2.3 tags (which is the version that Microsoft Windows and iTunes both use).
    Note: You may need to re-save your tags once to get them to match in future.
  • A sort tags plugin is now provided as tag data is no longer displayed sorted by default.
  • A new tag, musicbrainz_releasetrackid, containing the MusicBrainz Track MBID introduced in the May 2013 schema change release, is now written to files.
  • Add %_recordingtitle% (PICARD-515)
  • Fix plugin install bugs (PICARD-444)
  • Fix Options → File naming examples to handle primary/secondary release types (PICARD-516)
  • A new advanced option is available to permanently set the starting directory for the file browser and “Add files/folder” buttons.
  • Requests to Musicbrainz against your own account e.g. for collections are now handled through SSL (PICARD-337)
  • Refresh of Albums using Ctrl-R and selection of Other Releases are now more responsive during batch lookups.
  • Main window is now emitting a “selection_updated” signal, plugin api version bumps to 1.3.0
  • Append system information to user-agent string
  • Compilation tag/variable functionality (for tagging & file naming) has been split into two:
    %compilation% is now aligned with iTunes, and set only for Various Artists type compilations
    %_multiartist% variable now indicates whether this release has tracks by multiple artists
    (in order to prepend the artist name to the filename as shown in the default file naming script)
  • autodetect the CD drive on Mac OS X (PICARD-123)
  • Ignore directories and files while indexing when show_hidden_files option is set to False (PICARD-528)
  • Add ignore_regex option which allows one to ignore matching paths, can be set in Options → Advanced (PICARD-528)
  • Added an “artists” multi-value tag to track metadata, based on the one in Jaikoz, which contains the individual artist names from the artist credit. Also useful in scripts (joining phrases like ‘feat:’ are omitted) and plugins.
  • Added “_artists_sort“, “_albumartists“, “_albumartists_sort” variables for scripts and plugins.
  • Made Picard use the country names also used on the MusicBrainz website (PICARD-205)
  • New setup.py command `get_po_files` (Retrieve po files from transifex)
  • New setup.py command `regen_pot_file` (Regenerate po/picard.pot)
  • New Work tag (which for Classical music is often different from the track title) saved as ID3 TOAL tag.
  • New Composer Sort Order tag (variable %composersort%).
  • Improve the Other Releases list to prioritise and separate releases which match the correct number of tracks and your Options → Metadata → Prefered Releases settings for Country and Format.
  • New %_absolutetracknumber% variable numbering tracks sequentially regardless of disc structure (so you can numbers tracks on multi-disc releases without a disc number)
  • Support dropping image directly from Google image results to cover art box
  • Add %_musicbrainz_tracknumber% to hold track # as shown on MusicBrainz release web-page e.g. vinyl/cassette style A1, A2, B1, B2
  • Show the ID3 version of the file in the Info… dialog (Ctrl-I) (PICARD-218)
  • Fixed a bug where Picard crashed if a MP3 file had malformed TRCK or TPOS tags (PICARD-112)
  • Add –files option to setup.py build_ui, used to force .ui to .py regeneration (PICARD-566)
  • New setup.py command `update_constants` (Regenerate countries.py and attributes.py)
  • Made Picard use release groups, medium formats and cover art types also used on the MusicBrainz website
  • Use MusicBrainz Server translations for release groups, medium formats and cover art types
  • Add checkbox to toggle debug at runtime in log/debug view dialog
  • Add a plugin to add Artist Official Homepage relationships to the website tag (ID3 WOAR tag)
  • Add integrated functions $eq_any, $ne_all, $eq_all, $ne_any, $swapprefix and $delprefix.
  • Add %_performance_attributes%, containing performance attributes for the work e.g. live, cover, medley etc.
  • Use $inmulti in file naming scripts i.e. …$if($inmulti(%_performance_attributes%,medley), (Medley),)
  • Add optional `priority` parameter to `register_album_metadata_processor()` and `register_track_metadata_processor()`
    Default priority is `PluginPriority.NORMAL`, plugins registered with `PluginPriority.HIGH` will be run first, plugins registered with `PluginPriority.LOW` will run last
  • Add Standardise Performers plugin to convert e.g. Performer [piano and guitar] into
    Performer [piano] and Performer [guitar].
  • Add support for release group cover art fallback (PICARD-418, PICARD-53)
  • Add a clear button to search box
  • Honour preferred release formats when matching AcoustIds (PICARD-631)
  • Prevent ZeroDivisionError in some rare cases (PICARD-630)

About next stable Picard release

Picard team decided to release a new stable version of Picard before the end of the summer.
To help us, advanced users, translators and developers are encouraged to:

Exact release date is not yet known, and features aren’t yet frozen, but the only important change we’ll try to get in before final release is OAuth support (PICARD-305), we still accept minor patches until feature freeze is announced.

Since Picard is now using some translation resources from MusicBrainz project, translators should make sure following resources are up-to-date:

A simplified list of changes made since 1.2 can be read there.

Be aware that downgrading from 1.3 to 1.2 may lead to configuration compatibility issues, better save your configuration before using 1.3 branch if you intent to go back to 1.2.

 

 

Picard 1.2 released

Version 1.2 of Picard has been released today, with some notable features and bug fixes.

As announced recently, PUID support is being removed from MusicBrainz on October 15. This release of Picard has followed suit by removing all support for AmpliFIND/PUID scanning and submission. AcoustID is now the default (and only) method of scanning files. If you’re currently using AmpliFIND as your fingerprinting system, then after installing Picard 1.2 you must enable AcoustID in your options, under the “Fingerprinting” section.

Those who have the Picard cover art plugin installed will likely want to remove it. Picard 1.2 has built-in support for downloading cover images from a variety of sources, without the need for a plugin. Please see the new configuration under Options -> Cover Art.

Something important to note for people who build/package Picard is that Python 2.6 is now the minimum required version.

Special thanks to Wieland Hoffmann, Laurent Monin, Lukáš Lalinský, and everyone who’s helped contribute/report bugs for this release!

Picard 1.2 can be downloaded at:
http://musicbrainz.org/doc/MusicBrainz_Picard

Changes since 1.1:

  • Picard now requires at least Python 2.6
  • Removed support for AmpliFIND/PUIDs
  • Add support for the Ogg Opus file format
  • It’s now possible to download cover images without any plugin. Cover Art Archive images can be downloaded by image type
  • Improved directory scanning performance
  • Prefer already-loaded releases of the same RG when matching files
  • Allow dropping new files onto specific targets
  • Add basic collections management support (PICARD-84)
  • Allow adding custom tags in the tag editing dialog (PICARD-349)
  • Fix replacing of Windows-incompatible characters (PICARD-393)
  • Save both primary and secondary release types (PICARD-240)
  • Handle errors from the AcoustID service better (PICARD-391)
  • Accept HTTPS URLs on drag-and-drop (PICARD-378)

Picard 1.1 released

Three months after the big release of Picard 1.0, we’ve released version 1.1 today with a good batch of changes.
Before discussing those, let’s say thanks to everyone who has contributed to version 1.1! Wieland Hoffmann (Mineo), Lukáš Lalinský, Frederik S. Olesen (Freso), and Johannes Weißl (weisslj) have all made some notable changes to make this release possible.
Users of the German translation should no longer experience any menu display issues. (Sorry for the annoyance that has caused!) Speaking of languages: the “language” tag now stores the lyrics language instead of the tracklist language.
Windows users should also no longer run into any trouble with drag-and-drop after launching Picard for the first time.
The new version can be downloaded at:
Please report any new bugs at:
Here’s the list of changes since 1.0:
* Always show basic tags in metadata comparison box, even if empty (title,
artist, album, tracknumber, ~length, date) (PICARD-201)
* Fixed AcoustID submission failure after removing files from Picard (PICARD-82)
* Allow multi-select in new MetaDataBox for delete/remove tags (PICARD-194)
* File browser remembers last directory/no longer crashes on OS X (PICARD-104)
* Removed the “Run Picard” option from the Windows installer (PICARD-11)
* Refreshing a non-album track correctly clears previous track metadata (PICARD-220)
* Fixed the preserved tags setting for tags with uppercase characters (PICARD-217)
* Added a completion box to the preserved tags setting, and clarified how it works
* Store lyrics language in tags instead of text representation language (PICARD-242)
* Fix various oddities in the metadata comparison box (PICARD-255, PICARD-256)

Three months after the big release of Picard 1.0, we’ve released version 1.1 today with another good batch of changes.

Before discussing those, let’s say thanks to everyone who has contributed to version 1.1! Wieland Hoffmann (Mineo), Lukáš Lalinský, Frederik S. Olesen (Freso), and Johannes Weißl (weisslj) have all made some notable changes to make this release possible.

Users of the German translation should no longer experience any menu display issues. (Sorry for the annoyance that has caused!) Speaking of languages: the “language” tag now stores the lyrics language instead of the tracklist language.

Windows users should also no longer run into any trouble with drag-and-drop after launching Picard for the first time.

The new version can be downloaded at:

http://musicbrainz.org/doc/MusicBrainz_Picard

Please report any new bugs at:

http://tickets.musicbrainz.org/

Here’s the list of changes since 1.0:

  • Always show basic tags in metadata comparison box, even if empty (title, artist, album, tracknumber, ~length, date) (PICARD-201)
  • Fixed AcoustID submission failure after removing files from Picard (PICARD-82)
  • Allow multi-select in new MetaDataBox for delete/remove tags (PICARD-194)
  • File browser remembers last directory/no longer crashes on OS X (PICARD-104)
  • Removed the “Run Picard” option from the Windows installer (PICARD-11)
  • Refreshing a non-album track correctly clears previous track metadata (PICARD-220)
  • Fixed the preserved tags setting for tags with uppercase characters (PICARD-217)
  • Added a completion box to the preserved tags setting, and clarified how it works
  • Store lyrics language in tags instead of text representation language (PICARD-242)
  • Fix various oddities in the metadata comparison box (PICARD-255, PICARD-256)

Picard 1.0 released

Lukáš Lalinský announced the long-awaited release of Picard 1.0 today:

It took us a long time to get here, but I’m very happy to announce the release of Picard 1.0!

This version includes a new UI for viewing tags, some options have been rearranged and a number of bugs fixed. The file naming formats for single and various artist releases have been merged. If you were using a different format for various artist releases, Picard will upgrade the format automatically for you, but you might need to review the result. This version also comes with support for two audio fingerprinting solutions (AcoustID and AmpliFIND), but fingerprint scanning is disabled by default – you have to enable it and choose which one you want to use first.

Many thanks to Robert Kaye (ruaok), Phillipp Wolfer (outsidecontext), Michael Wiencek (bitmap), Chad Wilson (voiceinsideyou) and many many others who helped the project along the way from 2003 when it was started!

You can download the new version at:
http://musicbrainz.org/doc/MusicBrainz_Picard.

If you notice any problems, please report them at:
http://tickets.musicbrainz.org/

Complete list of changes since version 0.16:

  • New UI: Extended comparison of existing vs. MB metadata & tags (PICARD-43)
  • Merged the renaming and moving options pages
  • Removed the VA file naming format option (there is now a single format option) (PICARD-159)
  • Add %license% tag
  • Made %writer% available to tagger scripts and plugins with contents of songwriter (PICARD-21)
  • Allow two multi-valued variables to be merged in tagger scripting (PICARD-139)
  • Allow multi-valued variables to be transformed in tagger script and then set back in tags as multi-valued (PICARD-147)
  • Fix $copy not preserving multi-value variables as documented (PICARD-138)
  • Load/save free-text tags for ID3 as TXXX frames (PICARD-148)
  • Fix writing of MusicBrainz Work Id / musicbrainz_workid to tags (PICARD-88)
  • Handle mimetype for embedding cover art from EXIF jpegs (PICARD-27)
  • Change cover art box to open MusicBrainz release rather than Amazon
  • Support manual drag-and-drop of cover art onto a release via cover art box
  • Only open browser on left-click of cover art box (PICARD-190)
  • Fix Lookup in Browser (previously ‘tag lookup’) for clusters (PICARD-186)
  • Lookup in Browser will now not use MBIDs to lookup unmatched files/clusters
  • Add Date/Country to CD Lookup results dialog (PICARD-198)
  • Fix/reset album folksonomy tag counts while refreshing releases (PICARD-4)
  • Plugins actions can now create sub-menus using the MENU class attribute
  • New plugin hook register_clusterlist_action
  • Display the port Picard is listening on at bottom right status bar (PICARD-191)
  • Make album drops from right hand pane to left default to “unmatched files” again (PICARD-33)
  • Remove .DS_Store, desktop.ini, and Thumbs.db from otherwise empty directories (PICARD-75)
  • Update artist translation to use new alias features (primary flag, sort names) (PICARD-200)
  • Deleted tags aren’t indicated as changes (PICARD-165)
  • Picard log entries have inaccurate timestamp (PICARD-45)
  • Interface doesn’t allow keyboard only management (PICARD-103)
  • Added option to preserve timestamps of tagged files (PICARD-31)
  • Added keyboard shortcut to reload release (PICARD-99)
  • Medium formats weren’t listed in order in the “Other versions” menu (PICARD-91)
  • Couldn’t select multiple directories in “Add Folder” window on OS X (PICARD-74)

Picard 0.16 released with AcoustID support

Lukáš Lalinský announced here:

Hello,

We released a new version of Picard today. This new release includes a number of bug fixes. Unicode punctuation is now replaced by default for new users. Title standardization has been removed, as track titles now follow the same style guidelines as recording titles.

One larger change that is hidden by default is support for AcoustID fingerprinting. AcoustID is a new, completely open source, audio fingerprinting project, started by me last year. I’m really glad to finally integrate it with Picard. Integration with the MusicBranz website is planned for later. Configuring Picard to use AcoustID instead of AmpliFIND should be completely transparent, there are no visual differences in the scanning process. Note that this feature requires downloading an extra application, see the AcoustID wiki page for details.

Changes since version 0.15.1:

  • Added AcoustID support.
  • Fixed track metadata plugins.
  • Added new internal %_totalalbumtracks% tag field. (PICARD-16)
  • Track metadata plugins now run also on non-album tracks. (PICARD-7)
  • Fixed custom Various Artists name on the %albumartist% field. (PICARD-5)
  • Album artist is now correctly “translated”. (PICARD-1)
  • Unicode punctuation is now converted to ASCII by default.
  • WavPack correction files are moved together with the main files. (PICARD-15)
  • Unicode filename normalization on OS X.
  • Original release date is now saved into %originaldate%.
  • Allow tagging with localized artist aliases (PICARD-17)
  • Added a quit confirmation dialog. (PICARD-46)
  • Standalone recordings can be tagged with relationships now. (PICARD-10)
  • Refreshing an album will refresh its “other versions” listing. (PICARD-8)
  • “Unicode punctuation to ASCII” now works on album-level metadata. (PICARD-50)
  • DJ-mix tags should only be written to the medium where they apply. (PICARD-20)
  • Support URL redirects in web service/network request module (PICARD-54)
  • Jamendo and Archive.org cover art is displayed on web page, but not loaded by Picard plugin (PICARD-52)
  • Edits to metadata in “Details…” menu not reflected in UI (PICARD-13)
  • The status bar/new metadata box is updated when a selected file/track is changed. (PICARD-14)

You can download the new version, as usual, at http://musicbrainz.org/doc/MusicBrainz_Picard

Picard 0.15.1 released

This is a minor release to correct some bugs that were present in 0.15. Additionally, the Mac OS X build should now run fine on 10.4 (i386) and 10.5. Here’s the changelog:

Version 0.15.1 – 2011-07-31

  • “Other versions” menu now displays release labels and catalog numbers.
  • Added CD-R, 8cm CD to the format mapping.
  • Picard no longer fails to load releases with new or unknown media formats.
  • Threading issues that could occasionally cause Picard to stop loading files have been fixed.
  • Fixed album metadata processor plugins not working (#5960)
  • Fixed loading of standalone recordings (#5961)
  • Fixed requests stopping at midnight (#5963)
  • Stopped using QDateTime for timing requests (for Qt 4.6 compatibility) (#5967)
  • Fixed display of ampersands in the “other versions” menu. (#5969)
  • Fixed use of numerical functions in advanced scripting.

You can download 0.15.1 here.