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-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-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.
nightly-af41eef7-ls94
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-af41eef7-ls94/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
beets Changes:
lyrics: Fallback to plain lyrics if synced lyrics not available (#5089)
The synced
config flag was not working the way the docs described it
for the LRCLIB source. With synced: yes
, if a track does not have
synced lyrics, but does have plain lyrics, the plugin would return no
lyrics. The docs imply that, with the flag enabled, it would still use
plain lyrics if there are no synced lyrics.
LRCLIB API call that returns plain lyrics can be found
here.
nightly-3cc129b8-ls94
CI Report:
https://ci-tests.linuxserver.io/linuxserver/beets/nightly-3cc129b8-ls94/index.html
LinuxServer Changes:
Pin beetcamp to 0.19.2 until upstream requirements fixed.
beets Changes:
Package: fix release workflow, exclude plugin tests, include all files from MANIFEST.in (#5536)
Fixes #5526
Fixes #5531
Fixes #5539
Package contents
See #5526 where a package maintainer fails running plugin tests. I found that before
introduction of Poetry beets
never bundled plugin tests, therefore I now excluded them.
I also remembered that previously MANIFEST.in
file was used to specify which files get
included in the package, so I mirrored the same configuration. This includes zsh
completion in extra/_beet
which fixes #5531.
I removed MANIFEST.in
file since it has no use anymore.
Release workflow
The last release workflow run failed to pick up the commit with the version updates and
tagged an outdated commit (#5539). I simplified the workflow to create the tag at the same
time the version upgrade is committed.