# beets v2.12.0 — Release v2.12.0 - Product: beets (https://whatsnew.fyi/product/beets) - Vendor: Adrian Sampson - Date: 2026-06-22 - Version: v2.12.0 - Original notes: https://github.com/beetbox/beets/releases/tag/v2.12.0 - Permalink: https://whatsnew.fyi/product/beets/releases/v2.12.0 - Labels: Platforms: Desktop What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Convert Plugin: The `--force` and `--keep-new` CLI flags are now also available as config options via `force` and `keep_new` - **added** — import command: The `--nomove` / `-M` CLI flag can now be used to override the `move: yes` config option during import - **changed** — Lyrics Plugin: Write synced (LRC) lyrics to the `SYLT` (synchronized lyrics) ID3 frame and plain text to `USLT` for ID3-tagged files, instead of storing raw LRC timestamps in `USLT` - **added** — ListenBrainz Plugin: Add support for importing ListenBrainz listening history from an export file with the `-f` / `--export-file` flag - **added** — MusicBrainz Plugin: Introduce `aliases_as_credits` to make aliases-as-artist-credit optional - **added** — Bad Files Plugin: Add settings for auto error and warning actions - **added** — Tidal Plugin: Populate new flexible attributes during imports including `tidal_track_id`, `tidal_album_id`, `tidal_artist_id`, `tidal_track_popularity`, `tidal_album_popularity`, and `tidal_updated` - **added** — Tidal Plugin: Add new `beet tidalsync` command to refresh popularity data for imported items by default, or albums with `--album`, with `--force` to re-fetch and `--write` to update file tags - **fixed** — Convert Plugin: Tidy the `--playlist` help text so it no longer has awkward indentation in CLI output - **fixed** — Duplicates Plugin: Fix plugin output so information about duplicate items is displayed by default and `--count` option is no longer ignored - **fixed** — FetchArt Plugin: Catch `OSError` in `_set_art` so that permission errors are logged as warnings instead of crashing beets - **fixed** — Fish Plugin: Fix error on plugin initialization - **fixed** — import command: Fix duplicate album merge during import when running in threaded mode to prevent duplicate folders and `could not get filesize` errors - **fixed** — Lyrics Plugin: Add rate limiting and exponential backoff to HTTP requests to prevent `429 Too Many Requests` errors from lyrics sources during bulk imports - **fixed** — Lyrics Plugin: Improve Musica.com lyric scraping so fetched lyrics no longer omit the opening verse or include non-lyric page content - **fixed** — MBSync Plugin / BPSync Plugin: Do not clear items metadata when `import.from_scratch` is enabled - **fixed** — modify command: Fix `beet modify -a` splitting multi-value field strings into individual characters when modifying albums by falling back to corresponding item field type definitions - **fixed** — move command: Skip missing items with a warning and continue execution instead of crashing when an item referenced in the database has been deleted from disk - **fixed** — MPDStats Plugin: Fix crashes and invalid configuration when passing `--host`, `--port`, or `--password` on the command line - **fixed** — MusicBrainz Collection Plugin: Handle MusicBrainz `401 Unauthorized` errors during `mbupdate` without crashing and log a clearer message pointing to `musicbrainz.user` and `musicbrainz.pass` configuration #### New features - [Convert Plugin](https://beets.readthedocs.io/en/stable/plugins/convert.html): The `--force` and `--keep-new` CLI flags are now also available as config options via `force` and `keep_new`. - [import command](https://beets.readthedocs.io/en/stable/reference/cli.html#import-cmd): The `--nomove` / `-M` CLI flag can now be used to override the `move: yes` config option during import. - [Lyrics Plugin](https://beets.readthedocs.io/en/stable/plugins/lyrics.html): Write synced (LRC) lyrics to the `SYLT` (synchronized lyrics) ID3 frame and plain text to `USLT` for ID3-tagged files, instead of storing raw LRC timestamps in `USLT`. Players that only support `USLT` continue to see readable plain lyrics. :bug: (#6541) - [ListenBrainz Plugin](https://beets.readthedocs.io/en/stable/plugins/listenbrainz.html): Add support for importing ListenBrainz listening history from an export file. Use the `-f` / `--export-file` flag to specify the path to the ListenBrainz export file. - [MusicBrainz Plugin](https://beets.readthedocs.io/en/stable/plugins/musicbrainz.html): Introduce [aliases_as_credits](https://beets.readthedocs.io/en/stable/plugins/musicbrainz.html#conf-aliases_as_credits) to make aliases-as-artist-credit optional. - [Bad Files Plugin](https://beets.readthedocs.io/en/stable/plugins/badfiles.html): Added settings for auto error and warning actions. - [Tidal Plugin](https://beets.readthedocs.io/en/stable/plugins/tidal.html): New flexible attributes are now populated during imports, including `tidal_track_id`, `tidal_album_id`, `tidal_artist_id`, `tidal_track_popularity`, `tidal_album_popularity`, and `tidal_updated`. Added a new `beet tidalsync` command to refresh popularity data for imported items by default, or albums with `--album`, with `--force` to re-fetch and `--write` to update file tags. **Migration**: Existing Tidal imports can copy the previously stored IDs into the new flexible attributes with [modify command](https://beets.readthedocs.io/en/stable/reference/cli.html#modify-cmd): run `beet modify data_source:tidal tidal_album_id='$mb_albumid' -a` for albums and `beet modify data_source:tidal tidal_track_id='$mb_trackid'` for items. #### Bug fixes - [Convert Plugin](https://beets.readthedocs.io/en/stable/plugins/convert.html): Tidy the `--playlist` help text so it no longer has awkward indentation in CLI output. - [Duplicates Plugin](https://beets.readthedocs.io/en/stable/plugins/duplicates.html): Fix plugin output: information about duplicate items was not displayed by default. --count option was ignored :bug: (#6476) - [FetchArt Plugin](https://beets.readthedocs.io/en/stable/plugins/fetchart.html): Catch `OSError` in `_set_art` so that permission errors (e.g. a file locked by another process) are logged as warnings instead of crashing beets. :bug: (#6193) - [Fish Plugin](https://beets.readthedocs.io/en/stable/plugins/fish.html): Fix error on plugin initialization. - [import command](https://beets.readthedocs.io/en/stable/reference/cli.html#import-cmd): 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 filesize` errors. :bug: (#6601) - [Lyrics Plugin](https://beets.readthedocs.io/en/stable/plugins/lyrics.html): Add rate limiting and exponential backoff to HTTP requests to prevent `429 Too Many Requests` errors from lyrics sources during bulk imports. :bug: (#6728) - [Lyrics Plugin](https://beets.readthedocs.io/en/stable/plugins/lyrics.html): Improve Musica.com lyric scraping so fetched lyrics no longer omit the opening verse or include non-lyric page content. - [MBSync Plugin](https://beets.readthedocs.io/en/stable/plugins/mbsync.html) / [BPSync Plugin](https://beets.readthedocs.io/en/stable/plugins/bpsync.html): Do not clear items metadata when `import.from_scratch` is enabled. :bug: (#6613) - [modify command](https://beets.readthedocs.io/en/stable/reference/cli.html#modify-cmd): Fix `beet modi _[Truncated at 4000 characters — full notes: https://github.com/beetbox/beets/releases/tag/v2.12.0]_