beets v2.10.0

v2.10.0Desktop

Release v2.10.0

Added 6
  • Store item and album-art paths relative to the library root in the database while remaining absolute in the rest of beets, with automatic migration of existing paths on first run
  • Access to the album or item object as db_obj in inline plugin fields
  • Import Discogs remixer, lyricist, composer, and arranger credits into multi-value remixers, lyricists, composers, and arrangers fields
  • Add keep_synced config option and --keep-synced CLI flag to lyrics plugin to skip re-fetching lyrics for tracks that already have synced lyrics
  • Use aliases for artist credit in MusicBrainz plugin
  • Execute metadata source plugin searches and lookups concurrently to speed up lookups when multiple plugins are enabled
Fixed 4
  • Chromaprint/Acoustid plugin now correctly respects when the MusicBrainz plugin is not enabled and restores compatibility with MusicBrainz Pseudo-Release plugin
  • Automatically remux WAV files containing MP3 streams to proper MP3 files during import with correct metadata
  • Remove clutter from imported album folders
  • Retry ListenBrainz requests for temporary failures
Security 1
  • Fix stored XSS vulnerability in web plugin where unescaped metadata fields could execute arbitrary JavaScript by using escaped template interpolation

New features

  • Beets library is now made portable: item and album-art paths are now stored relative to the library root in the database while remaining absolute in the rest of beets. Path queries continue matching both library-relative paths and absolute paths under the currently configured music directory under the new storage model. The existing paths in the database are migrated automatically the first time you run any beet command after the update. :bug: (#133)

[!WARNING] make sure you run beet version (or any other command) at least once after upgrading to trigger the migration. Only then you can safely move the library to a new location.

  • Inline Plugin: Add access to the album or item object as db_obj in inline fields.
  • Discogs Plugin: Import Discogs remixer, lyricist, composer, and arranger credits into the multi-value remixers, lyricists, composers, and arrangers fields. :bug: (#6380)
  • Lyrics Plugin: Add keep_synced config option and --keep-synced CLI flag to skip re-fetching lyrics for tracks that already have synced lyrics, even when force is enabled. :bug: (#5249)
  • MusicBrainz Plugin: Use aliases for artist credit.
  • Metadata source plugin searches and lookups are now executed concurrently, speeding up lookups when multiple plugins (e.g. MusicBrainz and Spotify) are enabled.

Bug fixes

  • Chromaprint/Acoustid Plugin: Do not produce MusicBrainz-sourced autotagger candidates when the MusicBrainz Plugin plugin is not enabled. The chroma plugin now looks up the musicbrainz plugin through the metadata-source registry instead of unconditionally instantiating its own private instance, which also restores compatibility with MusicBrainz Pseudo-Release Plugin for chroma-triggered lookups. :bug: (#6212) :bug: (#6441)
  • import command Automatically remux WAV files containing MP3 streams (WAVE_FORMAT_MPEGLAYER3) to proper MP3 files during import, instead of silently importing them with incorrect metadata. :bug: (#6455)
  • import command Remove clutter from imported album folders. :bug: (#5016)
  • ListenBrainz Plugin: Retry listenbrainz requests for temporary failures.
  • Web Plugin: Fix a stored XSS vulnerability where unescaped metadata fields (artist, album, title, comments, lyrics) could execute arbitrary JavaScript in the browser. Template tags now use <%- (escaped interpolation) instead of <%= (raw interpolation).

For plugin developers

  • Consumers of beetsplug._utils.musicbrainz.MusicBrainzAPI now receive normalized MusicBrainz payloads with underscore-separated field names (for example artist_credit and release_group) and grouped relation lists such as work_relations, release_relations, and url_relations. The API responses are also now fully typed with concrete TypedDict models for releases, recordings, works, and relations. Update direct access to raw MusicBrainz response keys if needed.
View original

Upgraded? How did it go?

Discussion