Skip to content

Releases: FoxxMD/multi-scrobbler

0.10.4

21 Nov 16:54

Choose a tag to compare

Bug Fixes

  • (rocksky) Round duration to integer to fix 400 on submit #400
  • (tealfm) Round duration to integer
    • Float duration did not prevent writing record to PDS but seems to improve compatibility with apps using tealfm data

0.10.3

17 Nov 16:02

Choose a tag to compare

Bug Fixes

  • (rocksky) Fix wrong config value used for Rocksky API auth
  • (rocksky) Fix url path for token validation
  • (rocksky) Use duration_ms instead of duration since Rocksky ignores duration

0.10.2

13 Nov 17:40

Choose a tag to compare

What's New?

teal.fm Scrobble Client/Source

teal.fm is a social discovery and web viewing service for scrobbles stored/available on the ATProto network/your repository in a PDS (Personal Data Server).

This release includes a Client and Source implementation for teal.fm. #378

The teal.fm website is still in development and does not have a public release yet but you can start scrobbling, now, and your data wil be ready to use when they launch publicly.

Rocksky Client Fixes and Source

A fix for the previously-released Rocksky client #391 is included, as well as a brand-new implementation for both the Client and a new Source.

Notable QoL Improvements

  • Now Playing functionality is now more temporally-accurate for downstream scrobbler clients and in the UI #395
  • Subsonic Sources now have repeat detection implemented so your tracks are scrobbled mutliple times when you play them over and over again #375

Documentation Overhaul

Some of you may have already noticed but the docs at foxxmd.github.io/multi-scrobbler have been reworked to improve readability and add more information:

  • The monolithic configuration page has been split into separate pages/sections:
  • Scrobble Clients/Sources include a matrix of supported features and clearer breakdowns of what each feature means + configuration
  • Components have been refactored into reusable snippets which will make future documentation easier
  • The URL pattern for the entire site has been simplified by removing the docs/ prefix
    • All old pages should redirect to new pages, but if they don't please open an issue

Full Changelog

Bug Fixes

  • (endpointlz) Return expected OK response body #380
  • (listenbrainz) Use duration_ms if duration not provided
  • (listenbrainz) Fix interfaces for submit/listen and consolidate
  • (rocksky) Add scrobble to deadletter when ignored
  • (tealfm) Fix scrobble play date context
  • (No Category) Fix Source/Client data types
  • (No Category) Improve timing and update frequency to match scrobbler behavior #395

Documentation

  • (endpointlz) Add navidrome url setup instructions
  • (tealfm) Add docs
  • (No Category) Move landing page to docs to simply url structure
  • (No Category) Add commonly used components to global scope
  • (No Category) Move Source configs to own files
  • (No Category) Add client own files
  • (No Category) Reorganize doc contents
  • (No Category) Improved linking on config/landing and configuration type refinement
  • (No Category) Change installation to category doc link
  • (No Category) Update kitchensink
  • (No Category) Improve sources documentation
  • (No Category) Add redirects for old pages
  • (No Category) Add subsonic guidance for lz scrobbling

Features

  • (endpointlz) Add more logging for invalid routes
  • (jellyfin) Add frontend url override as env #374
  • (listenbrainz) Use end-of-string token and wildcard route to better log malformed LZ endpoint routes
  • (listenbrainz) Add request body to logging for debugging
  • (rocksky) Implement Rocksky Source/Client
  • (subsonic) Add basic repeat detection based on listened duration #375
  • (tealfm) Implement app password auth
  • (tealfm) Massage handle for users who don't read docs
  • (No Category) Implement working tealfm client
  • (No Category) Make ATProto handle transform usable by RockSky and teal.fm

Miscellaneous Tasks

  • (frontend) Update sass package and vite config to remove deprecation warnings
  • (No Category) Update schema

Refactor

  • (frontend) Update tailwind and move generation into vite
  • (frontend) Migrate tailwind config to v4
  • (listenbrainz) Move parsing functions out of static
  • (listenbrainz) Consolidate lz endpoint submit parsing into lz response parsing
  • (tealfm) Move common functionality to api client

Testing

  • (No Category) Use zizmor to fix and audit image publish action
  • (No Category) Harden remaining workflows using zizmor

v0.10.1

30 Oct 13:25

Choose a tag to compare

What's New?

Rocksky Client

Rocksky, a music tracking and discovery platform built on the AT Protocol (Bluesky) has been added as a client to the docs. It uses a listenbrainz-compatible API so multi-scobbler users can set it up as a regular Listenbrainz Client with a custom URL.

A future release will see a Rocksky Source as well, so you can mirror scrobbles from your PDS to another service.

Full Changelog

Features

  • (JellyfinApiSource) Add option to override the Jellyfin base url used in the frontend #374 by @wolffshots
  • (listenbrainz) Add source as music service name #369 by @h-wb
  • (plex) Enable accepting self-signed certs #372 (#373)

