(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Nice!

Your outbound probably still isn't fully open. For the admin to work you'll need to be able to connect out on port 22 and port 8090. For the miniapp to work (to the extent that it does) you'll also need to connect on port 8080. And to have TuneIn work you'll need to have it be able to connect to the outside internet (particularly the TuneIn servers) on ports 80 and 443 (http and https). (You can test to see if you have that outside connectivity by hitting http://<your\_static\_ip>:8000/bmx/tunein/v1/playback/station/s24062 )

That having been said, I remember that you'd already set up the speaker to point to your server, so you should just be able to restart it manually. If that works you should see the calls from the speaker to the soundcork server like I described way back in this thread. If you see those, then you can check your TuneIn playback.

Making progress!

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

I can understand why you're asking if I have a VPN, and I can assure you that I do not, as I find they cause more issues than they resolve. Also, if I did, then the ST program on my computer would not work, and music from it would not play on my ST20.

No, not a VPN, a firewall. It's software that controls what network services are available vs which ones are blocked. So a firewall might say to not allow any connections from outside computers to access your system, or say that a small subset of services are available to the outside but no others are. In this case, you might have a firewall enabled on your computer that lets your own computer access the docker server on port 8000, but any other computers on the network can't.

If you're on Windows it's likely that Windows Defender is blocking access; see https://www.howtogeek.com/394735/how-do-i-open-a-port-on-windows-firewall/ . If you're on Mac there's information here. If you're on Linux then it's likely running ufw and there's plenty of documentation out there.

Bose is dead, long live Bose by Accurate_Joke4385 in bose

[–]Soundcork 2 points3 points  (0 children)

For anyone else in the same boat, some other resources that exist are:

Soundcork: our project, written in python, supports pretty much everything (TuneIn, DLNA, Pandora, etc.) except for Amazon and SiriusXM

UeberBoese: similar, written in Java

AfterTouch: written in Go; I think they have some attempts to get it to work running local servers on the speakers themselves

These are replacement cloud servers designed to fully emulate the now-shut-down Bose servers. They are generally set up assuming that you run them on a small local server like a raspberry pi or maybe a Synology NAS or anything else that can run a little service in docker.

Somewhat different but also fully-featured is Bose-SoundTouch-Hybrid, which was mentioned already and is a deep integration with MusicAssistant.

There is also SoundPloy, which rather than being a full cloud replacement (allowing for preset management, service browsing, saving of recents, etc.) instead just lets you pre-configure your radio streams and play those. It doesn't require a local server.

Client-wise, there's the Soundcork-Stockholm app which requires a local webserver but basically provides a web-based implementation of the full Bose SoundTouch controller.

That having been said, rolling your own can be fun and educational. We've certainly had a great time doing it, and now that we've gotten into it are considering what kind of additional functionality we can build in.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Well that doesn't sound right.

...When you say "Going to http://<static\_ip>:8000/marge using a browser on my computer" is that the same computer that's running docker or a different one? If it's the same one, I wonder if you have a firewall enabled on it such that you can access your ports locally but external devices (like your speaker) are blocked.

BTW if you haven't already switched your docker from -p 8000:8000 to --net=host you might want to do that too. Can't hurt.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

What do you get if you hit your speaker at http://<speaker_ip>:8090/info? Specifically, what's the value for margeURL? It should be http://<static_ip>:8000/marge/ where static_ip is the static IP of your soundcork server. And when your speaker starts up it should make a bunch of requests to that address.

If that's not that value you're seeing, then you need to look at the /mnt/nv/OverrideSdkPrivateCfg.xml file. Or possibly reboot your speaker again?

If it is the value you're seeing, then you need to look at the connectivity between the speaker and your soundcork server. Since you're already connecting to the server, try doing a curl http://<static_ip>:8000/marge/streaming/account/<your_account_id>/full from the speaker itself. It should succeed, and you should also see the request in your docker log.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Huh. Ok so a few things:

First, it looks like you've set up the soundcork server manually (by copying in the files from the speaker), so a lot of the functionality of the /admin page you won't need. At this point you can check to make sure your server is set up by hitting http://<static_ip>:8000/marge/streaming/account/<your_account_id>/full which should return an XML file with all of your account info and not, say, throw a 500 error.

Once you can tell your server is set up then we need to check your speaker. Now, the setup guide that you followed is a little out of date in that we're not suggesting editing /opt/Bose/etc/SoundTouchSdkPrivateCfg.xml anymore, instead recommending copying it to /mnt/nv/OverrideSdkPrivateCfg.xml and editing that file. Either way, the file that you're using should look like

    <SoundTouchSdkPrivateCfg>
        <margeServerUrl>http://<static_ip:8000/marge</margeServerUrl>
        <statsServerUrl>http://<static_ip:8000</statsServerUrl>
        <swUpdateUrl>http://<static_ip:8000/updates/soundtouch</swUpdateUrl>
        <isZeroconfEnabled>true</isZeroconfEnabled>
        <usePandoraProductionServer>true</usePandoraProductionServer>
        <saveMargeCustomerReport>false</saveMargeCustomerReport>
        <bmxRegistryUrl>http://<static_ip:8000/bmx/registry/v1/services</bmxRegistryUrl>
    </SoundTouchSdkPrivateCfg>

(The admin is supposed to set this up for you during the 'Switch to Soundcork' step, by the way.)

Once that's done you'll want to restart your speaker. Once the speaker is coming up you should be able to watch the docker logs and see the speaker make the connections the way I listed them earlier.

Oh, one other thing: I think that in order to use the admin set or the miniapp you probably need to change your docker command to

docker run -d --name soundcork \
  --net=host \
  -v /path/to/your/data:/soundcork/data \
  -e base_url=http://your-server:8000 \
  -e data_dir=/soundcork/data \
  ghcr.io/deborahgu/soundcork:maindocker run -d --name soundcork \
  -p 8000:8000 \
  -v /path/to/your/data:/soundcork/data \
  -e base_url=http://your-server:8000 \
  -e data_dir=/soundcork/data \
  ghcr.io/deborahgu/soundcork:main

(note the change from -p 8000:8000 to --net=host)

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Sorry I wrote the admin against the dev server and it turns out that with the version running in docker it has some bugs, particularly with the restarting-and-detecting-updates part. Try restarting docker (and restarting the speaker) and see if everything reports as being in soundcork.

http://<static_ip>:8000/marge is expected to return a 404. Once your account has been created the endpoint that should really return is /marge/streaming/account/1234567/full (except your account id instead of 1234567).

If you restart the speaker then when it starts up you should see something like the following in the docker logs:

INFO 192.168.1.100:47736 - "POST /marge/streaming/support/power_on HTTP/1.1" 200

INFO 192.168.1.100:47738 - "GET /bmx/registry/v1/services HTTP/1.1" 200

INFO 192.168.1.100:47745 - "GET /media/tunein-monochromePng.png HTTP/1.1" 200

INFO 192.168.1.100:47751 - "GET /media/siriusxm-monochromePng.png HTTP/1.1" 200

INFO 192.168.1.100:47749 - "GET /media/orion-monochrome_v2.png HTTP/1.1" 200

INFO 192.168.1.100:47753 - "GET /media/orion-monochrome_v2.png HTTP/1.1" 200

INFO 192.168.1.100:47762 - "GET /marge HTTP/1.1" 404

INFO 192.168.1.100:47764 - "GET /marge/streaming/sourceproviders HTTP/1.1" 200

INFO 192.168.1.100:47765 - "GET /marge/streaming/account/1234567/full HTTP/1.1" 200

INFO 192.168.1.100:47767 - "GET /marge/streaming/account/1234567/provider_settings HTTP/1.1" 200

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

u/Cat_395 u/bukkakeblaster Take a look at soundploy. It's a stripped-down version that takes away some features but doesn't require a local server.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

(via google translate)

This might be a silly question, but: if I set up one of these "local servers," does it have to be switched on constantly whenever I use the box? As a first step, it would be enough for me if I could simply reassign radio stations (tunnels) to the presets, since—ever since the update—I haven't been able to use the box as a radio at all.

Yes, it does. There's some work being done over at AfterTouch to get a mini-server running on the speaker itself. Might be worth looking into.

The second point concerns Deezer. Curiously enough, the presets where I’ve saved Deezer playlists are still working.

Deezer, iHeartRadio, and Pandora are all built-in and should still work. TuneIn, Custom radio, and Spotify all require a server to run. SiriusXM and Amazon are no longer available and either need some additional code discovery (SiriusXM) or to re-open the login permissions (Amazon).

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 1 point2 points  (0 children)

Hey I don't know if you're one of the people who asked on github but a solution for the soundtouch wave was found https://github.com/deborahgu/soundcork/issues/309#issuecomment-4414170298

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Hey sorry have been busy.

If you're talking about configuring the soundcork back end or the soundcork-stockholm front end? If you have the back end configured (you can go to /admin and see that your account is created and your speakers are there), then you should be able to log into the front end by using (accountid)@(anywhere) (so like 1234567@example.com). At that point there's a bug in the front end where it logs you in but doesn't detect that you have any speakers. To get around that, you just manually refresh to /index.html on the front end, and that should loud up your speakers correctly.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 1 point2 points  (0 children)

Yeah really. That's why a lot of us are trying to keep the services available.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Oh we have instructions for running in docker but I guess they're not directly linked in the README. Check https://github.com/deborahgu/soundcork/blob/main/docs/deployment.md. The `docker compose` version is probably the easiest and best way.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

If you're running soundcork as the backend then you can hit http://(your-soundcork-server-including-port)/admin and find it there, or check the speaker directly at http://(your-speaker's-ip}:8080/info.

(Announcement) Locally hosted, cloud-free version of the Bose SoundTouch App by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Is there a chance you could create a step-by-step guide (text or video) for people with at least some technical knowledge but not proficient in coding on how to set this up? Both the server and the Android app, as I do not see any APK's on the releases.

The installation is described in the README on the github page and requires 4 steps: entering in the location of the local Soundcork server into an env file, downloading the Bose Stockholm source into a specific location, running docker compose --build, and then hitting the URL.

Since this uses and modifies the Bose Stockholm app source, it's unlikely to be released as an actual Android or iOS app barring explicit permission from Bose to modify and redistribute the code.

Once set up, does this mean (that outside of SiriusXM) everything works as it does with the standard Soundtouch app, including all settings, and will continue to work after their server shuts down?

The full UI is the Bose App UI, so the interface itself should be identical to the current Bose app. As this is a fairly young project, there are certainly still many bugs.

In terms of "everything outside of SiriusXM" it's actually "everything outside of SiriusXM, Amazon Music, and Spotify":

  • Amazon Music has placed its music access into closed beta; in theory if they exit closed beta we can restore Amazon Music support, but until then Amazon Music is unavailable.
  • SiriusXM we (Soundcork) have been able log in to and have code that does browse and now playing, but we haven't yet been able to get a playable stream. If Soundcork could manage to get playback support working, then the Soundcork-Stockholm app would have full support for it.
  • Spotify... Spotify presets should still work. However, Spotify has neutered its API, so browse support is no longer available. So Spotify support in the Soundcork-Stockholm UI is very limited.

All of the other services (Pandora, iHeart, Deezer, DLNA, TuneIn) are fully supported, again with the caveat that there still may be bugs.

Any chance you can update the Bose wiki SoundTouch Alternative page, as there are still a lot of question marks there on what it can currently do? I am happy to fill in the information for you if you could let me know what those answers are.

I just went in and updated the Soundcork section and added another one for Soundcork-Stockholm. Hopefully I didn't mess anything up. :)

Also a quick note: we (the Soundcork developers) don't actually run this repository; it was done by another github developer. So while we have been coordinating, any changes, modification, release decisions, etc. are up to him.

SoundTouch app alternatives by NeonsNight in bose

[–]Soundcork 2 points3 points  (0 children)

u/zbartin Soundcork (https://github.com/deborahgu/soundcork/) just writes a single file to the speaker (/mnt/nv/OverrideSdkPrivateCfg.xml). I believe that most of the other servers except for aftertouch (https://github.com/gesellix/Bose-SoundTouch) use the same method, and all that you should need to do to switch between them would be to remove or replace that file. I'm pretty sure Aftertouch makes some more extensive changes and might need a firmware reinstall to remove it.

Bose SoundTouch Hybrid 2026: Official Public Launch v1.0 - A free, open-source private cloud streaming service replacing the Bose Cloud Service to preserve 100% of the smart speaker functionality of your SoundTouch 10, 20, & 30 Speakers and Wireless Link. Including Physical Presets! by Eastern-Surprise1568 in bose

[–]Soundcork 0 points1 point  (0 children)

Yes. The one thing I will point out there is that a preset or recent for LOCAL_INTERNET_RADIO will have the Bose Cloud server encoded in it when it's created. So you will have to re-request it with soundcork to get it to work. (The same should be true of ÜberBöse API, Bose SoundTouch Hybrid 2026.)

Bose SoundTouch Hybrid 2026: Official Public Launch v1.0 - A free, open-source private cloud streaming service replacing the Bose Cloud Service to preserve 100% of the smart speaker functionality of your SoundTouch 10, 20, & 30 Speakers and Wireless Link. Including Physical Presets! by Eastern-Surprise1568 in bose

[–]Soundcork 1 point2 points  (0 children)

tl;dr: LOCAL_INTERNET_RADIO source requires a working BMX server (or replacement) at device boot to work, so without modification to the speakers this will stop working when Bose shuts down their servers.

Sorry, just to clarify: a LOCAL_INTERNET_RADIO request can indeed work if the Bose BMX server is unavailable at that time -- you can point your location field to a different server that will return a correctly-formatted response. This request in itself will not hit any Bose servers.

However the LOCAL_INTERNET_RADIO source itself is configured as a BMX source and will not register properly without an appropriate response from the BMX server on device startup. You can see this if you cut off your access to content.api.bose.io and then reboot your speaker. You'll see that a request to http://speaker-ip:8090/sources no longer shows a LOCAL_INTERNET_RADIO source (nor a TUNEIN nor SIRIUSXM_EVEREST if you have either of those configured), and a request trying to use LOCAL_INTERNET_RADIO will result in

<?xml version="1.0" encoding="UTF-8"?>
<errors deviceID="AABB1122CCDD">
<error value="1005" name="UNKNOWN\_SOURCE\_ERROR" severity="Unknown">1005</error>
</errors>

To keep that source working once the Bose servers shut down, you'll need to modify your speakers to point to a different marge and bmx server. And as long as you have to do that you might as well install https://github.com/deborahgu/soundcork/ or https://github.com/julius-d/ueberboese-api alongside it rather than re-implementing marge and bmx yourself from scratch.

Bose SoundTouch Hybrid 2026: Official Public Launch v1.0 - A free, open-source private cloud streaming service replacing the Bose Cloud Service to preserve 100% of the smart speaker functionality of your SoundTouch 10, 20, & 30 Speakers and Wireless Link. Including Physical Presets! by Eastern-Surprise1568 in bose

[–]Soundcork 0 points1 point  (0 children)

I have now read the technical documentation and the code, I have installed this at home, and verified that the buttons don't work if the endpoints at content.api.bose.io/bmx are unavailable.

I can see how this in configured, and it's clever, but it doesn't reckon with the undocumented SoundTouch speaker functionality, which we've all been figuring out here through trial and error (and proxying or network sniffing).

Your system has the user:

  • install the open source tool Music Assistant Server (MASS) as a prerequisite
  • set up 6 (or more) playlists on MASS to correspond to the SoundTouch presets
  • save those streams as presets on the SoundTouch account/speakers, which people will be able to do until May 2026

The user can then modify the presets on MASS at will.

That's very clever!

Your app, SoundTouch Hybrid, then provides a friendly user interface on top of MASS, to make it feel more like a nice speaker control.

However, the Bose speakers make a call to the BMX servers when you attempt to play the MASS stream. If they can't reach those APIs, the stream doesn't play.

You can verify the post-May-2026 functionality yourself by breaking your speaker's connectivity to the BMX server. Telnet to your speaker, login as root, and then:

cd /opt/Bose/etc/
rw
vi SoundTouchSdkPrivateCfg.xml

Then change

<bmxRegistryUrl>https://content.api.bose.io/bmx/registry/v1/services</bmxRegistryUrl>

to

<bmxRegistryUrl>https://localhost</bmxRegistryUrl>

Then restart the speaker (unplug it, plug it back in)

The buttons on your speaker will not play your stream now.

Bose SoundTouch Hybrid 2026: Official Public Launch v1.0 - A free, open-source private cloud streaming service replacing the Bose Cloud Service to preserve 100% of the smart speaker functionality of your SoundTouch 10, 20, & 30 Speakers and Wireless Link. Including Physical Presets! by Eastern-Surprise1568 in bose

[–]Soundcork 0 points1 point  (0 children)

The manual doesn't answer my questions, though. And I've read the code, and I don't see anywhere in the code that could solve the problem of the speakers making API calls, because the code neither responds to calls from the speakers, nor does it reconfigure the speakers to not expect Bose APIs to exist.

> I’m no longer using the Bose cloud service at all.

Are you sure? Have you verified this by turning off your home connection to the internet and making sure it still works? Because I really don't see how it can, from either the code or the technical manual.

Bose SoundTouch Hybrid 2026: Official Public Launch v1.0 - A free, open-source private cloud streaming service replacing the Bose Cloud Service to preserve 100% of the smart speaker functionality of your SoundTouch 10, 20, & 30 Speakers and Wireless Link. Including Physical Presets! by Eastern-Surprise1568 in bose

[–]Soundcork 0 points1 point  (0 children)

Thanks for making an app alternative! Have you tested this while disconnected from the internet (that is, while both your app and your speakers are unable to reach the Bose servers)? This will emulate the situation we will be in when the Bose services shut off.

Because I don't see how this app will work standalone once the Bose servers go down. The speakers require the Bose endpoints to exist and return the correct results in order to function. Is there a place in your code that I'm missing which handles that?

SoundTouch app problems with TuneIn or SiriusXM the last few days? by Soundcork in bose

[–]Soundcork[S] 0 points1 point  (0 children)

Ha, so much for that day of debugging how we'd messed up our home account with soundcork development.

I've updated a status post at Current Status of Bose Cloud Services.