This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryBroad release touches Bug fixes, New features, Other changes, and https://beets.readthedocs.io/en/stable/plugins/lyrics.html.
Full changelog
New features
-
Convert Plugin: The
--forceand--keep-newCLI flags are now also available as config options viaforceandkeep_new. -
import command: The
--nomove/-MCLI flag can now be used to override themove: yesconfig option during import. -
Lyrics Plugin: Write synced (LRC) lyrics to the
SYLT(synchronized lyrics) ID3 frame and plain text toUSLTfor ID3-tagged files, instead of storing raw LRC timestamps inUSLT. Players that only supportUSLTcontinue to see readable plain lyrics. :bug: (#6541) -
ListenBrainz Plugin: Add support for importing ListenBrainz listening history from an export file. Use the
-f/--export-fileflag to specify the path to the ListenBrainz export file. -
MusicBrainz Plugin: Introduce aliases_as_credits to make aliases-as-artist-credit optional.
-
Bad Files Plugin: Added settings for auto error and warning actions.
-
Tidal Plugin: New flexible attributes are now populated during imports, including
tidal_track_id,tidal_album_id,tidal_artist_id,tidal_track_popularity,tidal_album_popularity, andtidal_updated. Added a newbeet tidalsynccommand to refresh popularity data for imported items by default, or albums with--album, with--forceto re-fetch and--writeto update file tags.Migration: Existing Tidal imports can copy the previously stored IDs into the new flexible attributes with modify command: run
beet modify data_source:tidal tidal_album_id='$mb_albumid' -afor albums andbeet modify data_source:tidal tidal_track_id='$mb_trackid'for items.
Bug fixes
- Convert Plugin: Tidy the
--playlisthelp text so it no longer has awkward indentation in CLI output. - Duplicates Plugin: Fix plugin output: information about duplicate items was not displayed by default. --count option was ignored :bug: (#6476)
- FetchArt Plugin: Catch
OSErrorin_set_artso that permission errors (e.g. a file locked by another process) are logged as warnings instead of crashing beets. :bug: (#6193) - Fish Plugin: Fix error on plugin initialization.
- import command: Fix duplicate album merge during import when running in threaded mode. The merge action no longer creates a duplicate folder or reports
could not get filesizeerrors. :bug: (#6601) - Lyrics Plugin: Add rate limiting and exponential backoff to HTTP requests to prevent
429 Too Many Requestserrors from lyrics sources during bulk imports. :bug: (#6728) - Lyrics Plugin: Improve Musica.com lyric scraping so fetched lyrics no longer omit the opening verse or include non-lyric page content.
- MBSync Plugin / BPSync Plugin: Do not clear items metadata when
import.from_scratchis enabled. :bug: (#6613) - modify command: Fix
beet modify -asplitting multi-value field strings (likeartists,genres) into individual characters when modifying albums. Album field types now fall back to the corresponding item field type definitions. :bug: (#5690) - move command: move command no longer crashes when an item referenced in the database has been deleted from disk. Missing items are now skipped with a warning and the command continues. :bug: (#6720)
- MPDStats Plugin: Fix crashes and invalid configuration when passing
--host,--port, or--passwordon the command line. :bug: (#5404) - MusicBrainz Collection Plugin: Handle MusicBrainz
401 Unauthorizederrors duringmbupdatewithout crashing, and log a clearer message that points users tomusicbrainz.userandmusicbrainz.passconfiguration. :bug: (#6651) - MusicBrainz Plugin: Fix
KeyError: 'aliases'crash when looking up releases with more than 500 tracks. - MusicBrainz Pseudo-Release Plugin: Fix crashes when applying a pseudo-release. One in
PseudoAlbumInfo.raw_dataand asqlite3.ProgrammingError. - Replace Plugin: Fix
TypeErrorwhen invoking the Replace Plugin command. :bug: (#6260) - Spotify Plugin: Improved Spotify API parsing to handle missing label data :bug: (#6679)
- Spotify Plugin: Use single instead of double quotes in spotify queries.
- Tidal Plugin: add Tidal Plugin dependency extra to make sure
requests-oauthlibis installed. :bug: (#6633) - Tidal Plugin: Fix auth URL not printed in environments without a configured browser :bug: (#6710)
AttrDict.__getattribute__now unmasksAttributeErrorraised inside acached_propertybody. Previously such errors were swallowed by the__getattr__fallback, producing a misleading message about the property name itself. The wrappedRuntimeErrorkeeps the original traceback so it still points at the real failing line. :bug: (#6558)ReadErrorandWriteErrornow include the file path and the underlying reason in their message instead of a<super: ...>object representation. :bug: (#6560)- Fix a CLI help formatting regression that moved command descriptions to separate lines; descriptions are inline again, with regression test coverage.
- Path format queries now correctly match multi-value fields such as
genreswhen using exact string matches likegenres:=Classicalorgenres:=~Classical. :bug: (#6598)
For plugin developers
- Introduced
beets.importer.DuplicateActionto simplify handling of duplicates. - Plugin authors can import all autotagger helpers directly from
beets.autotag, including match classes, distance helpers, andassign_items, without relying on lower-level autotag modules.
Other changes
- Lyrics Plugin: Fold rate limiting and 429 retry from the lyrics-specific
LyricsSessioninto the sharedbeetsplug._utils.requests.TimeoutAndRetrySessionso all plugins benefit. The standaloneLyricsSessionclass has been removed. - Spotify Plugin:
spotifysyncnow batches its SQLite commit for a sync run, follows the standard beets write-before-store pattern, and logs audio-features API unavailability only once per run. - Titlecase Plugin: Correct the path format example and document the
%titlecase{text}template function. :bug: (#6697) - Log message prefix formatting (
musicbrainz: msg) moved from a filter toLegacyFormatter, making future customization easier.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Beets
Music library manager and MusicBrainz tagger (command-line and Web interface).
Related context
Related tools
Beta — feedback welcome: [email protected]