Find a file
2024-12-27 18:49:29 +00:00
.devcontainer chore(vscode): Add markdown extension to devcontainer 2024-10-15 17:42:04 +00:00
.github ci: Generate schema files for docsite in GH docs deploy workflow 2024-12-10 10:13:06 -05:00
.vscode chore: Add docker-compose dev file and vscode task 2024-12-05 09:37:58 -05:00
assets docs: Update screenshot 2024-07-09 09:51:33 -04:00
config docs(ytmusic): Add new auth docs and update FAQ 2024-12-06 19:09:32 +00:00
docker/root/etc/s6-overlay/s6-rc.d Working dockerfile 2024-01-18 16:59:45 -05:00
docsite docs(ytmusic): Clearer wording for troubleshooting content 2024-12-10 15:55:20 +00:00
flatpak chore: Bump version for release 2024-09-27 09:02:04 -04:00
patches fix(plex): Use track artist from response data when album artist is present 2024-12-16 20:11:50 +00:00
public Update index.html 2024-01-19 11:05:34 -05:00
src fix: Default positional listen range to 0 position if none is provided 2024-12-27 18:43:51 +00:00
.dockerignore chore: Add docker-compose dev file and vscode task 2024-12-05 09:37:58 -05:00
.gitignore feat(youtube)!: Use oauth-based api library for better stability 2024-10-28 18:03:10 +00:00
.lnav.config.json docs: Add lnav config 2024-12-27 18:49:29 +00:00
.mocharc.json test: Force mocha to exit 2024-10-09 12:18:23 -04:00
.nvmrc chore(!): Upgrade Node to LTS for --import support 2024-02-15 12:40:02 -05:00
.nycrc.json refactor: Restructure server directory 2023-08-24 11:12:27 -04:00
alpine.Dockerfile docs(fix): Add missing docsite build steps to alpine docker variant 2024-07-15 13:50:37 -04:00
cliff.toml chore: Add git-cliff template 2023-06-07 10:01:30 -04:00
CONTRIBUTING.md chore: Refactor git/dev workflow to use master as unstable branch 2024-08-30 09:53:52 -04:00
docker-compose.dev.yml chore: Add docker-compose dev file and vscode task 2024-12-05 09:37:58 -05:00
docker-compose.yml fix: remove deprecated version from docker-compose.yml 2024-11-20 17:16:14 +01:00
Dockerfile chore: Generate schema files during docker build for docsite 2024-12-10 10:08:02 -05:00
eslint.config.js Improve testing, linting, and node usage in devcontainer 2024-10-08 19:33:47 +00:00
index.html Update index.html 2024-01-19 11:05:34 -05:00
LICENSE Create LICENSE 2020-12-06 21:51:20 -05:00
package-lock.json feat(jellyfin): Bump client major version 2024-12-10 20:19:10 +00:00
package.json feat(jellyfin): Bump client major version 2024-12-10 20:19:10 +00:00
postcss.config.js It works! 2024-01-18 14:18:08 -05:00
README.md docs: Fix bad transform links 2024-12-10 15:28:25 +00:00
tailwind.config.js fix(ui): Skip lg breakpoint for cleaner interface 2024-10-16 16:09:05 +00:00
tsconfig.json feat: Improve client/source schema validation generation and error handling 2024-10-09 12:18:23 -04:00
typedoc.json feat: Implement somewhat-working docusaurus site 2023-07-13 15:08:00 -04:00
vite.config.ts feat(ui): Disable minifiying frontend identifiers 2024-12-27 18:49:16 +00:00

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