Skip to content

Releases: linuxserver/docker-beets

2.5.1-ls306

16 Jan 19:05
6aaf05a

Choose a tag to compare

CI Report:

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

LinuxServer Changes:

Full Changelog: 2.5.1-ls305...2.5.1-ls306

Remote Changes:

Updating PIP version of beets to 2.5.1

nightly-ef59cfa5-ls218

17 Jan 15:08
a335f94

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-ef59cfa5-ls218/index.html

LinuxServer Changes:

No changes

Remote Changes:

Handle potential OSError when unlinking temporary files in ArtResizer (#5615)

Description

was getting permission error because after png is converted to jpg beets
want to delete the png but somehow it is still being used causing the
import to fail. this temporarily fixes the import but still needs a
proper way to know what is using the file and how to delete it.

  File "C:\Users\DELL\projects\_myForks\beets\beetsplug\fetchart.py", line 1321, in fetch_art
    candidate = self.art_for_album(task.album, task.paths, local)
  File "C:\Users\DELL\projects\_myForks\beets\beetsplug\fetchart.py", line 1413, in art_for_album
    out.resize(self)
    ~~~~~~~~~~^^^^^^
  File "C:\Users\DELL\projects\_myForks\beets\beetsplug\fetchart.py", line 218, in resize
    self._resize(plugin, current_check)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\DELL\projects\_myForks\beets\beetsplug\fetchart.py", line 246, in _resize
    self.path = ArtResizer.shared.reformat(
                ~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self.path,
        ^^^^^^^^^^
        plugin.cover_format,
        ^^^^^^^^^^^^^^^^^^^^
        deinterlaced=plugin.deinterlace,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "C:\Users\DELL\projects\_myForks\beets\beets\util\artresizer.py", line 658, in reformat
    os.unlink(path_in)
    ~~~~~~~~~^^^^^^^^^
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: b'C:\\Users\\DELL\\AppData\\Local\\Temp\\beets\\beetsplug_fetchart\\4kqx2um2.png'

when importing
https://musicbrainz.org/release/5744ddb7-e9b6-4b46-a55c-38e75aa95460

beet config

fetchart:
    minwidth: 500
    maxwidth: 3000
    max_filesize: 3500000
    sources:
    -   coverart: release
    -   coverart: releasegroup
    - itunes
    - amazon
    - filesystem
    - albumart
    - '*'
    cautious: yes
    cover_names: cover front art artwork folder album
    store_source: yes
    cover_format: JPEG
    auto: yes
    quality: 0
    enforce_ratio: no
    high_resolution: no
    deinterlace: no

nightly-bd319c2c-ls218

13 Jan 14:21
a335f94

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-bd319c2c-ls218/index.html

LinuxServer Changes:

No changes

Remote Changes:

db: disable DQS on Python >= 3.12 (#5235)

cf. beetbox/beets#4709, let's see how badly
this breaks CI

nightly-b3c42a33-ls218

13 Jan 22:08
a335f94

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-b3c42a33-ls218/index.html

LinuxServer Changes:

No changes

Remote Changes:

Enable ruff's future-annotations and RUF* rules (#6245)

Summary

This PR updates typing and linting across the codebase and enables
stricter ruff checks for Python 3.10:

  1. Enable tool.ruff.lint.future-annotations
    Very handy feature released in 0.13.0: if required, it automatically
    adds from __future__ import annotations and moves relevant imports
    under if TYPE_CHECKING:

    # before (runtime import)
    from beets.library import Library
    
    # after
    from __future__ import annotations
    
    from typing import TYPE_CHECKING
    
    if TYPE_CHECKING:
        from beets.library import Library
  2. Set tool.ruff.target-version = "py310"

    This enforced PEP 604 unions in the codebase:

    # before
    SQLiteType = Union[str, bytes, float, int, memoryview, None]
    
    # after
    SQLiteType = str | bytes | float | int | memoryview | None
  3. Enable RUF* family of checks

    • Remove unused # noqas

    • Ignore unused unpacked variables

      # before
      likelies, consensus = util.get_most_common_tags(self.items)
      
      # after
      likelies, _ = util.get_most_common_tags(self.items)
    • Avoid list materialization

      # before
      for part in parts + [","]:
      
      # after
      for part in [*parts, ","]:
  • And, most importantly, RUF012: use ClassVar for mutable class
    attributes

  • This underlined our messy BeetsPlugin.template_* attributes design,
    where I have now defined BeetsPluginMeta to make a clear distinction
    between class and instance attributes. @semohr and @asardaes I saw you
    had a discussion regarding these earlier - we will need to revisit this
    at some point to sort it out for good.

  • It also revealed a legitimate issue in metasync.MetaSource where
    item_types were initialised as an instance attribute (but luckily
    never used).

nightly-6c2c4609-ls218

15 Jan 16:27
a335f94

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-6c2c4609-ls218/index.html

LinuxServer Changes:

No changes

Remote Changes:

Respect no_convert and never_convert_lossy_files in convert plugin (#6286)

Given that @frigginbrownie's #5556 PR received some thumb ups but they
haven't responded since a while ago, I'm creating this PR to merge their
fix (I could not commit in the PR branch since I have no permissions to
push to their fork).

Supersedes: #5556

Copying @frigginbrownie description from #5556:

According to the docs, the auto_keep function will "Convert your files
automatically on import to dest but import the non transcoded version."
This is true but not 100% accurate. In cases where no conversion is
required (say, importing lossy files where there's no need to convert),
auto_keep will copy the files to dest.

This behavior results in duplicate files being created on import when
the auto_keep function is set to yes - a lossy file will be imported
into the default directory (say /music) and then copied to the dest
location (say /transcodes).

This is ideal if you wish to have all music formats in your default
directory (lossy and lossless) and all lossy files (original imports and
transcodes) in a secondary directory (say /lossy).

But what if you want a separate directory of all music you've
transcoded? auto_keep won't provide that, as it copies lossy files to
the dest location. In addition, if the dest is set to the same location
as default directory, auto_keep will copy lossy files into the same
directory that beets previously imported files into, resulting in the
directory having two files for each file in an album. If you use paths
(say to have singletons imported into /music/singles), auto_keep will
import the file into the path location, then copy the file to the dest,
creating directories to match the path.

Unlike with the auto option or using "beet convert", auto_keep does not
follow the never_convert_lossy_files or no_convert options and will not
validate whether files need to be converted or copied on import to dest

  • it transcodes or it copies, no questions asked.

This change updates the auto_convert_keep function to filter items using
should_transcode. This way, if the user sets never_convert_lossy_files
to no or no_convert: 'format:mp3', lossy files will not be copied to the
dest, while lossless files will be converted to the dest (perfect for a
seperate /transcodes directory). If the user sets
never_convert_lossy_files to yes, lossy files will to be copied to the
dest and lossless files will be converted to the dest (perfect for a
/lossy directory). In turn, this change makes behavior consistent with
"beet convert" and the auto option.

nightly-4ff6b39e-ls218

13 Jan 13:46
a335f94

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-4ff6b39e-ls218/index.html

LinuxServer Changes:

Full Changelog: nightly-f63585fe-ls217...nightly-4ff6b39e-ls218

Remote Changes:

Fix bug in fetching preferred release event. (#6279)

With the changes to how data is fetched from MusicBrainz, empty releases
are now None instead of an empty dict.

nightly-f63585fe-ls217

11 Jan 20:13
5c3e496

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-f63585fe-ls217/index.html

LinuxServer Changes:

Full Changelog: nightly-c04fc95e-ls216...nightly-f63585fe-ls217

Remote Changes:

Remove expired Spotify credentials and log error for missing configuration (#6271)

Looks like our hard-coded API credentials expired. This PR removes
expired credentials and makes it clear to the user that they must
provide their credentials.

Fixes #6270

2.5.1-ls305

09 Jan 19:03
22c23cb

Choose a tag to compare

CI Report:

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

LinuxServer Changes:

Full Changelog: 2.5.1-ls304...2.5.1-ls305

Remote Changes:

Updating PIP version of beets to 2.5.1

nightly-c04fc95e-ls216

08 Jan 21:14
9d6db60

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-c04fc95e-ls216/index.html

LinuxServer Changes:

Full Changelog: nightly-ad2ff1f9-ls215...nightly-c04fc95e-ls216

Remote Changes:

Merge #6213 - Fix ftintitle plugin to prioritize explicit featuring tokens

nightly-ad2ff1f9-ls215

07 Jan 23:14
d057350

Choose a tag to compare

Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-ad2ff1f9-ls215/index.html

LinuxServer Changes:

Full Changelog: nightly-1a899cc9-ls214...nightly-ad2ff1f9-ls215

Remote Changes:

Fix fetchart colors broken by 67e668d81ff03d7ce14671e68676a7ad9d0ed94a (#6273)

Fetchart colors were broken by 67e668d81ff03d7ce14671e68676a7ad9d0ed94a.
Since that commit fetchart displays this, with escape codes instead of
colorized output:

fetchart: Alasdair Fraser & Natalie Haas - Meridians: �[37mhas album art�[39;49;00m

This fixes it by using ui.print_ instead of Logger. This seems to be
in line with other plugins such as play:

https://github.com/beetbox/beets/blob/1a899cc92af57b72a76570fb37d1c4eda0f5e842/beetsplug/play.py#L135