This setup should allow your Bose SoundTouch speakers to continue playing Internet radio locally after Bose discontinues its cloud services (February 2026).
This method is experimental until confirmed after the official EOL.
It replaces the soon-to-be-retired TuneIn integration while keeping local playback working.
Note: Based on recent community testing, SoundTouch presets will likely stop working after the Bose cloud shutdown in February–March 2026 unless a workaround is found.
08-12-2025 — Removed most of this Gist because there’s a much simpler solution than using the Gerbera media server: hosting a JSON description of the radio station on an HTTP server (thanks to user gmuth).
19-11-2025 — Added testing notes:
thlucas1/homeassistantcomponent_soundtouchplus#37 (comment)
Testing strongly indicates that even for “local” services like UPnP (STORED_MUSIC), Bose SoundTouch devices still rely heavily on the Bose cloud for initial setup and for enabling/persisting certain features.
This means that once the Bose cloud services are truly shut down, it is highly likely that:
- Factory-reset devices will not be able to register new UPnP or other music services via the API or the app.
- Existing configurations may disappear, especially presets, if the device attempts to “re-authenticate” or periodically sync with the now-absent cloud.
This reinforces the need to have SoundTouch devices fully configured and cloud-registered before the EOL date, hoping that existing configurations will continue to work for local playback afterward.
- Reverse-engineering the cloud interaction and simulating the required responses locally
- Using an external device on AUX IN (e.g., a streamer or Raspberry Pi) to provide radio and other sources independent of the SoundTouch cloud
You can host a JSON description of the radio station on any HTTP server, e.g. bbc1.json.
Create a file such as bbc1.json containing:
{
"audio": {
"hasPlaylist": false,
"isRealtime": true,
"streamUrl": "http://bbc.com/stream/..."
},
"imageUrl": "",
"name": "BBC 1",
"streamType": "liveRadio"
}Place this file on your HTTP server.
Now store the station to preset 1 using:
curl -d @- http://soundtouch:8090/storePreset << XML
<preset id="1">
<ContentItem source="LOCAL_INTERNET_RADIO" type="stationurl" location="http://yourserver/bbc1.json">
<itemName>BBC 1</itemName>
</ContentItem>
</preset>
XML- Stream URLs must use HTTP, not HTTPS.
- Sometimes the SoundTouch does not start the preset immediately — a reboot usually fixes it.
- This method remains experimental until confirmed after the SoundTouch cloud EOL in February 2026.
- Also check out soundcork, which aims to intercept SoundTouch API calls and may offer a long-term solution:
https://github.com/deborahgu/soundcork
@Olivier822
You really need to use http instead of https...
Well, since you're not that much into coding, I'll share you the exact steps I did to get it working on my Bose Soundtouch radio .
Notice that I already have several microservices running in Docker at my home server, so I had the hard- and software already available to quickly deploy another microservice (Soundcork) which can be persistent over there for as long as needed.
In my case this is on a Debian (Linux) environment; but you can certainly get similar results on other platforms as well.
I played a bit around with Soundcork and if the server is not running, I cannot start any of the presets of my Bose system. So the Soundcork service (or similar) seems to be a hard requirement at first sight.
Preparing a server for running Soundcork in a Docker container
If you decided where you're going to run (and keep) this server, use a terminal and enter these commands below to prepare your server with the required tools before we install Soundcork.
It could be that you can skip some steps, because some tools might already be installed; in that case just continue to the next step.
The first part is mainly focused on installing Docker, I'll be as transparent as possible so that you understand what you are doing in each step.
sudo apt update && sudo apt install curl ca-certificatesWith this chained command above, we're doing 3 things at once:
sudo install -m 0755 -d /etc/apt/keyringsThis command creates a directory and sets the right permissions to work with it; we'll be adding the required keys for the Docker repo over there in the next step.
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.ascWe downloaded the GPG key from Docker.
chmod a+r /etc/apt/keyrings/docker.ascWe're making sure that all users on your server can read this key.
You have to copy this whole block at once, do not execute it line by line.
This part adds the Docker repo to you server, it makes sure we can install everything we need to get Docker running.
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin gitWe're installing several things at once again:
Installing Soundcork
At the time of writing, the Soundcork developer did not document this way of installing Soundcork, but this is exactly how I did it, because I spotted the docker-compose.yml file, which makes installing things really easy. You can follow these steps or adapt to your needs, I'm just reporting 1:1 what I did to get my radio presets working again.
cd /opt/This is the place where I wanted to install soundcork.
git clone https://github.com/deborahgu/soundcork.gitWe're getting a copy of the Soundcork source code on your own server; it creates a new directory "soundcork" inside the /opt/ directory and puts the source code over there. (/opt/soundcork)
cd soundcork && ls -alWe're first navigating to the soundcork folder and ask to display a detailed list structure
vi docker-compose.yml(this can also benano docker-compose.yml, whichever file editor floats your boat is fine.)I edited a few personal things, but this might be different for you:
base_url=http://<ip_of_your_server_here>:8001(but you can leave it like it original was, I have static IP's so that's my preferred way of pointing to servers)/root/bosePresets/:/app/soundcork/static/bosePresets=> on my host system, I have a/root/bosePresets/folder containing these radio station files. We're simply passing that folder through at the Docker instance, right at a place where we can easily access the files from the radio.mkdir -p /root/bosePresets=> this creates a bosePresets folder in your host's /root folder, so that managing radio stations is a bit more easy. (I couldn't find in Soundcork how to edit these radio presets, so I did it manually with the curl command instead.)docker compose up=> This finally creates and launches the soundCork server, it will be available in your browser at http://<ip_of_your_server>:8000/Adding new radio presets
In the previous section we prepared a folder /root/bosePresets on the host system (outside Docker), we're going to make use of this now to add the new radio presets.
cd /root/bosePresetstouch radio1.json radio2.json topradio.json some_other_radio.json yet_another_radio.json and_another_radio.jsonThis makes 6 json files which all will be pointing to the radio streams that we want to bind to the radio preset buttons.
vi radio1.json(and later on all the other json files too)Edit the radio preset file and paste the following content (don't forget to put your own streamUrl value to your preferred radio station over there + only use http links, no https.)
{ "audio": { "hasPlaylist": true, "isRealtime": true, "streamUrl": "http://icecast.vrtcdn.be/radio1.aac" }, "name": "Radio 1", "streamType": "liveRadio" }/ ! \ Don't forget to replace
<ip_of_your_server_here>first and also keep in mind that<preset id="1">means button #1.Sources
For now, this lengthy solution is fine for me, although I do hope to find a better more "minimal" solution without server. I was thinking about maybe running a simple script on the radio since it's also using linux as its operating system, but I didn't find the time yet to further investigate this.