github music-assistant/server 2.11.0b5
2.11.0 BETA 5

pre-release3 hours ago

📦 Beta Release

Changes since 2.11.0b4

⚠ Breaking Changes

  • Update MSX Bridge provider from v1.4.9 to v1.6.2 (by @trudenboy in #5868)

🚀 New Providers

🚀 Features and enhancements

  • Typed sorting for library listings with discoverable sort options (by @dmoo500 in #5498)
  • Play AI Radio shows as Radio stations (by @MarvinSchenkel in #6372)
  • Move audio analysis storage into its own database file (by @chrisuthe in #6377)
  • Promote audio analysis arrays to typed fields (by @chrisuthe in #6378)
  • Store audio analysis records in a packed format (by @chrisuthe in #6379)
  • Add a stream quality setting to the nugs.net provider (by @igray in #6480)
  • Add a payload version to invalidate persisted recommendation payloads (by @fmunkes in #6618)
  • Use native items in Audiobookshelf browse and recommendations (by @fmunkes in #6619)
  • Link system settings to their documentation (by @marcelveldt in #6626)
  • Make skipping back in podcasts and audiobooks fast (by @OzGav in #6682)
  • Add an order setting for playing an artist (by @szsolt in #6690)
  • Name the Profiler section in diagnostics like other providers (by @marcelveldt in #6700)
  • Add NetEase Personal Recommend section with daily and radar playlists (by @Kiranwin in #6742)
  • Show the provider type in diagnostics sections (by @marcelveldt in #6754)
  • Add issuer and audience claims to access tokens (by @MarvinSchenkel in #6758)
  • Storytel - Add explicit cache durations for cache calls. (by @jonasbp2011 in #6763)
  • Run manually triggered tasks next in the background task queue (by @OzGav in #6764)
  • Stop network share actions from hanging when the share does not respond (by @marcelveldt in #6766)
  • Don't show "0 MB used" for the data folder on a fresh install (by @marcelveldt in #6777)
  • Added episode_number property to PodcastEpisode media item in Storytel Provider (by @jonasbp2011 in #6784)
  • Separate play history from media progress (by @dmoo500 in #6792)
  • Adding music to a large shuffled queue no longer takes a minute (by @marcelveldt in #6813)
  • Album tracks sort, search and page on the server (by @marcelveldt in #6848)
  • Keep the tracks of a share that was already down when the server started (by @marcelveldt in #6855)
  • Warn when another Local files source already reads the picked folder (by @marcelveldt in #6856)
  • Sign in with Home Assistant from the remote app without an External URL (by @marcelveldt in #6859)
  • Let the AI DJ talk over the intro of the next song (by @marcelveldt in #6866)
  • Remember where each queue item was played from and play that copy first (by @marcelveldt in #6872)
  • Show the OpenSubsonic playlist comment as the playlist description (by @theomega in #6892)
  • Add search support to the Nugs provider (by @jonesy827 in #6902)
  • Let the AI DJ talk over the intro on Sonos and other gapless players (by @marcelveldt in #6924)
  • Send Home Assistant text-to-speech engines a language they support (by @marcelveldt in #6925)
  • Pause the AI DJ when its speech engine keeps failing (by @marcelveldt in #6927)
  • Storytel: Dynamically present available languages from account context (by @jonasbp2011 in #6929)
  • Apply the different-sample-rates crossfade option to the AI DJ's talk-over (by @marcelveldt in #6933)
  • Add power control and per-room mute to the Raumfeld provider (by @Simanias in #6939)
  • Show the real model name of Raumfeld players (by @Simanias in #6946)
  • Expose the Camelot key of a track (by @MarvinSchenkel in #6952)
  • Add an option to keep remastered versions apart (by @marcelveldt in #6956)
  • Play every track of an album from the same source (by @marcelveldt in #6958)
  • Add BPM and key to playlist tracks (by @stvncode in #6960)
  • Sharpen the bundled AI Radio host prompts (by @MarvinSchenkel in #6961)

🐛 Bugfixes

  • Update KION Music provider to v3.0.12 (by @trudenboy in #5585)
  • Fix Yandex Station credential borrowing and audio playback (by @trudenboy in #5605)
  • Add a Cast player option to apply a volume set while idle at playback start (by @distante in #5800)
  • Faster start and seek for remote MP3s with large ID3 tags (by @chrisuthe in #6374)
  • Fix album track deduplication for repeated movement titles (by @teancom in #6425)
  • Release the queue when another app casts to a Chromecast via the Default Media Receiver (by @MarvinSchenkel in #6528)
  • Fix DLNA player showing up twice when the device advertises a relative presentation URL (by @MarvinSchenkel in #6597)
  • Fix Spotify playlists missing from large libraries (by @MarvinSchenkel in #6613)
  • Stop Plex Connect from logging unrelated items in the Plex history (by @MarvinSchenkel in #6705)
  • Qobuz: report playback start when the track actually starts playing (by @marcelveldt in #6711)
  • Speed up the gPodder provider and fix its progress sync (by @fmunkes in #6718)
  • Drop thumbnails from YouTube Music less frequently (by @NasaGeek in #6721)
  • Keep favorite tracks of multiple Tidal accounts apart in the library (by @MarvinSchenkel in #6726)
  • Fix audiobooks not starting when resuming deep into a long mp3 (by @MarvinSchenkel in #6727)
  • Fix personalized NetEase endpoints returning wrong data on some NCM API backends (by @Kiranwin in #6730)
  • Deezer: Fix Family profiles showing the admin's library (by @jdaberkow in #6738)
  • Update Zvuk Music provider to v1.8.11 (by @trudenboy in #6744)
  • Limit the Home Assistant image proxy to entity pictures (by @MarvinSchenkel in #6746)
  • Revoke guest access when the party or music quiz plugin is disabled (by @MarvinSchenkel in #6747)
  • Return an error when sending commands to an unavailable player (by @MarvinSchenkel in #6748)
  • Bind the playlog lookup parameters (by @MarvinSchenkel in #6751)
  • Update FastMCP Server provider to v2.1.24 (by @trudenboy in #6755)
  • Refuse CIFS usernames and shares that would add mount options (by @MarvinSchenkel in #6756)
  • Skip the DSP restart when the player is not playing the queue it would resume (by @mnestrud in #6760)
  • Move non-classical aliases out of the classical genre (by @OzGav in #6761)
  • Hide Sendspin token pairing when a pairing code is available (by @maximmaxim345 in #6768)
  • Fix Sendspin players not marking items played when playback starts near the end (by @maximmaxim345 in #6770)
  • Restrict what the image loader hands to ffmpeg (by @MarvinSchenkel in #6771)
  • Require the Supervisor as peer for Home Assistant Ingress requests (by @MarvinSchenkel in #6772)
  • Write playlist files only to regular files inside the library root (by @MarvinSchenkel in #6773)
  • Show Apple Music names in the user's language (by @MarvinSchenkel in #6775)
  • Only accept http(s) URLs and data URIs as builtin item artwork (by @MarvinSchenkel in #6780)
  • Keep hi-res quality for sources that don't report their audio format (by @marcelveldt in #6781)
  • Stop a Sonos from playing music again after the queue has finished (by @marcelveldt in #6782)
  • Fix album covers not loading when archive.org is slow or down (by @OzGav in #6787)
  • Establish default behaviour when playing an artist not in library (by @OzGav in #6795)
  • Fix play doing nothing after the queue's current track was replaced (by @marcelveldt in #6796)
  • Keep a Sonos group playing after the speaker reports a failed track (by @marcelveldt in #6797)
  • Stop play requests from running at the same time on one queue (by @marcelveldt in #6798)
  • Fix play reporting an empty queue when its position is past the last track (by @marcelveldt in #6800)
  • Keep the next track in sync with quick queue edits (by @marcelveldt in #6807)
  • Stop counting a track as played when it never started (by @marcelveldt in #6808)
  • Use the External URL for party and quiz QR codes (by @marcelveldt in #6812)
  • Fix speaker discovery breaking after changing the discovery interfaces setting (by @marcelveldt in #6815)
  • Stop instead of pause while Music Assistant streams to a Bose SoundTouch speaker (by @fmunkes in #6821)
  • Make Bose SoundTouch survive flaky speaker responses (by @fmunkes in #6822)
  • Give Local files sources with the same folder name a unique name (by @marcelveldt in #6823)
  • Fix Home Assistant sign-in through the External URL or Remote Access (by @marcelveldt in #6826)
  • Sonos: allow 24-bit playback on Play:1 and Connect (Gen 2) (by @orb9 in #6828)
  • Keep Local files sources inside their own folder (by @marcelveldt in #6831)
  • Show which setting is wrong when saving settings fails (by @marcelveldt in #6834)
  • Show the podcast name as the artist for podcast episodes (by @OzGav in #6838)
  • Stop Last.fm recommendations from re-searching music providers (by @Bazooper-blip in #6843)
  • Stop Apple Music from sending item names to the API as ids (by @Bazooper-blip in #6844)
  • Cut the Apple Music requests made per lookup and per Discover refresh (by @Bazooper-blip in #6845)
  • Stop Apple Music from fetching the album again for its album tracks (by @Bazooper-blip in #6846)
  • Fix Home Assistant sign-in from the mobile app through the External URL or Remote Access (by @marcelveldt in #6849)
  • Fix MSX Bridge TVs going silent after the first track (by @marcelveldt in #6858)
  • Release AirPlay speakers when a stream finishes instead of two minutes later (by @thatcoleyouknow in #6868)
  • Keep tracks of a disconnected share when syncing the folder above it (by @marcelveldt in #6869)
  • Fix possible crashes when a lookup comes back empty (by @marcelveldt in #6876)
  • Allow slashes and dots in playlist names (by @OzGav in #6885)
  • Push Sendspin progress when playback restarts on the same item (by @chrisuthe in #6900)
  • Match play_media sort_by to the frontend's track sort (by @OzGav in #6906)
  • Keep downloaded models in the Music Assistant cache dir (by @MarvinSchenkel in #6910)
  • Show the custom Plex poster of a playlist instead of the generated grid (by @MarvinSchenkel in #6911)
  • Report expired YouTube Music cookies instead of missing Premium (by @MarvinSchenkel in #6915)
  • Fix the server running out of memory on large album covers (by @marcelveldt in #6919)
  • Serve original-size JPEG artwork without re-encoding it (by @marcelveldt in #6920)
  • Fix Sendspin players with DSP joining a group out of sync (by @maximmaxim345 in #6921)
  • Fix Patreon podcast feeds blocked by a Cloudflare challenge (by @OzGav in #6922)
  • Bump aiosendspin to 10.0.1 to fix audio gaps and sync drift (by @maximmaxim345 in #6923)
  • Fix a track's source being opened for a request the player already gave up on (by @marcelveldt in #6926)
  • Fix updated ESPHome Sendspin speakers reappearing as new players (by @maximmaxim345 in #6928)
  • Fix a Spotify track stalling the queue when Soloist's sign-in fails (by @marcelveldt in #6930)
  • Fail Raumfeld playback clearly when a room gets no zone (by @Simanias in #6947)
  • Keep the queue going after an AI DJ clip (by @MarvinSchenkel in #6950)
  • Make OpenAI text-to-speech setup work with more self-hosted servers (by @marcelveldt in #6951)
  • Keep playlist edits and provider mappings to real playlists (by @MarvinSchenkel in #6954)
  • Fix a short dropout when a Sendspin player with DSP joins a group (by @maximmaxim345 in #6962)
  • Fix more out-of-sync cases for Sendspin players with DSP (by @maximmaxim345 in #6965)
  • Bump aiosendspin to 10.0.2 to fix slow reconnects of updated ESPHome speakers (by @maximmaxim345 in #6969)
  • Optimize the Audiobookshelf progress sync and keep its token on the server (by @fmunkes in #6977)

🎨 Frontend Changes

🧰 Maintenance and dependency bumps

82 changes
  • Clarify the Sendspin automatic audio format option (by @marcelveldt in #6720)
  • Teach the review how data migrations are handled here (by @chrisuthe in #6733)
  • Fix the critical-review gate never converting a PR to draft (by @chrisuthe in #6734)
  • Stop asking for an API schema bump where no client can gate on it (by @chrisuthe in #6735)
  • Widen the critical-review gate's window to two hours (by @chrisuthe in #6736)
  • Upgrade QQ Music provider to API 0.8.2 (by @xiasi0 in #6737)
  • Bump ya-passport-auth to 2.2.0 (by @trudenboy in #6741)
  • Verify the FFmpeg and Snapcast downloads in the base image (by @MarvinSchenkel in #6750)
  • Bump Yandex Music and KION Music API dependency to 3.2.1 (by @trudenboy in #6774)
  • Keep audio flowing while a crossfade waits for the next track's source (by @marcelveldt in #6783)
  • Remove duplicate mixer stand-ins from the realtime source tests (by @marcelveldt in #6785)
  • Bring the webserver auth README in line with the code (by @marcelveldt in #6786)
  • Clean up unused code in the login callback page (by @marcelveldt in #6793)
  • Stop saving the album cover into a track's own images (by @marcelveldt in #6794)
  • Choose a track's stream source with one deterministic ranking (by @marcelveldt in #6804)
  • Keep GITHUB_TOKEN out of the PyPI download step in auto-merge (by @chrisuthe in #6811)
  • Run CI tests in our own base image and split them over parallel jobs (by @marcelveldt in #6814)
  • Tell the settings page which storage location a Local files source uses (by @marcelveldt in #6816)
  • Stop re-reading every podcast episode on each Local files sync (by @marcelveldt in #6817)
  • Remove an unused package from the base image (by @marcelveldt in #6820)
  • Speed up CI test runs by using all runner CPUs (by @marcelveldt in #6824)
  • Use the server External URL for the MCP Connect Wizard link (by @marcelveldt in #6827)
  • Hide passwords and tokens in the API message log (by @marcelveldt in #6829)
  • Stop album covers from being saved as a track's own image (by @marcelveldt in #6830)
  • Speed up test server boots (by @marcelveldt in #6832)
  • Smart fades: 2 bar fades between tracks in different time signatures, clearer logging (by @marcelveldt in #6833)
  • Fix unawaited coroutine warnings in library sync tests (by @marcelveldt in #6836)
  • Speed up test server boots by waiting for startup work instead of a fixed delay (by @marcelveldt in #6837)
  • Speed up library tests with the light test fixture (by @marcelveldt in #6839)
  • Keep bundled service credentials out of the source tarball and clarify their license (by @marcelveldt in #6840)
  • Smart fades: replay tool and one log line per transition (by @marcelveldt in #6841)
  • Expire abandoned Home Assistant sign-ins (by @marcelveldt in #6842)
  • Document ffmpeg 7.0 as the minimum version (by @marcelveldt in #6850)
  • Flag installations that do not run from the official image (by @marcelveldt in #6851)
  • Make several tests check real behaviour (by @marcelveldt in #6852)
  • Speed up the Bandcamp integration tests (by @marcelveldt in #6853)
  • Clearer help text for the Internal URL setting (by @marcelveldt in #6854)
  • Use PKCE when signing in with Home Assistant (by @marcelveldt in #6857)
  • Clean up the Bandcamp provider tests (by @marcelveldt in #6860)
  • Smart fades: longer, smoother transitions between tracks that can't be beatmatched (by @marcelveldt in #6861)
  • Ask Last.fm for artist top tracks and similar artists only when the music services have none (by @marcelveldt in #6862)
  • Search music services one at a time when resolving Last.fm recommendations (by @marcelveldt in #6863)
  • Smart fades: only stretch the tempo where both tracks have a beat (by @marcelveldt in #6864)
  • Smart fades: filter out and echo out when two beats don't match (by @marcelveldt in #6867)
  • Reuse nugs.net account details between track starts (by @marcelveldt in #6870)
  • Resolve Last.fm recommendations through MusicBrainz links before searching music services (by @marcelveldt in #6871)
  • Time the AI DJ's talk-over to the version of the song that actually plays (by @marcelveldt in #6874)
  • Give the audio overlay one home in the streams controller (by @marcelveldt in #6875)
  • Describe smart fades as they work today in the README and settings (by @marcelveldt in #6877)
  • Stop re-reading audiobook chapter files on each Local files sync (by @marcelveldt in #6878)
  • Read the web interface files without blocking the server at startup (by @marcelveldt in #6879)
  • Check that a release image is recognized as official before it is published (by @marcelveldt in #6880)
  • Keep Local files tag, artwork and folder reads inside the source folder (by @marcelveldt in #6881)
  • Keep Local files playback inside the source folder (by @marcelveldt in #6884)
  • Turn on the lint check for listening on all network interfaces (by @marcelveldt in #6886)
  • Turn on the lint check for non-secure random numbers (by @marcelveldt in #6887)
  • Bump aioaudiobookshelf to 0.2.0 (by @fmunkes in #6888)
  • Use lazy log formatting in the core helpers (by @marcelveldt in #6889)
  • Turn on the lint checks for overly complex functions (by @marcelveldt in #6890)
  • Use PKCE when linking Home Assistant during provider setup (by @marcelveldt in #6894)
  • Tidy up method order in the player and music provider models (by @marcelveldt in #6895)
  • Bump getmac from 0.9.5 to 0.9.6 (by @dependabot[bot] in #6896)
  • Bump pycryptodome from 3.23.0 to 3.24.0 (by @dependabot[bot] in #6897)
  • Bump yoto-api from 4.5.0 to 4.5.1 (by @dependabot[bot] in #6898)
  • Shrink oversized provider icons (by @marcelveldt in #6903)
  • Turn on the lint check for hardcoded passwords (by @marcelveldt in #6904)
  • Turn on the lint check for commented-out code (by @marcelveldt in #6905)
  • Turn on the last two non-strict type checker settings (by @marcelveldt in #6909)
  • Turn on the lint check for raising inside a try block (by @marcelveldt in #6914)
  • Use one shared PKCE helper for all sign-in flows (by @marcelveldt in #6916)
  • Update FastMCP Server provider to v2.2.2 (by @trudenboy in #6917)
  • Fix a child process not being stopped while its output is still being read (by @marcelveldt in #6931)
  • Name the speech engine that actually failed in the AI DJ pause warning (by @marcelveldt in #6936)
  • Fix two tests that fail on a slow CI runner (by @szsolt in #6943)
  • Ask for an API schema bump only when a client gets something new to gate on (by @chrisuthe in #6963)
  • Update the comment on when to bump the API schema version (by @chrisuthe in #6964)
  • Flag a failure in review only when a code path reaches it (by @chrisuthe in #6967)
  • Drop the reachability rule from the review instructions (by @chrisuthe in #6970)
  • Stop the review questioning which type-of-change box is ticked (by @chrisuthe in #6971)
  • Bump actions/upload-artifact from 7.0.1 to 7.0.2 (by @dependabot[bot] in #6980)
  • Bump CodSpeedHQ/action from 5.4.0 to 5.4.2 (by @dependabot[bot] in #6981)
  • Update airplay-cli to v0.5.8 (by @musicassistant-bot[bot] in #6984)

🙇 Thanks to our contributors

Special thanks to the following contributors who helped with this release:

@Bazooper-blip, @Kiranwin, @MarvinSchenkel, @NasaGeek, @OzGav, @Simanias, @chrisuthe, @distante, @dmoo500, @fmunkes, @igray, @jdaberkow, @jonasbp2011, @jonesy827, @jpittelkow, @Lucide, @marcelveldt, @math625f, @maximmaxim345, @mnestrud, @orb9, @stvncode, @szsolt, @tabler, @teancom, @thatcoleyouknow, @theomega, @trudenboy, @vueuse, @xiasi0

Don't miss a new server release

NewReleases is sending notifications on new releases.