π¦ Stable Release
π Read all about it in our 2.9 blog post! π
Changes since 2.8.9
β Breaking Changes
- Refactor plugin sources to first-class AudioSource MediaItems (by @marcelveldt in #3938)
π New Providers
- Add WebDAV provider (by @OzGav in #2484)
- WiiM provider (by @davidanthoff in #2947)
- Add Last.fm Recommendations metadata provider (by @OzGav in #3020)
- Add MSX Bridge Player Provider (by @trudenboy in #3123)
- Add Samsung WAM player provider (by @Oliver-Stevens in #3334)
- Add MPD Player Provider (by @OzGav in #3337)
- Add MusicMe music provider (by @JulienDeveaux in #3393)
- Add QQ Music provider (by @xiasi0 in #3511)
- Add Local Audio Out player provider (by @marcelveldt in #3585)
- Add Mother Earth Radio music provider (by @FlorianReiterer in #3599)
- Add Yandex Music Connect (Ynison) plugin provider (by @trudenboy in #3614)
- Add Yandex Smart Home plugin provider (by @trudenboy in #3615)
- Add Hue Light Sync plugin provider (by @marcelveldt in #3627)
- Smart playlist plugin (by @dmoo500 in #3630)
- Smart fades Audio Analysis provider (by @MarvinSchenkel in #3636)
- Add NetEase Cloud Music provider (by @xiasi0 in #3640)
- Add NTS Radio (Music Provider) (by @mike-sheppard in #3722)
- Add iTunes artwork metadata provider (by @OzGav in #3740)
- Add Sonic Analysis audio-analysis provider (CLAP-driven scalars + embedding) (by @chrisuthe in #3795)
- Add Yandex Music Connect (Ynison) (by @trudenboy in #3856)
- Add MCP-spec-compliant FastMCP server provider v0.3.20 (by @trudenboy in #3858)
- Add Acoustid audio analysis provider (by @OzGav in #3892)
- Add Wikipedia provider and associated plumbing (by @OzGav in #3972)
π Features and enhancements
- Add artist artwork display for radio streams (by @OzGav in #3110)
- Add configurable max size for metadata thumbnail cache (by @lukaszwawrzyk in #3196)
- kion_music: upgrade to yandex-music v3 - raw/enc FLAC, lyrics, similar artists, browse (by @trudenboy in #3234)
- zvuk_music: Browse, recommendations, lyrics, similar tracks, throttling (by @trudenboy in #3242)
- Add min and max volume functionality per player (by @OzGav in #3360)
- Add musicbrainz get_release_group functions (by @OzGav in #3384)
- Add support for legacy Shoutcast servers using ICY protocol (by @OzGav in #3386)
- Create Services for Playlist Export / Import (by @chrisuthe in #3387)
- Apple Music: Add support for radio stations (by @dmoo500 in #3433)
- Add favorites browsing and editing support to Emby provider (by @neurocis in #3457)
- Add Audio Analysis controller and Audio Analysis provider (by @MarvinSchenkel in #3509)
- Apple Music: Add content rating check for explicit tracks (by @LosCV29 in #3514)
- Add Infinite Mix dynamic builtin playlists (by @dmoo500 in #3555)
- Enable Sendspin bridge for Cast stereo pairs (by @marcelveldt in #3563)
- Handle Ogg FLAC in-band metadata in chained radio streams (by @a2hill in #3575)
- Add manual item management API and on_item_updated provider callback (by @OzGav in #3602)
- Add dynamic leader switching support for Sendspin sync groups (by @marcelveldt in #3603)
- Yandex Music: rotor session API, Wave Modes, user presets, library sync improvements (by @trudenboy in #3606)
- Add AI_QUERY and TTS to HA Plugin (by @MarvinSchenkel in #3607)
- Add audio quality option for Pandora provider (by @cryptk in #3617)
- Add secondary sort by year for album artist sorting (by @OzGav in #3619)
- Add ability to take over Pandora stream during concurrent streaming error (by @cryptk in #3620)
- Propagate now-playing info to Chromecast media_player (by @robtpaton in #3621)
- Add Apple Music station recommendations to Discover page (by @dmoo500 in #3622)
- Implement metadata provider priority (by @OzGav in #3623)
- Add Tidal starred tracks virtual playlist (by @FL550 in #3653)
- Subsonic: Cache requests (by @khers in #3662)
- Play from here respects user's sort order (by @philjackson in #3663)
- Add per-player delay configuration for Sendspin players (by @maximmaxim345 in #3689)
- Add setting to replace Pause with Stop for DLNA (by @peteS-UK in #3704)
- Subsonic: Add option to always request stream of raw file (by @khers in #3710)
- Forward Sendspin Cast app logs to Music Assistant (by @maximmaxim345 in #3713)
- Smart crossfade: Add gradual timestretching (by @MarvinSchenkel in #3737)
- Last FM: Add one-click auth (by @duanyutong in #3739)
- 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)
- 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 on played event handler (by @hatharry in #3805)
- Throttle torch to max 25% of CPU to prevent spikes during analysis (by @MarvinSchenkel in #3808)
- Allow Plugin Providers and Metadata providers to implement music related ProviderFeatures (by @MarvinSchenkel in #3811)
- Add option to use local genre metadata only when available (by @OzGav in #3815)
- Add player filter to scrobble providers (by @Tommatheussen in #3823)
- Add manual IP addresses setting to the Sendspin provider (by @staticdev in #3846)
- audio_analysis: add coverage endpoint + bulk merged accessor for sonic_similarity (by @chrisuthe in #3851)
- Detect Sendspin Cast Receiver failures and show them in the frontend (by @maximmaxim345 in #3853)
- Fix double sendspin bridges for devices with both Airplay and Cast (by @MarvinSchenkel in #3854)
- Apple Music similar artists via views=similar-artists API (by @dmoo500 in #3861)
- Use MB lookup to resolve ambiguous artist names (by @OzGav in #3862)
- 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)
- Set PlayerQueue.is_dynamic when radio_source changes (by @dmoo500 in #3886)
- Improve Listenbrainz multi-artist track scrobbles (by @Tommatheussen in #3887)
- Improve UX of Sync groups (by @MarvinSchenkel in #3897)
- Subsonic: Provide close implementation that cleans up (by @khers in #3906)
- Implement the
color@v1Sendspin role (by @maximmaxim345 in #3917) - Fix WiiM external source reporting (by @MarvinSchenkel in #3918)
- Add variable playback speed for audiobooks and podcasts (by @OzGav in #3939)
- Sonic Similarity Plugin (by @chrisuthe in #3943)
- Add stale-while-revalidate option to @use_cache (by @MarvinSchenkel in #3946)
- Stabilize group players: session-lifecycle instead of mandatory power (by @marcelveldt in #3947)
- Detect source audio format from ffmpeg log output (by @marcelveldt in #3950)
- Add Flow Mode sample-rate selection and per-player declared rates (by @marcelveldt in #3951)
- Improve imageproxy (by @marcelveldt in #3960)
- AudioSource follow-up (by @marcelveldt in #3964)
- Use passthrough PCM format for realtime AudioSource items (by @marcelveldt in #3969)
- Allow scrobble providers to filter by media_type (by @Tommatheussen in #3975)
- Allow Plugin Providers to implement ProviderFeature.SEARCH (by @MarvinSchenkel in #3978)
- Return a track sample for dynamic playlists when browsing (by @MarvinSchenkel in #4004)
- Emby Music Provider: add genres (by @hatharry in #4005)
- Smart Playlist: multi-seed support with album/playlist seeds (by @MarvinSchenkel in #4012)
- fast MCP server: debug & config namespaces, external-source playback, OpenClaw/Hermes presets (v0.7.1) (by @trudenboy in #4019)
- Show real source format for piped AudioSource providers (by @marcelveldt in #4027)
- Separate library artist views from per-provider artist listings (by @marcelveldt in #4039)
- Implement the Sendspin
visualizer@v1role and rework Hue Lights Sync (by @maximmaxim345 in #4042) - Import album tracks when manually adding an album and Import Album Tracks setting enabled (by @OzGav in #4046)
- Add Bandcamp feed and wishlist recommendations (by @rnewman in #4047)
- Add Settings to allow Control of default similar_track action (by @chrisuthe in #4053)
- Support changing audiobook covers (by @OzGav in #4055)
- Add album_type filter to smart playlist rules (by @dmoo500 in #4059)
- Cache recommendations() for sonic_similarity and audiobookshelf (by @MarvinSchenkel in #4099)
- Speed up YouTube Music recommendations loading (by @MarvinSchenkel in #4120)
- Spread metadata maintenance schedule across the day (by @MarvinSchenkel in #4126)
- Add get_artist_toptracks to lastfm recommendations provider (by @OzGav in #4141)
- Enable WiiM and Last.fm Recommendations by default (by @MarvinSchenkel in #4142)
- Smart playlists: optional AI-generated descriptions (by @MarvinSchenkel in #4144)
- Lastfm improvements (by @OzGav in #4148)
- Improve playlog for artists and albums (by @chrisuthe in #4149)
- ACoustID Switch to shared API key by default (by @OzGav in #4154)
- Default artist fix (by @chrisuthe in #4163)
- Add unofficial-integration disclaimer to streaming provider settings (by @marcelveldt in #4164)
π Bugfixes
- Adjust Spotify endpoints post deprecation notice (by @OzGav in #3303)
- Plex Connect: refactor and fixes plugin (by @anatosun in #3510)
- Fix MusicBrainz track lookup to aggregate release groups from all rec⦠(by @OzGav in #3520)
- Fix audio analysis version gating for non-track media (by @marcelveldt in #3566)
- Fix DLNA pause fallback for stale transport actions (by @xiasi0 in #3610)
- Fix local audio seg fault and hide unavailable players (by @OzGav in #3613)
- QQMusic: Improve QR auth URL handling behind HA Ingress (by @xiasi0 in #3631)
- Fix Sendspin bridge race causing Chromecast player to disappear (by @maximmaxim345 in #3632)
- Preserve builtin playlist cover images on M3U rewrites (by @marcelveldt in #3633)
- Add controller startup retry to HEOS (by @Tommatheussen in #3635)
- Fix AirPlay RAOP sync and disable AP2 grouping (by @marcelveldt in #3637)
- Fix AirPlay late joiner sync on Linux (by @marcelveldt in #3643)
- Small fixes for flow stream buffering and crossfade yielding (by @marcelveldt in #3645)
- Fix group member players reporting idle instead of playing (by @marcelveldt in #3646)
- Prevent filesystem unavailability from removing all associated library items (by @OzGav in #3647)
- Fix Nugs.net get_track NotImplementedError (by @marcelveldt in #3649)
- Use original stream for ibroadcast (by @robsonke in #3650)
- Use PluginSource elapsed_time for player progress (by @trudenboy in #3652)
- Fix muted player in group unmuting on group volume change (by @marcelveldt in #3655)
- Fix 30-second auth delay on startup (HA provider race condition) (by @marcelveldt in #3656)
- Remove protocol player power control forwarding (by @marcelveldt in #3659)
- Fix AirPlay late joiner sync issues from insufficient buffer headroom (by @marcelveldt in #3660)
- Fix sync group members lost after dynamic leader switch (by @marcelveldt in #3665)
- Fix sync group not resetting active protocol on stop (by @marcelveldt in #3666)
- Reduce radio stream startup delay on Squeezelite players (by @marcelveldt in #3667)
- Change Mother Earth Radio icon URL and corrupt SVGs (by @OzGav in #3674)
- Fix dynamic playlist refill discarding unplayed buffered tracks (by @dmoo500 in #3675)
- AudioBuffer: Only fire cancel callbacks when stream has not ended naturally (by @MarvinSchenkel in #3694)
- Fix MPD player removal reappearing after reload (by @marcelveldt in #3697)
- Fix is_dynamic guard not firing for playlists not yet synced to library (by @dmoo500 in #3699)
- Fix Mother Earth indicated audio quality (by @OzGav in #3701)
- Put pipewire dependency in the correct spot (by @apophisnow in #3708)
- Raise smart fades chunk timeout to 1s and log block duration (by @marcelveldt in #3728)
- QQ Music: persist full credential and refresh state (by @xiasi0 in #3744)
- AirPlay 2 provider now supports sync (by @bradkeifer in #3750)
- Bump
aiosendspinto 5.1.1 to fix audio stuttering (by @maximmaxim345 in #3756) - Fix Chromecast player disappearing after MA restart (by @maximmaxim345 in #3758)
- Fix HLS EXTINF metadata parsing for standard format radio streams (by @OzGav in #3759)
- 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)
- Nicovideo: Fix watch history API endpoint (v1 β v2) (by @Shi-553 in #3791)
- 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)
- Decrease buffer warmup duration to 8s (by @MarvinSchenkel in #3814)
- Fix queue restore: call from_cache to reconstruct radio_source and enqueued_media_items (by @dmoo500 in #3827)
- Fix sync issues with Sendspin players (by @maximmaxim345 in #3840)
- Fix Sendspin Cast bridge silently failing to set up (by @maximmaxim345 in #3841)
- Bump
aiosendspinto 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)
- Set NTS stations + mixtape images to square aspect (by @mike-sheppard in #3850)
- Fix event loop blocks when building the crossfade buffer (by @MarvinSchenkel in #3867)
- Emby Music Provider: scrobble tracks only (by @hatharry in #3871)
- Fix AA Background Processing to not Monopolize CPU (by @chrisuthe in #3873)
- Fix silence after warmup buffer period (by @MarvinSchenkel in #3880)
- Yandex music: captcha-aware 429 handling, per-kind throttling, file-info cache (v3.5.4) (by @trudenboy in #3882)
- Preserve propagated artist / album genres across refreshes (by @OzGav in #3883)
- Apple Music: fix rotating IDs for recommendation folders and personal stations (by @dmoo500 in #3895)
- Fix Hue sync bridge not being able to join to players with a sendspin bridge (by @MarvinSchenkel in #3904)
- Fix Apple Music library_add errors (by @dmoo500 in #3907)
- Remove initial_delay to fix duplicate lastfm recommendation rows (by @OzGav in #3920)
- Fix server crash on non-RGB cover art in palette extractor (by @OzGav in #3921)
- Fix genre movements when genres are promoted or deleted (by @OzGav in #3923)
- Fix issues with M4B audiobooks (by @OzGav in #3930)
- Fix browse and recommendations not applying user filters (by @MarvinSchenkel in #3934)
- Fix AirPlay receiver album artwork stuck after first track (by @MarvinSchenkel in #3945)
- Restore PlayerQueue.is_dynamic after loading queue from cache (by @dmoo500 in #3948)
- Fix stale Sonos cloud queue items and idle radio prebuffer (by @marcelveldt in #3957)
- Fix invalid imageproxy size on PlayerMedia URLs (by @marcelveldt in #3966)
- Prevent server crash on malformed player config entries (by @marcelveldt in #3967)
- Musiccast stability fixes (by @jhbruhn in #3977)
- Fix lyrics out-of-sync after smart crossfade (by @MarvinSchenkel in #3990)
- Avoid KeyError when prefetching next-item palette for a player without a queue (by @marcelveldt in #3992)
- Disable linked protocol players when their parent is disabled (by @marcelveldt in #3993)
- Emby Music Provider: fix album art (by @hatharry in #3995)
- Yandex Music: bump to v3.5.14 β rate-limit mitigation, resilience hardening, security hygiene (by @trudenboy in #3996)
- Scale background audio-analysis timeout to track duration (by @chrisuthe in #3997)
- Skip non-music providers in library update callback dispatch (by @dmoo500 in #3999)
- Fix Spotify Connect playback control reliability and error reporting (by @marcelveldt in #4001)
- Keep plugin playlist items visible for users with provider filters (by @dmoo500 in #4002)
- Improve Apple Music library album mapping and recommendation fallback (by @dmoo500 in #4006)
- fastMCP Server: sync 0.3.20β0.3.33 (security, fixes, tests) (by @trudenboy in #4007)
- Spotify Connect: clearer transport errors and automatic stall recovery (by @marcelveldt in #4010)
- Yandex Music: bump to v3.5.15 β captcha mitigation, faster recovery, datacenter safe-mode (by @trudenboy in #4011)
- fastMCP Server : sync 0.3.33β0.3.35 (synced state + group_volume) (by @trudenboy in #4013)
- Sonic Similarity: relax depends_on timing check + document smart_fades requirement (by @chrisuthe in #4016)
- Make universal player merge deterministic when link counts tie (by @sdhomecode in #4017)
- Fix KeyError for CONF_SMART_FADES_MODE on protocol-type players (by @MarvinSchenkel in #4020)
- Fix queue cleared prematurely when radio follows tracks in flow stream (by @marcelveldt in #4021)
- AcoustID Skip processing if track has an ISRC (by @OzGav in #4022)
- Optimize size of provider icons (by @MarvinSchenkel in #4023)
- Fix smart playlist track evaluation from Discover and background queue context (by @dmoo500 in #4025)
- Fix Apple music library album tracks not showing up (by @dmoo500 in #4028)
- Fix Apple Music playlist add for catalog-backed library playlists (by @dmoo500 in #4032)
- Fix KeyError for CONF_SMART_FADES_MODE in streams controller get_value calls (by @MarvinSchenkel in #4033)
- Fix smart playlist GUID lookup when called with library IDs (by @dmoo500 in #4037)
- Add error handling for provider search (by @OzGav in #4044)
- Hide HTTP profile and ICY metadata config entries for Samsung WAM (by @Oliver-Stevens in #4045)
- Prevent duplicate songs in smart playlist dedup window (by @dmoo500 in #4052)
- Fix loudness volume jumps: scope audio-analysis reads to the authoritative provider (by @MarvinSchenkel in #4057)
- Fix dynamic smart playlist cache leaking across users with different provider filters (by @dmoo500 in #4061)
- Fix AcoustID scan coverage stalling (by @OzGav in #4070)
- Fix smart playlist dedup for streaming (non-library) tracks (by @MarvinSchenkel in #4082)
- Fix genre icons disappearing after install path changes (by @MarvinSchenkel in #4083)
- Fix YouTube Music search() signature (by @OzGav in #4085)
- Fix WiiM volume_set by using HTTP command instead of UPnP (by @MarvinSchenkel in #4086)
- Reconcile smart playlist library entries on load to recover after DB reset (by @dmoo500 in #4088)
- Apple Music: stream library tracks and harden transient-error handling (by @teancom in #4089)
- Fix YTMusic provider not retrying when PO Token server is slow to start (by @CodeCommander in #4093)
- Fix radio station logos rendering as black or failing to load (by @OzGav in #4094)
- Phishin Change fallback album image URL (by @OzGav in #4097)
- AirPlay: fix mDNS cross-match when device name is substring of another device name (by @MarvinSchenkel in #4098)
- Fix None handling in music controller track/resume lookups (by @OzGav in #4102)
- Avoid event loop block in YouTube Music recommendations and skip SoundCloud default avatar (by @MarvinSchenkel in #4104)
- Only advertise extended ICY headers on flow stream when ICY metadata is requested (by @mcaulifn in #4105)
- Fix Apple Music library-only album artwork by caching blobstore URLs (by @dmoo500 in #4106)
- Added None guard (by @anatosun in #4107)
- Fix library-only tracks/albums showing as unavailable in shared playlists (by @dmoo500 in #4108)
- Fix transfer_queue losing position when source queue is paused/idle (by @OzGav in #4115)
- AirPlay: Ignore mDNS address updates that replace a routable IP with a Docker bridge address (by @MarvinSchenkel in #4117)
- Re-add configurable output buffer for AirPlay 1 (RAOP) players (by @MarvinSchenkel in #4118)
- Fix version parsing for titles with nested parentheses (by @OzGav in #4119)
- Audio analysis: re-scan stale-version tracks in background scan (by @chrisuthe in #4123)
- Don't enqueue next track onto a stopped queue (by @MarvinSchenkel in #4127)
- Bump
aiosendspinto 6.0.2 to fix spec conformance issues (by @maximmaxim345 in #4128) - Fix volume jump when crossfade intro and body normalize differently (by @MarvinSchenkel in #4129)
- Send Sendspin album artwork for radio and Spotify Connect streams (by @maximmaxim345 in #4130)
- Adjust Chromecast playback defaults (HTTP Profile 3 + flow mode) (by @MarvinSchenkel in #4133)
- Fix misleading smart-crossfade FFmpeg failure log message (by @MarvinSchenkel in #4139)
- Separate Phish.in artist tracks from top tracks (by @OzGav in #4140)
- Fix disappearing Sendspin Visualizer clients (by @maximmaxim345 in #4143)
- Align MusicBrainz throttler with mirror rate limit (by @MarvinSchenkel in #4146)
- Fix Sendspin not playing when grouping ESPHome devices (by @maximmaxim345 in #4147)
- end of queue results in track being reported as played twice (by @chrisuthe in #4150)
- Fix sendspin unmute (by @OzGav in #4151)
- Cap concurrent MusicBrainz ISRC lookups in Last.fm recommendations (by @OzGav in #4155)
- Fix cache cleanup missing most records and skip needless startup vacuum (by @MarvinSchenkel in #4156)
- Last.fm provider search bug fixes (by @OzGav in #4159)
- Fix 30s delay when grouping some Sendspin devices (by @maximmaxim345 in #4160)
- Prevent out-of-memory crash when compacting the library database (by @MarvinSchenkel in #4161)
π¨ Frontend Changes
- Add export playlist feature (by @chrisuthe in #1661)
- Isolate queue elapsed time from main reactive queue objects (by @apophisnow in #1672)
- Use swiper virtual slides in Carousel (by @apophisnow in #1682)
- Add Audio Analysis providers to the settings menu (by @MarvinSchenkel in #1673)
- Fix hidden player still showing in UI (by @OzGav in #1686)
- Replace deprecated unload event with pagehide (by @apophisnow in #1681)
- Adjust artist track listing sort by album to be secondary by track number (by @OzGav in #1688)
- Check for lossless codec (by @OzGav in #1692)
- Revert Party Mode to Party (by @OzGav in #1689)
- Improve FacetedFilter accessibility and clickability (#4883) (by @teancom in #1651)
- Add ALAC icon to Audio Pipeline (by @OzGav in #1691)
- Add right-click context menu to player cards on home screen (by @thrunkmo in #1617)
- Add artist track list sort by album sort name (by @OzGav in #1694)
- Fix confirm password field not appearing (by @OzGav in #1695)
- Fix single provider stale filter bug (by @OzGav in #1698)
- Fix typo (by @OzGav in #1696)
- Move Sendspin delay configuration to player settings (by @maximmaxim345 in #1712)
- Fix clipping of last player cards on the Players widget of the Discover view (by @BQPVegas in #1690)
- Reload queue items after reset in fullscreen player (by @dmoo500 in #1710)
- Hide incompatible controls for dynamic playlists (by @dmoo500 in #1713)
- Extend player bar track menu to also show for radio stations (by @dmoo500 in #1674)
- Revert "Improve performance with GPU compositing and lyrics guard" (by @MarvinSchenkel in #1724)
- Remove size restriction for volume slider + refacto old ui for player controls (by @stvncode in #1726)
- Add trending_stations translation key for TuneIn recommendations (by @dmoo500 in #1765)
- Enable asynchronous download in lokalise workflow (by @OzGav in #1766)
- Lokalise: Translations update (by @marcelveldt in #1769)
- A11Y - Improve spoken search clear button label (by @bartbunting in #1777)
- Lokalise translations update (by @github-actions[bot] in #1781)
- Fix Audio Pipeline volume normalisation line (by @OzGav in #1752)
- Fix auto-refresh toggle on server logs page (by @OzGav in #1784)
- i18n: add 'inspired_by_recently_played' recommendations key (by @chrisuthe in #1791)
- Support new opaque-id imageproxy endpoint (by @marcelveldt in #1792)
- AudioSource follow-up: treat as in-queue infinite stream (by @marcelveldt in #1793)
- Reduce items-per-row at large screen widths (by @MarvinSchenkel in #1806)
- Fix Smart Playlist seed picker dropping all results when only plugin providers supply SIMILAR_TRACKS (by @chrisuthe in #1813)
- Smart playlist: Let the user add multiple seeds (by @stvncode in #1818)
- Fix smart playlist operator label after field switch (by @dmoo500 in #1820)
- Remove padding for settings proivders on mobile (by @stvncode in #1825)
- Skip getSmartPlaylistRules call for non-smart playlists (by @dmoo500 in #1822)
- Match now-playing typography to new discover tiles (by @MarvinSchenkel in #1846)
- Fix: Mobile issues for discover page and bg for genre and placeholder (by @stvncode in #1849)
- Show Smart Playlist provider in playlists provider filter (by @dmoo500 in #1848)
- Lower smart playlist dedup_hours max to 2160h (90 days) (by @MarvinSchenkel in #1861)
- Fix genre display in smart playlist rule picker (by @dmoo500 in #1864)
- Fix erroneous underline on Audio Analysis concurrency link (by @chrisuthe in #1872)
- Only refetch recommendations on track end, not periodic progress (by @stvncode in #1870)
- Lokalise: Translations update (by @marcelveldt in #1875)
- Fix queue items disappearing in fullscreen player (by @MarvinSchenkel in #1874)
- Single artist detail view with provider filter (by @marcelveldt in #1829)
- Fix: Update overflow menu on shortcuts change and album tracks on navigation (by @dmoo500 in #1892)
- Add refresh top picks + Fix two shorcut bugs (by @stvncode in #1901)
- Store some settings per user (by @OzGav in #1335)
- Lokalise: Translations update (by @marcelveldt in #1904)
Other Changes
- [Backport to stable] 2.8.5 (by @github-actions[bot] in #3670)
- Stream PCM to audio analysis providers during background scan (by @chrisuthe in #3821)
- Add PR template and auto-label from Types of changes checkbox (by @MarvinSchenkel in #3959)
π§° Maintenance and dependency bumps
166 changes
- β¬οΈ Update music-assistant-frontend to 2.17.138 (by @music-assistant-machine in #3524)
- Add DTZ006 mypy rule (by @OzGav in #3525)
- Mypy fixes for the Sonos provider (by @OzGav in #3538)
- [Backport to stable] 2.8.2 (by @marcelveldt in #3564)
- Bump base image to 1.4.13 (by @marcelveldt in #3590)
- β¬οΈ Update music-assistant-frontend to 2.17.143 (by @music-assistant-machine in #3592)
- Bump mashumaro from 3.18 to 3.20 (by @dependabot[bot] in #3596)
- Bump plexapi from 4.17.2 to 4.18.1 (by @dependabot[bot] in #3598)
- β¬οΈ Update music-assistant-models to 1.1.111 (by @music-assistant-machine in #3608)
- β¬οΈ Update music-assistant-frontend to 2.17.144 (by @music-assistant-machine in #3612)
- Bump cryptography from 46.0.6 to 46.0.7 (by @dependabot[bot] in #3618)
- β¬οΈ Update music-assistant-models to 1.1.113 (by @music-assistant-machine in #3626)
- β¬οΈ Update music-assistant-frontend to 2.17.145 (by @music-assistant-machine in #3629)
- Bump docker/build-push-action from 7.0.0 to 7.1.0 (by @dependabot[bot] in #3638)
- Bump actions/github-script from 8 to 9 (by @dependabot[bot] in #3639)
- Add devenv Configuration for Consistent Developer Environments (by @staticdev in #3641)
- Remove player_options. from translation key in MusicCast. (by @fmunkes in #3642)
- β¬οΈ Update music-assistant-models to 1.1.115 (by @music-assistant-machine in #3644)
- Correct link to liblistenbrainz (by @ijc in #3651)
- β¬οΈ Update music-assistant-frontend to 2.17.146 (by @music-assistant-machine in #3657)
- Update py-opensonic to latest version (by @khers in #3658)
- Bump softprops/action-gh-release from 2 to 3 (by @dependabot[bot] in #3677)
- Bump pyblu from 2.0.5 to 2.0.6 (by @dependabot[bot] in #3678)
- Bump pillow from 12.1.1 to 12.2.0 (by @dependabot[bot] in #3684)
- β¬οΈ Update music-assistant-frontend to 2.17.147 (by @music-assistant-machine in #3685)
- Allow Pipewire devices to be detected by Local Audio when using docker (by @apophisnow in #3686)
- Update base image versions to 1.4.14 (by @apophisnow in #3695)
- β¬οΈ Update music-assistant-frontend to 2.17.148 (by @music-assistant-machine in #3700)
- Bump Python to 3.14 (by @MarvinSchenkel in #3702)
- β¬οΈ Update music-assistant-frontend to 2.17.149 (by @music-assistant-machine in #3711)
- Update beta and nightly image versions to 1.5.1 (by @apophisnow in #3712)
- Split Apple Music provider into modular structure (by @dmoo500 in #3715)
- Migrate loudness analyzer to audio analysis provider (by @marcelveldt in #3727)
- Add pactl to base Docker file (by @iVolt1 in #3734)
- Add an opt-out config entry for radio artwork lookup (by @OzGav in #3741)
- Add docs link to MusicMe manifest (by @OzGav in #3742)
- Bump ya-passport-auth to 1.3.0 for Yandex Smart Home provider (by @trudenboy in #3746)
- Bump tomli from 2.3.0 to 2.4.1 (by @dependabot[bot] in #3749)
- β¬οΈ Update music-assistant-frontend to 2.17.150 (by @music-assistant-machine in #3752)
- β¬οΈ Update music-assistant-frontend to 2.17.151 (by @music-assistant-machine in #3760)
- Spotify: Update get_artist_albums limit, log error messages, guard methods (by @delatt in #3762)
- Consolidate tidal constants for urls and paths (by @jozefKruszynski in #3768)
- Add DTZ005 mypy rule (by @OzGav in #3770)
- 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)
- 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)
- Refactor Fully Kiosk to single-instance (by @OzGav in #3849)
- 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)
- β¬οΈ Update music-assistant-frontend to 2.17.156 (by @music-assistant-machine in #3884)
- β¬οΈ Update music-assistant-models to 1.1.118 (by @music-assistant-machine in #3888)
- β¬οΈ Update music-assistant-frontend to 2.17.157 (by @music-assistant-machine in #3889)
- Add WeChat QR login for QQ Music (by @xiasi0 in #3898)
- Surface MusicBrainz artist URL relations as MediaItemLinks (by @OzGav in #3899)
- Fix support for
Literalhandling in OpenAPI generation (by @loopj in #3908) - Bump snapcast from 2.3.7 to 2.3.8 (by @dependabot[bot] in #3909)
- Bump syrupy from 5.1.0 to 5.2.0 (by @dependabot[bot] in #3910)
- Bump codespell from 2.4.1 to 2.4.2 (by @dependabot[bot] in #3911)
- β¬οΈ Update music-assistant-frontend to 2.17.158 (by @music-assistant-machine in #3912)
- Remove Sonos from mypy excludes (by @OzGav in #3914)
- Compute the artwork-derived color palette in the backend (by @maximmaxim345 in #3915)
- β¬οΈ Update music-assistant-models to 1.1.119 (by @music-assistant-machine in #3916)
- β¬οΈ Update music-assistant-frontend to 2.17.159 (by @music-assistant-machine in #3919)
- Improve lastfm recommendations (by @OzGav in #3922)
- β¬οΈ Update music-assistant-frontend to 2.17.160 (by @music-assistant-machine in #3927)
- β¬οΈ Update music-assistant-models to 1.1.120 (by @music-assistant-machine in #3937)
- β¬οΈ Update music-assistant-frontend to 2.17.161 (by @music-assistant-machine in #3940)
- Bump docker/build-push-action from 7.1.0 to 7.2.0 (by @dependabot[bot] in #3941)
- Bump stages on 2.9 release (by @OzGav in #3942)
- β¬οΈ Update music-assistant-models to 1.1.121 (by @music-assistant-machine in #3944)
- Add multiroom transition debug logs to WiiM provider (by @MarvinSchenkel in #3949)
- β¬οΈ Update music-assistant-frontend to 2.17.162 (by @music-assistant-machine in #3954)
- β¬οΈ Update music-assistant-models to 1.1.122 (by @music-assistant-machine in #3958)
- β¬οΈ Update music-assistant-models to 1.1.124 (by @music-assistant-machine in #3962)
- β¬οΈ Update music-assistant-frontend to 2.17.163 (by @music-assistant-machine in #3963)
- Use Protocol-bounded TypeVar for @use_cache decorator (by @jdaberkow in #3965)
- β¬οΈ Update music-assistant-frontend to 2.17.164 (by @music-assistant-machine in #3968)
- audiobookshelf: use from_utc_timestamp helper for ms-epoch conversions (by @OzGav in #3970)
- β¬οΈ Update music-assistant-models to 1.1.125 (by @music-assistant-machine in #3973)
- Fix audio analysis documentation links (by @SuperSandro2000 in #3981)
- Bump docker/login-action from 4.1.0 to 4.2.0 (by @dependabot[bot] in #3982)
- Bump docker/setup-buildx-action from 4.0.0 to 4.1.0 (by @dependabot[bot] in #3983)
- Bump bandcamp-async-api from 0.1.1 to 0.2.1 (by @dependabot[bot] in #3984)
- Bump py-opensonic from 9.1.0 to 9.2.0 (by @dependabot[bot] in #3985)
- Bump pychromecast from 14.0.9 to 14.0.10 (by @dependabot[bot] in #3986)
- β¬οΈ Update music-assistant-frontend to 2.17.165 (by @music-assistant-machine in #3987)
- β¬οΈ Update music-assistant-frontend to 2.17.166 (by @music-assistant-machine in #3998)
- Update log messages (by @OzGav in #4000)
- Title-case the default genre aliases (by @OzGav in #4003)
- β¬οΈ Update music-assistant-frontend to 2.17.167 (by @music-assistant-machine in #4008)
- β¬οΈ Update music-assistant-frontend to 2.17.168 (by @music-assistant-machine in #4014)
- Subsonic: Update py-opensonic library (by @khers in #4018)
- Drop redundant per-player throttler and harden the command lock (by @marcelveldt in #4024)
- β¬οΈ Update music-assistant-models to 1.1.127 (by @music-assistant-machine in #4026)
- Bump zeroconf from 0.148.0 to 0.149.7 (by @dependabot[bot] in #4030)
- β¬οΈ Update music-assistant-frontend to 2.17.169 (by @music-assistant-machine in #4031)
- Improve icons (by @OzGav in #4034)
- β¬οΈ Update music-assistant-frontend to 2.17.170 (by @music-assistant-machine in #4035)
- β¬οΈ Update music-assistant-models to 1.1.128 (by @music-assistant-machine in #4038)
- Bump aioaudiobookshelf to 0.1.21 (by @fmunkes in #4040)
- β¬οΈ Update music-assistant-frontend to 2.17.171 (by @music-assistant-machine in #4049)
- Add checklist for documentation PR submissions (by @OzGav in #4051)
- β¬οΈ Update music-assistant-frontend to 2.17.172 (by @music-assistant-machine in #4056)
- β¬οΈ Update music-assistant-frontend to 2.17.173 (by @music-assistant-machine in #4060)
- Bump usearch from 2.25.2 to 2.25.3 (by @dependabot[bot] in #4063)
- Bump bandcamp-async-api from 0.2.1 to 0.2.2 (by @dependabot[bot] in #4064)
- Bump soco from 0.31.0 to 0.31.1 (by @dependabot[bot] in #4065)
- Treat Retry-After as a floor for rate limits, not an exact target (by @rnewman in #4067)
- β¬οΈ Update music-assistant-frontend to 2.17.174 (by @music-assistant-machine in #4069)
- Typing fixes for Bluesound provider.py (by @OzGav in #4071)
- Some Typing fixes for Apple Music (by @OzGav in #4073)
- Final Typing fixes for Bluesound provider (by @OzGav in #4074)
- Add PGH003 mypy rule (by @OzGav in #4075)
- β¬οΈ Update music-assistant-models to 1.1.129 (by @music-assistant-machine in #4076)
- β¬οΈ Update music-assistant-frontend to 2.17.175 (by @music-assistant-machine in #4077)
- Further typing fixes for Apple Music (by @OzGav in #4078)
- Bump aiohttp from 3.13.5 to 3.14.0 (by @dependabot[bot] in #4079)
- Remove ignore from Bluesound player.py (by @OzGav in #4080)
- Type throttle_with_retries via Protocol instead of Provider bound (by @OzGav in #4081)
- Final typing fixes for Apple Music (by @OzGav in #4084)
- Some typing fixes for the YouTube Music provider (by @OzGav in #4087)
- Final typing fixes for YouTube Music (by @OzGav in #4090)
- Type-check plex and plex_connect providers, treat plexapi as untyped (by @OzGav in #4091)
- Typing fixes for the music controller - stage 1 (by @OzGav in #4092)
- β¬οΈ Update music-assistant-frontend to 2.17.176 (by @music-assistant-machine in #4096)
- β¬οΈ Update music-assistant-frontend to 2.17.177 (by @music-assistant-machine in #4100)
- Typing fixes for the music controller stage 2 (by @OzGav in #4101)
- Enable ruff UP043 and drop unnecessary default type arguments (by @OzGav in #4103)
- β¬οΈ Update music-assistant-frontend to 2.17.178 (by @music-assistant-machine in #4111)
- β¬οΈ Update music-assistant-frontend to 2.17.179 (by @music-assistant-machine in #4113)
- Final typing fixes for the Music controller (by @OzGav in #4114)
- Add translation_key to builtin playlists (by @OzGav in #4122)
- β¬οΈ Update music-assistant-frontend to 2.17.180 (by @music-assistant-machine in #4125)
- Pin Sendspin Cast app id to the frozen
ma-2.9channel (by @maximmaxim345 in #4131) - β¬οΈ Update music-assistant-frontend to 2.17.181 (by @music-assistant-machine in #4132)
- Bump pyblu from 2.0.7 to 2.0.8 (by @dependabot[bot] in #4134)
- Bump lyricsgenius from 3.11.0 to 3.12.2 (by @dependabot[bot] in #4136)
- β¬οΈ Update music-assistant-frontend to 2.17.182 (by @music-assistant-machine in #4137)
- Add more translation keys (by @OzGav in #4138)
- β¬οΈ Update music-assistant-frontend to 2.17.183 (by @music-assistant-machine in #4145)
- Use the standalone hue-entertainment library in the Hue Lights Sync plugin (by @marcelveldt in #4152)
- Fix guard_single_request type-var bound so media controllers don't need ignores (by @OzGav in #4153)
- β¬οΈ Update music-assistant-frontend to 2.17.184 (by @music-assistant-machine in #4157)
- β¬οΈ Update music-assistant-frontend to 2.17.185 (by @music-assistant-machine in #4162)
- β¬οΈ Update music-assistant-frontend to 2.17.186 (by @music-assistant-machine in #4165)
π Thanks to our contributors
Special thanks to the following contributors who helped with this release:
@BQPVegas, @CodeCommander, @FL550, @FlorianReiterer, @JulienDeveaux, @LosCV29, @MarvinSchenkel, @Oliver-Stevens, @OnFreund, @OzGav, @Shi-553, @SuperSandro2000, @Tommatheussen, @a2hill, @anatosun, @apophisnow, @bartbunting, @bradkeifer, @chrisuthe, @cryptk, @davidanthoff, @delatt, @dmoo500, @duanyutong, @fmunkes, @hatharry, @iVolt1, @ijc, @jdaberkow, @jhbruhn, @jozefKruszynski, @khers, @loopj, @lukaszwawrzyk, @marcelveldt, @maximmaxim345, @mcaulifn, @mike-sheppard, @neurocis, @peteS-UK, @philjackson, @rnewman, @robsonke, @robtpaton, @sdhomecode, @sprocket-9, @staticdev, @stvncode, @teancom, @thrunkmo, @trudenboy, @xiasi0