Skip to content

Releases: linuxserver/docker-beets

2.2.0-ls256

31 Jan 18:55
9383272
Compare
Choose a tag to compare

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/2.2.0-ls256/index.html

LinuxServer Changes:

Rebase to Alpine 3.21.

Remote Changes:

Updating PIP version of beets to 2.2.0

nightly-a1c0ebde-ls106

31 Jan 18:57
568df7a
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-a1c0ebde-ls106/index.html

LinuxServer Changes:

Rebase to Alpine 3.21, unpin beetcamp.

Remote Changes:

Lyrics: Refactor Genius, Google backends, and consolidate common functionality (#5474)

Bug Fixes

  • Fixed #4791: Resolved an issue with the Genius backend where it
    couldn't match lyrics if there was a slight variation in the artist's
    name.

Plugin Enhancements

  • Session Management: Introduced a TimeoutSession to enable
    connection pooling and maintain consistent configuration across
    requests.
  • Error Handling: Centralized error handling logic in a new
    RequestsHandler class, which includes methods for retrieving either
    HTML text or JSON data.
  • Logging: Added methods to ensure the backend name is included in
    log messages.

Configuration Changes

  • Added a new dist_thresh field to the configuration, allowing users
    to control the maximum tolerable mismatch between the artist and title
    of the lyrics search result and their item. Interestingly, this field
    was previously available (though undocumented) and used in the
    Tekstowo backend. Now, this threshold has also been applied to
    Genius and Google search logic.

Backend Updates

  • All backends that perform searches now validate each result against
    the configured dist_thresh.

Genius

  • Removed the need to scrape HTML tags for lyrics; instead, lyrics are
    now parsed from the JSON data embedded in the HTML. This change should
    reduce our vulnerability to Genius' frequent alterations in their HTML
    structure.
  • Documented the structure of their search JSON data.

Google

  • Typed the response data returned by the Google Custom Search API.
  • Excluded certain pages under https://letras.mus.br that do not
    contain lyrics.
  • Excluded all results from MusiXmatch, as we cannot access their pages.
  • Improved parsing of URL titles (used for matching item/lyrics
    artist/title):
  • Handled results from long search queries where URL titles are
    truncated with an ellipsis.
    • Enhanced URL title cleanup logic.
  • Added functionality to determine (or rather, guess) not only the track
    title but also the artist from the URL title.
  • Similar to #5406, search results are now compared to the original item
    and sorted by distance. Results exceeding the configured dist_thresh
    value are discarded. The previous functionality simply selected the
    first result containing the track's title in its URL, which often led to
    returning lyrics for the wrong artist, particularly for short track
    titles.
  • Since we now fetch lyrics confidently, redundant checks for valid
    lyrics and credits cleanup have been removed.

HTML Cleanup

  • Organized regex patterns into a new Html class.
  • Adjusted patterns to ensure new lines between blocks of lyrics text
    scraped from letras.mus.br and musica.com.
  • Modified patterns to scrape missing lyrics text on paroles.net and
    lacoccinelle.net. See the diff in test/plugins/lyrics_page.py.

nightly-731519b0-ls106

02 Feb 17:07
568df7a
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-731519b0-ls106/index.html

LinuxServer Changes:

Rebase to Alpine 3.21, unpin beetcamp.

Remote Changes:

Use up-to-date namespace package setup for plugins (#5505)

Refactor beetsplug to use native namespace packages by removing
__init__.py. Update documentation and setup.cfg to support namespace
packages.

Motivation

Adopt PEP 420 native namespace packages to simplify plugin management
and eliminate the need for __init__.py.

See https://realpython.com/python-namespace-package.

This setup is backwards-compatible, so plugins using the old
pkgutil-based setup will continue working fine.

The advantage with this setup is that external plugins will now be able
to import modules from 'beetsplug' package for typing purposes.
Previously, mypy could not resolve these modules due to presence of
__init__.py.

2.2.0-ls255

28 Jan 15:21
c0eba4d
Compare
Choose a tag to compare

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/2.2.0-ls255/index.html

LinuxServer Changes:

Rebase to Alpine 3.21.

Remote Changes:

Updating PIP version of beets to 2.2.0

nightly-a1c0ebde-ls105

28 Jan 15:17
b39a30b
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-a1c0ebde-ls105/index.html

LinuxServer Changes:

Rebase to Alpine 3.21, unpin beetcamp.

Remote Changes:

Lyrics: Refactor Genius, Google backends, and consolidate common functionality (#5474)

Bug Fixes

  • Fixed #4791: Resolved an issue with the Genius backend where it
    couldn't match lyrics if there was a slight variation in the artist's
    name.

Plugin Enhancements

  • Session Management: Introduced a TimeoutSession to enable
    connection pooling and maintain consistent configuration across
    requests.
  • Error Handling: Centralized error handling logic in a new
    RequestsHandler class, which includes methods for retrieving either
    HTML text or JSON data.
  • Logging: Added methods to ensure the backend name is included in
    log messages.

Configuration Changes

  • Added a new dist_thresh field to the configuration, allowing users
    to control the maximum tolerable mismatch between the artist and title
    of the lyrics search result and their item. Interestingly, this field
    was previously available (though undocumented) and used in the
    Tekstowo backend. Now, this threshold has also been applied to
    Genius and Google search logic.

Backend Updates

  • All backends that perform searches now validate each result against
    the configured dist_thresh.

Genius

  • Removed the need to scrape HTML tags for lyrics; instead, lyrics are
    now parsed from the JSON data embedded in the HTML. This change should
    reduce our vulnerability to Genius' frequent alterations in their HTML
    structure.
  • Documented the structure of their search JSON data.

Google

  • Typed the response data returned by the Google Custom Search API.
  • Excluded certain pages under https://letras.mus.br that do not
    contain lyrics.
  • Excluded all results from MusiXmatch, as we cannot access their pages.
  • Improved parsing of URL titles (used for matching item/lyrics
    artist/title):
  • Handled results from long search queries where URL titles are
    truncated with an ellipsis.
    • Enhanced URL title cleanup logic.
  • Added functionality to determine (or rather, guess) not only the track
    title but also the artist from the URL title.
  • Similar to #5406, search results are now compared to the original item
    and sorted by distance. Results exceeding the configured dist_thresh
    value are discarded. The previous functionality simply selected the
    first result containing the track's title in its URL, which often led to
    returning lyrics for the wrong artist, particularly for short track
    titles.
  • Since we now fetch lyrics confidently, redundant checks for valid
    lyrics and credits cleanup have been removed.

HTML Cleanup

  • Organized regex patterns into a new Html class.
  • Adjusted patterns to ensure new lines between blocks of lyrics text
    scraped from letras.mus.br and musica.com.
  • Modified patterns to scrape missing lyrics text on paroles.net and
    lacoccinelle.net. See the diff in test/plugins/lyrics_page.py.

nightly-a1c0ebde-ls104

27 Jan 12:13
90c1e4e
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-a1c0ebde-ls104/index.html

LinuxServer Changes:

Pin beetcamp to 0.19.2 until upstream requirements fixed.

Remote Changes:

Lyrics: Refactor Genius, Google backends, and consolidate common functionality (#5474)

Bug Fixes

  • Fixed #4791: Resolved an issue with the Genius backend where it
    couldn't match lyrics if there was a slight variation in the artist's
    name.

Plugin Enhancements

  • Session Management: Introduced a TimeoutSession to enable
    connection pooling and maintain consistent configuration across
    requests.
  • Error Handling: Centralized error handling logic in a new
    RequestsHandler class, which includes methods for retrieving either
    HTML text or JSON data.
  • Logging: Added methods to ensure the backend name is included in
    log messages.

Configuration Changes

  • Added a new dist_thresh field to the configuration, allowing users
    to control the maximum tolerable mismatch between the artist and title
    of the lyrics search result and their item. Interestingly, this field
    was previously available (though undocumented) and used in the
    Tekstowo backend. Now, this threshold has also been applied to
    Genius and Google search logic.

Backend Updates

  • All backends that perform searches now validate each result against
    the configured dist_thresh.

Genius

  • Removed the need to scrape HTML tags for lyrics; instead, lyrics are
    now parsed from the JSON data embedded in the HTML. This change should
    reduce our vulnerability to Genius' frequent alterations in their HTML
    structure.
  • Documented the structure of their search JSON data.

Google

  • Typed the response data returned by the Google Custom Search API.
  • Excluded certain pages under https://letras.mus.br that do not
    contain lyrics.
  • Excluded all results from MusiXmatch, as we cannot access their pages.
  • Improved parsing of URL titles (used for matching item/lyrics
    artist/title):
  • Handled results from long search queries where URL titles are
    truncated with an ellipsis.
    • Enhanced URL title cleanup logic.
  • Added functionality to determine (or rather, guess) not only the track
    title but also the artist from the URL title.
  • Similar to #5406, search results are now compared to the original item
    and sorted by distance. Results exceeding the configured dist_thresh
    value are discarded. The previous functionality simply selected the
    first result containing the track's title in its URL, which often led to
    returning lyrics for the wrong artist, particularly for short track
    titles.
  • Since we now fetch lyrics confidently, redundant checks for valid
    lyrics and credits cleanup have been removed.

HTML Cleanup

  • Organized regex patterns into a new Html class.
  • Adjusted patterns to ensure new lines between blocks of lyrics text
    scraped from letras.mus.br and musica.com.
  • Modified patterns to scrape missing lyrics text on paroles.net and
    lacoccinelle.net. See the diff in test/plugins/lyrics_page.py.

2.2.0-ls254

21 Jan 02:50
817b09e
Compare
Choose a tag to compare

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/2.2.0-ls254/index.html

LinuxServer Changes:

Add packages required for Discogs plugin.

Remote Changes:

Updating PIP version of beets to 2.2.0

nightly-f709ac14-ls103

20 Jan 18:07
c780b50
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-f709ac14-ls103/index.html

LinuxServer Changes:

Pin beetcamp to 0.19.2 until upstream requirements fixed.

Remote Changes:

Fix lrclib lyrics (#5406)

Fixes #5102

LRCLib lyrics backend fixes

Bug Fixes

  • Fixed fetching lyrics from lrclib source. If lyrics for a specific
    album, artist, and title combination are not found, the plugin now
    searches for the artist and title and picks the most relevant result,
    scoring them by
    1. Duration similarity to the target item
    2. Availability of synced lyrics
  • Updated the default sources configuration to prioritize lrclib
    over other sources for faster and more reliable results.

Code Improvements

  • Added type annotations to fetch method in all backends.
  • Introduced LRCLyrics and LRCLibItem classes to encapsulate lyrics
    data and improve code structure.
  • Enhanced error handling and logging enchancements to the LRCLib
    backend. These will be added to the rest of the backends in a separate
    PR.

nightly-9682f24c-ls103

23 Jan 09:07
c780b50
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-9682f24c-ls103/index.html

LinuxServer Changes:

Pin beetcamp to 0.19.2 until upstream requirements fixed.

Remote Changes:

Lastgenre: New config option keep_existing (#4982)

New config option keep_existing (#4982)

  • Fix the behavior of theforce option. Previously disabling the option
    had "incomplete" behaviour:
  • If content was found, a whitelist check was issued and if valid the
    plugin exited early and logged ("keep").
  • This whitelist check was not aware of multiple genres (separated
    typically by a string like , ), thus it failed erased all existing
    genres and overwrote with new ones.

This didn't feel like a typical behaviour of a force option, which
this PR tries to improve as follows...

  • String-separated multi-genres are now compiled into a list and
    depending on the whitelist option are kept and enriched with freshly
    fetched last.fm genres.

  • If force is off, pre-populated tags are not touched.

  • A lot of refactoring was done, some absolutely required, some as a
    preparation for future work on the plugin.

  • The main processing function _get_genre was massively overhauled and
    got a new pytest.mark.parametrize test which includes much more test
    cases.

nightly-80bc5397-ls103

24 Jan 13:24
c780b50
Compare
Choose a tag to compare
Pre-release

CI Report:

https://ci-tests.linuxserver.io/linuxserver/beets/nightly-80bc5397-ls103/index.html

LinuxServer Changes:

Pin beetcamp to 0.19.2 until upstream requirements fixed.

Remote Changes:

Checkpoint to make sure config file is set up correctly added to the getting started guide #4820

Description

Added a quick checkpoint to ensure the config file is set up correctly
prior to users importing their music library. This was something I
discovered later after running into an issue with my config file and
hope it helps new users avoid the issues I had.