diff --git a/CHANGELOG.md b/CHANGELOG.md index 26df7813..53488328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,15 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Added -### Music Network — scrobble to more than just Last.fm - -**By [@Psychotoxical](https://github.com/Psychotoxical) and [@cucadmuh](https://github.com/cucadmuh), PR [#1066](https://github.com/Psychotoxical/psysonic/pull/1066)** - -* **Settings → Integrations** now hosts a **Music Network** that scrobbles your plays to one or more services at once: **Last.fm**, **Libre.fm**, **Rocksky**, **ListenBrainz** (the public service or any compatible server), **Maloja** (native, Audioscrobbler or ListenBrainz API), **Koito**, and any **custom GNU FM** instance. -* Choose a **primary** service — your loved tracks, similar artists and listening stats come from it — while scrobbles fan out to every connected service. A master switch turns the whole thing on or off. -* **Last.fm works exactly as before**, including love, similar artists and the Statistics page; your existing connection is migrated automatically on first launch. -* *Known limitation:* Rocksky currently rejects scrobbles whose title or artist contains non-standard (non-ASCII) characters — a Rocksky-side issue, not a Psysonic bug. - ### Sidebar — pin Now Playing to the top **By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1000](https://github.com/Psychotoxical/psysonic/pull/1000), suggested by [@PHLAK](https://github.com/PHLAK)** @@ -120,6 +111,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +### Music Network — scrobble to more than just Last.fm + +**By [@Psychotoxical](https://github.com/Psychotoxical) and [@cucadmuh](https://github.com/cucadmuh), PR [#1066](https://github.com/Psychotoxical/psysonic/pull/1066)** + +* **Settings → Integrations** now hosts a **Music Network** that scrobbles your plays to one or more services at once: **Last.fm**, **Libre.fm**, **Rocksky**, **ListenBrainz** (the public service or any compatible server), **Maloja** (native, Audioscrobbler or ListenBrainz API), **Koito**, and any **custom GNU FM** instance. +* Choose a **primary** service — your loved tracks, similar artists and listening stats come from it — while scrobbles fan out to every connected service. A master switch turns the whole thing on or off. +* **Last.fm works exactly as before**, including love, similar artists and the Statistics page; your existing connection is migrated automatically on first launch. +* *Known limitation:* Rocksky currently rejects scrobbles whose title or artist contains non-standard (non-ASCII) characters — a Rocksky-side issue, not a Psysonic bug. + + + ### Live — rich now-playing on Navidrome 0.62+ **By [@cucadmuh](https://github.com/cucadmuh), PR [#1080](https://github.com/Psychotoxical/psysonic/pull/1080)** @@ -129,20 +131,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Play counts are unchanged — still driven by the existing scrobble path. Servers without the extension keep the previous now-playing behaviour. - ## Changed -### Settings → Servers — compact server cards - -**By [@cucadmuh](https://github.com/cucadmuh), PR [#1054](https://github.com/Psychotoxical/psysonic/pull/1054)** - -* Two-line header: custom entry name plus `user@host`, HTTPS lock, and a clickable version info tooltip (hover or tap). -* Navidrome **0.62+**: green **AudioMuse-AI** inline badge when the plugin is detected; older Navidrome keeps the manual toggle row below the card. -* **Use** and **Active** share one rightmost slot (green badge vs primary button); card actions are edit → test → use/active. Delete lives in the edit form footer. -* **TooltipPortal**: `data-tooltip-click` for click-pinned tooltips (touch and explicit open without the 1s hover delay). - - - ### Dependencies — npm and Rust refresh **By [@cucadmuh](https://github.com/cucadmuh), PR [#997](https://github.com/Psychotoxical/psysonic/pull/997)** @@ -199,78 +189,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +### Settings → Servers — compact server cards + +**By [@cucadmuh](https://github.com/cucadmuh), PR [#1054](https://github.com/Psychotoxical/psysonic/pull/1054)** + +* Two-line header: custom entry name plus `user@host`, HTTPS lock, and a clickable version info tooltip (hover or tap). +* Navidrome **0.62+**: green **AudioMuse-AI** inline badge when the plugin is detected; older Navidrome keeps the manual toggle row below the card. +* **Use** and **Active** share one rightmost slot (green badge vs primary button); card actions are edit → test → use/active. Delete lives in the edit form footer. +* **TooltipPortal**: `data-tooltip-click` for click-pinned tooltips (touch and explicit open without the 1s hover delay). + + ## Fixed -### Windows — idle app no longer blocks system sleep - -**By [@cucadmuh](https://github.com/cucadmuh), reported by [@Thraka](https://github.com/Thraka), PR [#1073](https://github.com/Psychotoxical/psysonic/pull/1073)** - -* Psysonic no longer keeps the audio output device open while the app is idle — the CPAL stream opens on first playback and closes after **60 seconds** without active audio (pause), or **immediately** on Stop / natural queue end, so Windows `powercfg` no longer reports an in-use audio stream when music is not playing ([#1071](https://github.com/Psychotoxical/psysonic/issues/1071)). -* Resume after a long pause uses the existing cold path (`audio:output-released` resets the warm-pause flag); post-sleep recovery skips reopening the stream when nothing is playing. -* **Cold start while paused:** after `getPlayQueue` restores position, the seekbar shows the saved time immediately; the current track is hot-cache prefetched and the engine loads silently (`audio_play` with `startPaused`) at that position so the next Play is a warm `audio_resume` without an audible blip at the start of the track. -* Rodio `Dropping DeviceSink` warnings on stream release are suppressed unless logging is in debug mode. -* **Stop keeps the waveform:** stopping no longer wipes the seekbar waveform for the still-shown track — the cached analysis bins are kept and re-hydrated from the database, so the real waveform stays mounted instead of falling back to flat bars. - -### Internet radio — no more duplicate now-playing on Linux - -**By [@Psychotoxical](https://github.com/Psychotoxical), reported by agriffit79, PR [#1069](https://github.com/Psychotoxical/psysonic/pull/1069)** - -* On Linux, playing an internet radio station showed the track twice in the desktop "now playing" overlay — once from the app's own media controls and once from a second player the web engine registered for the stream. The extra player is now suppressed, so radio shows a single entry like regular tracks. - -### Fullscreen player — title cleanup - -**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1068](https://github.com/Psychotoxical/psysonic/pull/1068)** - -* The song title no longer shows a leading track number, and letters with descenders (g, j, p, q, y) are no longer clipped along the bottom edge. - -### Discord Rich Presence — album art and clearer settings - -**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1068](https://github.com/Psychotoxical/psysonic/pull/1068)** - -* Album art shows again when the cover source is "Server (via album info)" — Discord was handed a local file path it cannot fetch and fell back to the app icon; it now receives a reachable image URL. -* **Settings → Integrations:** added notices clarifying that this is the built-in Discord Rich Presence, and that the official Navidrome Discord RP plugin needs "Show in Now Playing" enabled instead. - -### Local index — multi-genre browse, filters, and counts - -**By [@cucadmuh](https://github.com/cucadmuh), reported by HiveMind on the Psysonic Discord, PR [#1059](https://github.com/Psychotoxical/psysonic/pull/1059)** - -* Tracks tagged with several genres in one metadata field (e.g. `Noise Metal/Dark Ambient/Experimental Black Metal`) again match **each atomic genre** in Genres browse, All Albums filters, genre detail, and Advanced Search — not only the first segment. -* New `track_genre` index (OpenSubsonic `genres[]` when present, Navidrome-default split fallback), maintained on sync; one-time blocking startup backfill for existing libraries with progress. -* Migration v12 repairs databases that recorded legacy schema versions 2–11; TS network fallback uses robust `genreTagsFor` parsing. - - - -### Navidrome Now Playing and scrobble with local playback - -**By [@cucadmuh](https://github.com/cucadmuh), PR [#1055](https://github.com/Psychotoxical/psysonic/pull/1055)** - -* **Show in Now Playing** and Navidrome play-count scrobbles no longer silently skip when audio plays from hot cache, offline library pins, or favorites-auto bytes. -* Presence and queue sync target the **playback server** reachability gate, so a queue on server A still reports to Navidrome while browsing server B. - - - -### Now Playing — cards no longer blank out on track change - -**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1042](https://github.com/Psychotoxical/psysonic/pull/1042)** - -* The "from this album", "discography" and "most played" sections on the Now Playing page disappeared after a track change once the next track started playing from the local cache, and didn't come back. The page now keeps loading that info whenever the server is reachable, regardless of whether the audio plays from cached or offline bytes. - - - -### Now Playing — metadata reads from the local library index first - -**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1049](https://github.com/Psychotoxical/psysonic/pull/1049)** - -* The "from this album", "discography", "most played" and song details on the Now Playing page now come from the local library index when it has them, only falling back to the server when the index can't serve a row. Cards and fields (genre, play count, contributors) stay populated during cached and offline playback, with fewer server requests. - - - -### Library DB — named slow-write ops for stall diagnosis - -**By [@cucadmuh](https://github.com/cucadmuh), PR [#1043](https://github.com/Psychotoxical/psysonic/pull/1043)** - -* Production `library-db` write paths now log stable `module.action` op names instead of the generic `misc`, so the next `[library-db] SLOW write` line on macOS (or elsewhere) identifies the call site — diagnostic step for playback stalls under long write-lock holds ([#1040](https://github.com/Psychotoxical/psysonic/issues/1040)). - ### Servers — complete border on the active server card **By [@Psychotoxical](https://github.com/Psychotoxical), PR [#998](https://github.com/Psychotoxical/psysonic/pull/998)** @@ -288,14 +218,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 -### Playback — macOS stutter from background device checks - -**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1039](https://github.com/Psychotoxical/psysonic/pull/1039)** - -* On some macOS setups playback stuttered at a steady ~3-second cadence: a background check that scans every audio output device ran on each poll and briefly contended with playback. It now runs only when a specific output device is pinned; with the system default (the common case) a single lightweight check runs instead. - - - ### Track preview — Symphonia 0.6 format hints and fast stream start **By [@cucadmuh](https://github.com/cucadmuh), PR [#1006](https://github.com/Psychotoxical/psysonic/pull/1006)** @@ -355,6 +277,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +### Playback — macOS stutter from background device checks + +**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1039](https://github.com/Psychotoxical/psysonic/pull/1039)** + +* On some macOS setups playback stuttered at a steady ~3-second cadence: a background check that scans every audio output device ran on each poll and briefly contended with playback. It now runs only when a specific output device is pinned; with the system default (the common case) a single lightweight check runs instead. + + + +### Now Playing — cards no longer blank out on track change + +**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1042](https://github.com/Psychotoxical/psysonic/pull/1042)** + +* The "from this album", "discography" and "most played" sections on the Now Playing page disappeared after a track change once the next track started playing from the local cache, and didn't come back. The page now keeps loading that info whenever the server is reachable, regardless of whether the audio plays from cached or offline bytes. + + + +### Library DB — named slow-write ops for stall diagnosis + +**By [@cucadmuh](https://github.com/cucadmuh), PR [#1043](https://github.com/Psychotoxical/psysonic/pull/1043)** + +* Production `library-db` write paths now log stable `module.action` op names instead of the generic `misc`, so the next `[library-db] SLOW write` line on macOS (or elsewhere) identifies the call site — diagnostic step for playback stalls under long write-lock holds ([#1040](https://github.com/Psychotoxical/psysonic/issues/1040)). + + + +### Now Playing — metadata reads from the local library index first + +**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1049](https://github.com/Psychotoxical/psysonic/pull/1049)** + +* The "from this album", "discography", "most played" and song details on the Now Playing page now come from the local library index when it has them, only falling back to the server when the index can't serve a row. Cards and fields (genre, play count, contributors) stay populated during cached and offline playback, with fewer server requests. + + + ### Themes — consistent focus borders on inputs and dropdowns **By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1052](https://github.com/Psychotoxical/psysonic/pull/1052)** @@ -372,6 +326,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +### Navidrome Now Playing and scrobble with local playback + +**By [@cucadmuh](https://github.com/cucadmuh), PR [#1055](https://github.com/Psychotoxical/psysonic/pull/1055)** + +* **Show in Now Playing** and Navidrome play-count scrobbles no longer silently skip when audio plays from hot cache, offline library pins, or favorites-auto bytes. +* Presence and queue sync target the **playback server** reachability gate, so a queue on server A still reports to Navidrome while browsing server B. + + + ### Album grids — album artist on compilation cards **By [@cucadmuh](https://github.com/cucadmuh), PR [#1057](https://github.com/Psychotoxical/psysonic/pull/1057), reported in [#1056](https://github.com/Psychotoxical/psysonic/issues/1056)** @@ -381,6 +344,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +### Local index — multi-genre browse, filters, and counts + +**By [@cucadmuh](https://github.com/cucadmuh), reported by HiveMind on the Psysonic Discord, PR [#1059](https://github.com/Psychotoxical/psysonic/pull/1059)** + +* Tracks tagged with several genres in one metadata field (e.g. `Noise Metal/Dark Ambient/Experimental Black Metal`) again match **each atomic genre** in Genres browse, All Albums filters, genre detail, and Advanced Search — not only the first segment. +* New `track_genre` index (OpenSubsonic `genres[]` when present, Navidrome-default split fallback), maintained on sync; one-time blocking startup backfill for existing libraries with progress. +* Migration v12 repairs databases that recorded legacy schema versions 2–11; TS network fallback uses robust `genreTagsFor` parsing. + + + ### Dev startup — missing generated release-notes bundle **By [@cucadmuh](https://github.com/cucadmuh), PR [#1060](https://github.com/Psychotoxical/psysonic/pull/1060)** @@ -406,14 +379,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +### Fullscreen player — title cleanup + +**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1068](https://github.com/Psychotoxical/psysonic/pull/1068)** + +* The song title no longer shows a leading track number, and letters with descenders (g, j, p, q, y) are no longer clipped along the bottom edge. + + + +### Discord Rich Presence — album art and clearer settings + +**By [@Psychotoxical](https://github.com/Psychotoxical), PR [#1068](https://github.com/Psychotoxical/psysonic/pull/1068)** + +* Album art shows again when the cover source is "Server (via album info)" — Discord was handed a local file path it cannot fetch and fell back to the app icon; it now receives a reachable image URL. +* **Settings → Integrations:** added notices clarifying that this is the built-in Discord Rich Presence, and that the official Navidrome Discord RP plugin needs "Show in Now Playing" enabled instead. + + + +### Internet radio — no more duplicate now-playing on Linux + +**By [@Psychotoxical](https://github.com/Psychotoxical), reported by agriffit79, PR [#1069](https://github.com/Psychotoxical/psysonic/pull/1069)** + +* On Linux, playing an internet radio station showed the track twice in the desktop "now playing" overlay — once from the app's own media controls and once from a second player the web engine registered for the stream. The extra player is now suppressed, so radio shows a single entry like regular tracks. + + + +### Windows — idle app no longer blocks system sleep + +**By [@cucadmuh](https://github.com/cucadmuh), reported by [@Thraka](https://github.com/Thraka), PR [#1073](https://github.com/Psychotoxical/psysonic/pull/1073)** + +* Psysonic no longer keeps the audio output device open while the app is idle — the CPAL stream opens on first playback and closes after **60 seconds** without active audio (pause), or **immediately** on Stop / natural queue end, so Windows `powercfg` no longer reports an in-use audio stream when music is not playing ([#1071](https://github.com/Psychotoxical/psysonic/issues/1071)). +* Resume after a long pause uses the existing cold path (`audio:output-released` resets the warm-pause flag); post-sleep recovery skips reopening the stream when nothing is playing. +* **Cold start while paused:** after `getPlayQueue` restores position, the seekbar shows the saved time immediately; the current track is hot-cache prefetched and the engine loads silently (`audio_play` with `startPaused`) at that position so the next Play is a warm `audio_resume` without an audible blip at the start of the track. +* Rodio `Dropping DeviceSink` warnings on stream release are suppressed unless logging is in debug mode. +* **Stop keeps the waveform:** stopping no longer wipes the seekbar waveform for the still-shown track — the cached analysis bins are kept and re-hydrated from the database, so the real waveform stays mounted instead of falling back to flat bars. + + + ### Auto-install script — `curl | sudo bash` works again **By [@kbennett2000](https://github.com/kbennett2000), PR [#1079](https://github.com/Psychotoxical/psysonic/pull/1079)** * The Linux auto-installer (`install.sh`) failed before any download because `[INFO]` log lines were captured into the package URL and curl rejected the mangled string; logging now goes to stderr, the reinstall prompt reads from the terminal, and package downloads use `--fail --globoff`. - - ## [1.47.0] > **🙏 Thank you to our amazing Discord community.** This release would not have been possible without your tireless support, quality checks, bug reports and all-round collaboration. Every report, every repro and every bit of feedback shaped what shipped here — thank you. Come join us: [discord.gg/AMnDRErm4u](https://discord.gg/AMnDRErm4u) diff --git a/WHATS_NEW.md b/WHATS_NEW.md index 10a7cf5d..75fb40ce 100644 --- a/WHATS_NEW.md +++ b/WHATS_NEW.md @@ -4,48 +4,106 @@ User-facing release highlights for the in-app **What's New** screen. Maintainers current line before promoting to `next` / `release`. Technical details and PR credits stay in `CHANGELOG.md`. +Within each section, order by **user impact** (most noticeable first) — not PR merge order. +`CHANGELOG.md` keeps strict PR order inside Added / Changed / Fixed. + ## [1.48.0] ## Highlights +### Offline listening + +- When the server is unreachable, browse and detail pages show what you already have locally instead of empty errors — albums, artists, playlists, and cross-server favorites. +- Starred tracks, pinned albums, and playlists live under one **media** folder; browse them in **Offline Library** and see disk usage at a glance. +- **Favorites auto-sync** keeps loved songs on disk; pinned albums and playlists refresh when the library index updates. + +### Music Network — scrobble beyond Last.fm + +- **Settings → Integrations** now hosts a **Music Network**: connect **Last.fm**, **Libre.fm**, **ListenBrainz**, **Maloja**, **Rocksky**, **Koito**, or your own **GNU FM** instance — and scrobble to several at once. +- Pick a **primary** service for loved tracks, similar artists, and stats; other connections still receive scrobbles. Your existing Last.fm setup migrates automatically. +- A master switch turns the whole network on or off. + ### Theme Store -- Browse and install community themes from **Settings → Themes** — search, dark/light filter, and full-size previews. +- Browse and install community themes from **Settings → Themes** — search, dark/light filter, full-size previews, and sort by popularity or date. - Six palettes ship with the app; everything else installs on demand and works offline after the first download. +- **Now Playing** follows every theme cleanly, including light palettes. - Import a theme from a local `.zip` when you have a package from a friend or your own design. - The sidebar nudges you when an installed theme has an update; one-click update from the theme card. -### Offline listening - -- Starred tracks and pinned albums stay on disk under one **media** folder — browse them in **Offline Library**. -- Favorites can sync automatically; pinned albums and playlists refresh when the library index updates. -- When the server is unreachable, browse and detail pages show what you already have locally instead of empty errors. - ### Fullscreen player -- Rebuilt for much lower CPU and memory use: a calm, sharp fullscreen view with album art, waveform seekbar, up-next queue, synced lyrics, ratings, and a clock. +- Rebuilt for much lower CPU and memory use: a calm, sharp fullscreen view with album art, waveform seekbar, up-next queue, synced lyrics, ratings, and a clock that follows your **Clock format** setting. +- The song title no longer shows a leading track number, and descenders (g, j, p, q, y) are no longer clipped. + +### Live — richer now playing on Navidrome 0.62+ + +- On servers with OpenSubsonic **playbackReport** (Navidrome ≥ 0.62), **Live** shows who is playing or paused, how far into the track they are, and playback speed when another client sends it — with smooth position updates between refreshes. ### Queue — Timeline mode - A third queue layout keeps the current track in the middle with history above and up next below — great for long listening sessions. Cycle the header control or pick it in **Settings → Personalisation → Queue display**. -### Sidebar +### Settings → Servers -- Optional **Settings → Sidebar** toggle pins **Now Playing** to the top of the sidebar. +- Each card shows the server software and version (e.g. **Navidrome 0.62.0**) under the name, with a cleaner two-line layout and compact actions. +- Navidrome **0.62+** shows a green **AudioMuse-AI** badge when the plugin is detected — no manual toggle on current Navidrome. + +### Sidebar — pin Now Playing to the top + +- New **Settings → Sidebar** toggle moves **Now Playing** to the top of the sidebar instead of the bottom (off by default). ### Startup - A themed loading splash appears while the app starts — colours follow your active theme, including community palettes. -### Settings → Servers +### What's New page -- Server cards are easier to scan: software version on the card, compact actions, and a green **AudioMuse-AI** badge on Navidrome 0.62+ when the plugin is detected. +- Highlights like this list load from the release on startup (and cache for offline). A **Full changelog** tab on the same page holds the technical detail. ## Improved -- Audio decoding runs on **Symphonia 0.6** for current and future codec fixes. -- **Settings → About** shows a clearer open-source licenses panel. +- Audio decoding runs on **Symphonia 0.6**; streams start sooner and recover from stalls without restarting the player. +- The **Preload Next Track** toggle under **Settings → Storage → Buffering** is gone — playback no longer waits on that extra RAM prefetch. Gapless, crossfade, and Hot Cache behave as before. ## Fixed -- Smoother playback and library behaviour across offline mode, theme switching, and server reconnect — see `CHANGELOG.md` for the full list. +### Playback and audio + +- **Windows:** the app no longer keeps the audio device open while idle, so the system can sleep when music is not playing. +- **macOS:** steady playback stutter from background device polling is gone on the default output path. +- After a long pause, the seekbar shows the saved position immediately and the next **Play** resumes without an audible blip at track start. +- **Stop** keeps the real waveform on the seekbar instead of falling back to flat bars. + +### Offline, Now Playing, and Navidrome + +- Now Playing cards (**from this album**, discography, most played) stay populated during cached and offline playback instead of blanking out on track change. +- Navidrome **Show in Now Playing** and play-count scrobbles work when audio plays from hot cache, offline pins, or auto-synced favorites. +- Mixed-server queues still report to the correct Navidrome server. + +### Themes and integrations + +- Favoriting from the player bar, fullscreen player, or shortcuts updates the star in track lists and playlists immediately. +- Discord Rich Presence shows album art again when covers come from the server. +- Focus rings and dropdown borders follow the active theme consistently. + +### Browse and library + +- Tracks tagged with several genres in one field (e.g. `Metal/Ambient/Experimental`) match **each genre** again in browse, filters, and search. +- **All Albums → Only compilations** returns results for common tagging patterns. +- Album grids show the album artist on compilations instead of a random track artist. +- Song rails (**Random Picks**, **Discover Songs**, etc.) link each name in multi-artist credits separately. +- **Artist → Top Tracks** play works even when the artist page has no albums loaded yet. +- **Home → Most Played** no longer jumps the page when you load more albums. +- **Mainstage** hero backdrop stays in sync when you skip albums quickly. + +### Other + +- **Linux:** the `curl | bash` auto-installer works again. +- **Linux:** internet radio no longer appears twice in the desktop now-playing overlay. +- The active server card under **Settings → Servers** draws a complete border on all sides. + +## Under the hood + +- Navidrome **0.62+** auto-detects **AudioMuse-AI** and routes Instant Mix / Lucky Mix through the smarter API when the plugin is present — older Navidrome keeps the manual toggle you already know. +- Future release highlights can refresh on the **What's New** page without waiting for a full app update download.