Skip to content

Releases: linuxserver/docker-beets

nightly-60047dfa-ls299

14 Jun 15:42
c69c4fc

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-60047dfa-ls299/index.html

LinuxServer Changes:

No changes

Remote Changes:

convert: fix beets.util.pipeline import regression (#6740)

  • Use an explicit pipeline import for convert pipeline setup and
    decorators.
  • This fixes AttributeError when beets.util does not automatically
    expose pipeline.

See:

$ python -c 'import beetsplug.convert'

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/sarunas/repo/beets/beetsplug/convert.py", line 73, in <module>
    class ConvertPlugin(BeetsPlugin):
  File "/home/sarunas/repo/beets/beetsplug/convert.py", line 402, in ConvertPlugin
    @util.pipeline.mutator_stage
AttributeError: module 'beets.util' has no attribute 'pipeline'
$ python -c 'from beets import util; print(util.pipeline)'

Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: module 'beets.util' has no attribute 'pipeline'

nightly-2337cfb6-ls299

14 Jun 12:04
c69c4fc

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-2337cfb6-ls299/index.html

LinuxServer Changes:

Full Changelog: nightly-01808922-ls298...nightly-2337cfb6-ls299

Remote Changes:

db: simplify LazyConvertDict (#6734)

  • Replaces LazyConvertDict with LazyDict, a simpler UserDict-based
    container for lazily converted model values.
  • Removes the separate _awaken construction path and routes
    database-loaded values through Model.__init__, so both normal and
    database-backed objects follow the same creation flow.
  • Centralizes SQL-to-Python conversion in Model._convert, which makes
    value handling easier to reason about and reduces special-case model
    initialization logic.

High-level impact

  • Simplifies the model storage architecture by reducing custom dict
    behavior.
  • Makes object construction more consistent across the codebase.
  • Lowers maintenance risk by keeping lazy conversion in one place while
    preserving the existing lazy-loading behavior.

2.11.0-ls335

12 Jun 20:47
4c6b111

Choose a tag to compare

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/2.11.0-ls335/index.html

LinuxServer Changes:

Full Changelog: 2.11.0-ls334...2.11.0-ls335

Remote Changes:

Updating PIP version of beets to 2.11.0

nightly-ec729d31-ls298

12 Jun 02:10
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-ec729d31-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

lyrics: add rate limiting and exponential backoff to prevent 429 errors (#6729)

Add a LyricsSession class that mounts RateLimitAdapter (4 req/sec) and
configures urllib3 Retry with exponential backoff on 429 responses. Each
backend instance gets its own session so rate limits apply independently
per API source.

Fixes #6728

nightly-beff630d-ls298

13 Jun 11:52
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-beff630d-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

refactor(ftintitle): cache config options (#6732)

Pre-factor for beetbox/beets#6726.

Make ftintitle's config @cached_property attributes instead of
passing them through the call stack. Modeled after similar recent
changes in convert.

Changes

  • Add cached plugin properties for auto, drop, format,
    keep_in_artist, preserve_album_artist, and custom_words, keeping
    the existing cached bracket_keywords property I forgot I added a while
    back.
  • commands(), imported(), ft_in_title(), and update_metadata()
    are cleaned up to read these directly.
  • Don't read auto during plugin init; the import stage remains
    registered and imported() checks auto when invoked.

nightly-ad03b35f-ls298

13 Jun 02:07
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-ad03b35f-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

Fix integration tests (#6724)

This PR tightens the integration test workflow so CI runs the
dependency-heavy checks that are usually skipped in local environments.

What changed

  • Install the system packages and Poetry extras needed by
    integration-only coverage, including ffmpeg/ffprobe,
    ImageMagick/Pillow-backed art resizing, chroma, docs, replaygain,
    reflink, lyrics, and related plugin dependencies.
  • Run poe docs before poe test in the integration workflow and set
    LYRICS_UPDATED=1 so lyrics tests are included in CI.
  • Centralize CI detection in beets.test.helper.RUNNING_IN_CI and reuse
    shared import/program checks across test collection and helpers.
  • Keep dependency-heavy tests strict in the beetbox GitHub Actions
    environment, while skipping them locally when optional tools/modules are
    unavailable.
  • Mark ffprobe-, artresizer-, chroma-, pandoc-, and completion-related
    cases with focused availability gates so local test runs fail less often
    for missing optional dependencies.
  • Update docs link-check ignores and stale documentation URLs so poe check-docs-links is less noisy in CI.

nightly-7de08ba6-ls298

11 Jun 10:07
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-7de08ba6-ls298/index.html

LinuxServer Changes:

No changes

Remote Changes:

refactor: Removed ImportTestCase in favor of ImportHelper (#6680)

Description

This PR removes ImportTestCase and replaces all occurrences with
ImportHelper + pytest.

This touches:

  • test_scrub
  • test_filefilter
  • test_replaygain
  • test_chroma
  • test_import

This is related to the multi-step efforts to improve logging in beets
beetbox/beets#6553

nightly-01808922-ls298

11 Jun 05:34
7cf1da8

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-01808922-ls298/index.html

LinuxServer Changes:

Full Changelog: nightly-6f8d55da-ls297...nightly-01808922-ls298

Remote Changes:

Cast keys to list to avoid exception in optparse (#6725)

In #6695, the Item and Album all_keys methods return sets now. This
causes an error when used in optparse for choices as it doesn't accept
sets:

Traceback (most recent call last):
  File "/home/user/.local/bin/beet", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/home/user/.local/lib/beets/beets/ui/__init__.py", line 964, in main
    _raw_main(args)
    ~~~~~~~~~^^^^^^
  File "/home/user/.local/lib/beets/beets/ui/__init__.py", line 940, in _raw_main
    subcommands, lib = _setup(options)
                       ~~~~~~^^^^^^^^^
  File "/home/user/.local/lib/beets/beets/ui/__init__.py", line 781, in _setup
    subcommands.extend(plugins.commands())
                       ~~~~~~~~~~~~~~~~^^
  File "/home/user/.local/lib/beets/beets/plugins.py", line 508, in commands
    out += plugin.commands()
           ~~~~~~~~~~~~~~~^^
  File "/home/user/.local/lib/beets/beetsplug/fish.py", line 80, in commands
    cmd.parser.add_option(
    ~~~~~~~~~~~~~~~~~~~~~^
        "-e",
        ^^^^^
    ...<4 lines>...
        help="include specified field *values* in completions",
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/lib/python3.14/optparse.py", line 990, in add_option
    option = self.option_class(*args, **kwargs)
  File "/usr/lib/python3.14/optparse.py", line 571, in __init__
    checker(self)
    ~~~~~~~^^^^^^
  File "/usr/lib/python3.14/optparse.py", line 658, in _check_choice
    raise OptionError(
        "choices must be a list of strings ('%s' supplied)"
        % str(type(self.choices)).split("'")[1], self)
optparse.OptionError: option -e/--extravalues: choices must be a list of strings ('set' supplied)

nightly-bd325df2-ls297

09 Jun 00:19
2a27ca1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-bd325df2-ls297/index.html

LinuxServer Changes:

Full Changelog: nightly-b208fe5d-ls296...nightly-bd325df2-ls297

Remote Changes:

lint: enable flake8-pie, flake8-return, flake8-builtins (#6691)

  • Enables additional Ruff lint rules in pyproject.toml: PIE, RET,
    and A.
  • Applies the required cleanup across the codebase, mostly as
    non-functional refactors:
    • simplifies return/control-flow patterns
  • renames variables that shadow Python builtins like id, dir,
    type, hash, and input
  • adds a few targeted noqa exceptions where names are part of stable
    APIs or intentional signatures
  • Touches core modules, plugins, tests, and docs, but the architectural
    impact is low: this is mainly a repo-wide consistency and
    maintainability pass rather than a behavior change.
  • Updates .git-blame-ignore-revs so these broad lint-only commits are
    ignored in blame, keeping future history easier to review.

nightly-6f8d55da-ls297

09 Jun 09:05
2a27ca1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-6f8d55da-ls297/index.html

LinuxServer Changes:

No changes

Remote Changes:

Fix replace command callback signature (#6700)

Description

Fixes #6260.

The replace plugin assigns ReplacePlugin.run directly as the
replace command callback. Beets command callbacks are invoked with
(lib, opts, args), but ReplacePlugin.run only accepted (lib, args), so invoking the command raised:

TypeError: ReplacePlugin.run() takes 3 positional arguments but 4 were given

This change updates the callback signature to accept the options
argument and adds regression coverage for invoking beet replace
through the command runner.

To Do

  • Documentation. This is a bug fix for an existing command.
  • Changelog. Added an entry to docs/changelog.rst.
  • Tests. Added regression coverage for the command callback path.

Tests

BEETSDIR=/private/tmp/beets-test-config UV_CACHE_DIR=/private/tmp/uv-cache uv run pytest test/plugins/test_replace.py
# 10 passed