- Add-on build failure on Docker 29 / strict BuildKit: The companion add-on Dockerfile declared
ARG BUILD_FROMwithout a default, and the repo shipped nobuild.yaml, so Supervisor invokeddocker buildx buildwithout a--build-arg BUILD_FROM=…— stricter BuildKit versions reject the empty base image withInvalidDefaultArgInFrom: base name ($BUILD_FROM) should not be blank. Addedyoutube_music_connector_companion/build.yamlmappingaarch64andamd64toghcr.io/home-assistant/{arch}-base:3.19so Supervisor can resolve the base image again.
- Volume slider fill in now-playing card: The colored fill portion of the volume slider was invisible on Chromium (only a blue thumb on a grey track). Reworked the slider with a pseudo-element wrapper so the accent-colored fill renders reliably cross-browser.
- Lovelace asset cache-busting:
ytmc-player.jsandytmc-search-play.jswere loaded without a version query, so browsers served stale copies indefinitely. Both URLs now carry?v=<FRONTEND_CACHE_VERSION>and the version is bumped automatically byscripts/bump_versions.py. - Flickering progress bar and play button: Every HA state tick (including
media_position_updated_at) forced a full DOM teardown, and transient state flips during buffering / next-track could unmount controls and the progress row. Structural sig now excludes high-frequency fields; volume, position and play-icon updates happen in-place via a new_syncDynamicpath; sticky visibility flags keep controls and the progress bar mounted through short gaps.
- Setup failure with pytubefix 10.x: Added explicit
nodejs-wheel-binariesrequirement so HA Core can resolve the Node.js dependency needed for YouTube cipher decryption.
- Dropped 32-bit architecture support: Removed
armhf,armv7, andi386from add-on architectures —nodejs-wheel-binarieshas no wheels for these platforms.
- Device chips wrap on mobile: Target device chips in both player and search-play components now wrap to multiple lines instead of using a hidden horizontal scrollbar.
- Project ship skill: New
skills/ship/SKILL.mdextends the global completion flow with automatic patch versioning, payload sync, and GitHub Release for every ship.
- Browser Auth Assistant instructions:
music.youtube.comis now a clickable link, added F12 keyboard hint, added Chromium-specific step for finding Request Headers in the Network tab, and textarea placeholder now shows an example of the expected header format.
- Volume targeting wrong device after restart: First device click now replaces the synced default selection instead of adding to it, preventing stale devices from receiving volume commands.
- Volume sent to devices without volume support: Added
supported_featurescheck (bit 4) to skip devices that don't supportvolume_set. - Search enabled without target device: Search input, filter tags, and search button are now disabled when no target device is selected; results area shows a prompt to select a device first.
- Restart via Repairs system: After add-on update, a repair issue appears in Settings > System > Repairs with a one-click restart button (replaces persistent notification approach).
- Device auto-power-on: Playing on an off/standby device now turns it on automatically (up to 15 s wait) before starting playback.
- Prev/next buttons always visible: Transport controls now show skip-previous and skip-next buttons at all times (disabled state when no history/queue).
- Volume targeting wrong device: Player and search cards now always sync device selection from backend state, preventing stale local selections after restart or cross-card interactions.
- Search-play device selection not reflected in player: Both cards now share device state via backend
selected_devicesattribute with 2 s debounce after user interaction. - Multi-device play only playing on one device: All selected devices are now turned on in parallel, stream resolved once, then played on all ready devices simultaneously.
- Changing device selection stopped existing playback: Selecting or deselecting devices no longer auto-pauses running streams; only explicit pause stops playback.
- Missing album art in player: Added
entity_picturefallback for image URL resolution. - Search-play toggle not syncing immediately: Device chip toggles in search now call
set_selected_devicesinstantly (not only on play). - Add-on restart notification retry loop: Replaced 150 s retry loop with single marker-file write; integration polls every 60 s.
- Per-device DeviceSession architecture: Each target media player now gets its own independent playback stream with separate queue, history, autoplay, shuffle, and repeat mode. Playing on device A no longer affects device B.
set_selected_devicesservice: Single service call to set all selected devices at once, replacing theselect_source+set_group_targetstwo-call pattern.- Recently played on empty search: Pressing Enter or clicking search with an empty query shows the most recently played items (up to 5 songs, 5 playlists, 5 artists). Filter tags work on recent items too.
- Browser Auth Assistant restored in sidebar panel after panel refactor.
- Sidebar panel icon (
mdi:music) for the YouTube Music menu entry.
- Transport commands (play/pause/stop) now route to ALL selected devices in parallel.
- Track navigation (next/previous) routes to the primary selected device only.
set_group_targetsservice is now deprecated (still works as a compatibility alias).
- Add-on restart notification: added
hassio_apipermission and marker-file fallback for persistent notifications. - YAML
offparsing error inservices.yaml(bareoffinterpreted as boolean). - Missing
awaitonasync_register_panel()inpanel.py.