Bug Fixes

  • (notification) Parse and use the tags in Apprise config #369 by @gabeklavans
  • (plex) Use better url parsing method

Documentation

  • (No Category) Add Rockysky setup instructions
  • (No Category) Update listenbrainz json example to include url

Miscellaneous Tasks

  • (JellyfinApiSource) Extract URL replacement to func and add tests

Testing

  • (No Category) Add more tests for url parsing

v0.10.0

23 Sep 16:12

Choose a tag to compare

What's New?

Persistent Queue/Failed Scrobbles

This release implements persisted data across multi-scrobble restarts. Initial support will be for Queued and Failed Scrobbles.

This means that MS will save any Plays that have not successfully been scrobbled to Clients. They will be restored when MS is restarted.

This functionality is enabled by default so no configuration changes are required. Scrobble data will be saved in the existing CONFIG_DIR directory bound into the docker container.

Data can be persisted to file (default) or Valkey. See the docs for more information and configuration.

This is a non-breaking change but the app version has been bumped to signify major functionality updates.

Youtube Music Auth Issues

Google/YT seems to have permanently broken authentication using the Oauth client method for Youtube Music. However, cookie authentication is still working and a simpler process.

If you are using Oauth and encounter 400 errors please switch to cookies instead.

Full Changelog

Bug Fixes

  • (jellyfin) Guard against undefined NowPlaying Path
  • (lastfm) Remove VA from album artist #340
  • (lastfm) Full destructure recent response and log respon on error #353
  • (listenbrainz) Fix missing album/release_name for listenbrainz endpoint #342
  • (No Category) Add additional logging for ytm history request #346 #345
  • (No Category) Do not use transform until after client is ready #356
  • (No Category) Add full coverage for cached queue updating during client lifecycle
  • (No Category) Update object hashing function #358

Documentation

  • (ytm) Add oauth warning #346 #345
  • (No Category) Remove koito from listenbrainz example
  • (No Category) Add caching docs

Features

  • (lzendpoint) Accept artist and release artist names in submit payload
  • (ui) Add Now Playing behavior for ui Player #338
  • (webscrobbler) Use Now Playing Player #338
  • (ytm) Add debug logging #346 #345
  • (ytm) Allow user-defined oauth scopes #346 #345
  • (No Category) Change stale/orphan interval to match current play duration for Players that only track Now Playing data #352
  • (No Category) More artist parsing improvements
  • (No Category) Improve artist string parsing
  • (No Category) Add Access Token auth for Ntfy webhook #350
  • (No Category) Implement caching backend
  • (No Category) Implement cache file streaming with progress logging

Miscellaneous Tasks

  • (No Category) Bump logging version
  • (No Category) Update iti usage
  • (No Category) Bump with-local-tmp-dir version
  • (No Category) Remove unused object-hash package

Refactor

  • (No Category) Refactor di cache to allow singleton or transient

Testing

  • (ytm) Fix failing type assertion
  • (No Category) Fix/workaround tests for new transformrule assumptions
  • (No Category) Add scrobble client caching test

Build

  • (vscode) Update devcontainer to use compose stack with valkey for caching integration
  • (No Category) Move net-interceptor to dev packages

0.10.0 RC1

17 Sep 13:51
c8c3b48

Choose a tag to compare

0.10.0 RC1 Pre-release
Pre-release

What's New?

Persistent Queue/Failed Scrobbles

This release implements persisted data across multi-scrobble restarts. Initial support will be for Queued and Failed Scrobbles.

This means that MS will save any Plays that have not successfully been scrobbled to Clients. They will be restored when MS is restarted.

This functionality is enabled by default so no configuration changes are required. Scrobble data will be saved in the existing CONFIG_DIR directory bound into the docker container.

Data can be persisted to file (default) or Valkey.

This issue contains more instructions on customizing persistence configuration and guidance for using Valkey. Please use the issue for reporting any feedback or issues.

v0.9.11

20 Aug 13:26

Choose a tag to compare

What's New?

Maloja Source

Implemented Maloja as a Source 🎉 #295

All Clients can now also be used as Sources so you have full freedom to scrobble to any service with the ability to relay to any other service!

v0.9.10

01 Aug 12:52

Choose a tag to compare

What's New?

  • fix(listenbrainz): Improve MusicBrainz metadata parsing so more data is included in Play metadata
  • fix(koito): Send recording_mbid in scrobble payload to fix missing metadata #333

v0.9.9

28 Jul 14:14

Choose a tag to compare

What's New?

This is a small release mainly for some bug fixes and documentation improvements.

Plex Source Temporary Fix

Plex 1.41.9.9912 introduced changes in their API that have not been accounted for in the underlying library multi-scrobbler uses to communicate with Plex. This causes issues in multi-scrobbler so this release merges a temporary fix for this error. No interaction is required to fix this error from the user side.

