Skip to content

Releases: FoxxMD/multi-scrobbler

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

0.9.7

07 Jul 12:44

Choose a tag to compare

What's New?

Now Playing

Multi-scrobbler can now report the currently playing track (Now Playing) for scrobble services that support this functionality -- Last.fm and Listenbrainz.

This functionality is default enabled for all clients but can be configured globally through ENVs or individually per-client. Consult the docs to see how this functionality works and how it can be customized.

Thanks to @msparkles for the PR providing initial support for this feature! 🎉

Full Changelog

Features

  • (subsonic) Implement filtering plays by user in #319
  • (lastfm) Now Playing by @msparkles in #316 #164
  • (listenbrainz) Implement Now Playing functionality #74
  • (listenbrainz) Include more ids/fields in submit additional_info #311
  • (No Category) Add config source to startup logging #309

Bug Fixes

  • Guard against undefined type in config.json #310

Documentation

  • Improve example config rendering for ambiguous configs #310

Now Playing Release Candidate 1

03 Jul 15:18

Choose a tag to compare

Pre-release

What's New?

This is a pre-release that introduces Now Playing functionality for Last.fm and Listenbrainz scrobble Clients. Please see this comment for MS behavior/configuration for this functionality and report any issues, thanks.

v0.9.6

20 Jun 20:11

Choose a tag to compare

What's New?

This is a minor update to improve the scrobbling capability of Listenbrainz scrobblers (Koito) when a track has multiple artists (#312). Nothing new otherwise!

v0.9.5

19 Jun 16:37

Choose a tag to compare

What's New?

Deezer ARL Source

Thanks to @Ectalite providing a premium account for development, as well as a proof of concept for accessing Deezer with ARL, the previously deprecated Deezer Source now has a new, working implementation! 🎉

See the documentation for setup and configuration

This new implementation comes with a few caveats to be aware of:

  • Only works with a premium account because Deezer only records full plays of a track which is a feature only available with premium
  • The method for accessing Deezer's API (ARL), while widely used by other projects, is unofficial:
    • Deezer may break this functionality at any time
    • Using it likely violates Deezer's TOS. Use this method at your own risk.

If you have any issues with Deezer reporting duplicate plays when using third party devices (Sonos), see the docs to tweak detection behavior.

Full Changelog

Features

  • (deezer internal) Add fuzzy discovery ignore option
  • (No Category) Implement Deezer Internal (ARL) Source #296
  • (No Category) Fuzzy diff threshold configurable
  • (No Category) Implement better during/range temporal comparisons

Documentation

  • (deezer) Rewrite Deezer Source with ARL implementation

0.9.4

16 Jun 19:29

Choose a tag to compare

What's New?

Initial Koito Implementation

Multi-scrobbler now supports Koito, a new scrobbler application, as both a Client and a Source using the existing Listenbrainz implementation.

Use a Listenbrainz configuration, as a Client or Source, with a custom url pointing to the Koito scrobble endpoint like http://your_koito_server/apis/listenbrainz/1.

A more fully-featured, independent, Koito implementation will be introduced in a future release.

Full Changelog

Features

  • (jellyfin) Add musicbrainz metadata #297
  • (listenbrainz) Detect /1/ version prefix on base URL
  • (listenbrainz) Implement limited support for Koito as Listenbrainz Source/Client #300

Bug Fixes

  • (listenbrainz) Normalize URL and join parts correctly

v0.9.3

29 May 13:30

Choose a tag to compare

What's New?

Removed Flatpak

Flatpak has been a technical burden that has not gotten easier to maintain since its inception. Due to being a tiny percentage of the install base, and a disproportionate developer effort for this percentage, I have decided to drop support for this installation method.

You can read more about the challenges MS has had with Flathub here. If anyone is willing to contribute and maintain a flatpak distribution I would be willing to support it again.

Fixes for Plex

Previous refactoring to introduce real-time player emulation has had a few kinks since implementing the new Plex Source, mainly due to some inconsistencies with how Plex reports duration and playback position. This release includes a few fixes that should resolve these bugs and make the Plex Source more stable.

Full Changelog

Bug Fixes

  • (plex) On Plex webhook routes filter plex sources to get webhook source only #291
  • (ui) Guard against null listenedDuration #285
  • (No Category) Fix NaN and undefined initial states for rt player #292

Documentation

  • (No Category) Remove flatpak installation method #287

Miscellaneous Tasks

  • (No Category) Update flatpak description
  • (No Category) Update devcontainer to node 20 to match docker image

Testing

  • (No Category) Fix real time player not triggered during event loop

0.9.2

25 Mar 01:33

Choose a tag to compare

What's New?

So many new Sources! With this release Multi-Scrobbler now supports 20+ Sources!

Additionally, many improvements to resuming scrobbles from long-lived Sources have made their way into this release. Users who keep their players open for long periods should see less false positive scrobbles.

Listenbrainz and Last.fm "Scrobble Endpoint" Sources

Multi-scrobbler can now "pretend" to be a custom Listenbrainz or Last.fm server so that your apps that support scrobbling to custom endpoints for these services can now use Multi-scrobbler instead. See Source configuration for Listenbrainz (Endpoint) and Last.fm (Endpoint).

Azuracast Source

Monitor an Azuracast radio station and scrobble tracks when it is live, has X number of listeners, or manually from the UI.

Icecast Source

Monitor an Icecast or Shoutcast radio station and scrobble tracks automatically or manually from the UI.

Yamaha MusicCast

Scrobble from Yamaha receiver/devices that support the MusicCast service. Currently supports any music played from USB/Network/CD inputs.

Changelog Highlights

Bug Fixes

  • (player) Check for 0 duration before finalizing listen session with duration-based calculation
  • (source) Do not calculate polling interval decrease if duration does not exist
  • (ui) Update status indicator for ingress sources
  • (ytm) Recover artist/album from YTM when not surfaced by youtube.js #280
  • (No Category) Missing optional period on vs. when parsing artist
  • (No Category) Filter components by name and check for undefined #273
  • (No Category) Use last known position for final range when cleaning up stale RT player
  • (No Category) Better handling of 0 duration tracks

Documentation

  • (No Category) Fix extra array in title modification example
  • (No Category) Add primary artist extraction examples for scrobble modification

Features

  • (azuracast) Add azuracast source implementation
  • (icecast) Implement Icecast Source
  • (lastm) Implement Lastfm endpoint source
  • (listenbrainz) Implement LZ endpoint source
  • (musiccast) Implement MusicCast Source
  • (source) Add stale/orphaned intervals as user configurable
  • (source) Clear listening range on stale to prevent erroneous scrobble on resume
  • (source) Add relative time since last activity to logging
  • (No Category) Use human-friendly timestamp for stale/ophan interva logging
  • (No Category) Add ENVs for default scrobble threshold for duration/percent

Miscellaneous Tasks

  • (No Category) Add more log guidance on bug report
  • (No Category) Bump YTM dependency version
  • (ci) Add context to build-push so it uses checked out PR ref

Testing

  • (No Category) Add modification example for parsing a primary artist from delimited string
  • (No Category) Add tests for scrobble behavior when cleaning up players

Full Changelog: 0.9.1...0.9.2