Self-Hosted Listening with Direct Playlists?

Hello, I’ve enjoying using picard to redo my music collection, and using listenbrainz to track my listening.

I’ve got one next step I want to do however, and I am not sure how.

I very much enjoy making playlists on my plex server, and rating my music, but I’m not sure how to keep this updated, and usable for collaborative playlists.

Almost all of what I have has MBIDs, and it’s ratings through plex, with me unsure how to try and keep this up to date. I want to upload my Playlists, and ratings however all I’ve seen were a few scripts I am not 100% certain on how they work.

I have been running plex for a while, but would be up to consider a swap if there is something where I can have my ratings and playlists automatically sync with listenbrainz. (Ideally with the ability to download to listen offline as well on mobile, but I guess beggars can’t be choosers) I’m just a bit intimidated with what it takes to get a server like nevidrome working outside my home network.

Or if there was just an easy explanation to import it somehow.

Hi!

I think you’re in luck – we’re actively building tools to support what you want.

The base assumptions:

  1. Your whole collection is tagged with MBIDs.
  2. You have a Subsonic API available. I’m not sure that Plex does. But through this API the music in the collection will be discovered and local metadata/info will be used (e.g. playcounts).

I am in the process of creating ListenBrainz-Local, which will package a few recommendation tools for local use – most notably LB Radio for making playlists from your data. ListenBrainz local will have its own API (which is much easier to do than to shoe-horn our recommendation tools into several music projects like navidrome – not to mention the atrocious metadata practices these projects have).

From this web interface you can run the discovery tools and make playlists – then you can listen to those playlists from your favorite subsonic player.

How does that sound?

3 Likes

This is great news! I currently have a subsonic API (navidrome) and music tagged with MBIDs (with beets). Is there something I can use now? Or somewhere I can learn more when it’s ready?

1 Like

That sounds great!

  1. Yes, I have most of my music properly tagged directly via Picard, with no manual editing of files there, and I am in the process of Re-Ripping to FLAC (I previously was ripping or editing to 128kbs for mobile, and nobody wants that when you finally get decent headphones)

  2. I currently do not, but have been looking. Been at going over to navidrome because of smart playlists in regard to other smart playlists, however I really like the sonic analysis (for the basic sonic adventure, but the rest seems like it fits in?) , and lyrics (then again I can just manually do it with some other stuff) just with the big worry of setting it up securely myself.

Definetly think it would be the perfect solution depending on how easy it is to use as someone who knows a bit of computers, but not much proper hosting.

Nothing yet – its all pretty much in development chaos still or simply not great/easy to use yet. I would say, keep your eyes peeled on the this forum, because that is where I will post when I am ready for people to start playing with it.

(Now I just need to finish the never ending next-gen MBID mapping project first and then I can return to this project!)

1 Like

My goal here is this:

  1. Install docker
  2. Copy a file, make a few changes.
  3. Run a docker command, get a new service running locally.

It shouldn’t be much work for the end users, really.

2 Likes

OK, I have something to show off, but I need to whitelist the users before they can try it. So, if you want to try and Alpha quality software, post your LB user name here and I will whitelist you.

Or, if you want to try it yourself:

GitHub - metabrainz/listenbrainz-local: ListenBrainz local is a web page version of the listenbrainz-content-resolver

Let me know!

4 Likes

Thanks, must’ve fallen through the cracks of my notifications!

My username on LB is the same as on here “SomeonetookMeep” (copypasted) I’ll look if I can, or even better I may be able to setup the docker tomorow as it seems I’ll finally get proper setup to access somewhat securely out of house to really start fun with navidrome and some other stuff.

See if you can log in here:

https://local.listenbrainz.org/

I’m aereaux on LB. I can try it out.

my username is sanojjonas

Hi!

For the time being, I’ve got enough testers. Thanks!

But, I would be grateful if someone attempted to install the project on their own server to help find bugs in the setup process/setup docs.

I set it up, and recorded a couple simple README changes that clarify the steps. I get this error when logging in, though, and it’s not clear how to resolve it:

 There are no credentials available. Please add your own credential. 

On the /service page you have services and credentials. A service is something like Navidrome and requires a name and url:port. A credential is the username/password required to log into the service. You can manage both from the /service page.

Thanks! I added a service and credential, but when I press the sync button I just see this:

Is there some way I can get more information about what’s not working?

I’m guessing the log doesn’t show anything?

Check the docker logs to see if you can find an error there.

Yeah, all I see in the docker/podman logs is this:

localhost:5000 [pid: 33|app: 0|req: 106/364] 10.89.0.3 () {50 vars in 1293 bytes} [Wed Aug 20 18:44:26 2025] GET /service/navidrome/sync/log => generated 0 bytes in 3006 msecs (HTTP/1.1 204) 3 headers in 113 bytes (0 switches on core 0)
localhost:5000 [pid: 2|app: 0|req: 92/365] 10.89.0.3 () {62 vars in 1487 bytes} [Wed Aug 20 18:44:30 2025] POST /service/navidrome/sync/start => generated 311 bytes in 12 msecs (HTTP/1.1 200) 5 headers in 686 bytes (1 switches on core 0)
localhost:5000 [pid: 30|app: 0|req: 32/366] 10.89.0.3 () {52 vars in 1321 bytes} [Wed Aug 20 18:44:33 2025] GET /service/navidrome/sync/log => generated 0 bytes in 3009 msecs (HTTP/1.1 204) 3 headers in 113 bytes (0 switches on core 0)
localhost:5000 [pid: 33|app: 0|req: 107/367] 10.89.0.3 () {52 vars in 1321 bytes} [Wed Aug 20 18:44:36 2025] GET /service/navidrome/sync/log => generated 0 bytes in 3014 msecs (HTTP/1.1 204) 3 headers in 113 bytes (0 switches on core 0)

The sync thread is running in the background and its errors are not making it into the error logs for some reason. Something I’ll have to look into.

Sorry for the delay, i was off on some much needed holidays!

I’ve improved the logging in the sync thread, can you please pull the latest changes and see what errors you get now?

Thanks!

Thanks! I just get a bunch of URLErrors in the docker logs, without more details:

URLerror
URLerror
URLerror
localhost:5000 [pid: 35|app: 0|req: 6/25] 10.89.0.2 () {52 vars in 1323 bytes} [Wed Sep  3 13:56:43 2025] GET /service/navidrome/sync/log => generated 311 bytes in 985 msecs (HTTP/1.1 200) 4 headers in 126 bytes (1 switches on core 0)
URLerror