📦 Stable Release
Changes since 2.8.9
🚀 Features and enhancements
- Separate library artist views from per-provider artist listings (by @marcelveldt in #4039)
- Add Settings to allow Control of default similar_track action (by @chrisuthe in #4053)
- 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
- Plex Connect: refactor and fixes plugin (by @anatosun in #3510)
- Make universal player merge deterministic when link counts tie (by @sdhomecode in #4017)
- 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
- Show Smart Playlist provider in playlists provider filter (by @dmoo500 in #1848)
- Fanart for top picks (by @stvncode in #1854)
- Fix play button centering + banner behind tile (by @stvncode in #1852)
- Prune stale provider ids from stored listing filters (by @OzGav in #1727)
- Derive library membership from in_library flag (by @OzGav in #1810)
- fix(theme): fix dark-mode rendering (by @teancom in #1811)
- Show catalog providers in library provider filter (by @OzGav in #1851)
- Fix album/playlist track order when played directly from a list (by @OzGav in #1850)
- Lower smart playlist dedup_hours max to 2160h (90 days) (by @MarvinSchenkel in #1861)
- Always show lights and visualisers in the group list (by @OzGav in #1860)
- Add link to background analysis Concurrency Setting (by @chrisuthe in #1830)
- Add back provider icon in discover pge + fix fanart (by @stvncode in #1859)
- Add back provider icon in discover pge + fix fanart (by @stvncode in #1859)
- Fix genre display in smart playlist rule picker (by @dmoo500 in #1864)
- Put play button to the right for consistency (by @stvncode in #1868)
- Hide/Show top picks and replace v-btn by shadcn one (by @stvncode in #1867)
- Add album type filter to smart playlist rules (by @dmoo500 in #1847)
- Fix server spam for fresh recommandation with debounce (by @stvncode in #1869)
- 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)
🧰 Maintenance and dependency bumps
37 changes
- Bump stages on 2.9 release (by @OzGav in #3942)
- Treat Retry-After as a floor for rate limits, not an exact target (by @rnewman in #4067)
- 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:
@CodeCommander, @MarvinSchenkel, @OzGav, @anatosun, @chrisuthe, @dmoo500, @marcelveldt, @maximmaxim345, @mcaulifn, @rnewman, @sdhomecode, @stvncode, @teancom