Replies: 8 comments 7 replies
|
Thanks for taking the time to write this step by step guide ! As newbie with containers, I've used "Portainer" which centralize and abstract some complexity related to command line usage to fetch and run the containers. It also includes a web interface with direct access to logs, resources usages, ... definitely something worth exploring. |
|
Ok thx..so you are good to go then? |
|
Version 3.4 works perfectly for me as well. Updating the Raspberry Pi 4 was easy since I didn't have to build the image myself. I just downloaded the bose-soundtouch-hybrid.yml file and used it as is. After making the necessary updates to the .env file, I changed auto_resume_preset=true so the speaker starts with the last played preset when turned on. It’s also great that the USB hijack procedure is now automated. This made it incredibly easy to add a Bose SoundTouch 20 speaker to my home setup. |
|
Thx...I’m still working other issues and then will start on the remaining/new bugs for v3.5 then enhancement request v4.. I want to get the app as turnkey and bullet proof as possible BUT yes I’m going to get at least 1 more ST30 for sure (maybe more!) and probably another st10 that I really don’t want but need in order to build/test the enhancement request for st10 stereo pairing function I imagine the used price of soundtouch speakers are really going to start dropping. There is already some on eBay. But hopefully I'll find ones local here (craigslist etc) in LA that I can go pick-up |
|
This great. It's much better than the notes I took and sent to TJ. The only thing I'd add is to create a backup of the SD card either periodically or at the end of the installation. I'm using HDD Raw Copy Tool v2.6 on my Windows 11 machine. I would also include a step to make the IP address of the Raspberry Pi and the Soundtouch devices static. |
I think i wrote that somewhere about the speakers in my setup and MA recommends that too... never thought about the server. Also some one in all these thread gave me a link to code to dynamically scan network for the speakers and grab their IP's as possibly a way for users to not have to have static speaker IDs...Ill play around with that at some point... WOrking on Bugs v3.5 and then v4 first |
|
First of all also from my side a special thanks to you @TJGigs for all the effort and to @pat-nm for creating the Raspberry pi installation guide! My installation wasn't a walk in the park till I reconfigured everything on a single Raspberry pi. Windows dockers Issue → the used multicast techniques in MA broke because of 'network_mode: bridge'. My players were not discoverable. But... my presets were still not working. Diving into discussion #16 and looking at the screenshots I saw that my system was lacking a proper '/bmx/registry/v1/services' response but also 'GET /streaming/acount/.../full' didn't return anything (if I remember correctly). Then I saw that you mentioned in that same thread that MA and bose-soundtouch-hybrid-2026 should be on the same machine. So, I reconfigured everything on a single Raspberry pi following the above installation guide. This solution resolved all my of issues. Restore SoundTouchSdkPrivateCfg.xml I should mention that I performed that action when I still had the bose-soundtouch-hybrid-2026 in a Windows docker; I'm not sure if that action was really needed but wanted to share it anyway. |

