Releases: linuxserver/docker-beets
2.2.0-ls250
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.2.0-ls250/index.html
LinuxServer Changes:
Add packages required for Discogs plugin.
Remote Changes:
Updating PIP version of beets to 2.2.0
nightly-fdd365f8-ls99
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-fdd365f8-ls99/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
Future proof BucketPluginTest.test_year_single_year_last_folder (#5566)
2025 won't be in the future, forever.
nightly-faf7529a-ls99
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-faf7529a-ls99/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
Replace munkres with lapjv for track assignment (#5564)
Fixes #5207.
This PR replaces the munkres
library with lap
(Linear Assignment
Problem solver) for computing optimal track assignments during the
auto-tagging process. The main changes are:
- Remove
munkres
dependency and addlap
andnumpy
dependencies - Refactor the track assignment code to use
lap.lapjv()
instead of
Munkres().compute()
- Simplify cost matrix construction using list comprehension
- Move config value reading outside of
track_distance
function to
improve performance
The motivation for this change comes from benchmark comparisons showing
that LAPJV (implemented in the lap
library) significantly outperforms
the Munkres/Hungarian algorithm for the linear assignment problem. See
detailed benchmarks at: https://github.com/berhane/LAP-solvers
The change should provide better performance for track matching,
especially with larger albums, while maintaining the same assignment
results.
Testing Notes
- All existing tests pass without modification
- Track assignments produce identical results
- No behavioral changes in auto-tagging
nightly-f91f0961-ls99
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-f91f0961-ls99/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
Fix sorting on missing non-string fields (#5570)
Description
Fixes #5512. When sorting on a field, if the field is missing from some
items and it has a type, use the type's null
value. Otherwise,
continue to fall back to an empty string, as I don't think there's much
to be done in that case.
The new test test_int_field_present_in_some_items
fails without the
fix in query.py
.
nightly-2277e2a0-ls98
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-2277e2a0-ls98/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
Use shutil.move() to move files. (#5123)
Fixes #4622.
I don't think this changes other behavior of the function, but it fixes
the problem with the moved files being created with the wrong
permissions for me.
2.2.0-ls249
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/2.2.0-ls249/index.html
LinuxServer Changes:
Add packages required for Discogs plugin.
Remote Changes:
Updating PIP version of beets to 2.2.0
nightly-bcf516b8-ls97
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-bcf516b8-ls97/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
Properly type db on the model, sort out generic types issues (#5545)
Thanks to @wisp3rwind's suggestion this PR adds types to the
relationship between Model
, Database
and Library
.
Then I worked through the rest of the issues found in the edited files.
Most of this involved providing type parameters for generic types (or
defining defaults, rather 😉).
There queryparse
module had a somewhat significant issue where the
sorting construction logic only expected to receive FieldSort
subclasses, while SmartArtistSort
was not one. Thus SmartArtistSort
has now been forced to behave and is a FieldSort
subclass. It's also
been moved to query.py
module which is where the rest of sorts are
defined.
nightly-994f9b83-ls97
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-994f9b83-ls97/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
pyproject.toml: don't install docs et al into the wheel
wheels are directly unpacked into site-packages, so this means likely
conflict with other packages
nightly-9110a111-ls96
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-9110a111-ls96/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
Remote Changes:
Stop perpetually writing mb_artistid
, mb_albumartistid
and albumtypes
fields (#5540)
This PR fixes an issue where the beet write
command repeatedly shows
differences for certain fields (mb_artistid
, mb_albumartistid
,
albumtype
) even after writing the tags.
This happens because these fields are actually stored as lists in the
media files (mb_artistids
, mb_albumartistids
, albumtypes
), but
beets maintains both single and list versions in its database.
This PR addresses this issue in a non-invasive way: the fix ensures
consistency between single fields and their list counterparts by:
- When setting a single field value, making it the first element of the
corresponding list - When setting a list, using its first element as the single field
value
This resolves long-standing issues #5265, #5371, and #4715 where users
experienced persistent "differences" in these fields despite writing
tags multiple times.
Changes:
- Added
ensure_consistent_list_fields()
function to synchronize field
pairs - Applied this function during metadata application
- Added tests for all field combinations
Fixes #5265, #5371, #4715
Note: your music needs to be reimported with beet import -LI
or
synchronised with beet mbsync
in order to fix these fields!
nightly-22163d70-ls95
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-22163d70-ls95/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
beets Changes:
Remove support for Python 3.8 (#5508)
-
Drop support for EOL Python 3.8 making Python 3.9 the minimum
supported version -
Take advantage of Python 3.9+ type hint syntax by:
- Using
list[T]
instead ofList[T]
etc. from typing module - Using
Type | None
syntax for unions instead ofUnion[Type, None]
- Moving collection type hints from
typing
tocollections.abc
- Using
TYPE_CHECKING
guard for runtime import optimization
- Using
Note: in #5503 we found that we cannot support Python 3.12 unless we
upgrade our minimum support Python to 3.9.