Skip to content

Release v2.3.0

Compare
Choose a tag to compare
@github-actions github-actions released this 07 May 22:36
· 104 commits to master since this release

Beets now requires Python 3.9 or later since support for EOL Python 3.8 has been dropped.

New features

  • LastGenre Plugin: The new configuration option, keep_existing, provides more fine-grained control over how pre-populated genre tags are handled. The force option now behaves in a more conventional manner. πŸ› (#4982)
  • Lyrics Plugin: Add new configuration option dist_thresh to control the maximum allowed distance between the lyrics search result and the tagged item's artist and title. This is useful for preventing false positives when fetching lyrics.
  • Lyrics Plugin: Rewrite lyrics translation functionality to use Azure AI Translator API and add relevant instructions to the documentation.
  • MBSync Plugin: Add support for all metadata sorces.
  • Missing Plugin: Add support for all metadata sources.

Bug fixes

  • Fix ambiguous column name sqlite3.OperationalError that occured in album queries that filtered album track titles, for example beet list -a keyword title:foo.
  • ImageMagick 7.1.1-44 is now supported.
  • Synchronise files included in the source distribution with what we used to have before the introduction of Poetry. πŸ› (#5531) πŸ› (#5526)
  • FetchArt Plugin: Fix fetchart bug where a tempfile could not be deleted due to never being properly closed. πŸ› (#5521)
  • LastGenre Plugin: Fix track-level genre handling. Now when an album-level genre is set already, single tracks don't fall back to the album's genre and request their own last.fm genre. Also log messages regarding what's been tagged are now more polished. πŸ› (#5582)
  • ListenBrainz Plugin: Fix UnboundLocalError in cases where 'mbid' is not defined.
  • ListenBrainz Plugin: Fix rST formatting for URLs of Listenbrainz API Key documentation and config.yaml.
  • Lyrics Plugin: Do not attempt to search for lyrics if either the artist or title is missing and ignore artist_sort value if it is empty. πŸ› (#2635)
  • Lyrics Plugin: Fix fetching lyrics from lrclib source. If we cannot find lyrics for a specific album, artist, title combination, the plugin now tries to search for the artist and title and picks the most relevant result. Update the default sources configuration to prioritize lrclib over other sources since it returns reliable results quicker than others. πŸ› (#5102)
  • Lyrics Plugin: Fix plugin crash when genius backend returns empty lyrics. πŸ› (#5583)
  • Lyrics Plugin: Fix the issue with genius backend not being able to match lyrics when there is a slight variation in the artist name. πŸ› (#4791)
  • Lyrics Plugin: LRCLib will fallback to plain lyrics if synced lyrics are not found and synced flag is set to yes.
  • Lyrics Plugin: Rewrite lyrics tests using pytest to provide isolated configuration for each test case. This fixes the issue where some tests failed because they read developers' local lyrics configuration. πŸ› (#5133)
  • ParentWork Plugin: Only output parentwork changes when running in verbose mode.
  • Sort Order: Fix a bug that would raise an exception when sorting on a non-string field that is not populated in all items. πŸ› (#5512)
  • Thumbnails Plugin: Fix API call to GIO on big endian architectures (like s390x) in thumbnails plugin. πŸ› (#5708)
  • import: Fix MemoryError and improve performance tagging large albums by replacing munkres library with lap.lapjv. πŸ› (#5207)
  • write: Fix the issue where for certain files differences in mb_artistid, mb_albumartistid and albumtype fields are shown on every attempt to write tags. Note: your music needs to be reimported with beet import -LI or synchronised with beet mbsync in order to fix this! πŸ› (#5265) πŸ› (#5371) πŸ› (#4715)

For packagers

  • External plugin developers: beetsplug/__init__.py file can be removed from your plugin as beets now uses native/implicit namespace package setup.
  • The minimum supported Python version is now 3.9.

Other changes

  • Database models are now serializable with pickle.
  • Release workflow: fix the issue where the new release tag is created for the wrong (outdated) commit. Now the tag is created in the same workflow step right after committing the version update. πŸ› (#5539)
  • FtInTitle Plugin: Optimize the plugin by avoiding unnecessary writes to the database.
  • Smart Playlist Plugin: URL-encode additional item fields within generated EXTM3U playlists instead of JSON-encoding them.
  • typehints: ./beets/importer.py file now has improved typehints.
  • typehints: ./beets/plugins.py file now includes typehints.