Sendspin Bluetooth Bridge — multi-device, multiroom, 4 deployment options #5061
Replies: 8 comments
-
|
This sounds really cool! I can't wait to try it. |
Beta Was this translation helpful? Give feedback.
-
|
A lot has happened since the initial post — here's a summary of the key improvements: ● Update: v2.13.1 → v2.16.2 (March 8–10) 🔗 Multiroom & Groups
🔊 Audio
📱 Platform Support
🏠 HA Addon
🔒 Security (v2.16.0) SSRF prevention in HA auth, SSE connection limits (4 max / 30 min TTL), volume clamping 0–100, MAC validation, error response sanitization, set_log_level allowlist, path 🔋 Other
Full changelog: https://github.com/trudenboy/sendspin-bt-bridge/blob/main/CHANGELOG.md |
Beta Was this translation helpful? Give feedback.
-
|
What's new since v2.16.3 → v2.22.2: 🔑 Automatic MA integration — no more manually copying tokens. Sign in with your Music Assistant or Home Assistant credentials right from the web UI, and the bridge obtains a 🔐 Web UI login — protect the dashboard with a password. Optionally authenticate using MA or HA credentials. 🎵 MA auto-discovery — the bridge finds your Music Assistant server automatically via mDNS. No need to enter the server URL manually. 🔇 Faster mute — mute/unmute responds instantly. A separate MUTE_VIA_MA toggle lets you route mute through MA independently from volume. 🔄 Smarter restart — Save & Restart now shows a live progress indicator with per-device status for Bluetooth, PulseAudio, Sendspin, and MA. Click to expand details. 🎨 Redesigned Configuration UI — cleaner layout, advanced settings integrated into main sections, better device list with collapsible entries, static Save button, 🧹 Legacy cleanup — old BLUETOOTH_MAC config deprecated, dead config keys removed automatically on upgrade. 🐛 Lots of bug fixes — MA beta 2.8+ compatibility, HA OAuth token exchange, phantom player cards, mute sync with PulseAudio, and many UI polish improvements. |
Beta Was this translation helpful? Give feedback.
-
|
What's New (v2.22.3 → v2.28.2) 🛡 Security Hardening — session variable leak fixed (cross-user MFA prevention), MAC address validation against command injection, broad except Exception narrowed to specific types across 6 modules, ⚙ Two-Tier Device Control — new global enabled checkbox fully removes a device from BT/PA/MA stack (player unregistered); separate BT Release/Reclaim stays for Bluetooth-only hot toggle. Release 🎧 TWS Earbuds Support — SSP passkey auto-confirm enables pairing TWS devices (HUAWEI FreeClip, etc.) that require confirmation prompts; D-Bus resilience for stale BlueZ objects when earbuds are in ⚡ Smooth Restart — PA sinks muted before restart, auto-unmuted after audio stabilises (1.5 s settling window, 60 s safety timeout). Cached sink names (LAST_SINKS) skip the 3 s A2DP retry loop on 🎵 Sink Routing Fix — each subprocess verifies and corrects its sink-input routing after audio starts; fixes silent speakers when PulseAudio ignores PULSE_SINK with multiple BT speakers. 🔑 HA Login Improvements — actual HA username displayed (reads Ingress X-Remote-User-Display-Name header); login handler split into 4 per-flow handlers; auto-detects MA_AUTH_PROVIDER=ha when MA is 🐛 Bug Report Button — one-click diagnostics collection: system info, device states, last errors — auto-masks sensitive data and opens a pre-filled GitHub issue. Redesigned modal with SVG icons, ⬆️ One-Click Updates — header shows update badge when a new version is available. Update modal with release notes preview: "Update Now" for LXC (one-click apply), "Update in HA" for addon mode, 🎨 Dashboard Redesign — compact connection column (85px, dots-only with tooltips); identity column with ellipsis player names + inline badges; progress time inline with progress bar; volume slider 🎮 Demo Mode — full UI demo with emulated BT devices and MA playback without hardware. Set DEMO_MODE=true or try the live demo. 🔧 S6 + AppArmor — proper PID 1 process supervision (S6 overlay v3.2.0.2) with zombie reaping and signal forwarding. AppArmor in enforce mode matching the Music Assistant addon pattern. 🧪 187 Tests across 15 files — config, volume routing, device status, auth, API endpoints, daemon process, MA token exchange, PulseAudio, BT manager, MA discovery, HA config translation. |
Beta Was this translation helpful? Give feedback.
-
|
What's New (v2.28.2 → v2.30.5) 📋 BT Diagnostics — ℹ️ BT Info modal on each paired device shows full bluetoothctl info (paired, trusted, connected, UUIDs) with Copy button — no SSH needed. Adapter ↻ Reboot button power-cycles ⬇️ Config Backup & Restore — Download and Upload buttons in the Configuration section. Download filename includes bridge name and timestamp (MyBridge_SBB_Config_20260313.json). Upload validates JSON ⛔ Quick Disable from Dashboard — ⛔ Disable button directly on each device card to fully remove a speaker from the BT/PA/MA stack without navigating to Configuration. 🔄 Smooth Restart — PA sinks are muted before restart and auto-unmuted after audio stabilises (1.5 s settling window); 6-step progress bar in the header shows each phase. Non-smooth mode still ⏳ Buffering Indicator — when MA reports a group is playing but the bridge hasn't received audio yet, the card shows ▶ Buffering with a pulsing orange dot instead of a misleading ⏸ Stopped. 🔇 Mute Indicator Fix — startup unmute now correctly propagates status to the UI (was stuck showing 🔇 even though the sink was unmuted). Timeout reduced from 60 s to 15 s for faster feedback. 🔍 Scan UX — Scan button shows a live countdown during cooldown (Scan (28s) → Scan (27s) → …). Buttons reordered: Add before Add & Pair in scan results. 🎨 Dashboard Layout — device cards now arrange in up to 3 columns on wide screens. Card redesign: status dots with colour classes, chip-style sync display, ±Nms delay format, shuffle/repeat always 🐛 Stability — released → disabled persistence bug fixed (devices no longer incorrectly skipped on reboot); MA group matching uses stable player_id instead of fuzzy name comparison; bluetoothctl |
Beta Was this translation helpful? Give feedback.
-
|
What's New (v2.30.6 → v2.31.7) 🎨 Major UI Redesign — device cards, header, and toolbar were fully rebuilt to better match Home Assistant / Music Assistant design language. Added grid/list view, adapter and status filters, group 🧩 UI Consistency & Configuration Cleanup — the Configuration area was refactored into a proper card-based settings surface with a cleaner hierarchy across General / Security / Bluetooth / Devices / 🔗 Faster Navigation & Device Management — adapter badges now jump directly to Configuration → Bluetooth, custom adapter names are editable, and Music Assistant sync-group badges open the correct MA 📊 Better Runtime Visibility — device delay is now shown consistently in both card and list views, list rows expose the same key runtime context as cards, and adapter/status badges are visually 🛡 Security Hardening — added CSRF protection on login, CSP and X-Content-Type-Options headers, adapter input validation against command injection, config upload size limits, sanitized API error 🔐 Home Assistant Login / MFA Improvements — auth flows were improved overall, and v2.31.7 fixes a regression in direct HA login with MFA/TOTP: the second-step authenticator form now preserves a 🧪 Tests & CI — the test suite was expanded and current validation now passes with 223 tests. CI was also fixed to install libdbus-1-dev, allowing dbus-python to build correctly in GitHub Actions. ✨ Smaller UX Improvements — the version badge now links to GitHub release notes, the username links to the HA/MA profile when available, empty states span the full grid width, card hover no longer |
Beta Was this translation helpful? Give feedback.
-
What changed since v2.31.8Since On the runtime / ops side, updates for native LXC installs became much safer with archive-based sync, detached upgrade execution, smoke checks, and rollback logic. Config handling, diagnostics, On the Music Assistant integration side, album-art delivery was fixed through a safe same-origin proxy, queue metadata and progress handling became more reliable, and the latest releases moved On the UI side, the dashboard moved much closer to a real Music Assistant-style experience: cleaner card/list parity, tighter expanded-list playback layout, more truthful control availability, |
Beta Was this translation helpful? Give feedback.
-
|
What’s New (v2.31.9 → v2.40.6) 🎛️ A much better Music Assistant playback UI — the dashboard got a lot more polished across both card and list views. Playback controls, queue previews, progress display, badges, warnings, and live 🖼️ Better now-playing and artwork handling — album art is more reliable again, playback progress is less jumpy, and the UI does a much better job showing what is actually playing right now. 🔁 Music Assistant controls are much more reliable — a lot of work went into fixing next / previous / shuffle / repeat, especially for solo players and mixed MA versions. In practice, transport ⚡ Faster, calmer UI behavior — queue actions and MA state sync were improved so the interface reacts faster, shows more useful pending/confirmed state, and recovers more gracefully from short 🩺 Far better status, startup, and diagnostics — the bridge now exposes startup progress, richer health/status snapshots, better diagnostics, and clearer onboarding hints. That makes it much easier 🧩 Home Assistant addon experience improved a lot — stable, RC, and beta tracks are now much clearer and safer to use. Parallel addon channels were improved, ingress behavior is cleaner, and the UI ⬆️ Updates are safer and clearer — update channels are now first-class, standalone/LXC updates are more predictable, and the release flow is cleaner: stable builds use GitHub Releases, while 🎨 General UI polish everywhere — lots of smaller improvements landed across warnings, spacing, helper text, header actions, onboarding, and config screens. 🎮 Want to see the UI almost live before updating? Try the demo stand here: 🙏 And thank you all for the interest in the project, the testing, the feedback, the bug reports, and the ideas. It really helps move the bridge forward much faster
|
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
🔊 Sendspin Bluetooth Bridge
Turn any Bluetooth speaker into a Music Assistant player — no new hardware, no cloud.
This is a community companion project based on loryanstrant's sendspin-client. It started as a Docker wrapper and has grown into a full-featured multi-device bridge with a web dashboard, multiroom sync, and four deployment options.
Repository: https://github.com/trudenboy/sendspin-bt-bridge
Documentation: https://trudenboy.github.io/sendspin-bt-bridge/
What it does
Each Bluetooth speaker appears as a regular player in Music Assistant — just like Sonos or Chromecast. You can play music, control volume, group speakers for multiroom, and manage everything from the MA UI or a dedicated web dashboard.
Key features
static_delay_msfor A2DP buffer syncDeployment
Run multiple bridge instances against the same MA server — each handles the speakers within its Bluetooth range:
Tested on
All 5 speakers run multiroom-synced from 3 bridge instances with CSR8510 USB adapters.
Install
HA Addon (one click):
1. Add the addon repository to Home Assistant:
Or manually: Settings → Add-ons → Add-on store → ⋮ → Repositories → add
https://github.com/trudenboy/sendspin-bt-bridge2. Find Sendspin Bluetooth Bridge in the store and click Install.
Docker / LXC: see installation docs.
Built on top of the excellent sendspin-client by @loryanstrant and the Sendspin protocol in Music Assistant. Thanks for making this possible! 🙏
Beta Was this translation helpful? Give feedback.
All reactions