A proper foobar2000 submission component

Tags: #<Tag:0x00007fe849c4b538>

Sending the first value only has always been intentional as per the readme…

If artist/work MBIDs are multi-value, all values are sent. For any other multi-value tags, only the first value is sent.

If you want multiple values to be sent, I guess I could send them comma separated as a single string as this seems to the most common pattern used for spotify.


Yeah exactly, separate them by comma. For example, if I tag a song in foobar2000, like 2Pac;Outlawz - Hit 'Em Up, foobar2000 translates this to 2Pac, Outlawz - Hit 'Em Up, and that’s how foo_scrobble scrobbles it to Last.fm too, as you can see here:

However, scrobbling this same track with foo_listenbrainz2, on ListenBrainz, it just scrobbles it as 2Pac - Hit 'Em Up. This is inconsistent with not only my Last.fm scrooble history (through the Windows version of foobar2000), but also inconsistent with how Simple Last.fm Scrobbler (SLS) on Android reads and scrobbles the same tracks from the Android version of foobar2000. Point is, it would be so much easier to not having to edit all the tracks I’ve scrobbled ti ListenBrainz (not that it’s possible to edit scrobbles on ListenBrainz right now, but at some point I’m going to have to delete my entire scrobble history here, and import it from Last.fm).

Anyway, would be great if you could fix this minor inconsistency. I guess you could make it optional to scrobble multiple/split artists for those who like me, prefer it that way.

@EliasAlucard, since you have a github account you can test the latest build generated here…


It still defaults to sending the first value so you’ll need to look at the Preferences.

People without github accounts can’t download these automatically generated builds - only official releases which I’m not doing yet.

1 Like

Yeah, now it’s working. Had to uncheck that box for scrobbling multiple artists in the settings page, but seems to be working as it’s supposed to now. Really gotta give you a thumbs up for the quick update! Keep up the good job man.

Also, while we’re at it and I now have your attention, have you considered adding Libre.fm and Last.fm support? I do use foo_scrobble and it works flawlessly, but there doesn’t seem to be any Libre.fm scrobblers available for foobar, and personally I would prefer to just have one scrobble component installed anyway. Either way, this update was excellent!

By the way, if foo_listenbrainz2 doesn’t have it already, auto update through foobar2000 by clicking the “Get Updates” button, would be a nice feature for foo_listenbrainz2. Not all fb2k components have this functionality.

Nope, not interested. I have a written a last.fm scrobbler before but the underlying authorisation code/submission method/response handling is so utterly different that it wouldn’t share a single line of common code with ListenBrainz. It would be pointless mangling the functionality from both in to a single component.

1 Like

New version is now available for everyone:



What about Simple Last.fm Scrobbler and Pano? Both are open source, available on Github and both scrobble to Last.fm, Libre.fm and ListenBrainz at the same time. Apparently it can be done. But I assume it’s a bit more difficult to do it with foobar components? Both SLS and Pano are Android only apps, but they do work with the Android version of foobar.

Anyway, I found foo_librescrobbler, and it seems to be working fine, and it scrobbles to Libre.fm with multiple artists tagging. Just saying, it’d be easier to have one component for all three scrobble sites :slight_smile:

By the way, how come foo_listenbrainz2 isn’t released under the GPLv2? I mean, what’s the deal with the MIT license?

Also, what’s the roadmap for foo_listenbrainz2, I mean, what other features are you planning on adding?

What part of “Nope, not interested” didn’t you understand?

It’s for sure possible, but it needs to be implemented separately and won’t share too much code. And each submission service has its own quirks and specialities to take care of. Hence I can fully understand marc not being interested in implementing and maintaining it. I wouldn’t be either.

Regarding MIT licensing I think it is a good choice. MIT puts less restrictions on the code, the code could even be used in closed source. From a purely user perspective it makes no real difference.

I’m not even sure using GPL for a foobar component is really license compliant, as foobar itself is closed source. But IANAL, haven’t checked the exact licensing conditions of the foobar SDK and honestly also not really interested in getting into this in depth :slight_smile:

1 Like

Hey man, no need to be rude now, just asking :wink: Appreciate your work in any case.


Closed sourced development is exactly the problem with the MIT license (and similar permissive licenses, like the 3 and 2 clause BSD license, Apache 2.0 license and so on). The “restrictions” with the GPLv2 license, are there to ensure that the source code remains free and open, so they’re not really “restrictions”. That’s why it’s called copyleft. Anyway I was just wondering why he chose the MIT license, it’s good that the component is open source in any case.

Lots of fb2k components are open source and many are GPLv2 licensed too, shouldn’t really be a problem as they’re separate components from foobar2000.