Another minor release will be cut once @lukehagar/plexjs merges the upstream fix for the API.

Intentional Scrobble Repeat Detection

Improvements to how multi-scrobbler tracks Sources that provide Player position data now prevents scrobbles from being detected as duplicates when they are intentionally repeated by the user. #328 #318

You can now keep that track on repeat to your heart's content knowing MS will scrobble all 20+ consecutive plays. I don't judge ❤️

Full Changelog

Bug Fixes

  • (lastfm) Fix lastfm providing empty string for non-defined album #323
  • (listenbrainz) Fix sending undefined release_name in scrobble #323
  • (plex) Fix regression with allowing non-music when using librariesAllow
  • (plex) Temporary fix for library response validation #314
  • (No Category) Add last played data and check for repeat on new Play #318

Documentation

  • (No Category) Add Source client config guidance #325
  • (No Category) Update docusaurus to 3.8
  • (No Category) Fix social card image
  • (No Category) Add clarifying callout for multi-use components
  • (No Category) Remove koito mentions from LZ docs
  • (No Category) Update readme Koito entries
  • (No Category) Improve wording around Now Playing state

Features

  • (No Category) Track if play is a repeat and use in duplicate scrobble detection #318

Refactor

  • (No Category) Move Play position closeness and duration comparisons to own functions

0.9.8

14 Jul 14:36

Choose a tag to compare

What's New?

Koito Source/Client

v0.9.4 introduced Koito support using the existing Listenbrainz Source/Client.

Now, this release introduces full Source and Client implementations for Koito which enables better support/functionality for Koito configuration and any future features.

Thanks to all the feedback and testers in #300 !

Important

If you are currently using Koito with Listenbrainz Source/Client you DO NOT need to migrate. The existing LZ implementation will continue to support Koito.

It is still recommended to migrate as the LZ implementation has limited functionality for Koito and future releases will definitely add more functionality. Migrating is also easy! Just rename a few variables/fields and check your URL. See below:

Migrating

Instructions below based on which type of MS config you are using:

ENV Config

Rename LZ_ prefixed envs to KOITO_

File Config

Rename listenbrainz.json to koito.json. If you have additional non-koito listenbrainz client/sources then make sure to separate them into different files.

AIO Config

Rename "type": "listenbrainz" to "type": "koito"

Koito URL

Your existing URL config will continue to work as-is. However, I recommend that you change it to the Koito base url only as this will be easier for MS to work with. The "base url" is the same URL you would use to access Koito through a browser.

KOITO_URL MS Detected Base URL Example Scrobble Api URL
http://192.168.0.100:4110 http://192.168.0.100:4110 http://192.168.0.100:4110/apis/listenbrainz/1
https://koito.mydomain.com https://koito.mydomain.com https://koito.mydomain.com/apis/listenbrainz/1
http://192.168.0.100:4110/apis/listenbrainz http://192.168.0.100:4110 http://192.168.0.100:4110/apis/listenbrainz/1
http://192.168.0.100:80/koito http://192.168.0.100:80/koito http://192.168.0.100:80/koito/apis/listenbrainz/1

Docs Update

Docs have had a minor refresh. Some highlights:

  • Source/Clients sorted alphabetically for better readability
  • Removed outdated information in FAQ and on Flatpak sections
  • Fixed anchor scrolling
  • Added Koito to Quickstart clients
  • Added MPRIS guidance for Docker installs and remote socket instructions

Full Changelog

Features

  • (koito) Implement Koito client
  • (koito) Implement Koito Source
  • (listenbrainz) Add submission_client #224
  • (listenbrainz) Add additional player/service meta info for LZ scrobbles #224
  • (mpris) Better handling of socket error on connection check
  • (plex) Add libraries allow/block warning
  • (No Category) Add more logging to apprise errors #158
  • (No Category) Add RT Player metrics to player logging

Bug Fixes

  • (plex) Increase max drift to 35 seconds to account for symfonium lag #271
  • (plex) Strict comparison of library names #326
  • (No Category) Only return interpolated album value if not undefined
  • (No Category) Superagent type error false positive

Documentation

  • (mpris) Add remote socket guidance
  • (No Category) Add Koito quickstart instructions
  • (No Category) Add Koito client/source docs
  • (No Category) Update MPRIS instructions for docker
  • (No Category) Remove flatpak install guidance
  • (No Category) Update docker installation wording
  • (No Category) Sort Source/Clients alphabetically
  • (No Category) Remove old FAQ entries
  • (No Category) Add updating instructions
  • (No Category) Fix anchor scrolling by specifying logo height
  • (No Category) Hide navbar on scroll

Miscellaneous Tasks

  • (listenbrainz) Add guidance in logging to switch to Koito source/client
  • (No Category) Update superagent types