4398 Commits

Author SHA1 Message Date
Samad
3d197ee024 replaygain: use a yaml code-block for the docs config example 2026-07-15 22:22:07 +01:00
Samad
4ccdcc90c9 replaygain: add metaflac backend
Add a MetaflacBackend that computes ReplayGain for FLAC files with metaflac --add-replay-gain and reads the values back with --show-tag. Only FLAC is supported. Includes docs, a changelog entry, and tests.
2026-07-15 22:22:07 +01:00
TowyTowy
4a1e9164a1 Fix uncaught KeyError on date queries containing a stray pipe
The relative-date regex used character classes [+|-] and [y|m|w|d],
which mistakenly treat | as a literal member rather than alternation.
As a result a value like added:2000|2001 (as a user might type expecting
| to mean "or") captured | as the relative-date unit and crashed with
an uncaught KeyError in Period.parse instead of raising the documented
InvalidQueryArgumentValueError.

Remove the stray | from both character classes so malformed date strings
fall through to the normal invalid-date error path.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 21:55:46 +02:00
Vinícius Martins Cotrim
6a051f9699 Recognize native Spotify URIs when extracting IDs (#6840)
### Description

`extract_release_id` now accepts the native Spotify URI format
(`spotify:album:<id>`, `spotify:track:<id>`) in addition to the already
supported `open.spotify.com` URLs and bare IDs.

Co-authored-by: Marina Pena Malschitzky Crespo <marinacrespo@estudante.ufscar.br>
2026-07-15 21:21:25 +02:00
f1nn
0d65a46bbc lyrics: add lrcmux backend 2026-07-15 16:12:21 +02:00
J0J0 Todos
fda3fef148 lastgenre: Genre aliases docs; Tools chapter, More
- Document the genre alias normalization feature and the default aliases
  we ship with the plugin (by using rst "literalinclude" referring to
  aliases.yaml directly)
- Clarify what canonicalization acutually does when used without a
  whitelist enabled.
- New docs chapter "Using the right tool"
2026-07-15 16:04:51 +02:00
J0J0 Todos
a78c94c443 Changelog for #6466 genre aliases 2026-07-15 16:04:51 +02:00
AleksZyro
bb0c0992e5 Format changelog entry 2026-07-15 14:30:42 +01:00
AleksZyro
a6d576d039 Preserve null artpath in edit 2026-07-15 14:30:42 +01:00
Valentyn Kit
eb7c832fc9 Make InQuery hashable when its pattern is a list
InQuery inherited FieldQuery.__hash__, which hashes the pattern directly.
A list pattern raises `unhashable type: 'list'`, which broke the
smartplaylist `splupdate` command whenever a `playlist:` query was configured.
2026-07-15 08:02:01 +01:00
Sebastian Cao
2ada8a947d move the changelog entry under unreleased 2026-07-15 14:32:13 +08:00
Sebastian Cao
7d4f160c36 missing: honor -f/--format in album mode 2026-07-15 14:31:58 +08:00
AleksZyro
04f2c3e794 Improve subsonicupdate server error 2026-07-14 20:09:56 +02:00
Alok Saboo
58fb167750 Merge branch 'master' into edit 2026-07-13 08:47:53 -04:00
TowyTowy
2293d2f60a Fix crash when sorting by a nullable field missing on some items
Sorting by a field whose declared type is nullable (its null value is
`None`, e.g. `NullInteger`/`NullFloat`) raised `TypeError: '<' not
supported between instances of ...` when the field was present on some
objects but missing on others, because `FieldSort.sort` compared `None`
against real values.

Group missing values together in the sort key so they are never compared
against present ones: they are ordered first when sorting ascending and
last when descending, matching SQLite's default ordering of NULLs used by
the fast `FixedFieldSort` path.

Fixes #3461.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-13 13:36:23 +01:00
Alok Saboo
7f45f51690 Merge branch 'master' into edit 2026-07-12 20:39:16 -04:00
Šarūnas Nejus
d9a1bde1c9 Add --no-keep-synced CLI option to lyrics
- Allow manual lyrics fetches to override keep_synced configuration for a single
  run.
2026-07-13 01:14:41 +01:00
Alok Saboo
aeaab7320d Merge branch 'master' into edit 2026-07-12 20:14:33 -04:00
Šarūnas Nejus
95854c7770 Add a migration 2026-07-13 01:07:59 +01:00
Šarūnas Nejus
8020c07acf Track instrumental lyrics metadata
- Leave lyrics text empty when a backend reports an instrumental track and
  persist that state in lyrics_instrumental.
2026-07-13 01:07:59 +01:00
Alok Saboo
f91ba3a315 Merge branch 'master' into edit 2026-07-12 09:12:02 -04:00
Ross Williams
c3de685484 Add fetch_for_asis setting to FetchArt plugin
Enable fetching art for imports even when as-is is selected as the
metadata source. Allows for the case when files with good metadata
but without album art are being imported (e.g. digital download store).

Signed-off-by: Ross Williams <ross@ross-williams.net>
2026-07-10 22:15:32 +01:00
Alok Saboo
094e38e002 Merge remote-tracking branch 'upstream/master' into edit
# Conflicts:
#	docs/changelog.rst
2026-07-10 16:31:13 -04:00
Alok Saboo
9551562d3b removed conflict marker 2026-07-10 08:46:59 -04:00
Alok Saboo
bf94ae66ef sync branch 2026-07-10 08:27:23 -04:00
Trey Turner
1160d31cfa feat(ftintitle): hook metadata events, fixing mbsync 2026-07-08 21:10:47 -05:00
J0J0 Todos
cd9653d7df Changelog for PR 6648 multi-value modify operators 2026-07-08 12:12:15 +01:00
J0J0 Todos
582e3ccce4 Docs for multi-value modify operators 2026-07-08 12:12:15 +01:00
Temitope S Olugbemi
65a01c2c2a fix(importfeeds): keep import going when a symlink can't be created
When `formats` includes `link`, importfeeds creates a symlink per imported
item. A failed symlink (lacking privilege on Windows, a read-only directory, or
a filesystem without symlink support) raised beets.util.FilesystemError out of
the import pipeline and aborted the whole `beet import` run, even though the
tracks were already imported.

Catch FilesystemError around the link() call, log a per-item warning, and
continue with the remaining items. Add regression tests for the
warn-and-continue behaviour, that only FilesystemError is caught, and that a
successful link still creates the symlink. Add a changelog entry.

Fixes #840.
2026-07-03 10:26:17 -07:00
Šarūnas Nejus
4cfbb0167d Replace pipx tool installs with uv tool
- Use uv tool install for poethepoet in GitHub workflows and contributor docs.
- Recommend uv tool for isolated beets and plugin installs.
2026-06-30 12:44:24 +01:00
Šarūnas Nejus
a4e00380a8 Add a note to the changelog 2026-06-30 12:44:24 +01:00
Šarūnas Nejus
99b5da869d Replace poetry by uv 2026-06-30 12:44:21 +01:00
Alok Saboo
1eecbf3726 update changelog 2026-06-24 14:13:55 -04:00
Alok Saboo
9c39443067 fix changelog formatting 2026-06-24 14:10:11 -04:00
Alok Saboo
9ec30f82a0 tidal: fix docstrfmt formatting in tidal.rst 2026-06-24 14:03:58 -04:00
Alok Saboo
28fa210422 tidal: fix mypy docref and dict access
- Fix mypy: avoid {} default in relationships.get() that creates Never type

- Fix doc build: use :doc:\etchart\ instead of :doc:\plugins/fetchart\ from within plugins/ directory
2026-06-24 14:03:58 -04:00
Alok Saboo
659ee7df0b add cover art support 2026-06-24 14:03:56 -04:00
Šarūnas Nejus
368d2c0a6d Normalize albumtype 2026-06-24 16:44:10 +01:00
Sebastian Mohr
f1412d82c6 Added changelog and docs. 2026-06-24 17:09:13 +02:00
Šarūnas Nejus
4e4ac089cc Fix changelog 2026-06-24 13:34:03 +01:00
Šarūnas Nejus
d4157d02cc Merge branch 'master' into docs/add-homebrew-install 2026-06-24 13:14:11 +01:00
Pierre Ayoub
3b2f31524e chore(changelog): Lint 2026-06-24 13:00:59 +02:00
Pierre Ayoub
b8f1f7b1a4 chore(docs): Format convert 2026-06-24 13:00:59 +02:00
Pierre Ayoub
b498c83d3c docs(changelog): move --refresh entry in next release section 2026-06-24 13:00:58 +02:00
Pierre Ayoub
0759bdbe14 Fix convert documentation paragraph order 2026-06-24 13:00:56 +02:00
Pierre Ayoub
e1b03e670a Update the changlog for new convert --refresh option 2026-06-24 13:00:56 +02:00
Pierre Ayoub
db905ad545 Update documentation according for new convert --refresh option 2026-06-24 13:00:56 +02:00
Šarūnas Nejus
8079f6057d Remove whitespace 2026-06-24 10:00:06 +01:00
Šarūnas Nejus
7e49b9728c Merge branch 'master' into fix-convert-missing-album-art 2026-06-24 09:54:56 +01:00
Sebastian Cao
755ca6f139 convert: skip missing album art instead of crashing 2026-06-24 16:45:23 +08:00