You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Convert Plugin: Add new configuration option convert.refresh and command-line option --refresh, allowing to force Convert Plugin operation when original file is newer than existing converted file.
Edit Plugin: The interactive import editor now shows album-level fields (as configured by albumfields) as a YAML header section when editing an album import. Fields that appear in both itemfields and albumfields are shown only in the header, not per-track.
FetchArt Plugin: Add fetch_for_asis setting that enables fetching album art from online sources even when imported files are not modified by the auto-tagger. Default is no which means FetchArt Plugin looks for art only in the local filesystem when the user (or quiet_fallback) chooses asis.
LastGenre Plugin: Add support for normalizing genre spellings and naming variants with a new configuration option aliases. The feature is enabled by default and ships with a built-in list of regex patterns. These patterns can be replaced via the user's configuration. The default whitelist and genre tree were audited against the top 1,000 Last.fm tags: canonical names are now consistent across both files, long-standing mismatches between them have been resolved, and entries align with the built-in alias patterns. π (#6466)
Lyrics Plugin: Add lrcmux backend, which aggregates lyrics from various other sources.
Lyrics Plugin: Added a --no-keep-synced command option to override keep_synced: yes for a single manual lyrics fetch.
Lyrics Plugin: Added a rest_directory configuration option for specifying a reStructuredText output directory, semantically equivalent to -r, --write-rest. π (#2806)
modify command: Support += and -= operators to add or remove individual values from multi-valued fields without replacing the whole field. π (#6587)
ReplayGain Plugin: Add a metaflac backend that computes ReplayGain for FLAC files using the metaflac command-line tool. π (#1203)
Spotify Plugin: Recognize native Spotify URIs (e.g. spotify:album:<id> and spotify:track:<id>) when extracting release/track IDs, in addition to full open.spotify.com URLs and bare IDs
Tidal Plugin: Add cover art support. Album metadata now includes cover_art_url from Tidal's coverArt relationship, which the FetchArt Plugin plugin can retrieve.
A database backup is now automatically created before running schema migrations. Control with the create_backup_before_migrations option (default: yes).
Bug fixes
Convert Plugin: convert -a with copy_album_art enabled no longer crashes when the stored album art path points to a missing file (for example a multi-disc album whose cover lives in the album root rather than a per-disc directory); the missing art is skipped instead. π (#4692)
Edit Plugin: Preserve missing album art paths when editing album metadata, instead of turning artpath: null into a path ending in None. π (#2438)
ImportFeeds Plugin: import command no longer aborts the whole run when a symlink cannot be created (e.g. on Windows or a read-only directory); the failure is logged and the import continues. π (#840)
Lyrics Plugin: Leave lyrics empty when a source reports an instrumental track, and store that state in lyrics_instrumental flexible attribute. Existing [Instrumental] lyrics are migrated automatically. π (#6719)
Missing Plugin: Honor the -f/--format option (and the format_album configuration) when listing missing albums in album mode. π (#3804)
Smart Playlist Plugin: splupdate no longer crashes with TypeError: unhashable type: 'list' when a playlist configuration includes a playlist: query. π (#5354)
SubsonicUpdate Plugin: Log a clearer error when the Subsonic server returns a non-JSON response. π (#5635)
Tidal Plugin: Normalize Tidal album types to lowercase.
A date query containing a stray | (for example added:2000|2001, as might be typed by a user expecting | to mean "or") now raises a clean "a valid date/time string" error instead of crashing with an uncaught KeyError. A | was being accepted as a relative-date unit due to a regular expression character-class typo.
Album store no longer copies artpath onto its items as an absolute path, which broke relative-path portability. A database migration removes any such stale artpath attributes left on items by earlier versions. π (#6756)
Sorting by a nullable field (for example a flexible attribute with a declared type whose null value is None) that is present on only some items no longer crashes with a TypeError. Missing values are now grouped together, ordered before present ones when sorting ascending and after them when descending. π (#3461)
Other changes
Contributing: The project now uses uv for packaging, virtual environment, and dependency management, replacing poetry. The build backend has changed from poetry-core to hatchling. Please see updates in Development Tools and Getting the Source for more information. π (#5783)
Installation Add Homebrew to the list of supported package managers in the installation guide.
Installation: Note that Windows users should run beets in a terminal emulator (such as Windows Terminal or cmder) for output to display correctly. π (#2848)
Installation: Switch isolated tool installation guidance and GitHub workflow setup to uv tool commands.
LastGenre Plugin: Add a new "Choosing the Right Tool" documentation section to guide users in picking the right approach across genre fetching, filtering, and normalization.
Spotify Plugin: Retry on 503 Service Unavailable responses from the Spotify API instead of immediately aborting, matching the existing 429 rate-limit retry behavior.