Releases: FoxxMD/multi-scrobbler
v0.5.0-RC1
🎉 0.5.0 contains a significant internal rewrite for the entire front-end and some fundamentals of the back-end.
Updates and Rewrites
Scrobble Source State Tracking
The way MS monitors Sources has seen a major overhaul. Previously MS kept track of some basic information about what was being listened to -- title/artist info, when it was first seen, and some meta info -- in a somewhat ad-hoc manner.
Now, MS implements a full source "player state" model that mirrors the current state of the source as much as possible. This allows MS to keep track of things like:
- Current playing status (paused, stopped, playing, etc.)
- What ranges of the current track have been listened to (if MS starts monitor in the middle of a track of user seeks in track)
- How much of the current track has been listened to based on those ranges so scrobble thresholds are more accurate
- Ensures better accuracy for de-duplicating scrobbles
And much more. A preview of this technical info can be enabled by setting LOG_LEVEL=debug and enabling "options": {"logPlayerState": true} in your config:
[nodemon-server] 2023-08-24T11:23:02-04:00 debug : [Sources] [Spotify - default] [Player 10ef8b79eb-foxx-arch-SingleUser] New Play: (2fkAbl3FCAj9BKc4Z5GIdr) The Free Label - Boys Don't Sob
[nodemon-server] 2023-08-24T11:23:02-04:00 debug : [Sources] [Spotify - default] [Player 10ef8b79eb-foxx-arch-SingleUser] Started new Player listen range.
[nodemon-server] 2023-08-24T11:23:02-04:00 debug : [Sources] [Spotify - default] [Player 10ef8b79eb-foxx-arch-SingleUser]
[nodemon-server] (2fkAbl3FCAj9BKc4Z5GIdr) The Free Label - Boys Don't Sob @ 2023-08-24T15:23:02.546Z
[nodemon-server] Reported: PLAYING | Calculated: UNKNOWN | Stale: No | Orphaned: No | Last Update: 2023-08-24T15:23:02.546Z
[nodemon-server] [▇▇▇▇▇▇—————————]43% 75/176s | Listened For: 0s 0%
...
[nodemon-server] 2023-08-24T11:23:18-04:00 debug : [Sources] [Spotify - default] [Player 10ef8b79eb-foxx-arch-SingleUser] Player position changed between current -> last update. Updated calculated status to playing
[nodemon-server] 2023-08-24T11:23:18-04:00 debug : [Sources] [Spotify - default] [Player 10ef8b79eb-foxx-arch-SingleUser]
[nodemon-server] (2fkAbl3FCAj9BKc4Z5GIdr) The Free Label - Boys Don't Sob @ 2023-08-24T15:23:02.546Z
[nodemon-server] Reported: PLAYING | Calculated: PLAYING | Stale: No | Orphaned: No | Last Update: 2023-08-24T15:23:18.695Z
[nodemon-server] [▇▇▇▇▇▇▇▇———————]52% 91/176s | Listened For: 16s 9%
This enables eventually implementing a "Now Playing" web interface #74 which is now possible due to the other big update...
Front-end Rewrite
The web dashboard, previously written as server-side rendered pages written in EJS/express, has been replaced by a standalone, CRA-based React web app. This also required a new API implementation for the backend which will eventually be documented.
The UI looks and behaves essentially the same in this release but it is now much better positioned for future improvements. (Now Playing being the first up).
Breaking Changes
If you are using MS with ENV configuration or "bare minimum" file configs, with docker, there should be no breaking changes. I expect 99% of MS users will be able to upgrade in-place. However, for those of you using a slightly more advanced setup:
Config Options
If your configs include logPayload or logFilterFailure properties in the data object (Plex, Tautulli, Jellyfin) you will need to move these to "options" as a sibling of "data" like this:
OLD Config
[
{
"name": "MyJellyfin",
"clients": [],
"data": {
"users": ["FoxxMD"],
"servers": ["myServer","anotherServer"],
"logPayload": false,
"logFilterFailure": "warn"
}
}
]
NEW Config
[
{
"name": "MyJellyfin",
"clients": [],
"data": {
"users": ["FoxxMD"],
"servers": ["myServer","anotherServer"]
},
"options": {
"logPayload": false,
"logFilterFailure": "warn"
}
}
]Running MS Locally
The default port for the UI/api is now 9079. This can be changed by setting the env PORT=9078 or adding a .env file to the project root with PORT=9078
Development
This only applies if you are developing MS.
Development mode is now started with npm run dev. In development mode:
- the front end is available on ENV
PORT, defaulting to 3000. - the back end (api) is available on ENV
API_PORT, defaulting to 9079.
Feedback
If you have any trouble running 0.5.0-RC1 or find a breaking change please open a ticket and let me know.
v0.4.8
Changelog
Features
- (tautulli) Support empty user to enable source with all users #84
- (jellyfin) Implement filter logging controls #85
- (docs) Implement docusaurus site https://foxxmd.github.io/multi-scrobbler
Bug Fixes
- (plex) More config data normalization #84
Documentation
- (No Category) Update docker registry options (Added GHCR)
- (No Category) Fix docker heading
- (No Category) Use external links for config examples
v0.4.7
v0.4.6
Changelog
Bug Fixes
- (kodi) Fix hardcoded string #79
- (ntfy) Include authorization object correctly in publish request data #80
- (tautulli) More response formatting safeguards #77
- (No Category) Limit number of plays returned by deezer #67
- (No Category) Respect maloja response status and throw on error #57
- (No Category) Handle null/non-string values when truncating
- (No Category) Re-initialize auth state after receiving auth callback #76
- (No Category) Passing wrong argument to tautulli payload formatter #77
Features
- (No Category) Use pre/post auth hooks for polling start to simplify logic
v0.4.5
Changelog
Features
- multi-scrobbler is now available as a flatpak on flathub! 🎉
- There is now a lil' official logo
- Added ability to set scrobble time/percentage threshold per source #73
- When available Jellyfin now submits MBID metadata, alongside normal scrobble data, to listenbrainz #72
- the port the MS webserver is served on can now be controlled via
config.json
Refactor
- Replaced git sourced winston fork with user-scoped winston npm package
Documentation
v0.4.4
v0.4.3
Changelog
Features
- Added JRiver as a Source #26
- Removed unnecessary
Clientprefix from scrobble log label - Improved Source polling retry backoff strategy and increased default max retries to 5
Bug Fixes
- Improved/fix error logging for spotify api so that it no longer logs
[object Object]
Documentation
- Added documentation for JRiver
v0.4.2
Changelog
Features
- Added Mopidy as a Source #24
- Added ListenBrainz as a Source and Client #16
- Added MPRIS as a Source
- Rewrote Spotify Source to enable scrobbling music played on Spotify Connect devices #51
- "Recently played" tracks in UI now returns consolidated list of tracks discovered by MS, rather than relying on API from each source (better support for things like Spotify connect)
- Logging improvements
- labels are now cleaner
- log levels in UI now use a more color-blind friendly palette
- more insight into Source activity and reasons why a track isn't scrobbled (at debug log level)
Bug Fixes
- Fix log filter in UI not working for levels other than debug and info
- Fixed length arrays for storing client/source tracked scrobbles should prevent memory ballooning
Documentation
- Added documentation and updated schema for Mopidy, MPRIS, and Listenbrainz
v0.4.1
Changelog
Features
- Added source for Youtube Music #34
- Added webhooks for Gotify and Ntfy to notify on polling errors or scrobble errors #66
- Added healthcheck endpoint for monitoring sources/clients #66
- Added additional debug logging for jellyfin source #70
Bug Fixes
- Fix last.fm source credentials incorrectly passed #71
- Fix incorrect descontructing of polling retry options
Documentation
- Added Youtube Music source docs
- Added webhook and healthcheck endpoint docs
v0.4.0
Version 0.4.0 is a functionally-equivalent rewrite of multi-scrobbler in Typescript with many internal updates and docker improvements.
Changes were made with an effort to prevent any functional breaking changes but there may still be changes required for Docker users and building the application for native installs.
Migrating from <0.4.0
Native (Local Installs)
- Minimum Node version has been changed to 18. (Tip: Use nvm to manage node version)
- Typescript is required to build multi-scrobbler but this is all taken care of with npm scripts:
npm install && npm run build && npm run start
LOG_DIRis no longer used. Log files will now always be stored underCONFIG_DIR/logs
Docker
- The container still uses
CONFIG_DIRas the configuration file directory BUT it now defaults to/configifCONFIG_DIRis not present. See the updated Docker install instructions for configuring this, if needed.LOG_DIRis no longer used. Log files will now always be stored underCONFIG_DIR/logs
- If you run Docker on a Linux host (ubuntu, fedora, arch, etc...) it is highly recommended to set the environmental variables
PUIDandPGIDin order to prevent file permission issues. See the Linux Host instructions in the installation docs.
Changelog
Features
- Rewritten using typescript 4.9.5
- Ingress-based source (Plex/Tautulli/Jellyfin) have better/more logging for initial connections to help with troubleshooting
- Improved jellyfin track play data standardization and logging
- Improved debug logging for Memory-Source based sources (subsonic)
- A docker-compose file is now provided
- Docker image updated
- Updated base image
- Simplified volumes and volume paths
- Respects host file permissions using PUID and PGID env variables
Bug Fixes
- Fixed spotify authentication when using multiple-env based sources #63
- Fixed jellyfin source play data error #61 thanks @CPU-Blanc
- Fixed plex payload parsing and added additional debug logging #40
Documentation
- Added docker-compose usage, improved docker install instructions, and added TZ usage #55 thanks @iluvatyr
- Added missing jellyfin kitchensink usage and fixed documentation inconsistencies thank @sirjmann92
- Added auto-generated json schema for all source/clients/config along with schema explorer/editor/validator to the documentation
- Cleaned up example configs and added README pointing to config docs for additional info
- Example configs are now copied to clean config dir on docker container start #8
- Added FAQ with connection/configuration issue basic troubleshooting
- Added github issue template