github beetbox/beets v2.11.0
Release v2.11.0

5 hours ago

New features

  • Smart Playlist Plugin: The splupdate command output is restructured. The per-playlist summary now includes a track count. Per-track details are shown only when -v flag is provided (beet -v splupdate). The --pretend flag produces the same output but reports "N playlists would be updated" instead of "N playlists updated". The --format option allows customizing the track line format. The --pretend-paths option was removed (use --format='$path' instead). 🐛 (#6183)

  • import command: When importing an archive (zip, tar, rar, or 7z) with move: yes, the source archive is now removed after a successful import. Archives are preserved if any file in the archive was not imported (e.g. skipped as a duplicate, or the import was aborted), and in non-move import modes.

  • FromFilename Plugin: Support track prefix when parsing the track number from the filename (e.g., track01.m4a).

  • Tidal plugin: Introduces a new plugin for fetching metadata from Tidal. It supports album and track lookups by ID, including batch operations via albums_for_ids and tracks_for_ids. It also enables search by query as well as identifier-based retrieval, with support for ISRC codes (tracks) and barcode/EANs (albums).

    This is an initial, relatively minimal implementation, but already fully usable for common metadata workflows. We welcome feedback, improvement ideas, and community contributions to further extend its capabilities.

    See Tidal Plugin for more information.

  • Add support for adding or modifying a subtitle (ID3 tag TIT3) field

Bug fixes

  • Bad Files Plugin: Respect quiet mode (the --quiet flag or import.quiet: yes config) during import so the corrupt-file prompt is suppressed in non-interactive imports. 🐛 (#4736)
  • Discogs Plugin: Prevent duplicate featured artists in track artist fields when the same artist is credited both in artists (for example with Feat. join text) and extraartists as Featuring. 🐛 (#6166)
  • import command: Fix duplicate album art files (e.g. cover.2.jpg) being created when re-importing albums with the FetchArt Plugin plugin enabled. Old album art is now properly removed when replacing duplicate albums during import. 🐛 (#1264) 🐛 (#6205)
  • import command: Metadata source plugin ID lookups now correctly call each plugin's own lookup method when running in parallel. 🐛 (#6583)
  • import command: Multi-disc album detection now recognizes cassette, digital media, and vinyl as disc markers (e.g. vinyl 1, 12 vinyl 2), in addition to the existing disc, disk, and cd markers.
  • import command: Tags with a zero distance penalty are no longer shown as differences in the match display. Previously, custom distance_weights could cause fields with no actual mismatch to appear in the line.
  • import command: With original_date: yes, album-level year, month, and day now use the original release date. 🐛 (#6577)
  • Lyrics Plugin: Fix apostrophe handling in the musixmatch backend slug. 🐛 (#4759)
  • MusicBrainz Plugin: Correctly handle release dates where leading or intermediate components are missing, e.g. 2008-??-02
  • Improve DBAccessError messages to help users diagnose database permission issues more easily. The error message now mentions directory missing and file permissions as potential causes. 🐛 (#1676)
  • Library path migration now also handles manually edited database rows where item or album-art paths were stored as SQLite TEXT values instead of bytes, so upgrading to the portable-path storage format no longer fails for those libraries. 🐛 (#6561)

Other changes

  • Spotify Plugin: Batch spotifysync track and audio-features API requests and deduplicate repeated Spotify track IDs within a run.

Don't miss a new beets release

NewReleases is sending notifications on new releases.