Skip to content

bug: LastFM as source (Sonos playing from HypeMachine, scrobbling to LastFM) is causing errors trying to scrobble to ListenBrainz #323

@macstainless

Description

@macstainless

Please check existing knowledge before opening an issue

Describe the Bug

I have a Sonos speaker set up to Scrobble to LastFM. It seems to scrobble no problem with services like Plex and Apple Music. However, when I play from HypeMachine, multi-scrobbler is unable to submit to Listenbrainz, getting a 400 error looking like the release name field is empty. However, all other places I scrobble to such as Koito, Maloja accept the scrobble just fine. Last.fm scrobbles from Sonos perfectly fine too.

The logs below are for the song Moodified by the artist rRoxymore. The entry for this song on Last.fm is here.

Log specifically from the Failed Scrobble job for the song is below. The full debug log is in the log area further down in this issue.

rRoxymore - [Moodified](https://www.last.fm/music/rRoxymore/_/Moodified) --- @ 2025-07-10T13:50:18-04:00 (S) (20 minutes ago) Source:Lastfm - LastFm (Source) Retries: 0 Last Retried: Never Error: Error occurred while making Listenbrainz API scrobble request: Listenbrainz API Request Failed => (HTTP Status 400) | Code 400 | Error => field track_metadata.release_name is empty. => Listenbrainz API Request Failed => (HTTP Status 400) | Code 400 | Error => field track_metadata.release_name is empty. => Bad Request

Platform

Docker

Versions

Multi-scrobbler 0.9.7

Logs

[2025-07-10 14:00:27.514 -0400] WARN   : [App] [Scrobblers] [Listenbrainz - unnamed-lz] Could not scrobble rRoxymore - Moodified @ 2025-07-10T13:50:18-04:00 (S) from Source 'Lastfm - LastFm (Source)' but error was not show stopping. Adding scrobble to Dead Letter Queue and will retry on next heartbeat.
Error: Could not scrobble rRoxymore - Moodified @ 2025-07-10T13:50:18-04:00 (S) from Source 'Lastfm - LastFm (Source)' but error was not show stopping. Adding scrobble to Dead Letter Queue and will retry on next heartbeat.
    at ListenbrainzScrobbler.doProcessing (CWD/src/backend/scrobblers/AbstractScrobbleClient.ts:778:50)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ListenbrainzScrobbler.startScrobbling (CWD/src/backend/scrobblers/AbstractScrobbleClient.ts:698:27)
caused by: Error: Error occurred while making Listenbrainz API scrobble request: Listenbrainz API Request Failed => (HTTP Status 400) | Code 400 | Error => field track_metadata.release_name is empty.
    at ListenbrainzScrobbler.doScrobble (CWD/src/backend/scrobblers/ListenbrainzScrobbler.ts:95:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ListenbrainzScrobbler.doProcessing (CWD/src/backend/scrobblers/AbstractScrobbleClient.ts:772:51)
    at async ListenbrainzScrobbler.startScrobbling (CWD/src/backend/scrobblers/AbstractScrobbleClient.ts:698:27)
caused by: Error: Listenbrainz API Request Failed => (HTTP Status 400) | Code 400 | Error => field track_metadata.release_name is empty.
    at ListenbrainzApiClient.callApi (CWD/src/backend/common/vendor/ListenbrainzApiClient.ts:208:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ListenbrainzApiClient.submitListen (CWD/src/backend/common/vendor/ListenbrainzApiClient.ts:345:26)
    at async ListenbrainzScrobbler.doScrobble (CWD/src/backend/scrobblers/ListenbrainzScrobbler.ts:85:13)
    at async ListenbrainzScrobbler.doProcessing (CWD/src/backend/scrobblers/AbstractScrobbleClient.ts:772:51)
    at async ListenbrainzScrobbler.startScrobbling (CWD/src/backend/scrobblers/AbstractScrobbleClient.ts:698:27)
caused by: Error: Bad Request
    at callback (CWD/node_modules/superagent/src/node/index.js:901:17)
    at <anonymous> (CWD/node_modules/superagent/src/node/index.js:1166:18)
    at IncomingMessage.<anonymous> (CWD/node_modules/superagent/src/node/parsers/json.js:19:7)
    at IncomingMessage.emit (node:events:530:35)
    at endReadableNT (node:internal/streams/readable:1698:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Additional Context

I think Multi-scrobbler needs to send some sort of field as default when a song is not in the Musicbrainz database. This song in particular when imported directly to LB via its own last.fm sync, does show the song in my scrobbles, but it's unlinked. Here is the JSON when I inspect that listen:

{ "inserted_at": 1752171509, "listened_at": 1752169818, "recording_msid": "f9f0d5ad-9162-4b0f-a903-49d465354486", "track_metadata": { "additional_info": { "lastfm_artist_mbid": "f974ba6b-1c97-4235-ad8f-912ed211f960", "recording_msid": "f9f0d5ad-9162-4b0f-a903-49d465354486", "submission_client": "ListenBrainz lastfm importer v2" }, "artist_name": "rRoxymore", "track_name": "Moodified" }, "user_name": "{redacted}" }

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions