Skip to content

Instantly share code, notes, and snippets.

@gmuth
Last active August 2, 2026 12:51
Show Gist options
  • Select an option

  • Save gmuth/3cb7945df6654a965a8a4c60de2627b5 to your computer and use it in GitHub Desktop.

Select an option

Save gmuth/3cb7945df6654a965a8a4c60de2627b5 to your computer and use it in GitHub Desktop.
Soundploy - A selfcontained solution for Bose SoundTouch speakers to preset and play custom radio streams without using a BMX service

SoundPloy V1 - selfcontained

A selfcontained solution for Bose SoundTouch speakers to preset and play custom radio streams without using a BMX service. If root access is too complicated for you look at SoundPloy V2. The idea was first documented here: deborahgu/soundcork#62

Pre-requisites

  • The speaker is connected to your network
  • You know it's IP or hostname
  • You have root access to the speaker via remote_services file or via 3.5 mm audio jack
  • Free disk space is available on the root filesystem
  • You have a list of stream URLs you want to use as presets

Prepare presets on USB drive

Make sure you meet the required prior conditions from above. Create a Bose stream json file for each preset and place it in the root of the USB drive's filesystem. For example, for AC/DC on preset 1 you would create file 1.json with the following content

{
  "audio": {
    "hasPlaylist": false,
    "isRealtime": true,
    "streamUrl": "http://streams.radiobob.de/bob-acdc/mp3-192/mediaplayer"
  },
  "name": "AC/DC",
  "streamType": "liveRadio"
}

For stream urls I recommend to use http only and avoid https. If anyone provides a guide how to update the trusted certificates on device let me know.

Configure device

This step will install file services.json and configure the bmxRegistryUrl accordingly. Additionally, it creates or overrides Sources.xml. Plug in the USB drive to the device, login to the speaker with user root and run:

curl -s soundploy.gmuth.de/v1/install | sh && reboot
Set preset 1
Set preset 2
Set preset 3
Set preset 4
Set preset 5
Set preset 6
The system is going down for reboot NOW!

After reboot, the presets should be available and you can start listening to your custom streams.

Update presets

To update presets, simply change the content of the json files on the USB drive. Then, plug in the USB drive again, login to the speaker with user root and run: copy_presets. No reboot is required, the new presets are available immediately. Expert users can run rw and vi /opt/Bose/html/1.json to update their presets on device.

Radio-Browser stations or other remote services

You are not limited by the stream json files from localhost - remote services can also be used. Check out the example POST requests in the Postman Workspace Bose SoundTouch.

Supported devices

We've successfully tested this on SoundTouch 20 Series 1 and SoundTouch 10. A technical requirement is that /opt/Bose/html is internally served via port 8080. In case your device uses another port you need to fix the preset location url or use the orion station api (examples in Postman collection). To validate the location url is reachable run curl on the device.

curl -i http://localhost:8080/1.json

@pointy56

pointy56 commented Jun 9, 2026

Copy link
Copy Markdown

@gmuth I don't know if you've seen this idea that I've recently posted in the Aftertouch discussion - I'd be interested in your thoughts/advice.
gesellix/Bose-SoundTouch#487
Martin

@Qocksyyy

Copy link
Copy Markdown

After installing SoundPloy on a Bose SoundTouch, the display shows "SoundTouch not Configured" even though streams play fine.

Root cause: SystemConfigurationDB.xml has empty AccountAssociatedEMail and AccountUUID fields.
The firmware treats this as "setup incomplete".

Fix (requires SSH/root on the device)

Backup

cp /mnt/nv/BoseApp-Persistence/1/SystemConfigurationDB.xml
/mnt/nv/BoseApp-Persistence/1/SystemConfigurationDB.xml.bak

Fill empty fields with dummy values

cd /mnt/nv/BoseApp-Persistence/1
sed -i 's||soundploy@local|' SystemConfigurationDB.xml
sed -i 's||00000000-0000-0000-0000-000000000001|' SystemConfigurationDB.xml
sed -i 's||en-US|' SystemConfigurationDB.xml

Reboot

reboot

@JRpersonal

Copy link
Copy Markdown

I develop SoundTouch Reborn (STR), so I have an interest here, saying that first.

Someone in this thread asked for a simple UI where you enter the IP, a stream URL and a preset number. That is roughly what I ended up building, so it may be useful to mention.

STR has a desktop app for Windows, macOS and Linux where you pick the speaker, pick or paste a station, and drop it onto one of the buttons 1 to 6. Station search comes from radio browser, and a plain stream URL can be typed in by hand. No curl and no root shell needed for normal use.

What is different from most approaches here: the agent runs on the speaker itself, a small Go binary in /mnt/nv/streborn. Nothing else keeps running in your network afterwards, no Pi, no NAS, no container, no Home Assistant and no router change. Installation goes over the local network from the desktop app, the USB stick route is only a fallback these days. Playback uses the UPnP AVTransport the firmware already has, the hardware buttons are caught on the firmware's local WebSocket bus, and the old Bose hostnames are pinned to 127.0.0.1 in /etc/hosts so the firmware stops waiting on servers that no longer exist.

Verified on real hardware: SoundTouch 10, 20, 30, 300 and Portable, Wave SoundTouch series III and IV, SA-4, SA-5 and CineMate. Spotify Connect works, Premium is Spotify's requirement. Amazon Music is not possible on this hardware.

MIT licensed, free, donations only, still before 1.0, one person working on it.
https://st-reborn.de
https://github.com/JRpersonal/streborn

Independent project, not affiliated with Bose. Bose and SoundTouch are trademarks of Bose Corporation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment