beets 1.6.0
This release is our first experiment with time-based releases! We are aiming to publish a new release of beets every 3 months. We therefore have a healthy but not dizzyingly long list of new features and fixes.
With this release, beets now requires Python 3.6 or later (it removes support for Python 2.7, 3.4, and 3.5). There are also a few other dependency changes---if you're a maintainer of a beets package for a package manager, thank you for your ongoing efforts, and please see the list of notes below.
Major new features:
- When fetching genres from MusicBrainz, we now include genres from the release group (in addition to the release). We also prioritize genres based on the number of votes. Thanks to @aereaux.
- Primary and secondary release types from MusicBrainz are now stored in a new
albumtypes
field. Thanks toedgars-supe
{.interpreted-text role="user"}. #2200 - An accompanying new
albumtypes
includes some options for formatting this newalbumtypes
field. Thanks toedgars-supe
{.interpreted-text role="user"}.
Other new things:
permissions
: The plugin now sets cover art permissions to match the audio file permissions.unimported
: A new configuration option supports excluding specific subdirectories in library.info
: Add support for an--album
flag.export
: Similarly add support for an--album
flag.beet move
now highlights path differences in color (when enabled).- When moving files and a direct rename of a file is not possible (for example, when crossing filesystems), beets now copies to a temporary file in the target folder first and then moves to the destination instead of directly copying the target path. This gets us closer to always updating files atomically. Thanks to @catap. #4060
fetchart
: Add a new option to store cover art as non-progressive image. This is useful for DAPs that do not support progressive images. Setdeinterlace: yes
in your configuration to enable this conversion.fetchart
: Add a new option to change the file format of cover art images. This may also be useful for DAPs that only support some image formats.- Support flexible attributes in
%aunique
. #2678 #3553 - Make
%aunique
faster, especially when using inline fields. #4145
Bug fixes:
lyrics
: Fix a crash when Beautiful Soup is not installed. #4027discogs
: Support a new Discogs URL format for IDs. #4080discogs
: Remove built-in rate-limiting because the Discogs Python library we use now has its own rate-limiting. 🐛4108
export
: Fix some duplicated output.aura
: Fix a potential security hole when serving image files. #4160
For plugin developers:
- :py
beets.library.Item.destination
{.interpreted-text role="meth"} now accepts areplacements
argument to be used in favor of the default. - The
pluginload
event is now sent after plugin types and queries are available, not before. - A new plugin event,
album_removed
, is called when an album is removed from the library (even when its file is not deleted from disk).
Here are some notes for packagers:
- As noted above, the minimum Python version is now 3.6.
- We fixed a flaky test, named
test_album_art
in thetest_zero.py
file, that some distributions had disabled. Disabling this test should no longer be necessary. #4037 #4038 - This version of beets no longer depends on the six library. #4030
- The
gmusic
plugin was removed since Google Play Music has been shut down. Thus, the optional dependency ongmusicapi
does not exist anymore. #4089