Repository: music-assistant/home-assistant-addon Branch: main Commit: 4dbbae54f213 Files: 27 Total size: 56.1 KB Directory structure: gitextract_at995iv7/ ├── .gitignore ├── README.md ├── gitignore ├── music_assistant/ │ ├── CHANGELOG.md │ ├── README.md │ ├── apparmor.txt │ ├── config.yaml │ └── translations/ │ └── en.yaml ├── music_assistant_beta/ │ ├── CHANGELOG.md │ ├── README.md │ ├── apparmor.txt │ ├── config.yaml │ └── translations/ │ └── en.yaml ├── music_assistant_dev/ │ ├── Dockerfile │ ├── README.md │ ├── apparmor.txt │ ├── build.yaml │ ├── config.yaml │ ├── entrypoint.sh │ └── translations/ │ └── en.yaml ├── music_assistant_nightly/ │ ├── CHANGELOG.md │ ├── README.md │ ├── apparmor.txt │ ├── config.yaml │ └── translations/ │ └── en.yaml ├── repository.json └── ytm_po_token_generator/ └── config.yaml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .DS_Store ================================================ FILE: README.md ================================================ Music Assistant ================================== **Music Assistant** This is the Home Assistant App repository for Music Assistant for a convenient way to run the [Music Assistant Server](https://github.com/music-assistant/server) Music Assistant is a music library manager for your offline and online music sources, combined with the power of Home Assistant to easily stream your favourite music to a wide range of supported players. **Documentation:** https://music-assistant.io/ For issues, please go to [the issue tracker](https://github.com/music-assistant/hass-music-assistant/issues). For feature requests, please see [feature requests](https://github.com/music-assistant/hass-music-assistant/discussions/categories/feature-requests-and-ideas). ## Installation [![Open your Home Assistant instance and show the Add App repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fmusic-assistant%2Fhome-assistant-addon) If you want to add this repository manually, please follow the procedure highlighted in the [Home Assistant website](https://home-assistant.io/hassio/installing_third_party_addons). Use the following URL to add this repository: https://github.com/music-assistant/home-assistant-addon [repository-badge]: https://img.shields.io/badge/Add%20repository%20to%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge [repository-url]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fmusic-assistant%2Fhome-assistant-addon ================================================ FILE: gitignore ================================================ __pycache__/ *.py[cod] *$py.class venv/ ================================================ FILE: music_assistant/CHANGELOG.md ================================================ # [2.8.7] - 08.05.2026 ## 📦 Stable Release _Changes since [2.8.6](https://github.com/music-assistant/server/releases/tag/2.8.6)_ ### 🚀 Features and enhancements - Emby Music Provider: add audio format to stream details (by @hatharry in #3796) ### 🐛 Bugfixes - Workaround for "Youtube Music playlist stalls on uploaded music" music-assistant/support#4469 (by @whitty in #3156) - Fix volume of Sendspin bridge players defaulting to 100% (by @maximmaxim345 in #3782) - Suppress `StreamStoppedError` when skipping tracks with Sendspin (by @maximmaxim345 in #3783) - Fix YTMusic stream format selection (by @greenmansuperhero in #3784) - Update MASS_LOGO_ONLINE URL to raw GitHub link (by @h4de5 in #3797) - Fix library sync deletion for non-streaming providers (by @OzGav in #3806) - bbc_sounds: use LiveStation.id for station identifier (by @MacTheFork in #3807) - YTMusic: Add auto mixes to recommendations. (by @MarvinSchenkel in #3816) - Airplay: Add debounce to prevent-playback=1 commands (by @MarvinSchenkel in #3817) - Fix Spotify playlists failing when track count is a multiple of 50 (by @gitviola in #3818) - Snapcast: Adopt orphaned snapserver streams on name collision instead of misreporting as no-free-port (by @PeterPalenik in #3830) - Fix output bit depth ignoring supported sample-rate/bit-depth pairs in player settings (by @OzGav in #3842) ### 🧰 Maintenance and dependency bumps - Use /playlists/{id}/items endpoint (Spotify Feb 2026 API change) (by @Yipsh in #3436) - Spotify: Update get_artist_albums limit, log error messages, guard methods (by @delatt in #3762) ## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @MacTheFork, @MarvinSchenkel, @OzGav, @PeterPalenik, @Yipsh, @delatt, @gitviola, @greenmansuperhero, @h4de5, @hatharry, @maximmaxim345, @whitty # [2.8.6] - 23.04.2026 ## 📦 Stable Release _Changes since [2.8.5](https://github.com/music-assistant/server/releases/tag/2.8.5)_ ### 🐛 Bugfixes - Fix ffmpeg process leak in smart fades mixer on aborted playback (by @marcelveldt in #3725) - Harden AirPlay STOP command delivery and add teardown logging (by @marcelveldt in #3729) - Prevent concurrent flow-stream producers from corrupting the playlog (by @marcelveldt in #3731) - Guard Sonos volume attribute update against uninitialized state (by @marcelveldt in #3732) - Fix ORF Radiothek browse reverting to top level (by @OzGav in #3733) - Preserve multi-value album type across all tag parsers (by @OzGav in #3743) - [Soundcloud]: improving search (by @fionn-r in #3745) - Fix enqueue action 'replace' stopping the music (by @MarvinSchenkel in #3753) - Qobuz: fix credential leak on 401 and populate date_added (by @OzGav in #3754) - Implement power control function for squeezelite (by @MarvinSchenkel in #3755) - Fix manual genres disappearing after a cleanup run (by @MarvinSchenkel in #3757) - Force imageproxy over streamserver for Airplay artwork (by @MarvinSchenkel in #3763) - Fix tidal recommendations (by @jozefKruszynski in #3767) - Change heartbeat of websocket and sendspin proxy socket to 25s (by @MarvinSchenkel in #3769) - Fix 30s delay after switching tracks on Sendspin (by @maximmaxim345 in #3777) ### 🧰 Maintenance and dependency bumps - Bump auntie-sounds to 1.1.8 (by @kieranhogg in #3723) ## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @MarvinSchenkel, @OzGav, @fionn-r, @jozefKruszynski, @kieranhogg, @marcelveldt, @maximmaxim345 # [2.8.5] - 17.04.2026 ## 📦 Stable Release _Changes since [2.8.4](https://github.com/music-assistant/server/releases/tag/2.8.4)_ ### 🚀 Features and enhancements - Apple Music: Add Unicode NFC normalization for artist/album/track names (by @jasonhollis in #2631) - Apple Music: Add content rating check for explicit tracks (by @LosCV29 in #3514) - Apple Music: Add content rating check for explicit tracks (by @LosCV29 in #3669) ### 🐛 Bugfixes - Fix AirPlay DACP volume control for Sonos speakers (by @marcelveldt in #3654) - Fix queue items showing zero/unknown duration (by @marcelveldt in #3668) - Tweak imageproxy (by @MarvinSchenkel in #3671) - Several fixes for synced playback stability (by @marcelveldt in #3672) - Filter stale podcast episodes (by @OzGav in #3673) - Sendspin: guard against negative track_progress in metadata (by @marcelveldt in #3681) - Fix sync group session lifecycle and AirPlay late joiner sync (by @marcelveldt in #3682) - Automatically clean up loudness measurements on media item deletion (by @MarvinSchenkel in #3687) - Fix multiple (virtual) devices on the same host being merged. (by @MarvinSchenkel in #3688) - Fix sync group dissolve+reform race with async providers (by @marcelveldt in #3691) - Fix Jellyfin multidisc albums with same named tracks (by @MarvinSchenkel in #3692) - Fix Volume control for Bluesound native devices (by @MarvinSchenkel in #3693) - Fix race condition in AirPlay stream session client removal (by @marcelveldt in #3698) - Improve loudness measurement robustness (by @marcelveldt in #3703) - Fix smart fades mixer sometimes choking up the flow stream + Smart Fades provider not starting on ARM (by @MarvinSchenkel in #3706) - Bump aiohttp to 3.13.5 and ibroadcastaio to 0.6.0 (by @staticdev in #3707) - Fix syncgroup state derivation and tighten lifecycle handling (by @marcelveldt in #3709) - Fix duration parsing for M3U playlist items (by @marcelveldt in #3714) - Fix AirPlay cleanup idling re-added clients (by @marcelveldt in #3716) - Fix sync leader child state forwarding (by @marcelveldt in #3717) - Forward syncgroup join/unjoin to the syncgroup player (by @marcelveldt in #3718) - Fix audiobook controller not using userid in library_items call (by @fmunkes in #3719) ### 🧰 Maintenance and dependency bumps
4 changes - [Backport to stable] 2.8.2 (by @marcelveldt in #3564) - Add diagnostics for AirPlay stream stalls and increase flow buffer (by @marcelveldt in #3696) - Remove temporary airplay diagnostics (by @marcelveldt in #3720) - Fix power control for squeezelite (by @marcelveldt in #3721)
## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @LosCV29, @MarvinSchenkel, @OzGav, @fmunkes, @jasonhollis, @marcelveldt, @staticdev ================================================ FILE: music_assistant/README.md ================================================ # Music Assistant App The official Music Assistant App for Home Assistant. ## About Music Assistant Music Assistant is a free, open-source music library manager that connects to your streaming services and a wide range of connected speakers. Turn your Home Assistant instance into your own personal music streaming hub! ## Features - 🎵 **Multi-source Music Library**: Connect Spotify, YouTube Music, Qobuz, Tidal, and more - 🔊 **Universal Player Support**: Works with Sonos, Chromecast, AirPlay, DLNA, Squeezebox, and many more - 🎶 **Unified Library**: All your music from different sources in one place - 🎯 **Smart Playback**: Gapless playback, crossfading, and audio normalization - 📱 **Beautiful Interface**: Modern web interface accessible through Home Assistant - 🏠 **Home Assistant Integration**: Full integration with Home Assistant's media player platform ## Installation 1. Navigate to **Settings** → **Apps** → **App Store** in Home Assistant 2. Search for "Music Assistant" 3. Click **Install** 4. Wait for the installation to complete 5. Click **Start** 6. Open the **Web UI** to set up Music Assistant ## Configuration ### Available Options ```yaml log_level: info safe_mode: false ``` #### log_level Set the (global) logging level: - `error`: Only show errors - `warning`: Show warnings and errors - `info`: Normal logging (recommended) - `debug`: Detailed logging for troubleshooting **Default**: `info` **Recommendation**: Consider using `debug` level only to troubleshoot any issues. Best to keep the global setting set to just `info`. TIP: Within Music Assistant, each provider allows you to override the log level. #### safe_mode When enabled, Music Assistant starts without loading any providers. This is useful for troubleshooting startup issues or provider-related problems. **Default**: `false` ## Getting Started 1. After starting the App, click **Open Web UI** 2. Follow the onboarding wizard to set up your first music provider 3. Connect your speakers/players 4. Start enjoying your music! ### Optional: Home Assistant Integration For advanced automation and control, you can optionally install the **Music Assistant integration** in Home Assistant. This integration allows you to: - 🤖 **Automate music playback** from Home Assistant automations and scripts - 🎛️ **Control playback** using Home Assistant services - 📊 **Access player states** and attributes in your dashboards - 🎵 **Use Music Assistant** in your Home Assistant scenes and routines **To install the integration:** The Music Assistant server should be auto detected by Home Assistant once you install the App (or any Music Assistant server in your network). On the Devices & services page, you should be greeted with a card for the discovered server to simply set up the integration. **Note**: The App provides the Music Assistant server, while the integration provides the Home Assistant entities and automation capabilities. The App works perfectly fine without the integration if you only want to use the web interface. ## Documentation For detailed documentation, visit: - 📖 [Official Documentation](https://music-assistant.io) - 💬 [Community Discussions](https://github.com/orgs/music-assistant/discussions) - 🐛 [Support & Issue Tracker](https://github.com/music-assistant/support) - 💭 [Discord Server](https://discord.gg/PZQ6RWbfeS) ## Support If you encounter any issues: 1. Check the App logs (available in the Home Assistant App page) 2. Visit the [documentation](https://music-assistant.io) 3. Search existing issues at [music-assistant/support](https://github.com/music-assistant/support) 4. Ask for help on [Discord](https://discord.gg/PZQ6RWbfeS) or [GitHub Discussions](https://github.com/orgs/music-assistant/discussions) ## Updates This is the **stable** channel. Updates are released after thorough testing and are recommended for everyday use. ### Update Frequency - Major releases: Every few months (more or less once per quarter) - Bug fixes: As needed - Security updates: Immediately ## Version Information This App uses stable releases of Music Assistant. For the latest features, consider the BETA or NIGHTLY versions (use at your own risk). ## Data Storage All Music Assistant data is stored within the App's data directory: - Music library database - Configuration settings Making a backup of the Music Assistant App within Home Assistant will therefore also include your Music Assistant data. Please ensure to always make a backup before updating to a new version so you can always easily revert to the previous version! ## Performance Tips - Use a fast storage medium (SSD recommended) - Ensure adequate RAM (minimum 4GB for Home Assistant + this App) - Keep your Music Assistant instance updated ## Contributing Music Assistant is open source! Contributions are welcome: - 🐛 [Report bugs](https://github.com/music-assistant/support) - 💡 [Suggest features](https://github.com/orgs/music-assistant/discussions) - 🔧 Submit pull requests - 📝 Improve documentation Visit the [Music Assistant organization](https://github.com/music-assistant) on GitHub to contribute. ## License Music Assistant is licensed under the Apache License 2.0. ================================================ FILE: music_assistant/apparmor.txt ================================================ profile music_assistant_addon flags=(attach_disconnected,mediate_deleted) { capability, file, signal, mount, umount, remount, network udp, network tcp, network dgram, network stream, network seqpacket, network inet, network inet6, network netlink raw, network unix dgram, capability setgid, capability setuid, capability sys_admin, capability dac_read_search, /dev/* mrwkl, /tmp/** mrkwl, # Data access /data/** rw, /media/** rw, # docker daemon confinement requires explict allow rule for signal signal (receive) set=(kill,term) peer=/usr/bin/docker, } ================================================ FILE: music_assistant/config.yaml ================================================ name: Music Assistant version: 2.8.7 slug: music_assistant description: The Music Assistant server is a free, opensource Media library manager that connects to your streaming services and a wide range of connected speakers. url: https://music-assistant.io arch: - amd64 - aarch64 homeassistant_api: true discovery: - music_assistant auth_api: true host_network: true ingress: true ingress_port: 8094 panel_icon: mdi:music-assistant panel_title: Music Assistant panel_admin: false uart: false apparmor: true map: - media:rw - ssl:ro init: false backup_exclude: - cache.db - collage_images/* - .cache/* stage: stable image: ghcr.io/music-assistant/server tmpfs: true options: log_level: info safe_mode: false schema: log_level: list(debug|info|warning|error) safe_mode: bool privileged: - SYS_ADMIN - DAC_READ_SEARCH ================================================ FILE: music_assistant/translations/en.yaml ================================================ configuration: log_level: name: Log Level description: "Set the (global) log level (NOTE: only enable debug when needed)." safe_mode: name: Safe mode description: "Start the Music Assistant server in safe mode where only the core controllers are started without any providers, to troubleshoot issues" ================================================ FILE: music_assistant_beta/CHANGELOG.md ================================================ # [2.9.0b11] - 12.05.2026 ## 📦 Beta Release _Changes since [2.9.0b10](https://github.com/music-assistant/server/releases/tag/2.9.0b10)_ ### 🚀 Features and enhancements - Add player filter to scrobble providers (by @Tommatheussen in #3823) - Add manual IP addresses setting to the Sendspin provider (by @staticdev in #3846) - Detect Sendspin Cast Receiver failures and show them in the frontend (by @maximmaxim345 in #3853) - TuneIn: add translation_key to trending recommendations folder (by @dmoo500 in #3865) - TuneIn: store image URLs as HTTPS instead of HTTP (by @dmoo500 in #3868) ### 🐛 Bugfixes - Workaround for "Youtube Music playlist stalls on uploaded music" music-assistant/support#4469 (by @whitty in #3156) - Fix protocol recovery with missing cached parent (by @prydie in #3829) - Set NTS stations + mixtape images to square aspect (by @mike-sheppard in #3850) - Fix imageproxy URL encoding for paths containing only spaces (by @OzGav in #3863) - Tolerate non-UTF-8 metadata in DLNA SOAP/NOTIFY responses (by @OzGav in #3864) - Fix event loop blocks when building the crossfade buffer (by @MarvinSchenkel in #3867) - Emby Music Provider: scrobble tracks only (by @hatharry in #3871) - Disable zone handling for a disabled player in MusicCast (by @fmunkes in #3872) - Fix AA Background Processing to not Monopolize CPU (by @chrisuthe in #3873) - Fix media progress retrieval for open sessions in Audiobookshelf (by @fmunkes in #3879) - Fix silence after warmup buffer period (by @MarvinSchenkel in #3880) ### 🎨 Frontend Changes - Add trending_stations translation key for TuneIn recommendations (by @dmoo500 in [#1765](https://github.com/music-assistant/frontend/pull/1765)) ### 🧰 Maintenance and dependency bumps
4 changes - Eliminate unused referencs to sync adjust. (by @bradkeifer in #3852) - Bump python-fullykiosk from 0.0.14 to 0.0.15 (by @dependabot[bot] in #3876) - Bump mypy from 1.19.1 to 2.1.0 (by @dependabot[bot] in #3877) - ⬆️ Update music-assistant-frontend to 2.17.155 (by @music-assistant-machine in #3878)
## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @MarvinSchenkel, @OzGav, @Tommatheussen, @bradkeifer, @chrisuthe, @dmoo500, @fmunkes, @hatharry, @maximmaxim345, @mike-sheppard, @prydie, @staticdev, @whitty # [2.9.0b10] - 07.05.2026 ## 📦 Beta Release _Changes since [2.9.0b9](https://github.com/music-assistant/server/releases/tag/2.9.0b9)_ ### 🚀 New Providers - Add Yandex Music Connect (Ynison) plugin provider (by @trudenboy in #3614) - Add NTS Radio (Music Provider) (by @mike-sheppard in #3722) ### 🚀 Features and enhancements - kion_music: upgrade to yandex-music v3 - raw/enc FLAC, lyrics, similar artists, browse (by @trudenboy in #3234) - Yandex Music: rotor session API, Wave Modes, user presets, library sync improvements (by @trudenboy in #3606) - Update yandex_smarthome provider to v1.4.5 — auto-create skill flow (by @trudenboy in #3785) - Enrich Sendspin metadata with track number, year, album artist, and artist artwork (by @OnFreund in #3788) - Set PlayerFeature.SELECT_SOURCE when the FINAL source list is multi-entry (by @rnewman in #3789) - Add custom playlist image functionality to local file provider (by @OzGav in #3794) - Emby Music Provider: add audio format to stream details (by @hatharry in #3796) - Emby Music Provider: add on played event handler (by @hatharry in #3805) - Throttle torch to max 25% of CPU to prevent spikes during analysis (by @MarvinSchenkel in #3808) - Add option to use local genre metadata only when available (by @OzGav in #3815) ### 🐛 Bugfixes - Neteasecloudmusic: Stabilize login, recommendations, and dynamic radio playback (by @xiasi0 in #3761) - Handle syncing for cases where session establishment is both early and late for adhering to required ntpstart value (by @bradkeifer in #3776) - Fix volume of Sendspin bridge players defaulting to 100% (by @maximmaxim345 in #3782) - Suppress `StreamStoppedError` when skipping tracks with Sendspin (by @maximmaxim345 in #3783) - Fix YTMusic stream format selection (by @greenmansuperhero in #3784) - Nicovideo: Fix watch history API endpoint (v1 → v2) (by @Shi-553 in #3791) - Update MASS_LOGO_ONLINE URL to raw GitHub link (by @h4de5 in #3797) - WiiM: Set the default max sample rate to 96kHz (by @teancom in #3798) - Bump wiim SDK to 0.1.4 to fix track transition tracking (by @teancom in #3801) - Fix library sync deletion for non-streaming providers (by @OzGav in #3806) - bbc_sounds: use LiveStation.id for station identifier (by @MacTheFork in #3807) - Decrease buffer warmup duration to 8s (by @MarvinSchenkel in #3814) - YTMusic: Add auto mixes to recommendations. (by @MarvinSchenkel in #3816) - Airplay: Add debounce to prevent-playback=1 commands (by @MarvinSchenkel in #3817) - Fix Spotify playlists failing when track count is a multiple of 50 (by @gitviola in #3818) - Fix queue restore: call from_cache to reconstruct radio_source and enqueued_media_items (by @dmoo500 in #3827) - Snapcast: Adopt orphaned snapserver streams on name collision instead of misreporting as no-free-port (by @PeterPalenik in #3830) - Fix sync issues with Sendspin players (by @maximmaxim345 in #3840) - Fix Sendspin Cast bridge silently failing to set up (by @maximmaxim345 in #3841) - Fix output bit depth ignoring supported sample-rate/bit-depth pairs in player settings (by @OzGav in #3842) - Bump `aiosendspin` to 5.2.0 to fix slow desyncing at some player sample rates (by @maximmaxim345 in #3845) - Allow AirPlay2 devices to be selected for synchronised playback (by @bradkeifer in #3847) ### Other Changes - Stream PCM to audio analysis providers during background scan (by @chrisuthe in #3821) ### 🧰 Maintenance and dependency bumps
20 changes - Spotify: Update get_artist_albums limit, log error messages, guard methods (by @delatt in #3762) - Rename icon in audio analysis manifest.json (by @OzGav in #3781) - Add comments to demo player provider for sound modes and player options (by @fmunkes in #3790) - Add description for "Hide player in UI" setting (by @OzGav in #3792) - Bump deno from 2.7.4 to 2.7.12 (by @dependabot[bot] in #3799) - ⬆️ Update music-assistant-frontend to 2.17.153 (by @music-assistant-machine in #3802) - Bump pytest from 9.0.2 to 9.0.3 (by @dependabot[bot] in #3803) - Maintenance: sort provider dirs in gen_requirements_all for deterministic output (by @trudenboy in #3804) - Refine description for 'Hide in UI' config entry (by @OzGav in #3809) - ⬆️ Update music-assistant-models to 1.1.116 (by @music-assistant-machine in #3810) - ⬆️ Update music-assistant-frontend to 2.17.154 (by @music-assistant-machine in #3812) - Bump actions/download-artifact from 4 to 8 (by @dependabot[bot] in #3819) - Bump actions/upload-artifact from 4 to 7 (by @dependabot[bot] in #3820) - Revert "Remaintain jellyfin (#3528)" (by @staticdev in #3822) - VBAN Receiver update (by @sprocket-9 in #3825) - Radio Paradise small cleanup (by @teancom in #3826) - Change Snapcast stage from stable to unmaintained (by @OzGav in #3835) - Enhance warning for Spotify top tracks fetch failure (by @OzGav in #3837) - Bump soco from 0.30.14 to 0.31.0 (by @dependabot[bot] in #3838) - ⬆️ Update music-assistant-models to 1.1.117 (by @music-assistant-machine in #3839)
## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @MacTheFork, @MarvinSchenkel, @OnFreund, @OzGav, @PeterPalenik, @Shi-553, @bradkeifer, @chrisuthe, @delatt, @dmoo500, @fmunkes, @gitviola, @greenmansuperhero, @h4de5, @hatharry, @maximmaxim345, @mike-sheppard, @rnewman, @sprocket-9, @staticdev, @teancom, @trudenboy, @xiasi0 # [2.9.0b9] - 23.04.2026 ## 📦 Beta Release _Changes since [2.9.0b8](https://github.com/music-assistant/server/releases/tag/2.9.0b8)_ ### 🚀 Features and enhancements - Improve TuneIn browse, search and add recommendations (by @dmoo500 in #3764) - Add recommendation translation keys for QQ and NetEase (by @xiasi0 in #3778) - Revert "AirPlay 2 provider now supports sync" (by @MarvinSchenkel in #3780) ### 🐛 Bugfixes - Force imageproxy over streamserver for Airplay artwork (by @MarvinSchenkel in #3763) - Fix tidal recommendations (by @jozefKruszynski in #3767) - Change heartbeat of websocket and sendspin proxy socket to 25s (by @MarvinSchenkel in #3769) - Fix 30s delay after switching tracks on Sendspin (by @maximmaxim345 in #3777) ### 🎨 Frontend Changes - Remove size restriction for volume slider + refacto old ui for player controls (by @stvncode in [#1726](https://github.com/music-assistant/frontend/pull/1726)) ### 🧰 Maintenance and dependency bumps
5 changes - Bump ya-passport-auth to 1.3.0 for Yandex Smart Home provider (by @trudenboy in #3746) - Consolidate tidal constants for urls and paths (by @jozefKruszynski in #3768) - Resolve TODOs in metadata controller (by @OzGav in #3771) - Remove code in the config controller commented for removal post the 2.8 release (by @OzGav in #3772) - ⬆️ Update music-assistant-frontend to 2.17.152 (by @music-assistant-machine in #3775)
## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @MarvinSchenkel, @OzGav, @dmoo500, @jozefKruszynski, @maximmaxim345, @stvncode, @trudenboy, @xiasi0 ================================================ FILE: music_assistant_beta/README.md ================================================ # Music Assistant (BETA) App The official BETA release channel for Music Assistant. ## ⚠️ Important Notice This is a **BETA** version of Music Assistant. It contains new features and improvements that are being tested before the stable release. **Use this App if you:** - Want early access to new features - Are willing to help test and report issues - Can tolerate occasional bugs or instability - Want to contribute to making Music Assistant better **DO NOT use this App if you:** - Need a stable, production-ready system at all times - Are not comfortable troubleshooting issues - Cannot afford any downtime in your music setup ## What is BETA? BETA releases are feature-complete versions that are being tested before becoming stable releases. They typically include: - ✨ New features not yet in stable - 🔧 Performance improvements - 🐛 Bug fixes from previous versions - 🧪 Changes that need real-world testing ## Differences from Stable | Aspect | Stable | BETA | | --------- | -------------------- | ------------------------------------- | | Stability | Highly stable | Generally stable with possible issues | | Features | Well-tested features | New features being tested | | Updates | Less frequent | More frequent | | Use Case | Production | Testing & early adoption | ## Reporting Issues As a BETA tester, your feedback is invaluable! Please report issues you encounter: ### Before Reporting 1. Check the App logs (enable `debug` logging if needed globally or on a per-provider level) 2. Search [existing issues](https://github.com/music-assistant/support) 3. Verify the issue doesn't occur in the stable version if possible ### When Reporting Include: - 📋 Steps to reproduce the issue - 📝 Full logs from the App (or download the full logfile from within MA's web interface) - 🔢 Music Assistant version (visible in Web UI) - 🎵 Which music providers you're using - 🔊 Which players are affected **Where to report**: [GitHub Support Repository](https://github.com/music-assistant/support) ## Updates BETA releases are updated more frequently than stable releases. In general, more or less once a week. ## Known Limitations and notes - BETA versions may have breaking changes - Some features might be partially implemented - Database migrations may occur between versions - Performance optimizations might still be in progress - You can not migrate from the stable version (and vice-versa) TIP: If you want to test the BETA version while keeping the stable version, simply stop the stable App and run the BETA App. Reverting back to stable is then as easy as stopping the BETA App again and starting stable. Both Apps cannot be active at the same time. ## Getting Help - 📖 [BETA Documentation](https://beta.music-assistant.io) - 💬 [Community Discussions](https://github.com/orgs/music-assistant/discussions) - 🐛 [Report BETA Issues](https://github.com/music-assistant/support) - � [Discord Server](https://discord.gg/PZQ6RWbfeS) ## What's New in BETA Check the [CHANGELOG](CHANGELOG.md) for detailed information about what's new in this BETA version. ## Beta Testing Best Practices 1. **Regular Backups**: Always maintain recent backups 2. **Monitor Logs**: Keep an eye on logs for issues 3. **Report Issues**: Help us improve by reporting bugs 4. **Be Patient**: Some features might not work perfectly 5. **Stay Updated**: Install updates to get the latest fixes Making a backup of the Music Assistant App within Home Assistant will also include your Music Assistant data. Please ensure to always make a backup before updating to a new version so you can always easily revert to the previous version! ## Rollback Strategy ### If Things Break 1. **Stop the App** 2. **Restore from backup** (you made one, right?) 3. **Report the issue** ## Contributing As a BETA tester, you're already contributing! You can also: - 🐛 [Report detailed bugs](https://github.com/music-assistant/support) - 💡 [Suggest improvements](https://github.com/orgs/music-assistant/discussions) - 🔧 Submit pull requests - 📝 Help with documentation - 💬 Help others on [Discord](https://discord.gg/PZQ6RWbfeS) Visit the [Music Assistant organization](https://github.com/music-assistant) on GitHub to contribute. ## Release Cycle ``` Development → BETA → Stable ↓ ↓ ↓ Nightly (You!) Users ``` BETA releases are the final testing stage before stable releases. Your testing helps ensure quality for all users! ## License Music Assistant is licensed under the Apache License 2.0. ================================================ FILE: music_assistant_beta/apparmor.txt ================================================ profile music_assistant_addon flags=(attach_disconnected,mediate_deleted) { capability, file, signal, mount, umount, remount, network udp, network tcp, network dgram, network stream, network seqpacket, network inet, network inet6, network netlink raw, network unix dgram, capability setgid, capability setuid, capability sys_admin, capability dac_read_search, /dev/* mrwkl, /tmp/** mrkwl, # Data access /data/** rw, /media/** rw, # docker daemon confinement requires explict allow rule for signal signal (receive) set=(kill,term) peer=/usr/bin/docker, } ================================================ FILE: music_assistant_beta/config.yaml ================================================ name: Music Assistant (BETA) version: 2.9.0b11 slug: music_assistant_beta description: BETA version of the Music Assistant Server. url: https://music-assistant.io arch: - amd64 - aarch64 homeassistant_api: true discovery: - music_assistant auth_api: true host_network: true ingress: true ingress_port: 8094 panel_icon: mdi:music-assistant panel_title: Music Assistant panel_admin: false uart: false apparmor: true map: - media:rw - ssl:ro init: false backup_exclude: - cache.db - collage_images/* - .cache/* stage: stable image: ghcr.io/music-assistant/server tmpfs: true options: log_level: info safe_mode: false schema: log_level: list(debug|info|warning|error) safe_mode: bool privileged: - SYS_ADMIN - DAC_READ_SEARCH ================================================ FILE: music_assistant_beta/translations/en.yaml ================================================ configuration: log_level: name: Log Level description: "Set the (global) log level (NOTE: only enable debug when needed)." safe_mode: name: Safe mode description: "Start the Music Assistant server in safe mode where only the core controllers are started without any providers, to troubleshoot issues" ================================================ FILE: music_assistant_dev/Dockerfile ================================================ # syntax=docker/dockerfile:1 # # DEV MASS image: base image + MASS installed from prebuilt wheel # FROM ghcr.io/music-assistant/base:1.5.2 ENV VIRTUAL_ENV=/app/venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" # ensure UV is installed COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ # add some additional packages that are useful for debugging RUN set -x \ && apt-get update \ && apt-get install -y --no-install-recommends jq htop git curl ca-certificates gnupg libportaudio2 libasound2-plugins dbus && \ # Install Node.js 20.x from NodeSource mkdir -p /etc/apt/keyrings && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \ apt-get update && \ apt-get install -y --no-install-recommends nodejs && \ npm install -g yarn && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ # pre-install base requirements to save a bit of startup time uv venv $VIRTUAL_ENV && \ uv pip install \ --no-cache \ --link-mode=copy \ --index-strategy unsafe-best-match \ -r "https://raw.githubusercontent.com/music-assistant/server/refs/heads/dev/requirements_all.txt" VOLUME [ "/data" ] EXPOSE 8095 RUN chmod 777 -R /app && \ chmod 777 -R /tmp COPY entrypoint.sh /app/entrypoint.sh ENTRYPOINT ["/app/entrypoint.sh"] ================================================ FILE: music_assistant_dev/README.md ================================================ # Music Assistant DEV App This is a special development App for Music Assistant that allows developers to quickly test specific branches, pull requests, or even forks of Music Assistant directly in Home Assistant. ## Purpose This App is designed for: - Testing pull requests before merging - Developing and debugging new features - Testing forks of Music Assistant - Running custom branches for testing ## How It Works Unlike the regular Music Assistant App which uses pre-built releases, this Dev App: 1. Builds and installs the server from a specified Git source (branch, PR, or fork) 2. Builds and installs the frontend from a specified Git source (branch, PR, or fork) 3. Starts Music Assistant with your custom code The build process: 1. Installs the server package from the specified Git reference 2. Builds the frontend according to its build procedure (npm build) 3. Installs the frontend as a Python package (overwriting the default frontend) 4. Starts Music Assistant ## Configuration ### Basic Configuration ```yaml log_level: info safe_mode: false ``` ### Server Repository Configuration Use the `server_repo` option to specify which version of the Music Assistant server to install: **Format**: `owner/repo@reference` or just `reference` - **Branch**: `dev`, `main`, or any branch name - **Pull Request**: `pr-123` (will checkout PR #123) - **Fork**: `username/server@branch-name` - **Commit**: Full commit SHA - **Empty/blank**: Use latest nightly release from GitHub (fast mode - no build required) **Examples**: ```yaml # Use latest nightly release (FAST - no build required) server_repo: "" # Use the dev branch server_repo: dev # Use a specific branch server_repo: feature/new-player # Test a pull request server_repo: pr-456 # Test a fork server_repo: someuser/server@experimental-feature # Use a specific commit server_repo: abc123def456... ``` **Default**: `""` (empty - uses latest nightly release from GitHub) > **Note**: When `server_repo` is left empty or blank, the App will install the latest nightly release wheel from GitHub releases. This is the fastest option as no server build is required. ### Frontend Repository Configuration Use the `frontend_repo` option to specify which version of the Music Assistant frontend to install: **Format**: Same as server_repo - `owner/repo@reference` or just `reference` - **Branch**: `main`, `dev`, or any branch name - **Pull Request**: `pr-789` (will checkout PR #789) - **Fork**: `username/frontend@branch-name` - **Commit**: Full commit SHA - **Empty/blank**: Skip frontend build (use bundled frontend) **Examples**: ```yaml # Skip frontend build (FAST - use bundled frontend) frontend_repo: "" # Use the main branch frontend_repo: main # Use a specific branch frontend_repo: feature/new-ui # Test a pull request frontend_repo: pr-789 # Test a fork frontend_repo: someuser/frontend@redesign # Use a specific commit frontend_repo: abc123def456... ``` **Default**: `""` (empty - uses bundled frontend, no build) > **Note**: When `frontend_repo` is left empty or blank, the frontend build will be **skipped entirely**. This significantly reduces startup time and is ideal when you only need to test backend features. The frontend bundled with the server installation will be used instead. ## Full Configuration Examples ### Fast Mode (Backend Testing Only) ```yaml log_level: info safe_mode: false server_repo: "" frontend_repo: "" ``` Uses latest nightly release from GitHub, no builds required. Fastest startup time. ### Backend Development Mode ```yaml log_level: debug safe_mode: false server_repo: dev frontend_repo: "" ``` Builds server from the `dev` branch, skips frontend build. Good for testing backend changes quickly. ### Full Development Mode ```yaml log_level: debug safe_mode: false server_repo: pr-456 frontend_repo: pr-789 ``` Builds both server (PR #456) and frontend (PR #789) from source. Full control for comprehensive testing. ## Important Notes ### Build Time Build time varies depending on your configuration: - **Both empty** (`server_repo: ""` and `frontend_repo: ""`): Fastest - no builds, uses latest nightly release - **Only `server_repo` specified**: Medium - builds server only, skips frontend (ideal for backend testing) - **Both specified**: Slowest - builds both server and frontend from source (full development mode) **Tip**: Leave `frontend_repo` empty when only testing backend features to significantly reduce startup time! ### Safe Mode - Set `safe_mode: true` if you need to start Music Assistant without loading providers - Useful for debugging any startup issues ### Pull Request Syntax When specifying a pull request, use `pr-NUMBER` (e.g., `pr-123`, `pr-456`). The App will automatically fetch and checkout the PR for you. ## Troubleshooting ### App won't start 1. Check the App logs for build errors 2. Verify the branch/PR/fork exists and is accessible 3. Try using a known-good branch like `dev` or `main` 4. Enable `safe_mode: true` to bypass provider loading ### Build failures - Ensure the specified Git reference exists - Check if there are dependency conflicts in the branch - Frontend build requires Node.js - build failures may indicate incompatible frontend code ### Performance issues - Building from source uses more resources - Only use this App for development testing, not as a daily driver ## Developer Workflow ### Testing a PR 1. Find the PR number (e.g., #456) 2. Configure: `server_repo: pr-456` 3. Restart the App 4. Test the changes ### Developing Features 1. Push your branch to your fork 2. Configure: `server_repo: yourusername/server@your-branch` 3. Restart the App 4. Test and iterate ### Testing Both Server and Frontend Changes ```yaml server_repo: pr-456 frontend_repo: pr-789 ``` This allows you to test coordinated changes across both repositories. ## Support This is a developer tool and is not supported for regular users. If you encounter issues: - Check the App logs - Verify your Git references are correct - Test with the default branches first - Ask in the Music Assistant developer Discord channel ## Differences from Regular App | Feature | Regular App | DEV App (Nightly mode) | DEV App (Source mode) | | ------------ | ----------------- | ------------------------- | ------------------------ | | Installation | Pre-built release | Latest nightly wheel | Built from source | | Startup time | Fast | Fast | Slower (build time) | | Stability | Stable releases | Nightly builds | Development code | | Frontend | Bundled | Bundled | Built from source | | Updates | Automatic | Manual (restart) | Manual (change config) | | Use case | Production | Quick backend testing | Full development/testing | **Configuration Modes:** - **Fast mode**: Both repos empty - Uses latest nightly release, no builds - **Backend dev mode**: Only `server_repo` specified - Builds server, uses bundled frontend - **Full dev mode**: Both repos specified - Builds everything from source ================================================ FILE: music_assistant_dev/apparmor.txt ================================================ profile music_assistant_addon flags=(attach_disconnected,mediate_deleted) { capability, file, signal, mount, umount, remount, network udp, network tcp, network dgram, network stream, network seqpacket, network inet, network inet6, network netlink raw, network unix dgram, capability setgid, capability setuid, capability sys_admin, capability dac_read_search, /dev/* mrwkl, /dev/snd/ rw, /dev/snd/** rw, /tmp/** mrkwl, # Data access /data/** rw, /media/** rw, # docker daemon confinement requires explict allow rule for signal signal (receive) set=(kill,term) peer=/usr/bin/docker, } ================================================ FILE: music_assistant_dev/build.yaml ================================================ build_from: amd64: ghcr.io/music-assistant/base:latest aarch64: ghcr.io/music-assistant/base:latest armhf: ghcr.io/music-assistant/base:latest armv7: ghcr.io/music-assistant/base:latest ================================================ FILE: music_assistant_dev/config.yaml ================================================ name: Music Assistant DEV SERVER # version number gets updated only when the mass base image updates! version: 1.5.2 slug: music_assistant_dev description: Development App for Music Assistant. For developers only. url: https://music-assistant.io arch: - amd64 - aarch64 homeassistant_api: true discovery: - music_assistant audio: true auth_api: true host_network: true ingress: true ingress_port: 8094 audio: true panel_icon: mdi:music-assistant panel_title: Music Assistant panel_admin: false uart: false apparmor: true map: - media:rw - ssl:ro init: false stage: experimental tmpfs: true backup_exclude: - cache.db - collage_images/* - .cache/* options: log_level: info server_repo: "" frontend_repo: "" safe_mode: false schema: log_level: list(debug|info|warning|error) server_repo: str? frontend_repo: str? safe_mode: bool privileged: - SYS_ADMIN - DAC_READ_SEARCH ================================================ FILE: music_assistant_dev/entrypoint.sh ================================================ #!/bin/sh set -e # Parse configuration server_repo=$(cat /data/options.json | jq -r .server_repo) frontend_repo=$(cat /data/options.json | jq -r .frontend_repo) echo "" echo "-----------------------------------------------------------" echo "Music Assistant Developer App" echo "-----------------------------------------------------------" echo "" # Check if server_repo is empty or null if [ -z "$server_repo" ] || [ "$server_repo" = "null" ]; then build_from_source=false echo "No server_repo specified - using latest nightly release from GitHub" else build_from_source=true echo "Building from source using server_repo: $server_repo" fi echo "" # Function to parse repository reference and return owner/repo@ref parse_repo_ref() { local input="$1" local default_owner="$2" local default_repo="$3" # If input starts with "pr-", convert to pull request reference if echo "$input" | grep -q "^pr-"; then pr_number=$(echo "$input" | sed 's/pr-//') echo "${default_owner}/${default_repo}@refs/pull/${pr_number}/head" return fi # If input contains "/" (fork reference) if echo "$input" | grep -q "/"; then # Check if it already has @ for branch if echo "$input" | grep -q "@"; then echo "$input" else # It's just owner/repo, use default branch echo "${input}@main" fi return fi # Otherwise, it's just a branch/commit reference echo "${default_owner}/${default_repo}@${input}" } # Function to build git URL from parsed reference build_git_url() { local parsed="$1" echo "git+https://github.com/${parsed}" } # Activate virtual environment . $VIRTUAL_ENV/bin/activate echo "-----------------------------------------------------------" echo "Step 1: Installing Music Assistant Server" echo "-----------------------------------------------------------" echo "" if [ "$build_from_source" = true ]; then # Parse server repository reference server_ref=$(parse_repo_ref "$server_repo" "music-assistant" "server") server_url=$(build_git_url "$server_ref") echo "Server repository: $server_ref" echo "Server URL: $server_url" echo "" # Build requirements URL from the same reference # Convert git reference to raw GitHub URL for requirements file # Format: owner/repo@ref -> https://raw.githubusercontent.com/owner/repo/ref/requirements_all.txt req_owner=$(echo "$server_ref" | cut -d'/' -f1) req_repo=$(echo "$server_ref" | cut -d'/' -f2 | cut -d'@' -f1) req_ref=$(echo "$server_ref" | cut -d'@' -f2) requirements_url="https://raw.githubusercontent.com/${req_owner}/${req_repo}/${req_ref}/requirements_all.txt" echo "Installing dependencies from: $requirements_url" echo "" # Install dependencies from the branch's requirements_all.txt uv pip install \ --no-cache \ --link-mode=copy \ -r "$requirements_url" echo "✓ Dependencies installed" echo "" # Install server from specified repository uv pip install \ --no-cache \ --link-mode=copy \ "$server_url" else # Install latest nightly wheel from GitHub releases echo "Fetching latest nightly release from GitHub..." echo "" # Get the latest pre-release info from GitHub API # Write to temp file to avoid control character issues when passing through shell variables tmp_releases="/tmp/releases.json" curl -s "https://api.github.com/repos/music-assistant/server/releases?per_page=10" > "$tmp_releases" release_tag=$(jq -r '[.[] | select(.prerelease == true)] | first | .tag_name' < "$tmp_releases") wheel_url=$(jq -r '[.[] | select(.prerelease == true)] | first | .assets[] | select(.name | endswith(".whl")) | .browser_download_url' < "$tmp_releases") rm -f "$tmp_releases" if [ -z "$wheel_url" ] || [ "$wheel_url" = "null" ]; then echo "ERROR: Could not find wheel in latest nightly release" echo "Falling back to stable PyPI release..." uv pip install \ --no-cache \ --link-mode=copy \ music-assistant else echo "Found nightly release: $release_tag" echo "Wheel URL: $wheel_url" echo "" echo "Downloading and installing nightly wheel..." uv pip install \ --no-cache \ --link-mode=copy \ "$wheel_url" fi fi echo "" echo "✓ Server installation complete" echo "" # Check if we should build frontend - this is independent of server source build_frontend=false if [ -n "$frontend_repo" ] && [ "$frontend_repo" != "null" ]; then build_frontend=true # Parse frontend repository reference frontend_ref=$(parse_repo_ref "$frontend_repo" "music-assistant" "frontend") echo "-----------------------------------------------------------" echo "Step 2: Building and Installing Music Assistant Frontend" echo "-----------------------------------------------------------" echo "" echo "Frontend repository: $frontend_ref" echo "" else echo "-----------------------------------------------------------" echo "Step 2: Skipping Frontend Build" echo "-----------------------------------------------------------" echo "" echo "No frontend_repo specified - using frontend bundled with server" echo "" fi if [ "$build_frontend" = true ]; then # Extract owner, repo, and ref from parsed reference frontend_owner=$(echo "$frontend_ref" | cut -d'/' -f1) frontend_repo_name=$(echo "$frontend_ref" | cut -d'/' -f2 | cut -d'@' -f1) frontend_branch=$(echo "$frontend_ref" | cut -d'@' -f2) # Create temporary directory for frontend build frontend_dir="/tmp/frontend-build" rm -rf "$frontend_dir" mkdir -p "$frontend_dir" echo "Cloning frontend repository..." cd "$frontend_dir" # Clone the repository git clone --depth 1 --branch "$frontend_branch" \ "https://github.com/${frontend_owner}/${frontend_repo_name}.git" . 2>/dev/null || \ (git clone "https://github.com/${frontend_owner}/${frontend_repo_name}.git" . && \ git checkout "$frontend_branch") # Ensure we have the absolute latest changes from the remote git fetch --depth 1 origin "$frontend_branch" git reset --hard FETCH_HEAD echo "✓ Frontend cloned ($(git rev-parse --short HEAD))" echo "" # Check if package.json exists (verify it's a valid frontend repo) if [ ! -f "package.json" ]; then echo "ERROR: package.json not found in frontend repository!" echo "This doesn't appear to be a valid Music Assistant frontend repository." exit 1 fi echo "Installing frontend dependencies..." # Try to remount /tmp with exec if it's mounted noexec if mount | grep -q "on /tmp.*noexec"; then echo "Detected /tmp mounted with noexec, attempting to remount..." mount -o remount,exec /tmp 2>/dev/null || echo "Warning: Could not remount /tmp" fi # Use persistent cache dir so yarn doesn't re-download packages on every restart yarn config set cache-folder /data/.yarn-cache yarn install --frozen-lockfile --network-timeout 300000 echo "✓ Dependencies installed" echo "" echo "Building frontend..." yarn build echo "✓ Frontend build complete" echo "" # Check if the Python package structure exists if [ ! -f "setup.py" ] && [ ! -f "pyproject.toml" ]; then echo "ERROR: No Python package configuration found!" echo "Frontend repository must be installable as a Python package." exit 1 fi echo "Installing frontend as Python package..." cd "$frontend_dir" uv pip install --no-cache --link-mode=copy . echo "✓ Frontend installation complete" echo "" # Cleanup cd / rm -rf "$frontend_dir" fi # End of build_frontend check echo "-----------------------------------------------------------" echo "Starting Music Assistant" echo "-----------------------------------------------------------" echo "" # export jemalloc path for path in /usr/lib/*/libjemalloc.so.2; do [ -f "$path" ] && export LD_PRELOAD="$path" && break done # Start Music Assistant exec mass --data-dir /data --cache-dir /data/.cache ================================================ FILE: music_assistant_dev/translations/en.yaml ================================================ configuration: log_level: name: Log Level description: "Set the (global) log level (NOTE: only enable debug when needed)." branch: name: Github branch description: "Specify the branch (or PR) to install at startup." safe_mode: name: Safe mode description: "Start the Music Assistant server in safe mode where only the core controllers are started without any providers, to troubleshoot issues" ================================================ FILE: music_assistant_nightly/CHANGELOG.md ================================================ # [2.9.0.dev2026051706] - 17.05.2026 ## 📦 Nightly Release _Changes since [2.9.0.dev2026051606](https://github.com/music-assistant/server/releases/tag/2.9.0.dev2026051606)_ ### 🚀 Features and enhancements - Fix double sendspin bridges for devices with both Airplay and Cast (by @MarvinSchenkel in #3854) ## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @MarvinSchenkel # [2.9.0.dev2026051606] - 16.05.2026 ## 📦 Nightly Release _Changes since [2.9.0.dev2026051506](https://github.com/music-assistant/server/releases/tag/2.9.0.dev2026051506)_ ### 🚀 New Providers - Add Samsung WAM player provider (by @Oliver-Stevens in #3334) ### 🚀 Features and enhancements - Improve Listenbrainz multi-artist track scrobbles (by @Tommatheussen in #3887) ### 🎨 Frontend Changes - Lokalise: Translations update (by @marcelveldt in [#1769](https://github.com/music-assistant/frontend/pull/1769)) - Bump PWA precache limit to 5 MiB for larger translation bundle (by @OzGav in [#1772](https://github.com/music-assistant/frontend/pull/1772)) ### 🧰 Maintenance and dependency bumps - ⬆️ Update music-assistant-frontend to 2.17.157 (by @music-assistant-machine in #3889) ## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @Oliver-Stevens, @OzGav, @Tommatheussen, @marcelveldt # [2.9.0.dev2026051506] - 15.05.2026 ## 📦 Nightly Release _Changes since [2.9.0.dev2026051406](https://github.com/music-assistant/server/releases/tag/2.9.0.dev2026051406)_ ### 🚀 New Providers - Add Sonic Analysis audio-analysis provider (CLAP-driven scalars + embedding) (by @chrisuthe in #3795) ## :bow: Thanks to our contributors Special thanks to the following contributors who helped with this release: @chrisuthe ================================================ FILE: music_assistant_nightly/README.md ================================================ # Music Assistant (NIGHTLY) App Bleeding edge development builds of Music Assistant. ## ⚠️ WARNING - FOR ADVANCED USERS ONLY ⚠️ This is a **NIGHTLY** (development) version of Music Assistant. It contains the latest code changes and is **NOT recommended for daily use**. ### 🔴 Critical Information **This App is:** - ❌ **NOT stable** - Can break at any time - ❌ **NOT tested** - Changes are pushed directly from development - ❌ **NOT supported** - Use at your own risk - ❌ **NOT for beginners** - Might require technical knowledge to troubleshoot **DO NOT use this unless you:** - ✅ Are a developer or advanced user - ✅ Understand the risks of running unreleased software - ✅ Can debug issues yourself - ✅ Have a backup system or test environment - ✅ Are willing to lose data or functionality ## What is NIGHTLY? NIGHTLY builds are automatic builds from the `dev` branch of Music Assistant. They include: - 🚧 Work-in-progress features - 🔬 Experimental code - 🐛 Unverified bug fixes - ⚡ Latest code changes (within 24 hours) - 💥 Potentially breaking changes ## Release Frequency - **Updated**: Daily (when changes are pushed to dev branch) - **Testing**: Minimal or none - **Quality**: Varies significantly - **Stability**: ⚠️ Unstable by nature ## Comparison Matrix | Feature | Stable | BETA | NIGHTLY | | ---------------- | ---------- | -------- | ------------- | | Stability | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐ | | Features | Released | Testing | Latest | | Updates | Monthly | Weekly | Daily | | Breaking Changes | Rare | Possible | Possible | | Data Loss Risk | Very Low | Low | **HIGH** | | Use Case | Production | Testing | Experimenting | ## Reporting Issues ### Before Reporting 1. ⚠️ Verify you're using NIGHTLY intentionally 2. Check if the issue exists in BETA or Stable 3. Search existing issues 4. Try to reproduce with minimal configuration ### What to Include - **Version**: Exact NIGHTLY version number and date - **Logs**: Full debug logs - **Context**: What you were doing when it broke - **Environment**: Home Assistant version, hardware specs - **Reproduction**: Step-by-step reproduction steps ### Where to Report - 💬 [Discord Server](https://discord.gg/PZQ6RWbfeS) ## Rollback Strategy ### If Things Break 1. **Stop the App** 2. **Restore from backup** (you made one, right?) 3. **Report the issue** ## Contributing Running NIGHTLY and finding issues is a contribution! You can also: - 🐛 [Report bugs with detailed logs](https://github.com/music-assistant/support) - 🔧 Submit pull requests with fixes - 📝 Document issues and workarounds - 💬 Help other NIGHTLY users on [Discord](https://discord.gg/PZQ6RWbfeS) - 🧪 Test specific features Visit the [Music Assistant organization](https://github.com/music-assistant) on GitHub to contribute. ## Final Warning ``` _____________________________________ / You have been warned multiple times. \ \ If this breaks, you get to keep both / pieces. ------------------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ``` ## Still Here? If you've read this far and still want to use NIGHTLY, you're probably the right kind of user. Welcome to the bleeding edge! 🚀 Just remember: **BACKUP EVERYTHING** 💾 ## License Music Assistant is licensed under the Apache License 2.0. ================================================ FILE: music_assistant_nightly/apparmor.txt ================================================ profile music_assistant_addon flags=(attach_disconnected,mediate_deleted) { capability, file, signal, mount, umount, remount, network udp, network tcp, network dgram, network stream, network seqpacket, network inet, network inet6, network netlink raw, network unix dgram, capability setgid, capability setuid, capability sys_admin, capability dac_read_search, /dev/* mrwkl, /tmp/** mrkwl, # Data access /data/** rw, /media/** rw, # docker daemon confinement requires explict allow rule for signal signal (receive) set=(kill,term) peer=/usr/bin/docker, } ================================================ FILE: music_assistant_nightly/config.yaml ================================================ name: Music Assistant (NIGHTLY) version: 2.9.0.dev2026051706 slug: music_assistant_nightly description: NIGHTLY version of Music Assistant. Install this version if you want to keep up with the latest bleeding edge development of Music Assistant! Use it at your own risk, it might not be recommended for daily/production use because it can be unstable. url: https://music-assistant.io arch: - amd64 - aarch64 homeassistant_api: true discovery: - music_assistant auth_api: true host_network: true ingress: true ingress_port: 8094 panel_icon: mdi:music-assistant panel_title: Music Assistant panel_admin: false uart: false map: - media:rw - ssl:ro init: false backup_exclude: - cache.db - collage_images/* - .cache/* stage: experimental image: ghcr.io/music-assistant/server tmpfs: true options: log_level: info safe_mode: false schema: log_level: list(debug|info|warning|error) safe_mode: bool privileged: - SYS_ADMIN - DAC_READ_SEARCH ================================================ FILE: music_assistant_nightly/translations/en.yaml ================================================ configuration: log_level: name: Log Level description: "Set the (global) log level (NOTE: only enable debug when needed)." safe_mode: name: Safe mode description: "Start the Music Assistant server in safe mode where only the core controllers are started without any providers, to troubleshoot issues" ================================================ FILE: repository.json ================================================ { "name": "Music Assistant", "url": "https://github.com/music-assistant/core", "maintainer": "Music Assistant " } ================================================ FILE: ytm_po_token_generator/config.yaml ================================================ name: YT Music PO Token Generator version: 1.3.1 slug: ytm_po_token_generator description: An HA App wrapper for the BgUtils POT Provider that can generate PO tokens for Youtube Music. url: https://github.com/Brainicism/bgutil-ytdlp-pot-provider image: brainicism/bgutil-ytdlp-pot-provider arch: - amd64 - aarch64 ports: "4416/tcp": 4416