Skip to content

beets 1.6.0

Compare
Choose a tag to compare
@sampsyo sampsyo released this 27 Nov 16:44
· 1880 commits to master since this release
v1.6.0
1937180

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 to edgars-supe{.interpreted-text role="user"}. #2200
  • An accompanying new albumtypes includes some options for formatting this new albumtypes field. Thanks to edgars-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. Set deinterlace: 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. #4027
  • discogs: Support a new Discogs URL format for IDs. #4080
  • discogs: 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:

  • :pybeets.library.Item.destination{.interpreted-text role="meth"} now accepts a replacements 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 the test_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 on gmusicapi does not exist anymore. #4089