Skip to content

Releases: linuxserver/docker-beets

2.5.1-ls296

31 Oct 18:58
120dca0

Choose a tag to compare

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/2.5.1-ls296/index.html

LinuxServer Changes:

Full Changelog: 2.5.1-ls295...2.5.1-ls296

Remote Changes:

Updating PIP version of beets to 2.5.1

nightly-beda6fc7-ls198

03 Nov 13:30
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-beda6fc7-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

Add mbpseudo plugin for pseudo-release proposals (#5888)

Description

Adds the new mbpseudo plugin, that proactively searches for pseudo-releases during import and
adds them as candidates. Since it also depends on MusicBrainz, there are
some special considerations for the default logic (which is now a plugin
as well). However, at the very least it expects a list of desired names
of scripts
in the
configuration, for example:

mbpseudo:
    scripts:
    - Latn

It will use that to search for pseudo-releases that match some of the
desired scripts, but will only do so if the input tracks match against
an official release that is not in one of the desired scripts.

Standalone Usage

This would be the recommended approach, which involves disabling the
musicbrainz plugin. The mbpseudo plugin will manually delegate the
initial search to it. Since the data source of official releases will
still match MusicBrainz, weights are still relevant:

mbpseudo:
    source_weight: 0.0
    scripts:
    - Latn

musicbrainz:
    source_weight: 0.1

A setup like that would ensure that the pseudo-releases have slightly
more preference when choosing the final proposal.

Combined Usage

I initially thought it would be important to coexist with the
musicbrainz plugin when it's enabled, and reuse as much of its data as
possible to avoid redundant calls to the MusicBrainz API. I have the
impression this is not really important in the end, and maybe things
could be simplified if we decide that both plugins shouldn't coexist.

As it is right now, using both plugins at the same time would still
work, but it'll only avoid redundancy if musicbrainz emits its
candidates before mbpseudo, which is why I modified the
plugin-loading logic slightly to guarantee ordering. I'm not sure if you
think this could be an issue, but I think the musicbrainz plugin is
also used by other plugins and I can imagine it's good to guarantee the
order that is declared in the configuration?

If the above is fulfilled, the mbpseudo plugin will use listeners to
intercept data emitted by the musicbrainz plugin and check if any of
them have pseudo-releases that might be desirable.

nightly-adc0d9e4-ls198

28 Oct 13:30
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-adc0d9e4-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

docs: Rewrite Handling Paths chapter (pathlib vs utils) (#6116)

Description

Updates the docs chapter "Handling Paths" describing how to modernise
old code and intentionally includes historical details. Examples should
further guide contributors while refactoring.

Also moved the guide from the contribution guide into the dev docs.

nightly-9608ec09-ls198

29 Oct 08:10
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-9608ec09-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

Add new plugin ImportSource (#4748)

A new plugin that tracks the original source paths of imported media and optionally allows cleaning up those source files.

nightly-7cca07d2-ls198

07 Nov 10:08
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-7cca07d2-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

Accept lyrics source as a string (#6149)

Description

Fixes #5962.

The fix was shared in the issue. Now it uses as_str_seq similarly
to other plugins.

nightly-61a4c737-ls198

05 Nov 16:08
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-61a4c737-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

Refactor ui/commands.py monolith into modular structure (#6119)

Description

This one’s a big one 🎣 Proceed with care and a bit
of time ;)

The ui/commands.py file had grown into an unwieldy monolith (2000+
lines) over time, so this PR breaks it apart into a modular structure
i.e. one file per command, plus some cleanup and reorganization
along the way.


What changed

  • Commands modularized:
    Every command (help, list, move, update, remove, etc.) now
    lives in its own file under ui/commands/.
  • Support code reorganized:
    • Utility functions moved into a separate helper module.
  • commands.py converted into commands/__init__.py for better import
    handling.
  • The import command (and related helpers) moved into its own folder:
    • importer/session.py for import session logic
    • importer/display.py for display-related functions
  • Tests cleaned up:
    • Each command’s tests now live in their own file.
    • All UI-related tests were moved into a dedicated folder for clarity.

nightly-584329e7-ls198

01 Nov 02:33
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-584329e7-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

Spotify: gracefully handle deprecated audio-features API (#6138)

Spotify has deprecated many of its APIs that we are still using, wasting
calls and time on these API calls; also results in frequent rate limits.

This PR introduces a dedicated AudioFeaturesUnavailableError and
tracks audio feature availability with an audio_features_available
flag. If the audio-features endpoint returns an HTTP 403 error, raise a
new error, log a warning once, and disable further audio-features
requests for the session.

The plugin now skips attempting audio-features lookups when disabled
(avoiding repeated failed calls and rate-limit issues).

Also, update the changelog to document the behavior.

To Do

  • Changelog. (Add an entry to docs/changelog.rst to the bottom of
    one of the lists near the top of the document.)

nightly-52b102cf-ls198

28 Oct 11:14
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-52b102cf-ls198/index.html

LinuxServer Changes:

Full Changelog: nightly-201677ae-ls197...nightly-52b102cf-ls198

Remote Changes:

Add support for Python 3.13 (#6132)

Fixes #5575
Fixes #5822
Fixes #6082
Fixes #6026

Python 3.13 compatibility

  • Updated librosa dependency from ^0.10.2.post1 to >=0.11 where a
    bug with numpy types is fixed.
  • Updated transitive audioread dependency which now pulls in
    standard-aifc, standard-sunau, and audioop-lts packages for Python
    3.13 and above.

Python 3.14 compatibility

  • Python 3.14 introduced stricter requirements for input type in low
    level fnctl.ioctl function which we used to detect the terminal width.
    I replaced it with high-level, cross-platform
    shutil.get_terminal_size().
  • I'm not adding official support yet, as I faced many issues trying to
    install librosa dependencies on Python 3.14. It should work fine for
    people that do not use autobpm, and it may even work for those that do
  • if they have the right set of system dependencies available. We can
    revise this once we drop Python 3.9 in a couple of days.

nightly-3a72d85c-ls198

11 Nov 04:24
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-3a72d85c-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

Drop support for Python 3.9 (#6144)

Drop support for Python 3.9 and pyupgrade the codebase.

Dependency upgrades:

image

nightly-29b99586-ls198

07 Nov 20:08
3c736e1

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-29b99586-ls198/index.html

LinuxServer Changes:

No changes

Remote Changes:

BUG: Wrong path edited when running config -e (#5685)

As per #5652, beet --config <path> config -e edited the default config
path, even though that's not the config that would be used by beets.

It seems like this was the result of a deliberate short-circuit in
_raw_main().
The short-circuit prevents malformed configs from causing a crash before
opening the editor, but also prevents the setup function from loading
the custom config at all.

The solution used here is to just expose the CLI options to
edit_config(), so that it can use the custom config path if its set. I
also suspect that the branch in
config_func()
which is getting short circuited is actually unreachable, but I left it
in with a note just in case.

Fixes #5652

To Do

  • Documentation (N/A)
  • Changelog
  • Tests