Repository navigation
Update Sendspin provider to version 4.0 with many improvements - #3158
Conversation
🔒 Dependency Security Report📦 Modified Dependencies
|
Fix here Sendspin/sendspin-python-cli#117 |
Alsmost works now, but cleanup and some major bug fixes are left to iron out. (with DSP clients)
Remove defensive timeout wrappers (`_await_with_timeout`, `_timed_lock`) in favor of plain awaits, parallelize member transform reads with `asyncio.gather`, and add architecture and join-catchup lifecycle documentation.
The 50ms timeout cancelled the drain but data was already in the pipe buffer, producing misleading warnings while playback worked fine. Backpressure is handled by `sleep_to_limit_buffer`.
Split the join-catchup history blob into 100ms slices before calling `prepare_historical_audio`, preventing a single large encode from blocking the event loop for ~500ms.
There was a problem hiding this comment.
Pull request overview
This PR updates the Sendspin provider from version 3.0.0 to 4.0.1, implementing a major architectural rewrite of the playback system. The update replaces the simple TimedClientStream approach with a sophisticated SendspinPlaybackSession coordinator that supports per-member DSP pipelines, dynamic group membership changes, and late-join historical backfill.
Changes:
- Updates aiosendspin dependency from 3.0.0 to 4.0.1
- Removes
timed_client_stream.pyand replaces it with newplayback.pymodule implementing advanced playback pipeline architecture - Refactors player.py to use role-based architecture for metadata, artwork, and controller functions, with dynamic audio format configuration
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| requirements_all.txt | Updates aiosendspin from 3.0.0 to 4.0.1 |
| manifest.json | Updates aiosendspin requirement to 4.0.1 |
| provider.py | Adds AlreadyRegisteredError handling and fixes unload disconnection logic to check for connection availability |
| player.py | Major refactor to role-based architecture, removes MusicAssistantMediaStream class, integrates SendspinPlaybackSession, adds dynamic audio format configuration |
| playback.py | New 1141-line module implementing sophisticated playback session coordinator with per-member DSP pipelines, join-catchup mechanism, and history management |
| timed_client_stream.py | Removed (331 lines) - replaced by playback.py architecture |
| init.py | Changes import from relative to absolute path |
| README.md | Updates file reference from timed_client_stream.py to playback.py |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@maximmaxim345 can you have a look at CoPilot's suggestions ? Some of them make good sense to fix before merging. |
|
Marked as draft while you work out these final fixes - hit the "ready for review" button once you are ready |
marcelveldt
left a comment
There was a problem hiding this comment.
Amazing job again @maximmaxim345 !
Update music-assistant-frontend to version [2.17.364](https://github.com/music-assistant/frontend/releases/tag/2.17.364) ## 🚀 Features and enhancements - Show the played state of audiobook collections and keep their covers when filtered (by @fmunkes in [#3034](https://github.com/music-assistant/frontend/pull/3034)) - Move the required source picker into the Filters panel (by @pierosavi in [#3137](https://github.com/music-assistant/frontend/pull/3137)) - Offer sleep timers that stop at the end of the current item or chapter (by @fmunkes in [#3050](https://github.com/music-assistant/frontend/pull/3050)) - Open the right DSP filter from the Audio Pipeline (by @OzGav in [#3120](https://github.com/music-assistant/frontend/pull/3120)) - Use the library sort and filter controls on genre, browse and author pages (by @OzGav in [#3116](https://github.com/music-assistant/frontend/pull/3116)) - Split the artist discography into two rows by release type (by @OzGav in [#3085](https://github.com/music-assistant/frontend/pull/3085)) - Minimize the fullscreen player when a search result is opened (by @pierosavi in [#3131](https://github.com/music-assistant/frontend/pull/3131)) - Enable seeded random sorting in paginated listings (by @dmoo500 in [#3113](https://github.com/music-assistant/frontend/pull/3113)) - Offer to move Spotify playback here when another player holds it (by @marcelveldt in [#3122](https://github.com/music-assistant/frontend/pull/3122)) - Play the Music Quiz on the device that shows it (by @marcelveldt in [#3124](https://github.com/music-assistant/frontend/pull/3124)) - Let admins view the statistics of other or all users (by @fmunkes in [#3112](https://github.com/music-assistant/frontend/pull/3112)) - Show who maintains each integration (by @marcelveldt in [#3115](https://github.com/music-assistant/frontend/pull/3115)) - Add a play button to the track rows of detail pages (by @stvncode in [#3109](https://github.com/music-assistant/frontend/pull/3109)) - Use the library sort and filter controls on album, playlist, podcast and radio pages (by @OzGav in [#3110](https://github.com/music-assistant/frontend/pull/3110)) - Update radio details with shared hero and configurable rows (by @dmoo500 in [#3086](https://github.com/music-assistant/frontend/pull/3086)) - Show top artist, album and track in Discover statistics (by @dmoo500 in [#3106](https://github.com/music-assistant/frontend/pull/3106)) - Playlist track reordering drag, multi-track moves, move to top/bottom (by @apophisnow in [#3038](https://github.com/music-assistant/frontend/pull/3038)) - Remove the hover box from the favorite and queue buttons in the fullscreen player (by @stvncode in [#3107](https://github.com/music-assistant/frontend/pull/3107)) - Add bookmarks for audiobooks and podcast episodes (by @fmunkes in [#3074](https://github.com/music-assistant/frontend/pull/3074)) - Remember the Discover statistics row period across reloads (by @OzGav in [#3102](https://github.com/music-assistant/frontend/pull/3102)) - Improve waveform seek preview with 3-level brightness (by @dmoo500 in [#2146](https://github.com/music-assistant/frontend/pull/2146)) - Show the item type icon when there is no artwork (by @OzGav in [#3084](https://github.com/music-assistant/frontend/pull/3084)) - Move genre details to shared hero (by @dmoo500 in [#3076](https://github.com/music-assistant/frontend/pull/3076)) - Show a spinner while opening an album that is not in your library (by @OzGav in [#3082](https://github.com/music-assistant/frontend/pull/3082)) - Expose selected-player volume commands to the companion app (by @teancom in [#3066](https://github.com/music-assistant/frontend/pull/3066)) - Merge thumbs view compact into thumbs view (by @pierosavi in [#2926](https://github.com/music-assistant/frontend/pull/2926)) - Add statistics and charts to discover page (by @dmoo500 in [#2526](https://github.com/music-assistant/frontend/pull/2526)) - Show library sort, view and filters in the title bar (by @stvncode in [#3065](https://github.com/music-assistant/frontend/pull/3065)) - Load list items before they enter the viewport (by @NasaGeek in [#3068](https://github.com/music-assistant/frontend/pull/3068)) - Show Live instead of a position for a stopped radio stream (by @pierosavi in [#3070](https://github.com/music-assistant/frontend/pull/3070)) - Fade the mobile album artwork into black above the title (by @stvncode in [#3069](https://github.com/music-assistant/frontend/pull/3069)) - Show song progress in radio stream when available (by @culmat in [#3042](https://github.com/music-assistant/frontend/pull/3042)) - Select a range of items with shift-click (by @apophisnow in [#3037](https://github.com/music-assistant/frontend/pull/3037)) - Hide the artist endless mix for authors and narrators (by @fmunkes in [#3013](https://github.com/music-assistant/frontend/pull/3013)) - Give collection pages the detail page hero (by @fmunkes in [#3016](https://github.com/music-assistant/frontend/pull/3016)) - Show the in library icon on artist and album pages (by @OzGav in [#3017](https://github.com/music-assistant/frontend/pull/3017)) - Add folder rule to the smart playlist editor (by @DerGary in [#2970](https://github.com/music-assistant/frontend/pull/2970)) - Add server-side listings and typed playback sorting (by @dmoo500 in [#2998](https://github.com/music-assistant/frontend/pull/2998)) - Add space above the featured artists on the playlist page (by @stvncode in [#3005](https://github.com/music-assistant/frontend/pull/3005)) - Say Play on the player whenever the play button has room (by @stvncode in [#3000](https://github.com/music-assistant/frontend/pull/3000)) - Show the artwork full width atop detail pages on phones (by @stvncode in [#3001](https://github.com/music-assistant/frontend/pull/3001)) - Keep AI Radio preset tags on hosts saved from the editor (by @MarvinSchenkel in [#2979](https://github.com/music-assistant/frontend/pull/2979)) - Show larger album art over a softly blurred backdrop (by @stvncode in [#2997](https://github.com/music-assistant/frontend/pull/2997)) - Make the detail page headers fit on phones (by @stvncode in [#2996](https://github.com/music-assistant/frontend/pull/2996)) - Onboarding smaller UI/UX improvements (by @pierosavi in [#2898](https://github.com/music-assistant/frontend/pull/2898)) - Link artists and albums in the playlist table, pin the toolbar on phones (by @stvncode in [#2992](https://github.com/music-assistant/frontend/pull/2992)) - Sign in with Home Assistant on the remote app without an External URL (by @marcelveldt in [#2967](https://github.com/music-assistant/frontend/pull/2967)) - Refactor ItemsListing and finish library sorting follow-ups (by @dmoo500 in [#2985](https://github.com/music-assistant/frontend/pull/2985)) - Centre the empty state on listing pages (by @stvncode in [#2988](https://github.com/music-assistant/frontend/pull/2988)) - Show where the playing track was played from (by @marcelveldt in [#2975](https://github.com/music-assistant/frontend/pull/2975)) - Redesign the multi-select bar in listings (by @stvncode in [#2982](https://github.com/music-assistant/frontend/pull/2982)) - Add BPM and key columns to the playlist track table (by @stvncode in [#2976](https://github.com/music-assistant/frontend/pull/2976)) - Show the Camelot key in the audio analysis popover (by @MarvinSchenkel in [#2977](https://github.com/music-assistant/frontend/pull/2977)) - Sync the generic AI Radio host prompts with the server defaults (by @MarvinSchenkel in [#2978](https://github.com/music-assistant/frontend/pull/2978)) - Add Camelot key to the audio metadata interface (by @MarvinSchenkel in [#2974](https://github.com/music-assistant/frontend/pull/2974)) - Show playlist tracks as a table with columns (by @stvncode in [#2973](https://github.com/music-assistant/frontend/pull/2973)) - Add seek back and forward buttons for audiobooks and podcasts (by @OzGav in [#2901](https://github.com/music-assistant/frontend/pull/2901)) - Play AI Radio shows as radio stations (by @MarvinSchenkel in [#2690](https://github.com/music-assistant/frontend/pull/2690)) - Show playlist and album length as hours and minutes (by @stvncode in [#2966](https://github.com/music-assistant/frontend/pull/2966)) - Add a search box to the Add to playlist dialog (by @OzGav in [#2902](https://github.com/music-assistant/frontend/pull/2902)) - Add server-driven library sorting (by @dmoo500 in [#2928](https://github.com/music-assistant/frontend/pull/2928)) - Redesign the playlist page (by @stvncode in [#2962](https://github.com/music-assistant/frontend/pull/2962)) - Reorder and hide the podcast page rows (by @stvncode in [#2964](https://github.com/music-assistant/frontend/pull/2964)) - Line up list headers with their rows (by @stvncode in [#2965](https://github.com/music-assistant/frontend/pull/2965)) - Open settings from the audio pipeline popover (by @OzGav in [#2959](https://github.com/music-assistant/frontend/pull/2959)) - Let a DJ segment talk over the intro of the next song (by @jpittelkow in [#2828](https://github.com/music-assistant/frontend/pull/2828)) - Show grouping options right away when opening players from Now Playing (by @marcelveldt in [#2955](https://github.com/music-assistant/frontend/pull/2955)) - Show the Music Assistant URLs in one clear card (by @marcelveldt in [#2952](https://github.com/music-assistant/frontend/pull/2952)) - Show where a Local files source reads its music from (by @marcelveldt in [#2948](https://github.com/music-assistant/frontend/pull/2948)) - Add a Documentation button to the player settings page (by @marcelveldt in [#2945](https://github.com/music-assistant/frontend/pull/2945)) - Tidier settings pages with all options in one card (by @marcelveldt in [#2885](https://github.com/music-assistant/frontend/pull/2885)) - Manage a music source from its own page (by @marcelveldt in [#2887](https://github.com/music-assistant/frontend/pull/2887)) - Show podcast season and episode numbers (by @OzGav in [#2925](https://github.com/music-assistant/frontend/pull/2925)) - Add a cover-size slider to the grid views (by @stellar-aria in [#2830](https://github.com/music-assistant/frontend/pull/2830)) - Show played state and podcast name on episode tiles (by @OzGav in [#2895](https://github.com/music-assistant/frontend/pull/2895)) - Refresh AI Radio state from provider events instead of polling (by @MarvinSchenkel in [#2907](https://github.com/music-assistant/frontend/pull/2907)) - Give the podcast page a new header (by @OzGav in [#2892](https://github.com/music-assistant/frontend/pull/2892)) - Add Podcast episode detail page (by @OzGav in [#2619](https://github.com/music-assistant/frontend/pull/2619)) - Show podcast transcripts in the player (by @OzGav in [#2602](https://github.com/music-assistant/frontend/pull/2602)) - Show the player of your own device as "This device" (by @marcelveldt in [#2888](https://github.com/music-assistant/frontend/pull/2888)) - Play a folder from inside it in Browse (by @marcelveldt in [#2889](https://github.com/music-assistant/frontend/pull/2889)) - Ask before removing a custom ambient sound (by @marcelveldt in [#2886](https://github.com/music-assistant/frontend/pull/2886)) - Open the options menu of music sources and player cards with right-click or long-press (by @marcelveldt in [#2884](https://github.com/music-assistant/frontend/pull/2884)) - Make it harder to remove a music source by accident (by @marcelveldt in [#2877](https://github.com/music-assistant/frontend/pull/2877)) - Simplify player card warning styling ([#63](https://github.com/music-assistant/frontend/pull/63)) (by @joperafe in [#2188](https://github.com/music-assistant/frontend/pull/2188)) - Show the album type in an artist's Appears on row (by @marcelveldt in [#2879](https://github.com/music-assistant/frontend/pull/2879)) - Make the back button work in the Home Assistant app (by @marcelveldt in [#2847](https://github.com/music-assistant/frontend/pull/2847)) - Refresh artist and album page rows when the library changes (by @marcelveldt in [#2876](https://github.com/music-assistant/frontend/pull/2876)) - Pick where your music lives: folder picker and Storage settings (by @marcelveldt in [#2860](https://github.com/music-assistant/frontend/pull/2860)) - Use Escape for back navigation (by @teancom in [#2850](https://github.com/music-assistant/frontend/pull/2850)) - Press Space to play or pause (by @pierosavi in [#2714](https://github.com/music-assistant/frontend/pull/2714)) - Unify and refine Discover shelf scrolling (by @trisweb in [#2693](https://github.com/music-assistant/frontend/pull/2693)) - Change volume with the mouse wheel in the group volume popout (by @modernman1 in [#2678](https://github.com/music-assistant/frontend/pull/2678)) - Allow for sorting playlist tracks by date added (by @kees in [#2824](https://github.com/music-assistant/frontend/pull/2824)) - Drag the rows sideways with the mouse (by @OzGav in [#2676](https://github.com/music-assistant/frontend/pull/2676)) - Show an artist's full discography from MusicBrainz (by @marcelveldt in [#2852](https://github.com/music-assistant/frontend/pull/2852)) - Open "View all" on the album shelf's source, even when another source is pinned (by @marcelveldt in [#2848](https://github.com/music-assistant/frontend/pull/2848)) - Favorites are yours, and you can dislike (by @marcelveldt in [#2834](https://github.com/music-assistant/frontend/pull/2834)) - Add a source picker to the album page's "more from this artist" row (by @marcelveldt in [#2841](https://github.com/music-assistant/frontend/pull/2841)) - Explain empty top-tracks and similar-artists rows on the artist page (by @marcelveldt in [#2838](https://github.com/music-assistant/frontend/pull/2838)) - Remove the count beside "Other versions" (by @marcelveldt in [#2844](https://github.com/music-assistant/frontend/pull/2844)) - Fit the detail page header to smaller screens (by @marcelveldt in [#2843](https://github.com/music-assistant/frontend/pull/2843)) - Tidy up the album page rows (by @marcelveldt in [#2837](https://github.com/music-assistant/frontend/pull/2837)) - Switch a row's source faster on the artist page (by @marcelveldt in [#2831](https://github.com/music-assistant/frontend/pull/2831)) - Match the add-group-player picker to the other settings dialogs (by @marcelveldt in [#2836](https://github.com/music-assistant/frontend/pull/2836)) - Tidy up the redesigned artist page (by @marcelveldt in [#2802](https://github.com/music-assistant/frontend/pull/2802)) - A bigger global search that remembers your last search (by @marcelveldt in [#2800](https://github.com/music-assistant/frontend/pull/2800)) - Add the item menu to search results (by @OzGav in [#2679](https://github.com/music-assistant/frontend/pull/2679)) - Show listeners a fitting AI Radio empty state (by @marcelveldt in [#2810](https://github.com/music-assistant/frontend/pull/2810)) - Improve Player Group UX clarity (by @trisweb in [#2695](https://github.com/music-assistant/frontend/pull/2695)) - Create the first admin account inside the setup wizard (by @marcelveldt in [#2799](https://github.com/music-assistant/frontend/pull/2799)) - Offer a short tour of the app after onboarding and from the profile menu (by @marcelveldt in [#2791](https://github.com/music-assistant/frontend/pull/2791)) - Show the music sources shared with you in Settings and tidy up user management (by @marcelveldt in [#2792](https://github.com/music-assistant/frontend/pull/2792)) - Show the players already found in the setup wizard (by @marcelveldt in [#2790](https://github.com/music-assistant/frontend/pull/2790)) - Ask new users for the standard or expert experience and split the welcome into short steps (by @marcelveldt in [#2789](https://github.com/music-assistant/frontend/pull/2789)) - Give the add-provider dialog more room (by @marcelveldt in [#2788](https://github.com/music-assistant/frontend/pull/2788)) - Explain and check the server addresses in the setup wizard (by @marcelveldt in [#2783](https://github.com/music-assistant/frontend/pull/2783)) - Show onboarding as a pop-up and fix moving between steps (by @marcelveldt in [#2782](https://github.com/music-assistant/frontend/pull/2782)) - Clearer onboarding wizard wording and a recommended first step (by @marcelveldt in [#2781](https://github.com/music-assistant/frontend/pull/2781)) - Gray accents on the now playing screen (by @MarvinSchenkel in [#2762](https://github.com/music-assistant/frontend/pull/2762)) - Invite members to connect their own music accounts (by @marcelveldt in [#2773](https://github.com/music-assistant/frontend/pull/2773)) - New look for the album page (by @stvncode in [#2760](https://github.com/music-assistant/frontend/pull/2760)) - Clearer sources and layout on the artist page (by @stvncode in [#2758](https://github.com/music-assistant/frontend/pull/2758)) - Consistent focus style for the favorite button in item details (by @marcelveldt in [#2756](https://github.com/music-assistant/frontend/pull/2756)) - New look for the track page with customizable rows (by @stvncode in [#2729](https://github.com/music-assistant/frontend/pull/2729)) - Welcome new household members with their own onboarding (by @marcelveldt in [#2750](https://github.com/music-assistant/frontend/pull/2750)) - Make the action icons in the item header keyboard accessible (by @marcelveldt in [#2748](https://github.com/music-assistant/frontend/pull/2748)) - Replace the last browser popups with the app's own dialogs (by @stvncode in [#2746](https://github.com/music-assistant/frontend/pull/2746)) - Add server settings and household members to the onboarding wizard (by @marcelveldt in [#2740](https://github.com/music-assistant/frontend/pull/2740)) - Pick which sources the search box searches (by @stvncode in [#2745](https://github.com/music-assistant/frontend/pull/2745)) - Create your own user roles in user management (by @marcelveldt in [#2732](https://github.com/music-assistant/frontend/pull/2732)) - Clearer labels on the artist page (by @stvncode in [#2744](https://github.com/music-assistant/frontend/pull/2744)) - Ask before removing a music source from the list (by @marcelveldt in [#2738](https://github.com/music-assistant/frontend/pull/2738)) - Reset scroll position on route change (by @pierosavi in [#2722](https://github.com/music-assistant/frontend/pull/2722)) - Share Music Assistant playlists with other members (by @marcelveldt in [#2731](https://github.com/music-assistant/frontend/pull/2731)) - Guide new admins through setup with an onboarding wizard (by @marcelveldt in [#2733](https://github.com/music-assistant/frontend/pull/2733)) - Show the Home Assistant system account in user management (by @marcelveldt in [#2730](https://github.com/music-assistant/frontend/pull/2730)) - Let members pick who to share a music source with (by @marcelveldt in [#2727](https://github.com/music-assistant/frontend/pull/2727)) - New look for the artist page with customizable rows (by @stvncode in [#2720](https://github.com/music-assistant/frontend/pull/2720)) - Drop the plugin logo on built-in discover rows (by @marcelveldt in [#2719](https://github.com/music-assistant/frontend/pull/2719)) - Owner and sharing controls for music sources (by @marcelveldt in [#2716](https://github.com/music-assistant/frontend/pull/2716)) - Link to the audio analysis status page from the providers tab (by @OzGav in [#2708](https://github.com/music-assistant/frontend/pull/2708)) - Improve accessible names for icon controls (by @teancom in [#2569](https://github.com/music-assistant/frontend/pull/2569)) - Migrate playlists between providers (by @marcelveldt in [#2647](https://github.com/music-assistant/frontend/pull/2647)) - Update browser title with current track and artist (by @phiychai in [#2649](https://github.com/music-assistant/frontend/pull/2649)) - Add match policy option to playlist import (by @marcelveldt in [#2646](https://github.com/music-assistant/frontend/pull/2646)) ## 🐛 Bugfixes - Send quiz guests back to the Party page when the quiz is over (by @marcelveldt in [#3126](https://github.com/music-assistant/frontend/pull/3126)) - Recognize this browser's web player when opened from the Home Assistant sidebar (by @marcelveldt in [#3125](https://github.com/music-assistant/frontend/pull/3125)) - Show one message when a play action fails, not two (by @marcelveldt in [#3121](https://github.com/music-assistant/frontend/pull/3121)) - Load only English and German translations in tests (by @stvncode in [#3101](https://github.com/music-assistant/frontend/pull/3101)) - Fix the top artist card and page scrolling on the statistics page (by @pierosavi in [#3088](https://github.com/music-assistant/frontend/pull/3088)) - Fit the statistics page on small screens (by @stvncode in [#3087](https://github.com/music-assistant/frontend/pull/3087)) - Show same-named artists in search results (by @NasaGeek in [#2999](https://github.com/music-assistant/frontend/pull/2999)) - Stop the load more spinner once every item is loaded (by @stvncode in [#3083](https://github.com/music-assistant/frontend/pull/3083)) - Keep the mobile search usable on short screens (by @pierosavi in [#3077](https://github.com/music-assistant/frontend/pull/3077)) - Keep source-only Sendspin devices in the player menu until they're set up (by @maximmaxim345 in [#3051](https://github.com/music-assistant/frontend/pull/3051)) - Avoid background refresh to clear the name field in MusicQuiz (by @TimoPtr in [#2944](https://github.com/music-assistant/frontend/pull/2944)) - Stop detail pages flashing while an item is refreshed (by @OzGav in [#3048](https://github.com/music-assistant/frontend/pull/3048)) - Use a separate translation for the setup alert Review button (by @MarvinSchenkel in [#3032](https://github.com/music-assistant/frontend/pull/3032)) - Fix waveform progress bar seeking to the start on click (by @MarvinSchenkel in [#3031](https://github.com/music-assistant/frontend/pull/3031)) - Keep the active sidebar colour on visited links (by @CaseyRo in [#3006](https://github.com/music-assistant/frontend/pull/3006)) - Add new language options to translations (by @OzGav in [#3012](https://github.com/music-assistant/frontend/pull/3012)) - Make line-in restartable in the player bar and cards (by @maximmaxim345 in [#3008](https://github.com/music-assistant/frontend/pull/3008)) - Load the first page of library listings while sort options are still loading (by @fmunkes in [#2984](https://github.com/music-assistant/frontend/pull/2984)) - Let admins pause and resume the setup wizard (by @pierosavi in [#2980](https://github.com/music-assistant/frontend/pull/2980)) - Show a retry button when a listing fails to load (by @stvncode in [#2989](https://github.com/music-assistant/frontend/pull/2989)) - Show only one spinner in the Command Center search (by @stvncode in [#2990](https://github.com/music-assistant/frontend/pull/2990)) - Stop the listing search from flickering while it opens (by @stvncode in [#2983](https://github.com/music-assistant/frontend/pull/2983)) - Fix page titles cutting off the bottom of letters (by @OzGav in [#2969](https://github.com/music-assistant/frontend/pull/2969)) - Fix audiobook collection pages not loading (by @fmunkes in [#2971](https://github.com/music-assistant/frontend/pull/2971)) - Keep DSP preset badge when toggling DSP on/off (by @OzGav in [#2899](https://github.com/music-assistant/frontend/pull/2899)) - Play albums and playlists in the order their page shows (by @OzGav in [#2961](https://github.com/music-assistant/frontend/pull/2961)) - Stop listings from retrying a failed load as fast as it fails (by @Bazooper-blip in [#2953](https://github.com/music-assistant/frontend/pull/2953)) - Show settings save errors only once (by @marcelveldt in [#2958](https://github.com/music-assistant/frontend/pull/2958)) - Fix saving a cleared optional number setting (by @marcelveldt in [#2957](https://github.com/music-assistant/frontend/pull/2957)) - Hide Home Assistant sign-in on Remote Access without an External URL (by @marcelveldt in [#2951](https://github.com/music-assistant/frontend/pull/2951)) - Get the dashboard link even without a cast device (by @marcelveldt in [#2950](https://github.com/music-assistant/frontend/pull/2950)) - Left-align dialog titles on desktop (by @marcelveldt in [#2949](https://github.com/music-assistant/frontend/pull/2949)) - Prevent audio session dropping when paused (by @pierosavi in [#2721](https://github.com/music-assistant/frontend/pull/2721)) - Keep the floating Save button from covering the last setting (by @marcelveldt in [#2937](https://github.com/music-assistant/frontend/pull/2937)) - Let party guests re-request tracks when duplicates are allowed (by @MarvinSchenkel in [#2872](https://github.com/music-assistant/frontend/pull/2872)) - Show album and track versions in search results (by @MarvinSchenkel in [#2923](https://github.com/music-assistant/frontend/pull/2923)) - Show the source name in the Reconfigure dialog when the source is not loaded (by @marcelveldt in [#2908](https://github.com/music-assistant/frontend/pull/2908)) - Don't repeat the album year on every track of an album page (by @MarvinSchenkel in [#2924](https://github.com/music-assistant/frontend/pull/2924)) - Remember the web player volume between sessions (by @OzGav in [#2900](https://github.com/music-assistant/frontend/pull/2900)) - Avoid duplicate library items in global search results (by @marcelveldt in [#2905](https://github.com/music-assistant/frontend/pull/2905)) - Line up the Cancel button in confirmation dialogs (by @marcelveldt in [#2909](https://github.com/music-assistant/frontend/pull/2909)) - Fix player covering sidebar (by @pierosavi in [#2906](https://github.com/music-assistant/frontend/pull/2906)) - Add the missing SVG app icon (by @marcelveldt in [#2903](https://github.com/music-assistant/frontend/pull/2903)) - Keep the onboarding wizard from covering a setup dialog (by @marcelveldt in [#2897](https://github.com/music-assistant/frontend/pull/2897)) - Allow renaming or disabling a player that still needs setup from the players list (by @marcelveldt in [#2890](https://github.com/music-assistant/frontend/pull/2890)) - Never auto-select players for dashboard viewers (by @jozefKruszynski in [#2618](https://github.com/music-assistant/frontend/pull/2618)) - Keep the queue reorder grip from opening the item menu on long-press (by @MarvinSchenkel in [#2881](https://github.com/music-assistant/frontend/pull/2881)) - Show the right source for artist top tracks and streaming services (by @marcelveldt in [#2880](https://github.com/music-assistant/frontend/pull/2880)) - Center play buttons and fix icon sizes in the player controls (by @marcelveldt in [#2874](https://github.com/music-assistant/frontend/pull/2874)) - Fix "album_type.undefined" in an artist's Appears on list (by @marcelveldt in [#2878](https://github.com/music-assistant/frontend/pull/2878)) - Keep the page scrollbar above the player bar (by @trisweb in [#2696](https://github.com/music-assistant/frontend/pull/2696)) - Fix redundant mobile sidebar announcements (by @bartbunting in [#2754](https://github.com/music-assistant/frontend/pull/2754)) - Fix missing accessible label on player mute button (by @bartbunting in [#2761](https://github.com/music-assistant/frontend/pull/2761)) - Only show read more when there is more to read (by @OzGav in [#2832](https://github.com/music-assistant/frontend/pull/2832)) - Show results from every provider in the global search (by @MarvinSchenkel in [#2845](https://github.com/music-assistant/frontend/pull/2845)) - Allow selecting and copying text in the setup wizard (by @MarvinSchenkel in [#2839](https://github.com/music-assistant/frontend/pull/2839)) - Keep the player popouts clear of the status bar on phones (by @marcelveldt in [#2855](https://github.com/music-assistant/frontend/pull/2855)) - Allow selecting text in read-only config label fields (by @MarvinSchenkel in [#2717](https://github.com/music-assistant/frontend/pull/2717)) - Avoid duplicate media titles in screen reader announcements (by @bartbunting in [#2759](https://github.com/music-assistant/frontend/pull/2759)) - Fix wrong artist's albums showing on the See-all page (by @marcelveldt in [#2842](https://github.com/music-assistant/frontend/pull/2842)) - Hide play button on non-playable search results (by @marcelveldt in [#2833](https://github.com/music-assistant/frontend/pull/2833)) - Show setting help in a popover next to the field (by @marcelveldt in [#2796](https://github.com/music-assistant/frontend/pull/2796)) - Show the source name in audio details when a music source isn't shared (by @marcelveldt in [#2784](https://github.com/music-assistant/frontend/pull/2784)) - Show Party, AI Radio and the visualizer to guests (by @marcelveldt in [#2777](https://github.com/music-assistant/frontend/pull/2777)) - Show radio stream artwork in the Party dashboard (by @pierosavi in [#2712](https://github.com/music-assistant/frontend/pull/2712)) - Space a source's icon apart from its name (by @stvncode in [#2774](https://github.com/music-assistant/frontend/pull/2774)) - Report and undo a failed music source rename (by @marcelveldt in [#2772](https://github.com/music-assistant/frontend/pull/2772)) - Show edit errors and require write access to edit playlists (by @marcelveldt in [#2755](https://github.com/music-assistant/frontend/pull/2755)) - Fix item menu not updating position correctly (by @pierosavi in [#2715](https://github.com/music-assistant/frontend/pull/2715)) - Disable autoplay controls while repeat is on (by @MarvinSchenkel in [#2711](https://github.com/music-assistant/frontend/pull/2711)) - Show the right release year for tracks in time zones west of UTC (by @OzGav in [#2697](https://github.com/music-assistant/frontend/pull/2697)) - Keep sidebar shortcuts tidied up after a provider is removed (by @OzGav in [#2694](https://github.com/music-assistant/frontend/pull/2694)) - Keep the app on screen while it reconnects after being backgrounded (by @MarvinSchenkel in [#2689](https://github.com/music-assistant/frontend/pull/2689)) - Fix playlist import match-policy version gate (by @marcelveldt in [#2675](https://github.com/music-assistant/frontend/pull/2675)) ## 🧰 Maintenance and dependency bumps <details> <summary>210 changes</summary> - Bump vue-i18n from 11.4.16 to 11.4.18 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3152](https://github.com/music-assistant/frontend/pull/3152)) - Bump @intlify/unplugin-vue-i18n from 11.2.5 to 11.2.8 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3150](https://github.com/music-assistant/frontend/pull/3150)) - Keep the disable-player confirmation open, and Escape in a rename away from the setup wizard (by @marcelveldt in [#3158](https://github.com/music-assistant/frontend/pull/3158)) - Describe how onboarding completes now that adding a provider no longer does (by @marcelveldt in [#3156](https://github.com/music-assistant/frontend/pull/3156)) - Bump @tanstack/vue-virtual from 3.13.50 to 3.13.52 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3149](https://github.com/music-assistant/frontend/pull/3149)) - Bump @tailwindcss/vite from 4.3.3 to 4.3.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3148](https://github.com/music-assistant/frontend/pull/3148)) - Bump swiper from 14.3.0 to 14.4.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3145](https://github.com/music-assistant/frontend/pull/3145)) - Bump vite from 8.3.5 to 8.3.6 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3154](https://github.com/music-assistant/frontend/pull/3154)) - Bump peter-evans/create-pull-request from 8.1.1 to 8.1.2 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3143](https://github.com/music-assistant/frontend/pull/3143)) - Stop publishing the frontend to PyPI (by @marcelveldt in [#3127](https://github.com/music-assistant/frontend/pull/3127)) - Run the nightly release an hour earlier (by @marcelveldt in [#3134](https://github.com/music-assistant/frontend/pull/3134)) - Don't send a stable pin PR to the wrong server branch (by @marcelveldt in [#3129](https://github.com/music-assistant/frontend/pull/3129)) - Use shared SVG icons for explicit content badges (by @dmoo500 in [#3118](https://github.com/music-assistant/frontend/pull/3118)) - Update the Web player to Sendspin 1.0.0-rc1 (by @maximmaxim345 in [#3119](https://github.com/music-assistant/frontend/pull/3119)) - Replace the tabler icon package with local player icons (by @stvncode in [#3108](https://github.com/music-assistant/frontend/pull/3108)) - Replace genre, DSP menu and party badge icons with Lucide (by @dmoo500 in [#3104](https://github.com/music-assistant/frontend/pull/3104)) - Automate frontend backports for the stable server release (by @marcelveldt in [#3010](https://github.com/music-assistant/frontend/pull/3010)) - Bump eslint from 10.13.0 to 10.14.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3092](https://github.com/music-assistant/frontend/pull/3092)) - Bump sass from 1.105.0 to 1.107.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3095](https://github.com/music-assistant/frontend/pull/3095)) - Bump @lucide/vue from 1.61.0 to 1.66.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3097](https://github.com/music-assistant/frontend/pull/3097)) - Bump ts-pattern from 5.9.0 to 5.9.2 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3098](https://github.com/music-assistant/frontend/pull/3098)) - Bump @tabler/icons-vue from 3.48.0 to 3.50.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3093](https://github.com/music-assistant/frontend/pull/3093)) - Bump marked from 18.1.1 to 18.1.2 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3094](https://github.com/music-assistant/frontend/pull/3094)) - Bump vite from 8.3.4 to 8.3.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3096](https://github.com/music-assistant/frontend/pull/3096)) - Bump zod from 4.6.6 to 4.6.7 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3099](https://github.com/music-assistant/frontend/pull/3099)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#3090](https://github.com/music-assistant/frontend/pull/3090)) - Bump @tanstack/vue-virtual from 3.13.39 to 3.13.50 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3100](https://github.com/music-assistant/frontend/pull/3100)) - Replace the Vuetify Container wrapper with plain elements (by @pierosavi in [#3073](https://github.com/music-assistant/frontend/pull/3073)) - Split account and statistics API modules (by @dmoo500 in [#3080](https://github.com/music-assistant/frontend/pull/3080)) - Turn off the Vitest module cache that breaks Vuetify styles on reruns (by @stvncode in [#3078](https://github.com/music-assistant/frontend/pull/3078)) - Share the detail section title (by @OzGav in [#3075](https://github.com/music-assistant/frontend/pull/3075)) - Give the warning colour and slider their own theme tokens (by @pierosavi in [#3071](https://github.com/music-assistant/frontend/pull/3071)) - Stop reading Vuetify's theme state (by @pierosavi in [#3067](https://github.com/music-assistant/frontend/pull/3067)) - Move the delete and disable user dialogs to shadcn-vue (by @pierosavi in [#3036](https://github.com/music-assistant/frontend/pull/3036)) - Bump vue-tsc from 3.3.11 to 3.3.13 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3057](https://github.com/music-assistant/frontend/pull/3057)) - Bump vite-plugin-pwa from 1.3.0 to 2.0.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3062](https://github.com/music-assistant/frontend/pull/3062)) - Bump eslint from 10.11.0 to 10.13.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3061](https://github.com/music-assistant/frontend/pull/3061)) - Bump oxlint and eslint-plugin-oxlint (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3060](https://github.com/music-assistant/frontend/pull/3060)) - Bump vitest from 5.0.3 to 5.0.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3059](https://github.com/music-assistant/frontend/pull/3059)) - Bump vue-i18n from 11.4.14 to 11.4.16 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3058](https://github.com/music-assistant/frontend/pull/3058)) - Bump marked from 18.0.14 to 18.1.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3056](https://github.com/music-assistant/frontend/pull/3056)) - Bump typescript-eslint from 8.71.0 to 8.72.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3055](https://github.com/music-assistant/frontend/pull/3055)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#3052](https://github.com/music-assistant/frontend/pull/3052)) - Bump @lucide/vue from 1.51.0 to 1.61.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3063](https://github.com/music-assistant/frontend/pull/3063)) - Bump @vitest/coverage-v8 from 4.1.10 to 5.0.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3064](https://github.com/music-assistant/frontend/pull/3064)) - Bump pypa/gh-action-pypi-publish from 1.14.2 to 1.14.3 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3054](https://github.com/music-assistant/frontend/pull/3054)) - Bump actions/setup-python from 7.0.0 to 7.1.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3053](https://github.com/music-assistant/frontend/pull/3053)) - Bump happy-dom from 20.11.6 to 21.0.4 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3046](https://github.com/music-assistant/frontend/pull/3046)) - Bump zod from 4.6.5 to 4.6.6 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3045](https://github.com/music-assistant/frontend/pull/3045)) - Bump dompurify from 3.4.16 to 3.4.17 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3044](https://github.com/music-assistant/frontend/pull/3044)) - Bump @vitest/ui from 5.0.0 to 5.0.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3043](https://github.com/music-assistant/frontend/pull/3043)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#3018](https://github.com/music-assistant/frontend/pull/3018)) - Bump reka-ui from 2.10.5 to 2.11.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3021](https://github.com/music-assistant/frontend/pull/3021)) - Bump @vitejs/plugin-vue from 6.0.9 to 6.0.10 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3025](https://github.com/music-assistant/frontend/pull/3025)) - Bump vue-i18n from 11.4.12 to 11.4.14 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3022](https://github.com/music-assistant/frontend/pull/3022)) - Bump vite from 8.3.2 to 8.3.4 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3023](https://github.com/music-assistant/frontend/pull/3023)) - Bump vue from 3.5.43 to 3.5.44 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3024](https://github.com/music-assistant/frontend/pull/3024)) - Bump swiper from 14.2.0 to 14.3.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3026](https://github.com/music-assistant/frontend/pull/3026)) - updated PWA and touch icons (by @elcaptain in [#3003](https://github.com/music-assistant/frontend/pull/3003)) - Run tests, lint and build as parallel CI jobs (by @pierosavi in [#3030](https://github.com/music-assistant/frontend/pull/3030)) - Bump vue-router from 5.2.0 to 5.4.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3029](https://github.com/music-assistant/frontend/pull/3029)) - Bump oxlint and eslint-plugin-oxlint (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3020](https://github.com/music-assistant/frontend/pull/3020)) - Bump prettier from 3.9.9 to 3.9.10 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3028](https://github.com/music-assistant/frontend/pull/3028)) - Bump @types/node from 26.6.4 to 26.6.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3027](https://github.com/music-assistant/frontend/pull/3027)) - Bump actions/create-github-app-token from 3.2.0 to 3.3.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#3019](https://github.com/music-assistant/frontend/pull/3019)) - Show sign-in errors in the language of the app (by @marcelveldt in [#3002](https://github.com/music-assistant/frontend/pull/3002)) - Move the settings, players and providers lists to shadcn-vue (by @pierosavi in [#2986](https://github.com/music-assistant/frontend/pull/2986)) - Bump actions/setup-node from 7.0.0 to 7.1.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2995](https://github.com/music-assistant/frontend/pull/2995)) - Bump release-drafter/release-drafter from 7.9.0 to 7.10.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2994](https://github.com/music-assistant/frontend/pull/2994)) - Stop the dev server reloading when a page uses a new Vuetify component (by @pierosavi in [#2993](https://github.com/music-assistant/frontend/pull/2993)) - Replace the home rows loading spinner with the shadcn Spinner (by @pierosavi in [#2981](https://github.com/music-assistant/frontend/pull/2981)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2968](https://github.com/music-assistant/frontend/pull/2968)) - Add contributor guidelines for Claude Code (by @stvncode in [#2972](https://github.com/music-assistant/frontend/pull/2972)) - Bump @types/node from 26.2.0 to 26.6.4 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2913](https://github.com/music-assistant/frontend/pull/2913)) - Add 'sk_SK' to VAR_LANGUAGES in workflow (by @OzGav in [#2960](https://github.com/music-assistant/frontend/pull/2960)) - Document Tailwind-first styling (by @stvncode in [#2963](https://github.com/music-assistant/frontend/pull/2963)) - Show a banner on unsupported installations (by @marcelveldt in [#2954](https://github.com/music-assistant/frontend/pull/2954)) - Label the voice-over transition in the audio processing details (by @marcelveldt in [#2956](https://github.com/music-assistant/frontend/pull/2956)) - Show the album cover for tracks in the party view (by @marcelveldt in [#2946](https://github.com/music-assistant/frontend/pull/2946)) - Keep keyboard focus on the menu button after closing a menu (by @marcelveldt in [#2947](https://github.com/music-assistant/frontend/pull/2947)) - Share how detail pages keep up with item updates (by @OzGav in [#2933](https://github.com/music-assistant/frontend/pull/2933)) - Remove unused fallback from the Add player group page (by @marcelveldt in [#2941](https://github.com/music-assistant/frontend/pull/2941)) - Remove unused watcher from the Add player group dialog (by @marcelveldt in [#2940](https://github.com/music-assistant/frontend/pull/2940)) - Remove unused fallback from the Add player group dialog (by @marcelveldt in [#2939](https://github.com/music-assistant/frontend/pull/2939)) - Remove unused provider check from the player grouping picker (by @marcelveldt in [#2938](https://github.com/music-assistant/frontend/pull/2938)) - Re-enable the vue/no-v-html lint rule (by @MarvinSchenkel in [#2930](https://github.com/music-assistant/frontend/pull/2930)) - Remove unused fallback from remote album art loading (by @marcelveldt in [#2935](https://github.com/music-assistant/frontend/pull/2935)) - Remove leftover support code for outdated servers (by @marcelveldt in [#2936](https://github.com/music-assistant/frontend/pull/2936)) - Ask web app users to update an outdated server instead of hiding features (by @marcelveldt in [#2891](https://github.com/music-assistant/frontend/pull/2891)) - ⬆️ Sync shared-icons to 0.4.0 (by @[musicassistant-bot[bot]](https://github.com/apps/musicassistant-bot) in [#2931](https://github.com/music-assistant/frontend/pull/2931)) - Show read-only locations in the folder picker (by @marcelveldt in [#2910](https://github.com/music-assistant/frontend/pull/2910)) - Remove unused shortcut helpers that compare pins by their text (by @marcelveldt in [#2927](https://github.com/music-assistant/frontend/pull/2927)) - Bump release-drafter/release-drafter from 7.7.0 to 7.9.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2912](https://github.com/music-assistant/frontend/pull/2912)) - Bump @vueuse/core from 14.3.0 to 15.0.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2916](https://github.com/music-assistant/frontend/pull/2916)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2911](https://github.com/music-assistant/frontend/pull/2911)) - Bump vitest from 4.1.11 to 5.0.3 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2914](https://github.com/music-assistant/frontend/pull/2914)) - Bump @tabler/icons-vue from 3.46.0 to 3.48.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2915](https://github.com/music-assistant/frontend/pull/2915)) - Bump @lucide/vue from 1.48.0 to 1.51.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2918](https://github.com/music-assistant/frontend/pull/2918)) - Bump lint-staged from 17.5.1 to 17.6.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2919](https://github.com/music-assistant/frontend/pull/2919)) - Bump oxlint and eslint-plugin-oxlint (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2920](https://github.com/music-assistant/frontend/pull/2920)) - Bump typescript-eslint from 8.70.1 to 8.71.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2921](https://github.com/music-assistant/frontend/pull/2921)) - Bump vite from 8.3.0 to 8.3.2 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2917](https://github.com/music-assistant/frontend/pull/2917)) - Say on the Storage page why a location can not be removed (by @marcelveldt in [#2922](https://github.com/music-assistant/frontend/pull/2922)) - Bump @lucide/vue from 1.33.0 to 1.48.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2871](https://github.com/music-assistant/frontend/pull/2871)) - Use consistent wording for the app and menu paths (by @marcelveldt in [#2904](https://github.com/music-assistant/frontend/pull/2904)) - Bump eslint-plugin-vue from 10.10.0 to 10.11.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2864](https://github.com/music-assistant/frontend/pull/2864)) - Bump dompurify from 3.4.14 to 3.4.16 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2883](https://github.com/music-assistant/frontend/pull/2883)) - Bump sass from 1.104.0 to 1.105.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2866](https://github.com/music-assistant/frontend/pull/2866)) - Bump tailwind-merge from 3.6.0 to 3.7.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2862](https://github.com/music-assistant/frontend/pull/2862)) - Bump @vitejs/plugin-vue from 6.0.8 to 6.0.9 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2868](https://github.com/music-assistant/frontend/pull/2868)) - Bump reka-ui from 2.10.3 to 2.10.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2869](https://github.com/music-assistant/frontend/pull/2869)) - Bump vue from 3.5.41 to 3.5.43 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2865](https://github.com/music-assistant/frontend/pull/2865)) - Only show players that still need setup to users who can set them up (by @marcelveldt in [#2893](https://github.com/music-assistant/frontend/pull/2893)) - Fix the pre-commit hook picking an old Node version (by @marcelveldt in [#2894](https://github.com/music-assistant/frontend/pull/2894)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2861](https://github.com/music-assistant/frontend/pull/2861)) - Shared icons repo sync logic rework (by @pierosavi in [#2775](https://github.com/music-assistant/frontend/pull/2775)) - Clearer naming for an artist's track list (by @marcelveldt in [#2882](https://github.com/music-assistant/frontend/pull/2882)) - Fix the slow AI Radio prefetch test (by @teancom in [#2709](https://github.com/music-assistant/frontend/pull/2709)) - Bump zod from 4.6.2 to 4.6.5 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2870](https://github.com/music-assistant/frontend/pull/2870)) - Move the Storage settings under System and offer a location as music source (by @marcelveldt in [#2875](https://github.com/music-assistant/frontend/pull/2875)) - Bump prettier from 3.8.3 to 3.9.9 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2867](https://github.com/music-assistant/frontend/pull/2867)) - Open the start page after logging out (by @marcelveldt in [#2873](https://github.com/music-assistant/frontend/pull/2873)) - Keep TanStack Form packages on the same version (by @marcelveldt in [#2858](https://github.com/music-assistant/frontend/pull/2858)) - Bump vue-i18n from 11.4.10 to 11.4.12 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2819](https://github.com/music-assistant/frontend/pull/2819)) - Bump typescript-eslint from 8.68.0 to 8.70.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2816](https://github.com/music-assistant/frontend/pull/2816)) - Bump lint-staged from 17.4.1 to 17.5.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2818](https://github.com/music-assistant/frontend/pull/2818)) - Say "music source" instead of "provider" in more places (by @marcelveldt in [#2857](https://github.com/music-assistant/frontend/pull/2857)) - Use the same help box on every DSP filter (by @OzGav in [#2849](https://github.com/music-assistant/frontend/pull/2849)) - Bump eslint from 10.9.1 to 10.11.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2820](https://github.com/music-assistant/frontend/pull/2820)) - Bump @vue/test-utils from 2.5.0 to 2.5.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2817](https://github.com/music-assistant/frontend/pull/2817)) - Bump @tanstack/vue-virtual from 3.13.30 to 3.13.39 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2814](https://github.com/music-assistant/frontend/pull/2814)) - Bump jsdom from 30.0.1 to 30.1.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2813](https://github.com/music-assistant/frontend/pull/2813)) - Bump marked from 18.0.11 to 18.0.14 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2812](https://github.com/music-assistant/frontend/pull/2812)) - Cleaner provider icon sizing via a CSS variable (by @marcelveldt in [#2854](https://github.com/music-assistant/frontend/pull/2854)) - Tell Copilot the frontend ships in lockstep with the server (by @marcelveldt in [#2856](https://github.com/music-assistant/frontend/pull/2856)) - Keep hidden settings intact when resetting to defaults (by @marcelveldt in [#2853](https://github.com/music-assistant/frontend/pull/2853)) - Update 'sync_running' and 'seed_filters_hint' strings (by @remon1496 in [#2835](https://github.com/music-assistant/frontend/pull/2835)) - Default test fixtures to no favorite state (by @marcelveldt in [#2846](https://github.com/music-assistant/frontend/pull/2846)) - Rename "Provider details" to "Source details" (by @marcelveldt in [#2840](https://github.com/music-assistant/frontend/pull/2840)) - Share one text field across the account forms (by @marcelveldt in [#2829](https://github.com/music-assistant/frontend/pull/2829)) - Fix icon sizes ignored inside buttons (by @marcelveldt in [#2826](https://github.com/music-assistant/frontend/pull/2826)) - Finish de-Vuetifying the background tasks card (by @marcelveldt in [#2825](https://github.com/music-assistant/frontend/pull/2825)) - Use the shared spinner for loading states (by @marcelveldt in [#2823](https://github.com/music-assistant/frontend/pull/2823)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2811](https://github.com/music-assistant/frontend/pull/2811)) - Stop the add-provider dialog fetching while hidden (by @marcelveldt in [#2822](https://github.com/music-assistant/frontend/pull/2822)) - Announce list rows to screen readers in settings lists (by @marcelveldt in [#2821](https://github.com/music-assistant/frontend/pull/2821)) - Share the player rename helper with the rename dialog (by @marcelveldt in [#2808](https://github.com/music-assistant/frontend/pull/2808)) - Tidy up redundant loading flags on dialog buttons (by @marcelveldt in [#2807](https://github.com/music-assistant/frontend/pull/2807)) - Share the remote access ID grouping (by @marcelveldt in [#2806](https://github.com/music-assistant/frontend/pull/2806)) - Reuse shared provider-name lookup in the settings breadcrumb (by @marcelveldt in [#2805](https://github.com/music-assistant/frontend/pull/2805)) - Fix inert z-index classes on dialogs, popovers and selects (by @marcelveldt in [#2803](https://github.com/music-assistant/frontend/pull/2803)) - Tidy up the background tasks list view (by @marcelveldt in [#2797](https://github.com/music-assistant/frontend/pull/2797)) - Tidy up the provider name lookup (by @marcelveldt in [#2798](https://github.com/music-assistant/frontend/pull/2798)) - Tidy up the background tasks card view (by @marcelveldt in [#2795](https://github.com/music-assistant/frontend/pull/2795)) - Remove dead playMenuShown store field (by @marcelveldt in [#2794](https://github.com/music-assistant/frontend/pull/2794)) - Tidy up the music sources settings page (by @marcelveldt in [#2793](https://github.com/music-assistant/frontend/pull/2793)) - Stop the onboarding tests timing out when the suite is busy (by @marcelveldt in [#2787](https://github.com/music-assistant/frontend/pull/2787)) - Use one check for whether a plugin is loaded (by @marcelveldt in [#2785](https://github.com/music-assistant/frontend/pull/2785)) - Catch mistaken writes to state the app calculates itself (by @marcelveldt in [#2786](https://github.com/music-assistant/frontend/pull/2786)) - Sharing options say users instead of members (by @marcelveldt in [#2780](https://github.com/music-assistant/frontend/pull/2780)) - Simplify how the app tracks loaded plugins (by @marcelveldt in [#2779](https://github.com/music-assistant/frontend/pull/2779)) - Show a music source's own name in the settings breadcrumb (by @marcelveldt in [#2778](https://github.com/music-assistant/frontend/pull/2778)) - Fix tests (by @pierosavi in [#2776](https://github.com/music-assistant/frontend/pull/2776)) - Bump @scure/base from 2.2.0 to 2.4.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2767](https://github.com/music-assistant/frontend/pull/2767)) - Bump @vitest/ui from 4.1.10 to 5.0.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2769](https://github.com/music-assistant/frontend/pull/2769)) - Bump vite-plugin-webfont-dl from 3.12.0 to 3.13.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2770](https://github.com/music-assistant/frontend/pull/2770)) - Bump @vue/test-utils from 2.4.11 to 2.5.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2771](https://github.com/music-assistant/frontend/pull/2771)) - Bump @fontsource/roboto from 5.2.10 to 5.3.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2764](https://github.com/music-assistant/frontend/pull/2764)) - Bump vite from 8.1.5 to 8.3.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2766](https://github.com/music-assistant/frontend/pull/2766)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2763](https://github.com/music-assistant/frontend/pull/2763)) - Bump vue-tsc from 3.3.7 to 3.3.11 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2768](https://github.com/music-assistant/frontend/pull/2768)) - Bump zod from 4.5.4 to 4.6.2 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2765](https://github.com/music-assistant/frontend/pull/2765)) - Resolve a music source's name through one helper (by @marcelveldt in [#2757](https://github.com/music-assistant/frontend/pull/2757)) - Say "music source" instead of "provider" outside the settings screens (by @marcelveldt in [#2751](https://github.com/music-assistant/frontend/pull/2751)) - Translate the genre table's selection count (by @marcelveldt in [#2753](https://github.com/music-assistant/frontend/pull/2753)) - Update playlist listing comment to match server behaviour (by @marcelveldt in [#2752](https://github.com/music-assistant/frontend/pull/2752)) - Use the built-in button spinner in four more dialogs (by @marcelveldt in [#2749](https://github.com/music-assistant/frontend/pull/2749)) - Remove more unused translation keys and translate the genre table page counter (by @marcelveldt in [#2747](https://github.com/music-assistant/frontend/pull/2747)) - Bump baseline-browser-mapping from 2.10.38 to 2.11.22 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2725](https://github.com/music-assistant/frontend/pull/2725)) - Show a spinner on buttons while they are busy (by @marcelveldt in [#2743](https://github.com/music-assistant/frontend/pull/2743)) - Remove unused provider translation keys (by @marcelveldt in [#2737](https://github.com/music-assistant/frontend/pull/2737)) - Share the artist page's hero, row registry and editor with other detail pages (by @stvncode in [#2728](https://github.com/music-assistant/frontend/pull/2728)) - Clearer sharing hints for playlists without an owner (by @marcelveldt in [#2742](https://github.com/music-assistant/frontend/pull/2742)) - Show each user only the actions their role allows (by @marcelveldt in [#2736](https://github.com/music-assistant/frontend/pull/2736)) - Fix outdated auto-release workflow comments (by @marcelveldt in [#2741](https://github.com/music-assistant/frontend/pull/2741)) - Fix duplicate error message when a profile update fails (by @marcelveldt in [#2739](https://github.com/music-assistant/frontend/pull/2739)) - Clearer wording for the home page warning (by @marcelveldt in [#2734](https://github.com/music-assistant/frontend/pull/2734)) - Spot and prevent music sources that nobody can use (by @marcelveldt in [#2735](https://github.com/music-assistant/frontend/pull/2735)) - Clearer wording for music source sharing (by @marcelveldt in [#2726](https://github.com/music-assistant/frontend/pull/2726)) - Say "music source" and "plugin" instead of "provider" in settings (by @marcelveldt in [#2723](https://github.com/music-assistant/frontend/pull/2723)) - Bump vitest from 4.1.10 to 4.1.11 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2713](https://github.com/music-assistant/frontend/pull/2713)) - Show the server's reason when saving a user fails (by @marcelveldt in [#2724](https://github.com/music-assistant/frontend/pull/2724)) - Bump dompurify from 3.4.11 to 3.4.14 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2702](https://github.com/music-assistant/frontend/pull/2702)) - Bump vue-i18n from 11.4.8 to 11.4.10 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2701](https://github.com/music-assistant/frontend/pull/2701)) - Bump pnpm/action-setup from 6.0.9 to 6.1.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2699](https://github.com/music-assistant/frontend/pull/2699)) - Bump @internationalized/date from 3.12.3 to 3.12.4 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2705](https://github.com/music-assistant/frontend/pull/2705)) - Bump swiper from 14.1.0 to 14.2.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2700](https://github.com/music-assistant/frontend/pull/2700)) - Bump zod from 4.4.3 to 4.5.4 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2704](https://github.com/music-assistant/frontend/pull/2704)) - Bump sass from 1.102.0 to 1.104.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2707](https://github.com/music-assistant/frontend/pull/2707)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2698](https://github.com/music-assistant/frontend/pull/2698)) - Bump eslint from 10.7.0 to 10.9.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2685](https://github.com/music-assistant/frontend/pull/2685)) - Bump reka-ui from 2.10.1 to 2.10.3 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2639](https://github.com/music-assistant/frontend/pull/2639)) - Bump lint-staged from 16.4.0 to 17.4.1 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2682](https://github.com/music-assistant/frontend/pull/2682)) - Lokalise translations update (by @[github-actions[bot]](https://github.com/apps/github-actions) in [#2680](https://github.com/music-assistant/frontend/pull/2680)) - Bump oxlint and eslint-plugin-oxlint (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2684](https://github.com/music-assistant/frontend/pull/2684)) - Bump marked from 18.0.9 to 18.0.11 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2683](https://github.com/music-assistant/frontend/pull/2683)) - Bump typescript-eslint from 8.64.0 to 8.68.0 (by @[dependabot[bot]](https://github.com/apps/dependabot) in [#2686](https://github.com/music-assistant/frontend/pull/2686)) - Correct the DSP help text about which filters need stereo (by @OzGav in [#2677](https://github.com/music-assistant/frontend/pull/2677)) - Remove playlist import schema gate (by @marcelveldt in [#2692](https://github.com/music-assistant/frontend/pull/2692)) - Send issues opened on the frontend repo to the support repo (by @marcelveldt in [#2674](https://github.com/music-assistant/frontend/pull/2674)) </details> ## :bow: Contributors @apophisnow, @bartbunting, @Bazooper-blip, @CaseyRo, @culmat, @DerGary, @dmoo500, @elcaptain, @fmunkes, @joperafe, @jozefKruszynski, @jpittelkow, @kees, @marcelveldt, @MarvinSchenkel, @maximmaxim345, @modernman1, @NasaGeek, @OzGav, @phiychai, @pierosavi, @remon1496, @stellar-aria, @stvncode, @teancom, @TimoPtr, @trisweb, [@musicassistant-bot[bot]](https://github.com/apps/musicassistant-bot), Bart Bunting, @claude, @Copilot, Gary, joperafe, Modernman1, Moos, Daniel, @svaltonen and @wendevlin Co-authored-by: musicassistant-bot[bot] <304008617+musicassistant-bot[bot]@users.noreply.github.com>
A major rewrite of the Sendspin Server with a lot of changes and improvements.
There is a large possibility that new bugs were added in this update, please test and report any issues you encounter.
There are a couple of know issues with this version, those will be addressed in future PRs:
sendspin-clisometimes doesn't show metadata, this is a bug in the cliThe biggest user-facing improvements are:
buffer_capacity)In addition to that, this also includes a lot of under the hood changes for future features and improvements:
Example
aiosendspinto display custom bridges as native Sendspin players while powered off (for the Chromecast and AirPlay Sendspin bridges)Example
For more information, read the PR in the
aiosendspinrepository:aiosendspinSendspin/aiosendspin#142