Uh oh!
There was an error while loading. Please reload this page.
Bose SoundTouch Hybrid 2026 – Complete Installation Guide
SoundTouch Without Bose Cloud – Local Solution on Raspberry Pi 5
Background
On May 6, 2026, Bose shut down the cloud service for the entire SoundTouch product line. This means preset buttons, app control, and internet radio no longer work through the official channel.
This guide describes how to bring your SoundTouch speakers fully back to life using a Raspberry Pi 5, Music Assistant, and the open-source project Bose SoundTouch Hybrid 2026 – locally, without cloud, without subscription.
Supported Devices
Device | Support | Physical Presets -- | -- | -- SoundTouch 10 | ✅ Full | ✅ SoundTouch 20 | ✅ Full | ✅ SoundTouch 30 | ✅ Full | ✅ SoundTouch Portable | ✅ Full | ✅ Wireless Link Adapter | ✅ Via WLA Bypass | ➖ (no physical buttons) SoundTouch 300 / Soundbars |Part 2: Prepare the SD Card (on Mac/PC)
Install Raspberry Pi Imager
👉 Download and install from raspberrypi.com/software
Flash the SD Card
Insert the SD card into your computer
Open Imager and configure:
Before flashing, click "Edit Settings":
soundtouchpiStart flashing (~2–3 minutes)
Part 3: Set Up the Raspberry Pi
Boot and Connect
Type
yeson first login, then enter your password.Update the System
Install Docker
Log back in:
Test Docker:
→ "Hello from Docker!" confirms successful installation.
Part 4: Install Music Assistant
Music Assistant (MASS) is the audio engine that manages streaming services and DLNA output.
Create the Docker Compose File
Paste the following content:
Save:
Ctrl+O→ Enter →Ctrl+XStart Music Assistant
Music Assistant is now accessible at:
Configure Music Assistant
Open in your browser and configure:
Music Sources → "+" → Add "TuneIn Radio"
guest(no real account needed)Playback Provider → Enable DLNA/UPnP
Part 5: Install SoundTouch Hybrid 2026
Install Node.js
Since the Docker image is only available for amd64, the app is run directly from source on the Pi:
Download the Project
Find the Pi's IP Address
→ Note the first IP, e.g.
192.168.0.168Create Configuration
Step 1: Configure .env
On first start, the app automatically generates a
config/.env:Adjust the following values:
Leave all other values (
APP_PORT=3000,BOSE_PORT=8090,MASS_PORT=8095) unchanged.Step 2: Configure speakers.json
Enter your speakers:
Set Up the App as a System Service
Content:
Enable and start the service:
→
active (running)confirms successful startup.Open the Web Interface
Part 6: Redirect Speakers to Local Server (USB Hijack)
This is the crucial step. Each speaker must be redirected once from the Bose cloud server to your local Pi.
Prepare the USB Stick (on Mac/PC)
Insert a USB stick into your computer
Format it using Disk Utility (Mac) or Disk Management (Windows):
Create an empty file called
remote_services(no file extension!) on the stick:Mac:
Windows (PowerShell):
Inject Configuration
For each speaker individually:
http://192.168.0.168:3000/control.htmlPart 7: Configure Presets
Add a Radio Station in Music Assistant
http://soundtouch.local:8095Assign Preset in Hybrid App
http://192.168.0.168:3000/control.htmlAdd a Station via Direct Stream URL
If a station is not available in TuneIn:
Part 8: Notes and Troubleshooting
Speaker Takes Longer on Cold Start
After powering on, the speaker needs some time to:
AUTO_RESUME_PRESETThis is normal – once fully booted, it runs stably.
Preset Buttons Not Working After Power Cut
The speaker needs to reach the local server after booting. Wait ~60 seconds – the buttons will work again afterwards.
Station Not Found in Hybrid Search
Stations must first be added to the Music Assistant library. Only then will they appear in the Hybrid search (Strict Filter is ON by default).
Speaker Shown as OFFLINE
sudo systemctl restart soundtouch-hybrid@ Symbol in Terminal (Mac) - my endboss ;-)
If
⌥ Option + Ldoesn't work:⌥ Option + Lfor@View Service Logs
Restart the Service
Architecture Overview
Useful Links
Created May 2026 – based on hands-on installation with Raspberry Pi 5, Music Assistant v2.8.7 and SoundTouch Hybrid 2026 v3
Bose SoundTouch Hybrid 2026 – Complete Installation GuideSoundTouch Without Bose Cloud – Local Solution on Raspberry Pi 5
Background
On May 6, 2026, Bose shut down the cloud service for the entire SoundTouch product line. This means preset buttons, app control, and internet radio no longer work through the official channel.
This guide describes how to bring your SoundTouch speakers fully back to life using a Raspberry Pi 5, Music Assistant, and the open-source project Bose SoundTouch Hybrid 2026 – locally, without cloud, without subscription.
Supported Devices
Device Support Physical Presets⚠️ Limited —
SoundTouch 10 ✅ Full ✅
SoundTouch 20 ✅ Full ✅
SoundTouch 30 ✅ Full ✅
SoundTouch Portable ✅ Full ✅
Wireless Link Adapter ✅ Via WLA Bypass ➖ (no physical buttons)
SoundTouch 300 / Soundbars
Part 1: Hardware
Raspberry Pi 5 – Shopping List
Component Recommendation Approx. Price
Raspberry Pi 5 (4GB) Official Pi Foundation ~$90
27W USB-C Power Supply Official Raspberry Pi PSU ~$15
32GB microSD Card SanDisk Extreme A2 or Samsung Endurance ~$20
Case + Active Cooler Official Pi 5 Case + Active Cooler ~$15
LAN Cable (recommended) Any, Cat5e or better ~$5
Total ~$145
Tip: Starter kits at berrybase.de or thepihut.com often bundle all components cheaper than buying individually.
Not suitable: Raspberry Pi 4 with 1GB RAM, UGREEN NASync DH2300, Synology BeeStation – these do not support Docker with network_mode: host.
Part 2: Prepare the SD Card (on Mac/PC)
Install Raspberry Pi Imager
👉 Download and install from raspberrypi.com/software
Flash the SD Card
Insert the SD card into your computer
Open Imager and configure:
Device: Raspberry Pi 5
Operating System: "Raspberry Pi OS (other)" → "Raspberry Pi OS Lite (64-bit)"
Storage: your SD card
Before flashing, click "Edit Settings":
Hostname: soundtouch
Enable SSH ✅
Username: pi
Password: choose a secure password
Enter Wi-Fi credentials (if not using a LAN cable)
Start flashing (~2–3 minutes)
Part 3: Set Up the Raspberry Pi
Boot and Connect
Insert the SD card into the Pi
Mount the cooler and case
Connect the LAN cable (recommended)
Connect the power supply → wait ~60 seconds
Connect via SSH from your computer:
ssh pi@soundtouch.local
Type yes on first login, then enter your password.
Update the System
sudo apt update && sudo apt upgrade -y
Install Docker
curl -fsSL https://get.docker.com/ | sh
sudo usermod -aG docker pi
exit
Log back in:
ssh pi@soundtouch.local
Test Docker:
docker run hello-world
→ "Hello from Docker!" confirms successful installation.
Part 4: Install Music Assistant
Music Assistant (MASS) is the audio engine that manages streaming services and DLNA output.
Create the Docker Compose File
mkdir -p ~/music-assistant && cd ~/music-assistant
nano docker-compose.yml
Paste the following content:
services:
music-assistant:
image: ghcr.io/music-assistant/server:latest
container_name: music-assistant
restart: unless-stopped
network_mode: host
volumes:
- ./data:/data
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
security_opt:
- apparmor:unconfined
environment:
- LOG_LEVEL=info
Save: Ctrl+O → Enter → Ctrl+X
Start Music Assistant
docker compose up -d
Music Assistant is now accessible at:
http://soundtouch.local:8095/
Configure Music Assistant
Open in your browser and configure:
Music Sources → "+" → Add "TuneIn Radio"
Username: guest (no real account needed)
Free, no login required
Playback Provider → Enable DLNA/UPnP
Note: "Flow Mode" in newer MASS versions is configurable per device, no longer globally.
Part 5: Install SoundTouch Hybrid 2026
Install Node.js
Since the Docker image is only available for amd64, the app is run directly from source on the Pi:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node --version # should show v20.x.x
Download the Project
mkdir -p ~/soundtouch-hybrid && cd ~/soundtouch-hybrid
wget https://github.com/TJGigs/Bose-SoundTouch-Hybrid-2026/archive/refs/heads/main.zip
unzip main.zip
mv Bose-SoundTouch-Hybrid-2026-main soundtouch-hybrid-app
cd soundtouch-hybrid-app
npm install
Find the Pi's IP Address
hostname -I
→ Note the first IP, e.g. 192.168.0.168
Create Configuration
Step 1: Configure .env
On first start, the app automatically generates a config/.env:
npm start
Wait until [Boot] Generated default .env appears, then Ctrl+C
nano config/.env
Adjust the following values:
APP_IP=192.168.0.168 ← Pi's IP address
MASS_IP=192.168.0.168 ← same IP
MASS_USERNAME=pi ← Music Assistant username
MASS_PASSWORD=yourPassword ← Music Assistant password
MASS_CONTAINER_NAME=music-assistant
WLA_PRESET_BYPASS=true ← important for Wireless Link Adapter
AUTO_RESUME_PRESET=true ← resume last station on power-on
Leave all other values (APP_PORT=3000, BOSE_PORT=8090, MASS_PORT=8095) unchanged.
Step 2: Configure speakers.json
nano config/speakers.json
Enter your speakers:
[
{ "name": "Living Room", "ip": "192.168.0.101" },
{ "name": "Kitchen", "ip": "192.168.0.102" },
{ "name": "Bedroom", "ip": "192.168.0.103" },
{ "name": "Wireless Link", "ip": "192.168.0.104" }
]
Important: Assign a fixed IP to each speaker in your router first (DHCP reservation by MAC address). MAC addresses are printed on the underside of each device.
Tip: Find speaker IPs with:
sudo apt install -y arp-scan
sudo arp-scan --localnet
Bose devices have MACs starting with 08:df:1f.
Set Up the App as a System Service
sudo nano /etc/systemd/system/soundtouch-hybrid.service
Content:
[Unit]
Description=Bose SoundTouch Hybrid 2026
After=network.target docker.service
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/soundtouch-hybrid/soundtouch-hybrid-app
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable soundtouch-hybrid
sudo systemctl start soundtouch-hybrid
sudo systemctl status soundtouch-hybrid
→ active (running) confirms successful startup.
Open the Web Interface
http://192.168.0.168:3000/control.html
Part 6: Redirect Speakers to Local Server (USB Hijack)
This is the crucial step. Each speaker must be redirected once from the Bose cloud server to your local Pi.
Prerequisite: Speaker firmware must be up to date. If needed, update using the official Bose app beforehand.
Prepare the USB Stick (on Mac/PC)
Insert a USB stick into your computer
Format it using Disk Utility (Mac) or Disk Management (Windows):
Format: FAT32
Scheme: MBR (Master Boot Record)
Do not use exFAT or NTFS!
Create an empty file called remote_services (no file extension!) on the stick:
Mac:
touch /Volumes/YOUR_STICK_NAME/remote_services
Windows (PowerShell):
New-Item E:\remote_services -ItemType File
Safely eject the USB stick
Inject Configuration
For each speaker individually:
Insert the USB stick into the speaker
Restart the speaker (unplug and replug power)
Wait ~60 seconds
In the Hybrid web interface:
http://192.168.0.168:3000/control.html
Tab "Speaker Admin"
"Bose Cloud Emulation Setup"
Select the speaker from the dropdown
Click "⚡ Inject Configuration"
Success message: "Success! The script was injected and the speaker is rebooting."
The USB stick can be removed afterwards
Wireless Link Adapter: Does not support USB hijack via Telnet. The WLA_PRESET_BYPASS=true in .envhandles this automatically – no manual step required.
Part 7: Configure Presets
Add a Radio Station in Music Assistant
Open Music Assistant: http://soundtouch.local:8095/
Radio → search for a station
Three dots (⋮) → "Add to Library"
Assign Preset in Hybrid App
Open Hybrid app: http://192.168.0.168:3000/control.html
Library Manager → "Search" tab
Search for the station → click "Save"
In "My Library" → assign the station to the desired slot (1–6)
Add a Station via Direct Stream URL
If a station is not available in TuneIn:
Library Manager → "Custom" tab
Enter the stream URL and name
Assign a preset slot
Part 8: Notes and Troubleshooting
Speaker Takes Longer on Cold Start
After powering on, the speaker needs some time to:
Connect to Wi-Fi
Reach the local Pi server
Load presets and trigger AUTO_RESUME_PRESET
This is normal – once fully booted, it runs stably.
Preset Buttons Not Working After Power Cut
The speaker needs to reach the local server after booting. Wait ~60 seconds – the buttons will work again afterwards.
Station Not Found in Hybrid Search
Stations must first be added to the Music Assistant library. Only then will they appear in the Hybrid search (Strict Filter is ON by default).
Speaker Shown as OFFLINE
Check fixed IP in router (DHCP reservation)
Is the speaker powered on and connected to Wi-Fi?
Restart the service: sudo systemctl restart soundtouch-hybrid
@ Symbol in Terminal (Mac) - my endboss ;-)
If ⌥ Option + L doesn't work:
Terminal → Preferences → Profiles → Keyboard → Uncheck "Use Option as Meta key"
Then: ⌥ Option + L for @
View Service Logs
sudo journalctl -u soundtouch-hybrid -n 50
sudo journalctl -u soundtouch-hybrid -f # live log
Restart the Service
sudo systemctl restart soundtouch-hybrid
Architecture Overview
Press preset button
↓
Speaker queries local Pi server
↓
SoundTouch Hybrid 2026 recognizes preset request
↓
Music Assistant starts stream via DLNA/UPnP
↓
Music plays – no Bose Cloud, no app, no subscription
Raspberry Pi 5
├── Music Assistant (Port 8095) ← Streaming engine
└── SoundTouch Hybrid 2026 (Port 3000) ← Bose Cloud emulation
├── Living Room (SoundTouch 30)
├── Kitchen (SoundTouch 20)
├── Bedroom (SoundTouch Portable)
└── Home Cinema (Wireless Link / Lifestyle)
Useful Links
SoundTouch Hybrid 2026: https://github.com/TJGigs/Bose-SoundTouch-Hybrid-2026
Music Assistant: https://music-assistant.io/
Raspberry Pi Imager: https://raspberrypi.com/software
Berrybase (Pi Shop DE): https://berrybase.de/
The Pi Hut (Pi Shop UK): https://thepihut.com/
Radio Browser: https://www.radio-browser.info/
Created May 2026 – based on hands-on installation with Raspberry Pi 5, Music Assistant v2.8.7 and SoundTouch Hybrid 2026 v3
All reactions