Code Monkey home page Code Monkey logo

multi-scrobbler's Introduction

multi-scrobbler

Latest Release License: MIT Docker Pulls Docs

multi-scrobbler logo

A javascript app to scrobble music you listened to, to Maloja, Last.fm, and ListenBrainz

Quick Start Guide

Why should I use this over a browser extension and/or mobile app scrobbler?

  • Platform independent -- Because multi-scrobbler communicates directly with service APIs it will scrobble everything you play regardless of where you play it. No more need for apps on every platform you use!
  • Open-source -- Get peace of mind knowing exactly how your personal data is being handled.
  • Track your activity regardless of where you listen -- Scrobble from many Sources to one Client with ease and without duplicating tracks.
  • Manage scrobbling for others -- Scrobble for your friends and family without any setup on their part. Easily silo sources to specific clients to keep plays separate.

But I already scrobble my music to Last.fm/ListenBrainz, is multi-scrobbler for me?

Yes! You can use Last.fm as a Source or Listenbrainz as a Source to forward scrobbles from your profile to any other Client! That way you can keep your current scrobble setup as-is but still get the benefit of capturing your data to a self-hosted location.

How Does multi-scrobbler (MS) Work?

You set up configurations for one or more Sources and one or more Clients. MS monitors all of your configured Sources. When new tracks are played by a Source it grabs that information and then sends it (scrobbles it) to all Clients that Source is configured to scrobble to.

Source

A Source is a data source that contains information about tracks you are playing like a music player or platform. Examples are Spotify, Jellyfin, Plex, Youtube Music, Airsonic, etc...

Source configurations consist of:

  • A friendly name.
  • Any data needed to communicate or authenticate with the Source.
  • An optional list of Client names that the Source should scrobble to. If omitted the Source also scrobbles to all configured Clients.

Client

A Client is an application that stores the historical information about what songs you have played (scrobbles). Examples are Maloja, Last.fm, Listenbrainz...

Client configurations consist of:

  • A friendly name.
  • Any data needed to communicate or authenticate with the Client.

Quick Start

See the Quick Start Guide

Installation

See the Installation documentation

Configuration

See the Configuration documentation

Usage

A status page with statistics, recent logs, and some runtime configuration options can be found at

http://localhost:9078

Output is also provided to stdout/stderr as well as file if specified in configuration.

On first startup you may need to authorize Spotify and/or Last.fm by visiting the callback URL (which can also be accessed from the status page). Visit the status page above to find the applicable link to trigger this.

Help/FAQ

Having issues with connections or configuration? Check the FAQ before creating an issue!

Development

Detailed architecture and development guides for Sources/Clients

License

MIT

multi-scrobbler's People

Contributors

brunohpaiva avatar bujiraso avatar christophernewton avatar foxxmd avatar northys avatar samdoshi avatar whhoesj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

multi-scrobbler's Issues

Tracks showing up in multi-scrobbler, but not Maloja

I have multi-scrobbler set up to pull info in from Plex (via Tautulli) and Spotify. I have Maloja set up via API using ENV variables.

I am running in both applications in Docker. using multi-scrobbler:develop.

When multi-scrobbler starts up, the logs show:

2020-11-25T14:00:23-08:00 info   : [Scrobblers] Maloja client initialized
2020-11-25T14:00:23-08:00 info   : [Maloja    ] Test connection succeeded!
2020-11-25T14:00:23-08:00 info   : [Maloja    ] Maloja Server Version: 2.10.5

And when I play tracks in Spotify and Plex, they show up in the multi-scrobbler logs. However, the tracks never appear in Maloja. Am I missing a step?

BUG: express-session deprecated undefined resave option

Maybe unrelated but since upgrading to maloja v3 I am getting this error starting ms?

Wed, 13 Apr 2022 14:25:51 GMT express-session deprecated undefined resave option; provide resave option at file:/home/node/app/index.js:49:9
Wed, 13 Apr 2022 14:25:51 GMT express-session deprecated undefined saveUninitialized option; provide saveUninitialized option at file:/home/node/app/index.js:49:9

Scrobbles not showing in last.fm

Hello again,

Now that the application appears to be working correctly I have hit another issue, the scrobbles are not being show in my last.fm account. In the log it appears that they are being sent but maybe I am misinterpreting something there. Is there some way I can further debug this issue? Pasting the log from yesterday, this is the log in ms rather than the docker container but I do not see much of a difference. I can provide that as well if it would be helpful.

I thought perhaps that scrobbles were delayed because of an issue at last.fm (I have seen this in years past when messing with it) but they did not report any outage. Here is my last.fm user page if anything there would be helpful (doubtful honestly). https://www.last.fm/user/Syco54645

Thank you in advance for any help