You were much ruder. Never mind all the drivel about looking at other projects/questioning my competence, you were entirely dismissive of that fact I said I wasn’t interested. I couldn’t have made myself any clearer yet you persisted like a spoiled child demanding that I somehow oblige your request regardless of my own feelings/motivations.

1 Like

By the way, most scrobblers submit a scrobble after 3 minutes or 50% of the song, foo_listenbrainz2 is configured to scrobble after 4 minutes or 50%. Any possibility of adding adjustable time for scrobbling? Otherwise we might get inconsistent scrobbling history between Last.fm and ListenBrainz, say, if a song is 8 minutes and I switch to the next song after 3:30 minutes or so, which means the song would be scrobbled to Last.fm but not to ListenBrainz. Just a suggestion :slight_smile:

Marc2k3 may be very touchy but I do sympathise when he’s faced with so much entitlement and callousness. Learn some tact; it generally gets you much further.


Well, that escalated quickly and unexpectedly.

@EliasAlucard I think you know quite well that your last post at Marc went way over the top, escalated the heated debate to the next level and violated the code of conduct. Someone flagged it now, and I think rightly so.

Not excusing Marc’s behavior, though, which also was inappropriate.

But maybe a few words from me as maintainer of open source projects: I kind of get were Marc’s feelings and reactions are coming from. If you have an open source project people actually use, there will be people telling you how you really should support feature X, how easy this would be, that others do this and hence should you etc. etc. At times that can feel really demanding or patronizing; you feel people try to educate you on things you know about well and asking you for stuff you have explained already a trillion times. More than once I read comments on my projects that really made me feel angry, even though there was probably no ill intention on the person who wrote it. But the way they formulated their requests just felt demanding and/or patronizing. Let’s give a recent example: When you answered me with explaining the merits of the GPL my gut reaction to it was “this guy for sure does not need to educate me on the GPL”. That’s partly because of my experience that small seemingly harmless questions about “why license XY” usually is a sneaky way to drag one into a often point- and endless licensing discussion. I think I most of the time manage to get some distance to situations like these and either ignore it or answer neutrally. But small things like this can build up. I don’t know why Marc reacted as he did, but there likely is some history behind it.

Anyway, enough of this and back to topic: Great you had the code and thanks for preserving it. But the repository now is based upon an older fork of mine I created to preserve the code after Marc’s last rage quit and contains some obsolete parts. Marc in the meantime had set up a fresh repository, and I had setup a fresh fork for it. Unfortunately it had been a while since my last sync, so the changes for 1.1.2 and 1.1.3 had not been included. I have now updated the fork with the changes from your repo:

I think this is now the most accurate representation of the previous repository we have.

I still have no real interest in actively developing this further myself, but I’m happy to give this minor maintenance or merge pull requests until someone stands up and continues to properly develop this.


I’d like to bring up the topic of ID3v2 UFID again. Marc2k3 didn’t seem interested in making any attempt to address it, but it is a pretty big gap in functionality. If true that foobar2000 doesn’t support reading UFID at all, and there is no possible workaround, then it seems like we should petition the foobar2000 devs to add the required functionality. Anyone know the best way to go about that?

You have 3 realistic options:

  1. Choose a different music player
  2. Continue using foobar2000 but choose a different music file format
  3. Develop your own Picard code to save certain fields to TXXX frames instead of poorly supported fields from the ID3 standard.

There are a dozen other ID3 interoperability issues between Picard and foobar2000 anyway.


yindesu summarized it pretty well. Here is some reading material:

For the UFID issue try something like $copy(_id3:TXXX:MUSICBRAINZ TRACK ID,musicbrainz_recordingid)
BTW, this has been discussed before in the old thread.

If you still want to petition foobar200 devs they can also be reached on IRC

Since I haven’t acheived nearly the same functionality out of any other player, this suggestion isn’t so realistic. :slight_smile:

About 77% of my library is Vorbis or Opus. So, you see, I’ve already chosen a different codec a very long time ago. It’s not so easy to get rid of the remaining MP3s.

I already said this myself earlier in the thread. For reasons I won’t get into, retagging the files is a bigger problem than you might think. Besides, that only solves the problem for one person. I’m trying to find a solution that works for everyone with default settings.

Very true. Changes to handling of composer sort name in foobar2000 is a recent example that I haven’t solved to my satisfaction. Many I’ve solved myself by using my own tagging tools and avoiding foobar2000 for tagging. But that’s beside the point. There is no interoperability issue between Picard and foobar2000 here. The issue is with foo_listenbrainz2 and the foobar2000 component API, if I understand correctly.

Thanks for wealth of information. I will read it when I have more time.