2021-09-29T08:47:50-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-29T08:47:50-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-29T08:47:50-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T23:11:38-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Air Boats; Onions; 3D Metal Printing; Curved Cabinet Doors"}]
2021-09-28T23:11:38-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Air Boats; Onions; 3D Metal Printing; Curved Cabinet Doors"}]
2021-09-28T23:11:38-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Air Boats; Onions; 3D Metal Printing; Curved Cabinet Doors"}]
2021-09-28T22:55:25-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:55:25-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:55:25-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:55:03-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:55:03-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:55:03-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:52:59-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:52:59-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:52:59-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:48:09-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:48:09-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T22:48:09-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because author was not an allowed user: Main [{"artists":["How It's Made"],"track":"Graphite Pencil Leads; Clarinets; Special Effects"}]
2021-09-28T20:32:05-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Can't Stop"}]
2021-09-28T20:32:05-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Can't Stop"}]
2021-09-28T20:32:05-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Can't Stop"}]
2021-09-28T17:33:34-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T17:33:34-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T17:33:34-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T17:25:26-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T17:25:26-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T17:25:26-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T17:24:56-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Virginia In The Rain @ 2021-09-28T17:24:56-04:00
2021-09-28T17:24:56-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Virginia In The Rain @ 2021-09-28T17:24:56-04:00
2021-09-28T17:24:56-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Virginia In The Rain @ 2021-09-28T17:24:56-04:00
2021-09-28T17:24:56-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:24:56-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:24:56-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:24:56-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Virginia In The Rain @ 2021-09-28T17:24:56-04:00
2021-09-28T17:24:56-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Virginia In The Rain @ 2021-09-28T17:24:56-04:00
2021-09-28T17:24:56-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Virginia In The Rain @ 2021-09-28T17:24:56-04:00
2021-09-28T17:19:26-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Idea Of You @ 2021-09-28T17:19:25-04:00
2021-09-28T17:19:26-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Idea Of You @ 2021-09-28T17:19:25-04:00
2021-09-28T17:19:26-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Idea Of You @ 2021-09-28T17:19:25-04:00
2021-09-28T17:19:25-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:19:25-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:19:25-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:19:25-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Idea Of You @ 2021-09-28T17:19:25-04:00
2021-09-28T17:19:25-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Idea Of You @ 2021-09-28T17:19:25-04:00
2021-09-28T17:19:25-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Idea Of You @ 2021-09-28T17:19:25-04:00
2021-09-28T17:15:03-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - She @ 2021-09-28T17:15:03-04:00
2021-09-28T17:15:03-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - She @ 2021-09-28T17:15:03-04:00
2021-09-28T17:15:03-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - She @ 2021-09-28T17:15:03-04:00
2021-09-28T17:15:03-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:15:03-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:15:03-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:15:03-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - She @ 2021-09-28T17:15:03-04:00
2021-09-28T17:15:03-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - She @ 2021-09-28T17:15:03-04:00
2021-09-28T17:15:03-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - She @ 2021-09-28T17:15:03-04:00
2021-09-28T17:11:31-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - That Girl Is You @ 2021-09-28T17:11:30-04:00
2021-09-28T17:11:31-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - That Girl Is You @ 2021-09-28T17:11:30-04:00
2021-09-28T17:11:31-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - That Girl Is You @ 2021-09-28T17:11:30-04:00
2021-09-28T17:11:30-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:11:30-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:11:30-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:11:30-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - That Girl Is You @ 2021-09-28T17:11:30-04:00
2021-09-28T17:11:30-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - That Girl Is You @ 2021-09-28T17:11:30-04:00
2021-09-28T17:11:30-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - That Girl Is You @ 2021-09-28T17:11:30-04:00
2021-09-28T17:08:14-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Here On Out @ 2021-09-28T17:08:13-04:00
2021-09-28T17:08:14-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Here On Out @ 2021-09-28T17:08:13-04:00
2021-09-28T17:08:14-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Here On Out @ 2021-09-28T17:08:13-04:00
2021-09-28T17:08:13-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:08:13-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:08:13-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:08:13-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Here On Out @ 2021-09-28T17:08:13-04:00
2021-09-28T17:08:13-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Here On Out @ 2021-09-28T17:08:13-04:00
2021-09-28T17:08:13-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Here On Out @ 2021-09-28T17:08:13-04:00
2021-09-28T17:04:17-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Can't Stop @ 2021-09-28T17:04:16-04:00
2021-09-28T17:04:17-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Can't Stop @ 2021-09-28T17:04:16-04:00
2021-09-28T17:04:17-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Can't Stop @ 2021-09-28T17:04:16-04:00
2021-09-28T17:04:16-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:04:16-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:04:16-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T17:04:16-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Can't Stop @ 2021-09-28T17:04:16-04:00
2021-09-28T17:04:16-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Can't Stop @ 2021-09-28T17:04:16-04:00
2021-09-28T17:04:16-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Can't Stop @ 2021-09-28T17:04:16-04:00
2021-09-28T16:59:37-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T16:59:37-04:00
2021-09-28T16:59:37-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T16:59:37-04:00
2021-09-28T16:59:37-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T16:59:37-04:00
2021-09-28T16:59:37-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:59:37-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:59:37-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:59:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T16:59:37-04:00
2021-09-28T16:59:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T16:59:37-04:00
2021-09-28T16:59:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T16:59:37-04:00
2021-09-28T16:56:24-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - When I'm Weary @ 2021-09-28T16:56:24-04:00
2021-09-28T16:56:24-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - When I'm Weary @ 2021-09-28T16:56:24-04:00
2021-09-28T16:56:24-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - When I'm Weary @ 2021-09-28T16:56:24-04:00
2021-09-28T16:56:24-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:56:24-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:56:24-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:56:24-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - When I'm Weary @ 2021-09-28T16:56:24-04:00
2021-09-28T16:56:24-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - When I'm Weary @ 2021-09-28T16:56:24-04:00
2021-09-28T16:56:24-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - When I'm Weary @ 2021-09-28T16:56:24-04:00
2021-09-28T16:55:22-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"When I'm Weary"}]
2021-09-28T16:55:22-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"When I'm Weary"}]
2021-09-28T16:55:22-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"When I'm Weary"}]
2021-09-28T16:53:10-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Come Tomorrow @ 2021-09-28T16:53:10-04:00
2021-09-28T16:53:10-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Come Tomorrow @ 2021-09-28T16:53:10-04:00
2021-09-28T16:53:10-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Come Tomorrow @ 2021-09-28T16:53:10-04:00
2021-09-28T16:53:10-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:53:10-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:53:10-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:53:10-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Come Tomorrow @ 2021-09-28T16:53:10-04:00
2021-09-28T16:53:10-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Come Tomorrow @ 2021-09-28T16:53:10-04:00
2021-09-28T16:53:10-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Come Tomorrow @ 2021-09-28T16:53:10-04:00
2021-09-28T16:50:36-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come Tomorrow"}]
2021-09-28T16:50:36-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come Tomorrow"}]
2021-09-28T16:50:36-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come Tomorrow"}]
2021-09-28T16:48:38-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Do You Remember @ 2021-09-28T16:48:37-04:00
2021-09-28T16:48:38-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Do You Remember @ 2021-09-28T16:48:37-04:00
2021-09-28T16:48:38-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Do You Remember @ 2021-09-28T16:48:37-04:00
2021-09-28T16:48:37-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:48:37-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:48:37-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:48:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Do You Remember @ 2021-09-28T16:48:37-04:00
2021-09-28T16:48:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Do You Remember @ 2021-09-28T16:48:37-04:00
2021-09-28T16:48:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Do You Remember @ 2021-09-28T16:48:37-04:00
2021-09-28T16:46:19-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Do You Remember"}]
2021-09-28T16:46:19-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Do You Remember"}]
2021-09-28T16:46:19-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Do You Remember"}]
2021-09-28T16:44:35-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:44:35-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:44:35-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:14:34-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:14:34-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:14:34-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:06:32-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:06:32-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:06:32-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T16:06:13-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Come On Come On @ 2021-09-28T16:06:12-04:00
2021-09-28T16:06:13-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Come On Come On @ 2021-09-28T16:06:12-04:00
2021-09-28T16:06:13-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Come On Come On @ 2021-09-28T16:06:12-04:00
2021-09-28T16:06:12-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:06:12-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:06:12-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:06:12-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Come On Come On @ 2021-09-28T16:06:12-04:00
2021-09-28T16:06:12-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Come On Come On @ 2021-09-28T16:06:12-04:00
2021-09-28T16:06:12-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Come On Come On @ 2021-09-28T16:06:12-04:00
2021-09-28T16:01:52-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Black And Blue Bird @ 2021-09-28T16:01:52-04:00
2021-09-28T16:01:52-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Black And Blue Bird @ 2021-09-28T16:01:52-04:00
2021-09-28T16:01:52-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Black And Blue Bird @ 2021-09-28T16:01:52-04:00
2021-09-28T16:01:52-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:01:52-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:01:52-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T16:01:52-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Black And Blue Bird @ 2021-09-28T16:01:52-04:00
2021-09-28T16:01:52-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Black And Blue Bird @ 2021-09-28T16:01:52-04:00
2021-09-28T16:01:52-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Black And Blue Bird @ 2021-09-28T16:01:52-04:00
2021-09-28T15:58:56-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:58:56-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:58:56-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:58:56-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.pause) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:57:31-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:57:31-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:57:31-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:57:31-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Come On Come On"}]
2021-09-28T15:55:46-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Black And Blue Bird"}]
2021-09-28T15:55:46-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Black And Blue Bird"}]
2021-09-28T15:55:45-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Black And Blue Bird @ 2021-09-28T15:55:45-04:00
2021-09-28T15:55:45-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Black And Blue Bird @ 2021-09-28T15:55:45-04:00
2021-09-28T15:55:45-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T15:55:45-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T15:55:45-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Black And Blue Bird @ 2021-09-28T15:55:45-04:00
2021-09-28T15:55:45-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Black And Blue Bird @ 2021-09-28T15:55:45-04:00
2021-09-28T15:53:57-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Black And Blue Bird"}]
2021-09-28T15:53:57-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Black And Blue Bird"}]
2021-09-28T15:53:57-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Black And Blue Bird"}]
2021-09-28T15:53:57-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Black And Blue Bird"}]
2021-09-28T15:53:29-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Bkdkdkdd"}]
2021-09-28T15:53:29-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Bkdkdkdd"}]
2021-09-28T15:53:29-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Bkdkdkdd"}]
2021-09-28T15:53:29-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Bkdkdkdd"}]
2021-09-28T15:51:25-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Again and Again"}]
2021-09-28T15:51:25-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Again and Again"}]
2021-09-28T15:51:24-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Again and Again @ 2021-09-28T15:51:24-04:00
2021-09-28T15:51:24-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Again and Again @ 2021-09-28T15:51:24-04:00
2021-09-28T15:51:24-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T15:51:24-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T15:51:24-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Again and Again @ 2021-09-28T15:51:24-04:00
2021-09-28T15:51:24-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Again and Again @ 2021-09-28T15:51:24-04:00
2021-09-28T15:49:04-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Again and Again"}]
2021-09-28T15:49:04-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Again and Again"}]
2021-09-28T15:49:04-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Again and Again"}]
2021-09-28T15:49:04-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.play) [{"artists":["Dave Matthews Band"],"track":"Again and Again"}]
2021-09-28T15:46:16-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T15:46:16-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Virginia In The Rain"}]
2021-09-28T15:46:15-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Virginia In The Rain @ 2021-09-28T15:46:13-04:00
2021-09-28T15:46:15-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Virginia In The Rain @ 2021-09-28T15:46:13-04:00
2021-09-28T15:46:13-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T15:46:13-04:00 debug : [Client Lastfm - FrankLFM ] Refreshing recent scrobbles
2021-09-28T15:46:13-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Virginia In The Rain @ 2021-09-28T15:46:13-04:00
2021-09-28T15:46:13-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Virginia In The Rain @ 2021-09-28T15:46:13-04:00
2021-09-28T15:39:18-04:00 info : [App ] Server started at http://localhost:9078
2021-09-28T15:39:18-04:00 info : [App ] Server started at http://localhost:9078
2021-09-28T15:39:18-04:00 info : [Sources ] (partyPlex) plex source initialized
2021-09-28T15:39:18-04:00 info : [Sources ] (partyPlex) plex source initialized
2021-09-28T15:39:18-04:00 info : [Source - Plex - partyPlex] Initializing with the following filters => Users: jukebox | Libraries: N/A | Servers: N/A
2021-09-28T15:39:18-04:00 info : [Source - Plex - partyPlex] Initializing with the following filters => Users: jukebox | Libraries: N/A | Servers: N/A
2021-09-28T15:39:18-04:00 info : [Sources ] (FrankPlex) plex source initialized
2021-09-28T15:39:18-04:00 info : [Sources ] (FrankPlex) plex source initialized
2021-09-28T15:39:18-04:00 info : [Source - Plex - FrankPlex] Initializing with the following filters => Users: frank | Libraries: N/A | Servers: N/A
2021-09-28T15:39:18-04:00 info : [Source - Plex - FrankPlex] Initializing with the following filters => Users: frank | Libraries: N/A | Servers: N/A
2021-09-28T15:39:18-04:00 warn : [Scrobblers ] (FrankLFM) lastfm client auth OK
2021-09-28T15:39:18-04:00 warn : [Scrobblers ] (FrankLFM) lastfm client auth OK
2021-09-28T15:39:18-04:00 info : [API - Lastfm - FrankLFM] Client authorized for user Syco54645
2021-09-28T15:39:18-04:00 info : [API - Lastfm - FrankLFM] Client authorized for user Syco54645
2021-09-28T15:36:04-04:00 debug : [Source - Plex - partyPlex] Will not scrobble event because author was not an allowed user: Frank [{"artists":["Dave Matthews Band"],"track":"Idea Of You"}]
2021-09-28T15:36:04-04:00 debug : [Source - Plex - FrankPlex] Will not scrobble event because it is not media.scrobble (media.stop) [{"artists":["Dave Matthews Band"],"track":"Idea Of You"}]
2021-09-28T15:26:49-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Idea Of You @ 2021-09-28T15:26:49-04:00
2021-09-28T15:26:49-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Idea Of You @ 2021-09-28T15:26:49-04:00
2021-09-28T15:22:27-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - She @ 2021-09-28T15:22:27-04:00
2021-09-28T15:22:27-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - She @ 2021-09-28T15:22:27-04:00
2021-09-28T15:15:37-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Here On Out @ 2021-09-28T15:15:37-04:00
2021-09-28T15:15:37-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Here On Out @ 2021-09-28T15:15:37-04:00
2021-09-28T15:11:36-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Can't Stop @ 2021-09-28T15:11:36-04:00
2021-09-28T15:11:36-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Can't Stop @ 2021-09-28T15:11:36-04:00
2021-09-28T15:05:32-04:00 info : [Client Lastfm - FrankLFM ] Scrobbled (New) => (Plex) Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T15:05:31-04:00
2021-09-28T15:05:31-04:00 info : [Source - Plex - FrankPlex] New Track => Dave Matthews Band - Samurai Cop (Oh Joy Begin) @ 2021-09-28T15:05:31-04:00
2021-09-28T14:55:57-04:00 info : [App ] Server started at http://localhost:9078
2021-09-28T14:55:57-04:00 info : [Sources ] (partyPlex) plex source initialized
2021-09-28T14:55:57-04:00 info : [Source - Plex - partyPlex] Initializing with the following filters => Users: jukebox | Libraries: N/A | Servers: N/A
2021-09-28T14:55:57-04:00 info : [Sources ] (FrankPlex) plex source initialized
2021-09-28T14:55:57-04:00 info : [Source - Plex - FrankPlex] Initializing with the following filters => Users: frank | Libraries: N/A | Servers: N/A
2021-09-28T14:55:57-04:00 warn : [Scrobblers ] (FrankLFM) lastfm client auth OK
2021-09-28T14:55:57-04:00 info : [API - Lastfm - FrankLFM] Client authorized for user Syco54645
2021-09-28T14:55:57-04:00 info : [Scrobblers] (FrankLFM) lastfm client initialized

Feature: Emby Webhook Integration

  • Find reference for Emby's Webhook to scrobble now playing (or scrobble??) events payload ๐Ÿค”
  • Implement parsing a request from the webhook
  • Implement filtering by user(s) -- should be similar to plex

[Docker] Error using Jellyfin as source

Environment: Docker
Version: release-0.3.7
When setting up Jellyfin as a source, the container stops and logs show this error:

2021-07-01T21:01:20+00:00 warn   : [App] No scrobble clients were configured!
2021-07-01T21:01:20+00:00 error  : [App    ] Exited with uncaught error
2021-07-01T21:01:20+00:00 error  : [App    ] ReferenceError: user is not defined
    at new JellyfinSource (file://CWD/sources/JellyfinSource.js:14:36)
    at ScrobbleSources.addSource (file://CWD/sources/ScrobbleSources.js:259:46)
    at ScrobbleSources.buildSourcesFromConfig (file://CWD/sources/ScrobbleSources.js:220:32)
    at async file://CWD/index.js:150:9

My config file is this one:

{
  "sourceDefaults": {
    "maxPollRetries": 0,
    "maxRequestRetries": 1,
    "retryMultiplier": 1.5
  },
  "clientDefaults": {
    "maxRequestRetries": 1,
    "retryMultiplier": 1.5
  },
  "sources": [
    {
      "type": "jellyfin",
      "name": "Jellyfin",
      "clients": [],
      "data": {       
        "users": ["jellyfinuser"],
        "servers": ["http://serverip:8096/"]
      }
    }
  ]
}

However, if I setup my config changing the "users" fields to "user", the container starts successfully and keeps running, and the logs now show:

2021-07-01T21:42:40+00:00 warn   : [App] No scrobble clients were configured!
2021-07-01T21:42:40+00:00 info   : [Jellyfin - Jellyfin] Initializing with the following filters => Users: N/A | Servers: http://serverip:8096/
2021-07-01T21:42:40+00:00 info   : [Sources            ] (Jellyfin) jellyfin source initialized
2021-07-01T21:42:40+00:00 info   : [App                ] Server started at http://serverip:9078

If i try and play some music from my Jellyfin server with the changes made to the config, the logs constantly show:

 [Jellyfin - Jellyfin] Will not scrobble event because server was not on allowed list: Jellyfin Server [{"artists":["<artistname>"],"track":"<trackname>"}]

ARM docker image builds

Are you interested in ARM builds? I've implemented those for maloja and it looks like you have almost the same actions file so it should be piece of cake to implement it into your workflow as well.

Last.fm auth not working

I posted this on the unraid forum but will post here as well for better visibility.

Trying to get this setup and working and having issues with the last.fm client. It is telling me "Status: Auth Interaction Required". When I click the link to (re)authenticate or initialize I get various forms of failure. I have created an API key and put the values in to the config.json. I am unsure of how it should function when I get passed to lastfm and then back to the server http://tower.local:9078//lastfm/callback?state=FrankLFM&token=XXXXXXXXXXXX

At this point the page says OK and that is it. Heading back to the application it still says that last.fm is not authenticated. Any idea what I am missing?

2021-09-28T09:33:10-04:00 info : [App ] Server started at http://localhost:9078
2021-09-28T09:33:10-04:00 info : [Sources ] (partyPlex) plex source initialized
2021-09-28T09:33:10-04:00 info : [Source - Plex - partyPlex] Initializing with the following filters => Users: N/A | Libraries: party | Servers: N/A
2021-09-28T09:33:10-04:00 info : [Sources ] (FrankPlex) plex source initialized
2021-09-28T09:33:10-04:00 info : [Source - Plex - FrankPlex] Initializing with the following filters => Users: frank | Libraries: N/A | Servers: N/A
2021-09-28T09:33:10-04:00 warn : [Scrobblers ] (FrankLFM) lastfm client auth failed.
2021-09-28T09:33:10-04:00 error : [Client Lastfm - FrankLFM] Error: Invalid session key - Please re-authenticate
at CWD/node_modules/lastfm-node-client/lib/ApiRequest.js:136:11 at processTicksAndRejections (internal/process/task_queues.js:95:5) at async LastfmApiClient.callApi (file://CWD/apis/LastfmApiClient.js:84:20) at async LastfmApiClient.testAuth (file://CWD/apis/LastfmApiClient.js:148:30) at async LastfmScrobbler.testAuth (file://CWD/clients/LastfmScrobbler.js:34:27) at async ScrobbleClients.addClient (file://CWD/clients/ScrobbleClients.js:240:27) at async ScrobbleClients.buildClientsFromConfig (file://CWD/clients/ScrobbleClients.js:195:17) at async file://CWD/index.js:128:9 2021-09-28T09:33:10-04:00 error : [Client Lastfm - FrankLFM] Could not successfully communicate with Last.fm API
2021-09-28T09:33:10-04:00 error : [API - Lastfm - FrankLFM] Testing auth failed
2021-09-28T09:33:10-04:00 info : [Scrobblers] (FrankLFM) lastfm client initialized

BUG: No scrobbling when using Spotify connect

Due to a seeming bug at Spotify, it is (currently?) not possible to get songs via the recently-played api endpoint, which were played via Spotify connect. The endpoint currently-playing shows the correct song though.

Is there a way to include this as a fallback?

Greetings

Maloja status: "Awaiting Data"

Hi,

I'm trying to connect this to Maloja. According to the logs the test connection to Maloja succeeded, yet its status is "Awaiting Data". I'm assuming this is because I have to put Multi-Scrobbler's API in authenticated_machines.tsv file, but where can I find the API? I must be missing something obvious but I can't seem to find it anywhere.

Thank you.

Scrobbling from Jellyfin via Webhook Plugin not working

At first i want to say: Thank you for your work on multiscrobbler, its working very well for me using spotify as a source and maloja as a client.

I have some problems getting scrobbling from jellyfin to work.

As far as i can tell i have configured everything correctly.

Config json for multiscrobbler looks like this:

{
      "type": "jellyfin",
      "name": "jellyfin_karsten",
      "clients": [],
      "data": {
        "users": ["mrmori"],
        "servers": ["karsten-B450-AORUS-PRO"]
      }

For the generic webhook i checked the boxes necessary and webhook url is http://192.168.178.81:9078/jellyfin

When i play a song i get the following error in the jellyfin logs:

[2022-12-28 09:25:07.615 +00:00] [WRN] [32] Jellyfin.Plugin.Webhook.Destinations.Generic.GenericClient: Notification failed with "POST" request to http://192.168.178.81:9078/jellyfin: "{\"ServerId\":\"db8f7e68bbd94fcc8976021c8bab496c\",\"ServerName\":\"karsten-B450-AORUS-PRO\",\"ServerVersion\":\"10.8.8\",\"ServerUrl\":\"http://192.168.178.47:8096\",\"NotificationType\":\"PlaybackProgress\",\"Timestamp\":\"2022-12-28T09:25:07.6021148+00:00\",\"UtcTimestamp\":\"2022-12-28T09:25:07.6021156Z\",\"Name\":\"The Escape\",\"Overview\":\"\",\"Tagline\":\"\",\"ItemId\":\"1be79aa1d0ed256d5c29202d6d4fbe5f\",\"ItemType\":\"Audio\",\"RunTimeTicks\":1090266624,\"RunTime\":\"00:01:49\",\"Year\":2018,\"Album\":\"Ni no Kuni II : Revenant Kingdom\",\"Artist\":\"Joe Hisaishi\",\"Audio_0_Title\":\"FLAC - Stereo\",\"Audio_0_Type\":\"Audio\",\"Audio_0_Language\":null,\"Audio_0_Codec\":\"flac\",\"Audio_0_Channels\":2,\"Audio_0_Bitrate\":660544,\"Audio_0_SampleRate\":44100,\"Audio_0_Default\":false,\"PlaybackPositionTicks\":10075660,\"PlaybackPosition\":\"00:00:01\",\"MediaSourceId\":\"1be79aa1d0ed256d5c29202d6d4fbe5f\",\"IsPaused\":false,\"IsAutomated\":true,\"DeviceId\":\"TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNC4wLjAuMCBTYWZhcmkvNTM3LjM2fDE2NjA4MTY5NzM0MjI1\",\"DeviceName\":\"Chrome\",\"ClientName\":\"Jellyfin Web\",\"NotificationUsername\":\"mrmori\",\"UserId\":\"d2e36d21fdca4beeb115ce6570afb754\"}"
[2022-12-28 09:25:07.615 +00:00] [WRN] [32] Jellyfin.Plugin.Webhook.Destinations.Generic.GenericClient: Notification failed with response status code InternalServerError: "<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"utf-8\">
<title>Error</title>
</head>
<body>
<pre>ReferenceError: hint is not defined<br> &nbsp; &nbsp;at JellyfinSource.isValidEvent (file:///home/node/app/sources/JellyfinSource.js:100:92)<br> &nbsp; &nbsp;at JellyfinSource.handle (file:///home/node/app/sources/JellyfinSource.js:142:19)<br> &nbsp; &nbsp;at file:///home/node/app/index.js:309:30<br> &nbsp; &nbsp;at wrappedMiddleware (/home/node/app/node_modules/@awaitjs/express/index.js:116:13)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/home/node/app/node_modules/express/lib/router/layer.js:95:5)<br> &nbsp; &nbsp;at next (/home/node/app/node_modules/express/lib/router/route.js:137:13)<br> &nbsp; &nbsp;at /home/node/app/node_modules/@awaitjs/express/index.js:131:8<br> &nbsp; &nbsp;at /home/node/app/node_modules/body-parser/lib/read.js:130:5<br> &nbsp; &nbsp;at invokeCallback (/home/node/app/node_modules/raw-body/index.js:224:16)<br> &nbsp; &nbsp;at done (/home/node/app/node_modules/raw-body/index.js:213:7)</pre>
</body>
</html>
"
[2022-12-28 09:25:07.615 +00:00] [ERR] [32] Jellyfin.Plugin.Webhook.WebhookSender: Unable to send notification
System.Text.Json.JsonException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
 ---> System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.
   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
   at System.Text.Json.Utf8JsonReader.Read()
   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
   --- End of inner exception stack trace ---
   at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex)
   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
   at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan`1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable`1 actualByteCount)
   at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan`1 json, JsonTypeInfo jsonTypeInfo)
   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
   at Jellyfin.Plugin.Webhook.Destinations.GenericForm.GenericFormClient.SendAsync(GenericFormOption option, Dictionary`2 data)
   at Jellyfin.Plugin.Webhook.WebhookSender.SendNotification[T](IWebhookClient`1 webhookClient, T option, Dictionary`2 itemData, Type itemType)

Jellyfin Server version: 10.8.8
Maloja Version: 3.1.4
Multiscrobbler Version: 0.3.11

I am not sure how to interpret the error message, do you have any insights on this?

Thank you in advance!

Last.fm issue

Hey there FoxxMD

I just added last.fm as a client and started noticing an error with uts/date which was stopping it from scrobbling.

https://github.com/FoxxMD/multi-scrobbler/blob/master/clients/LastfmScrobbler.js#L56

TypeError: Cannot read property 'uts' of undefined
    at Function.formatPlayObj (file://CWD/clients/LastfmScrobbler.js:57:22)
    at file://CWD/clients/LastfmScrobbler.js:169:66
    at Array.map (<anonymous>)
    at LastfmScrobbler.refreshScrobbles (file://CWD/clients/LastfmScrobbler.js:169:41)
    at processTicksAndRejections (node:internal/process/task_queues:94:5)
    at async ScrobbleClients.scrobble (file://CWD/clients/ScrobbleClients.js:242:25)
    at async SubsonicSource.doPolling (file://CWD/sources/AbstractSource.js:140:40)
    at async SubsonicSource.startPolling (file://CWD/sources/AbstractSource.js:57:17)
    at async SubsonicSource.poll (file://CWD/sources/AbstractSource.js:40:9)

After looking around in the LastfmScrobbler file I could see that the destructure happening at the top of the file doesnt contain

  date: {
      uts: time,
  },

Which seems to cause it to throw an error. I started to mess around with this but wanted to check in with you if you knew about this or if it is a setting/api that I havent set up correctly

The object being returned currently is

{
  artist: {
    mbid: '0fb7d725-4dfd-45d2-944c-6ffa375a142d',
    '#text': 'And So I Watch You From Afar'
  },
  '@attr': { nowplaying: 'true' },
  mbid: '3541c2c9-3b93-4ecf-b359-607de96ae610',
  album: {
    mbid: 'a219c4d9-c56e-47d1-aa35-f34dbb2eb631',
    '#text': 'The Endless Shimmering'
  },
  streamable: '0',
  url: 'https://www.last.fm/music/And+So+I+Watch+You+From+Afar/_/Dying+Giants',
  name: 'Dying Giants',
  image: [
    {
      size: 'small',
      '#text': 'https://lastfm.freetls.fastly.net/i/u/34s/e7ae87a15f9f64aba56cc2709a6fb8f8.jpg'
    },
    {
      size: 'medium',
      '#text': 'https://lastfm.freetls.fastly.net/i/u/64s/e7ae87a15f9f64aba56cc2709a6fb8f8.jpg'
    },
    {
      size: 'large',
      '#text': 'https://lastfm.freetls.fastly.net/i/u/174s/e7ae87a15f9f64aba56cc2709a6fb8f8.jpg'
    },
    {
      size: 'extralarge',
      '#text': 'https://lastfm.freetls.fastly.net/i/u/300x300/e7ae87a15f9f64aba56cc2709a6fb8f8.jpg'
    }
  ]
}

Thanks

Access dashboard on server

I have the docker image installed on my headless server (via docker-compose). I can't reach the dashboard when I try to remotely access http://servername:9078 (rather than http://localhost:9078). I've tried looking through the docs for a setting to allow for reaching the dashboard from another machine, but I can't find anything?

A few things on the documentation

1) Docker run example mistake?

In the docker run example, it shows following:

docker run -e "SPOTIFY_CLIENT_ID=yourId" -e "SPOTIFY_CLIENT_SECRET=yourSecret" -e "MALOJA_URL=http://domain.tld" -e "MALOJA_API_KEY=1234" -v /path/on/host/config:/home/node/app/config foxxmd/multi-scrobbler

When I finished my setup and connected via spotify, I noticed that there was a docker volume that was created automatically by multiscrobbler to have /home/node/config mounted inside the container, in which an actual personal configuration (currentCreds-unnamed.json) is saved, whereas the directory shown in the docker run command above /home/node/app/config just holds the json examples from here.
Is the docker run command by any chance using the wrong path and it should be /home/node/config?
At least looking at configuration.md seems to confirm what I think.

2 Unifying environment variables

Regarding the Environment variables of LOG_PATH and CONFIG_DIR, I wanted to just point out, that they could be unified in naming, since they are both directories / paths. (LOG_PATH & CONFIG_PATH or LOG_DIR & CONFIG_DIR ). This could be easily done by just adding another environment variable while still being backward compatible.

3 Automatic docker volume creation is not mentioned

When no bind mount or volume is set for the log and config directory, the container is creating them automatically, maybe this could be mentioned also (at least this was the case for me). I think it would be good to mention this, since otherwise some people will wonder at some point why they have some docker volumes suddenly.

4) Docker compose

Talking about the README.md, it would be also cool to include a docker-compose.yaml. A lot of people use those to run containers. For example something like this.

  multi-scrobbler:
    image: foxxmd/multi-scrobbler
    container_name: multi-scrobbler
    environment:
      - TZ=Eurrope/London
      - SPOTIFY_CLIENT_ID=
      - SPOTIFY_CLIENT_SECRET=
      - SPOTIFY_REDIRECT_URI=http://multi-scrobbler-host-IP:9078/callback ## Need to be whitelisted in Spotify dashboard and is used for creating the connection first time
      - MALOJA_URL=http://maloja:42010
      - MALOJA_API_KEY=
      - PORT=9078 # optional
      - CONFIG_DIR=/home/node/config #optional
      - LOG_PATH=/home/node/logs # optional 
    volumes:
       - /path_on_host/multi-scrobbler-config:/home/node/config
    #networks:
    #  - (optional to add container to the same bridge network that maloja is inside to be able to use docker internal networking & dns to resolve and connect to maloja URL via http://maloja:port)
    ports:
      - 9078:9078
    restart: unless-stopped

5) Add Timezon (TZ) to environment variables

Just adding it to the documentation would probably be helpful to some, so that they know it can be used to set the correct timezone for their multi-scrobbler container. Otherwise the logs show the wrong time.

Tautulli -> Last.fm always fail on error code 1

When I scrobble anything from tautulli to last.fm it fails. Does that happen to anyone else?

I don't have any issues with maloja. I don't think it is about the song / artist... It actually doesn't matter what I listen to on my plex (tautulli).

It's funny that the doc says the error code doesn't exist ๐Ÿ™„ 1 : This error does not exist

2022-04-27T21:45:54+00:00 warn : [Client Lastfm - northys_cz ] Service ignored this scrobble ๐Ÿ˜ฌ => (Code 1) (No error message returned) -- See https://www.last.fm/api/errorcodes for more information
2022-04-27T21:45:54+00:00 info : [Client Lastfm - northys_cz ] Scrobbled (New) => (Tautulli) RUNAWAY MY SON - NO FEAR @ 2022-04-27T21:45:51+00:00
2022-04-27T21:45:53+00:00 info : [Client Maloja - northys ] Scrobbled (New) => (Tautulli) RUNAWAY MY SON - NO FEAR @ 2022-04-27T21:45:51+00:00
2022-04-27T21:45:51+00:00 info : [Source - Tautulli - northys] New Track => RUNAWAY MY SON - NO FEAR @ 2022-04-27T21:45:51+00:00

// there is not a problem with SPOTIFY :(

2022-04-27T19:34:48+00:00 info : [Client Lastfm - northys_cz ] Scrobbled (New) => (Spotify) John Williams - Theme From Jurassic Park @ 2022-04-27T19:32:32+00:00
2022-04-27T19:34:48+00:00 info : [Client Maloja - northys ] Scrobbled (New) => (Spotify) John Williams - Theme From Jurassic Park @ 2022-04-27T19:32:32+00:00
2022-04-27T19:34:45+00:00 info : [Source - Spotify - northys ] New Track => John Williams - Theme From Jurassic Park @ 2022-04-27T19:32:32+00:00

This particular song exist on last.fm and I scrobbled it many times when I was younger.

Screenshot from 2022-04-27 23-51-07

Is there some kind of name normalization?

I've listened to song PIG something song and it got scrobbled as Pig to both maloja and last.fm. Do you normalize scrobbles somehow?

In log I can see PIG and maloja author says he doesn't normalize song names but he keeps the first scrobbled name. I listened to same song by same artist 4 times and in spotify it is called PIG.

In last.fm I can also see Pig. This is not a big deal for me actually - I just wonder where this normalization happens :)

Screenshot from 2022-04-27 17-28-42

2022-04-27T14:53:58+00:00 info : [Client Lastfm - northys_cz ] Scrobbled (New) => (Spotify) PIG - Prey & Obey @ 2022-04-27T14:52:52+00:00
2022-04-27T14:53:57+00:00 debug : [Client Lastfm - northys_cz ] Refreshing recent scrobbles
2022-04-27T14:53:57+00:00 info : [Client Maloja - northys ] Scrobbled (New) => (Spotify) PIG - Prey & Obey @ 2022-04-27T14:52:52+00:00
2022-04-27T14:53:54+00:00 debug : [Client Maloja - northys ] Refreshing recent scrobbles
2022-04-27T14:53:54+00:00 info : [Source - Spotify - northys ] New Track => PIG - Prey & Obey @ 2022-04-27T14:52:52+00:00
2022-04-27T14:53:54+00:00 debug : [Source - Spotify - northys ] Refreshing recently played

Screenshot from 2022-04-27 17-29-50

Jellyfin ReferenceError

I'm currently getting this error every time the webhook sends a request to the scrobbler.

scrobbler    | ReferenceError: hint is not defined
scrobbler    |     at JellyfinSource.isValidEvent (file:///home/node/app/sources/JellyfinSource.js:100:92)
scrobbler    |     at JellyfinSource.handle (file:///home/node/app/sources/JellyfinSource.js:142:19)
scrobbler    |     at file:///home/node/app/index.js:309:30
scrobbler    |     at wrappedMiddleware (/home/node/app/node_modules/@awaitjs/express/index.js:116:13)
scrobbler    |     at Layer.handle [as handle_request] (/home/node/app/node_modules/express/lib/router/layer.js:95:5)
scrobbler    |     at next (/home/node/app/node_modules/express/lib/router/route.js:137:13)
scrobbler    |     at /home/node/app/node_modules/@awaitjs/express/index.js:131:8
scrobbler    |     at /home/node/app/node_modules/body-parser/lib/read.js:130:5
scrobbler    |     at invokeCallback (/home/node/app/node_modules/raw-body/index.js:224:16)
scrobbler    |     at done (/home/node/app/node_modules/raw-body/index.js:213:7)

I'm running everything in Docker. Jellyfin Version 10.8.7 and whatever the currrently latest webhook plugin is.

Both the source and client are on Awaiting Data and lastfm is fully authenticated.

My config is currently looking like this

{
   "sourceDefaults":{
      "maxPollRetries":0,
      "maxRequestRetries":1,
      "retryMultiplier":1.5
   },
   "clientDefaults":{
      "maxRequestRetries":1,
      "retryMultiplier":1.5
   },
   "sources":[
      {
         "type":"jellyfin",
         "name":"JF-Alex",
         "clients":[
            "lastfm-alex"
         ],
         "data":{
            "users":[
               "Alex"
            ]
         }
      }
   ],
   "clients":[
      {
         "type":"lastfm",
         "name":"lastfm-alex",
         "data":{
            "apiKey":"...",
            "secret":"...",
            "redirectUri":"..."
         }
      }
   ]
}

Jellyfin Webhook post error

The post request from jellyfin webhook failed with response status code InternalServerError. The error message is

TypeError: Cannot read property 'split' of undefined
    at Function.formatPlayObj (file:///home/node/app/sources/JellyfinSource.js:60:39)
    at file:///home/node/app/index.js:306:44
    at wrappedMiddleware (/home/node/app/node_modules/@awaitjs/express/index.js:116:13)
    at Layer.handle [as handle_request] (/home/node/app/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/node/app/node_modules/express/lib/router/route.js:137:13)
    at /home/node/app/node_modules/@awaitjs/express/index.js:131:8
    at wrappedMiddleware (/home/node/app/node_modules/@awaitjs/express/index.js:117:32)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

I guess it is because jellyfin posted a null Runtime, but I checked the post data, it was not the case.

[2023-01-14 20:27:31.965 +00:00] [WRN] [33] Jellyfin.Plugin.Webhook.Destinations.Generic.GenericClient: Notification failed with "POST" request to http://localhost:5879/jellyfin: "

{
    "ServerId": "c2957a8cee7841a1bf651916c38adeb5",
    "ServerName": "14535f67514f",
    "ServerVersion": "10.8.4",
    "ServerUrl": "",
    "NotificationType": "PlaybackProgress",
    "Timestamp": "2023-01-14T20:27:31.9570112+00:00",
    "UtcTimestamp": "2023-01-14T20:27:31.9570129Z",
    "Name": "\u795E\u6811",
    "Overview": "",
    "Tagline": "",
    "ItemId": "691a205da91791e42865dfdfda0d4600",
    "ItemType": "Audio",
    "RunTimeTicks": 3188640000,
    "RunTime": "00:05:18",
    "Year": 2020,
    "Album": "\u65B0\u4E16\u754CNEW WORLD",
    "Artist": "\u534E\u6668\u5B87",
    "Provider_musicbrainzalbumartist": "f3dcdc3c-3714-4ffb-b44a-a18632c4c630",
    "Provider_musicbrainzartist": "f3dcdc3c-3714-4ffb-b44a-a18632c4c630",
    "Provider_musicbrainzalbum": "3043d071-c8bc-412f-a483-d11169ec60e9",
    "Provider_musicbrainzreleasegroup": "52f83f60-fc39-45dd-8e82-f9b868888c98",
    "Provider_musicbrainztrack": "5e5f2e89-53c5-4b20-9053-03099e7b332a",
    "Audio_0_Title": "MP3 - Stereo",
    "Audio_0_Type": "Audio",
    "Audio_0_Language": null,
    "Audio_0_Codec": "mp3",
    "Audio_0_Channels": 2,
    "Audio_0_Bitrate": 320000,
    "Audio_0_SampleRate": 48000,
    "Audio_0_Default": false,
    "PlaybackPositionTicks": 962868310,
    "PlaybackPosition": "00:01:36",
    "MediaSourceId": "691a205da91791e42865dfdfda0d4600",
    "IsPaused": false,
    "IsAutomated": true,
    "DeviceId": "TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNS4wLjAuMCBTYWZhcmkvNTM3LjM2fDE2NjQxODM3MTI4OTU1",
    "DeviceName": "Chrome",
    "ClientName": "Jellyfin Web",
    "NotificationUsername": "myname",
    "UserId": "myid"
}

maloja 3.0.2 connection problem

Hello, after recent maloja upgrade to 3.0.2 I see error:

2022-04-13T20:18:05+02:00 error : [Scrobblers ] TypeError: Cannot read property 'reduce' of undefined
at Function.formatPlayObj (file://CWD/clients/MalojaScrobbler.js:42:37) at file://CWD/clients/MalojaScrobbler.js:257:66 at Array.map () at MalojaScrobbler.refreshScrobbles (file://CWD/clients/MalojaScrobbler.js:257:41) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async ScrobbleClients.scrobble (file://CWD/clients/ScrobbleClients.js:300:21) at async SpotifySource.doPolling (file://CWD/sources/AbstractSource.js:168:38) at async SpotifySource.startPolling (file://CWD/sources/AbstractSource.js:78:17) at async SpotifySource.poll (file://CWD/sources/SpotifySource.js:252:9) 2022-04-13T20:18:05+02:00 error : [Scrobblers ] Encountered error while refreshing scrobbles for Maloja

Feature: Parse and Scrobble older music

This is related to Spotify in particular; not sure if other platforms support it.

I see that you are able to see a history of previous trackers. I was wondering if there was a way to scrobble all previous history (that's possible, including API delays if possible) and then push to Maloja, for example

Instructions Unclear, Built A Table.

Wanted to test it out, but had to come all the way to the Git hub to learn how to configure it. You have sample configs on the github, would it be possible to include those when installing in Unraid? Because right now all the appdata folders are empty, including the samples you already had created would be helpful.

BUG: Cannot authenticate Last.FM as Server

Using the latest Version. How did it happen:
I set up my configuration file like the following:
image

So far everything seems to work:
image

But after i hit the authentication-button (lastfm authentification window), an error gets thrown:
image

Error on startup on Unraid

I set the variables in the docker template for Plex and Maloja, but when starting the docker I get this error in the log:

2020-11-21T09:46:12+01:00 [App] info: No config file or could not be read (normal if using ENV vars only)
2020-11-21T09:46:12+01:00 [App] warn: Current spotify access token was not parsable or file does not exist (this could be normal)
2020-11-21T09:46:12+01:00 [App] warn: No spotify config file or could not be read (normal if using ENV vars only)
(node:1) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'accessToken' of undefined
at SpotifySource.buildSpotifyApi (file:///home/node/app/sources/SpotifySource.js:82:13)
at async file:///home/node/app/index.js:115:9
(Use `node --trace-warnings ...` to show where the warning was created)

(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

(node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

cannot connect to maloja using >=0.3.10

When I upgrade to latest which is 0.3.10 I cannot authenticate maloja - nothing changed according to changelog on both sides, I'm using latest tag for maloja and multi-scrobbler but 0.3.10 gives error and can't connect to maloja - using 0.3.9 solves issue.

Errors Scrobbling to Maloja

I am unable to scrobble to Maloja. I am playing from Spotify and scrobbling to Maloja. I get errors like this each time, and I can't seem to track down the issue:

2022-12-01T14:34:27-05:00 error : [Scrobblers ] TypeError: Cannot read property 'album' of undefined
at MalojaScrobbler.scrobble (file://CWD/clients/MalojaScrobbler.js:526:32) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async ScrobbleClients.scrobble (file://CWD/clients/ScrobbleClients.js:314:25) at async SpotifySource.doPolling (file://CWD/sources/AbstractSource.js:168:38) at async SpotifySource.startPolling (file://CWD/sources/AbstractSource.js:78:17) at async SpotifySource.poll (file://CWD/sources/SpotifySource.js:252:9) 2022-12-01T14:34:27-05:00 error : [Scrobblers ] Encountered error while in scrobble loop for unnamed
2022-12-01T14:34:27-05:00 error : [Client Maloja - unnamed ] Scrobble Error (Backlog) [{"payload":{"album":"The Essential Mary Chapin Carpenter","artists":["Mary Chapin Carpenter"],"key":"jYFmc7ZhSWsnNC4gUqtEuRNIxEJk2RrHcPbxfN5QgDsO5384mNWCv5TGYgFz5uKA","length":201.893,"time":1669922982,"title":"Down at the Twist and Shout"},"playInfo":"Mary Chapin Carpenter - Down at the Twist and Shout @ 2022-12-01T14:29:42-05:00"}]

I am running this on Unraid 6.11, fwiw.

Feature: Jellyfin 10.7 API Integration

The backend is similar to emby but I'm unsure how much the API might be different now.

If this is implemented I would refer to the 10.7 release of Jellyfin (docker image currently labeled as stable-rc).

Trouble initializing last.fm connection

Hello,

I have the following output when launching multi-scrobbler:

2023-01-09T19:10:08-08:00 info   : [Scrobblers] (myLastFm) lastfm client initialized
2023-01-09T19:10:08-08:00 info   : [API - Lastfm - myLastFm] No session key found. User interaction for authentication required.
2023-01-09T19:10:08-08:00 warn   : [Scrobblers             ] (myLastFm) lastfm client auth failed.
2023-01-09T19:10:08-08:00 warn   : [Source - Jellyfin - jellyfin] Initializing, but with no filters! All tracks from all users on all servers will be scrobbled.
2023-01-09T19:10:08-08:00 info   : [Sources                                ] (jellyfin) jellyfin source initialized
2023-01-09T19:10:08-08:00 info   : [App                                    ] Server started at http://localhost:9078
2023-01-09T19:10:39-08:00 info   : [Source - Jellyfin - jellyfin] New Track => Jo's Moving Day - Summer Storm @ 2023-01-09T19:10:09-08:00
2023-01-09T19:10:39-08:00 warn   : [Scrobblers                             ] Cannot scrobble to Client 'myLastFm' because user interaction is required for authentication

My config is as follows (redacted keys)

[
  {
    "name": "myLastFm",
    "configureAs": "client",
    "clients": [],
    "data": {
      "apiKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "callbackUri": "http://10.15.14.5:9078/lastfm/callback"
    }
  }
]

When creating the API application on last.fm, I ensured to use http://10.15.14.5:9078/lastfm/callback for the callback uri.

Does the callback uri need to be publicly accessible? It is currently only accessible on my local network.

When I navigate to http://10.15.14.5:9078/, I click the link "(re)authenticate or initialize", then click on "Yes, allow access" on the Last.fm page (the page correctly shows the application name associated with the apikey/secret), but am returned a 404 Page not found error by Last.fm, and the initialization is not completed.

The URL returned in the 404 is (redacted token) :

https://www.last.fm/api/undefined?state=myLastFm&token=xxxxxxxxxxxxxxxxxxxxxxxxx

Any tips? Thanks in advance!

Feature: Subsonic API integration

  • Implement authentication configuration data and flow
  • Implement connectivity test on initialization with ping api
  • Handle errors in api wrapper
  • Handle api version check (support >=1.15.0 for airsonic) -- part of error handling
  • Poll subsonic server on the getNowPlaying api

Feature: Implement Last.fm as a source

Make it easy for people scrobbling to Last.fm from other apps to scrobble to Maloja. This way they don't need to change their existing scrobbling strategy but can take advantage of self-hosting. Or work as a bridge to make transitioning to Maloja-only client scrobbling easier.

Environment variable or config setting to set Time Zone?

I'm wondering if there's a way to set the time zone of scrobbles before sending them over to Maloja. (If this is actually something that needs to be adjusted in Maloja, let me know.)

In my personal use case, I would just need the ability to set the time zone system-wide, but I would imagine others may want to adjust it per client in a multi-user scenario, so it may be worth building it into the config file structure instead of system-wide.

Feature: Frontend

Hey there,

Thanks for creating this and supporting all the different scrobblers out there, your work is appreciated!

Im a front end dev and noticed the very basic views you have for the log/status area. If I were to create a frontend (still using ejs so that its still easily supported) would you be open to it?

What is there is functional and usable, just thought I could offer some help to make it look a little cleaner if you are open to it.

Develop: `!source.hasAuth || source.authed` causing issue

Hi @FoxxMD

Noticed on the latest develop branch that I cant click the "see recently played tracks" link as the added condition !source.hasAuth || source.authed seems to eval to false and just shows the class="disabled" Ive taken a quick look and it seems like it may be a race condtion on render vs the async call to check authed. Not 100% clear on how the implementation arrives at that point

image

Other then that the sockets are working ok behind Caddy (no cors issues/anything else I can spot)

Issue with Plex scrobble

I cannot seem to get Plex to scrobble...

2022-04-02T14:58:31+01:00 info : [Source - Plex - myplex ] Initializing with the following filters => Users: N/A | Libraries: N/A | Servers: http://192.168.40.65:32400

I have a webhook setup in Plex, well two and neither work;

http://192.168.10.41:9078/plex &

http://localhost:9078/plex

Nothing appears in the log except timeouts for deezer occasionally :-/

Feature: Support per-user configurations for source/client (multi-user mode)

  • Refactor configuration parsing with sane defaults and checks -- with backwards compatibility
    • Add "config name" property to client configs
      • (Backwards Compatibility) first config without a name is set to default
      • (Backwards Compatibility) Check that there isn't an unnamed config and a named default config
      • Check for unique names
      • Support client json files as object (single user) or array (multi user)
    • Add "to clients" array property for source configs and optional friendly name
      • Support source json files as object (single user) or array (multi user)
      • Check for valid client names
      • (Backwards Compatibility) Support missing "to client" property to enable invoking all clients
    • Add source property array for main config
    • (Backwards Compatibility) Support spotify property in main config but add deprecation warning
    • (Backwards Compatibility) Support plex property in main config but add deprecation warning
    • (Partial Backward Compatibility /w BC ๐Ÿ˜ฌ ) Parse environmental variables as wholly separate configuration IE no mixing of file config and env -- too complicated
      • Will not support named client or "to client" source config (basically will be just for single-user ez setup)
  • Add config name to logging
  • Refactor sources setup into something similar to ScrobbleClients
  • Rewrite docs

Maloja stuck in Cannot scrobble state

Today I've noticed that multi-scrobbler did not add new scrobbles to my maloja instance but it worked perfectly with last.fm. This happened multiple times already. Usually when maloja container got restarted or upgraded to a new docker image.

I think this is some problem with multi-scrobbler reconnect mechanism rather than majola iself because it starts to work immediately after I restart multi-scrobbler docker container.

Please note that logs are grepped using docker logs -t multi-scrobbler | grep -vi debug | grep -vi scrobbled.

2022-04-24T11:47:34+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:48:35+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:49:35+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:50:36+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:51:36+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:52:36+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:54:06+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
2022-04-24T11:57:06+00:00 warn   : [Scrobblers                 ] Cannot scrobble to Client 'northys' because it is not yet initialized
// restarted multi-scrobbler
2022-04-24T11:59:50+00:00 info   : [Client Maloja - northys] Communication test succeeded.
2022-04-24T11:59:50+00:00 info   : [Client Maloja - northys] Maloja Server Version: 3.0.5
2022-04-24T11:59:50+00:00 info   : [Scrobblers             ] (northys) maloja client initialized
2022-04-24T11:59:50+00:00 info   : [Client Maloja - northys] Auth test passed!
2022-04-24T11:59:50+00:00 info   : [Scrobblers             ] (northys) maloja client auth OK

Use an actual logging library

Don't have time to implement my own library and the current solution isn't handling things well enough (want log levels prefixed, timestamps, and log file actually appended when written to instead of waiting to close file)

Maloja config / comms errors?

Not sure what I am doing wrong, as I am getting some strange errors from my maloja config;

[
  {
    "name": "maloja",          
    "data": {
      "url": "http://192.168.10.41:42010", 
      "apiKey": "734589764859678459678945678967457676475897648",
      "clientDefaults": {
        "maxRequestRetries": 2,      
        "retryMultiplier": 1.5
      }       
    }
  }
]

Currently installed Maloja version: 2.14.5

Can you see anything that I am doing wrong? As I don't see why I am getting communication succeeded then failed?

Thanks.

2021-12-31T17:01:02+00:00 warn : [Scrobblers ] (maloja) maloja client auth OK
2021-12-31T17:01:02+00:00 info : [Client Maloja - maloja] Auth test passed!
2021-12-31T17:01:02+00:00 error : [Scrobblers ] (maloja) maloja client failed to initialize. Client needs to be successfully initialized before scrobbling.
2021-12-31T17:01:02+00:00 error : [Client Maloja - maloja] Error: Invalid argument not valid semver ('' received)
at validateAndParse (CWD/node_modules/compare-versions/index.js:38:13) at Array.forEach () at compareVersions (CWD/node_modules/compare-versions/index.js:66:14) at MalojaScrobbler.testConnection (file://CWD/clients/MalojaScrobbler.js:124:20) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async MalojaScrobbler.initialize (file://CWD/clients/MalojaScrobbler.js:174:28) at async ScrobbleClients.addClient (file://CWD/clients/ScrobbleClients.js:230:17) at async ScrobbleClients.buildClientsFromConfig (file://CWD/clients/ScrobbleClients.js:195:17) at async file://CWD/index.js:134:9 2021-12-31T17:01:02+00:00 error : [Client Maloja - maloja] Communication test failed
2021-12-31T17:01:02+00:00 info : [Client Maloja - maloja] Maloja Server Version:
2021-12-31T17:01:02+00:00 info : [Client Maloja - maloja] Communication test succeeded.

I have also tried with the 'type' of maloja, but it gave me the same error.

Docker-Compose with Maloja

Hello!
I'm trying to run multi-scrobbler and maloja in a docker-compose file, but am having trouble getting MS to see maloja or authenticate with spotify.
The web interfaces both boot up. The Spotify auth let me log in one time, and now when I click it shows "OK" on a white screen, but I get an error message in the console - "[Source - Spotify - unnamed] Cannot start polling because user interaction is required for authentication."
When I try to reauth with Maloja, I get this error - "Specified client does not have auth implemented (maloja)"
My best guess is that the docker network is configured incorrectly, but I'm hoping you can help me. Attaching docker-compose for reference. Thank you so much!
maloja-docker-compose.zip
!

Stuck on Spotify Auth

I'm sure this is probably a "user error" however I've set up Maloja and Multi-Scrobbler on a remote server via Docker. As of now, I can scrobble directly to Maloja, Plex scrobbling works via Multi-Scrobbler, however I'm stuck on Spotify auth.

When I click "Reauth and restart polling", it brings up a window that has me login to Spotify, returns an "OK" and then I can close. Multi-Scrobbler seems to have some troubles though with the following error consistently logged:

 2023-01-31T17:04:04+00:00 error : [Source - Spotify - unnamed ] Cannot start polling because user interaction is required for authentication

The setup is via docker-compose, shared below:

version: '3.3'
services:
  multiscrobbler:
    image: foxxmd/multi-scrobbler:latest
    container_name: multiscrobbler
    ports:
      - 9078:9078
    environment:
      - SPOTIFY_CLIENT_ID=redacted
      - SPOTIFY_CLIENT_SECRET=redacted
      - SPOTIFY_REDIRECT_URI=http://multiscrobbler.jansen.sh:9078/callback
      - MALOJA_URL=https://maloja.jansen.sh
      - MALOJA_API_KEY=redacted
      - PLEX_USER=frailtyy
    volumes:
      - multiscrob:/home/node/app/config
    labels:
      - diun.enable=true

volumes:
  multiscrob:

I'm guessing there might be an issue writing the obtained token to a file but it's just a Docker volume, SELinux disabled and everything:

[root@despair docker-multiscrobbler]#  docker exec -it multiscrobbler ls -larth /home/node/app/config
total 36K
-rw-r--r--    1 node     node         726 Apr 28  2022 tautulli.json.example
-rw-r--r--    1 node     node         500 Apr 28  2022 subsonic.json.example
-rw-r--r--    1 node     node        1.2K Apr 28  2022 spotify.json.example
-rw-r--r--    1 node     node         726 Apr 28  2022 plex.json.example
-rw-r--r--    1 node     node         377 Apr 28  2022 maloja.json.example
-rw-r--r--    1 node     node        1.4K Apr 28  2022 lastfm.json.example
-rw-r--r--    1 node     node         610 Apr 28  2022 jellyfin.json.example
-rw-r--r--    1 node     node        1.1K Apr 28  2022 deezer.json.example
-rw-r--r--    1 node     node        1.7K Apr 28  2022 config.json.example
drwxr-sr-x    1 node     node         254 Apr 28  2022 ..
drwxr-xr-x    1 node     node         352 Jan 31 07:18 .

Any thoughts on troubleshooting this one? There's likely an easy fix here staring me right in the face.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.