Added
-
Windows — Taskbar Thumbnail Toolbar: Prev / Play-Pause / Next media buttons now appear in the Windows taskbar thumbnail preview (the popup that appears when hovering over the taskbar icon). Buttons emit the same
media:*events as the tray menu and souvlaki. The Play/Pause icon swaps in real-time as playback state changes. -
Windows — High-quality taskbar icons: The taskbar thumbnail toolbar icons are now loaded from embedded
.icoassets (play.ico,pause.ico,prev.ico,next.ico) viaCreateIconFromResourceEx, replacing the previous monochrome GDI drawing code. All four icons are properly cleaned up on window destruction. -
Professional update modal: The in-app updater now shows a polished modal with the full release changelog, a Skip this version option, and an OS-aware direct download button (
.dmgon macOS,.exeon Windows,.deb/.rpmon Linux) as a fallback if the auto-update fails. The modal is fully localised in all 7 supported languages. -
Self-hosted fonts — no internet required: All 10 UI fonts are now shipped as WOFF2 files bundled into the app via
@fontsource-variablenpm packages. The previous Google Fonts CDN dependency has been removed entirely — Psysonic now renders correctly with no internet connection and without any external requests on startup. -
Help — 11 new FAQ entries: The Help page covers previously undocumented features across Ratings (how to rate songs/albums/artists, removing a rating, Skip-to-1★, rating filter for mixes), Folder Browser, Theme Scheduler, UI Scale, Seekbar styles, AutoEQ, Replay Gain, Hot Cache, and offline playlist caching. All 7 locales updated.
Fixed
-
Embedded lyrics (MP3 & FLAC): A new
get_embedded_lyricsTauri command reads lyrics tags directly from local files —SYLT/USLTframes for MP3 (via theid3crate) andSYNCEDLYRICS/LYRICStags for FLAC (vialofty). Additionally: the LRC parser now correctly handles timestamps without fractional seconds (e.g.[01:23]), and the Subsonic structured-lyrics parser now accepts bothsyncedandissyncedfield names for compatibility with different server versions. -
Linux — player bar disappearing at high zoom / small window sizes: All
grid-template-rowsdefinitions now useminmax(0, 1fr)instead of bare1fr, and themin-height: 720pxconstraint on the app shell has been removed. The player bar no longer gets pushed off-screen when the window is small or the UI scale is above 100 %. -
Windows — "Open folder" in Settings crashing: The Settings page uses a Rust
open_foldercommand instead of the Taurishell:openAPI, which was blocked by the capability scope on Windows for local paths. -
macOS — Artist Radio crashing WKWebView after ~10 minutes: Storing
currentTimein the persisted Zustand state caused up to ~1,200 synchronouslocalStorage.setItemcalls per radio session, eventually crashing the WKWebView SQLite backend.currentTimehas been removed from the persist partializer. Old played radio tracks are also now trimmed from the queue (keeping the last 5) to cap the localStorage payload during queue top-up. -
Artist Radio — predictable track order: The initial Artist Radio queue is now shuffled via Fisher-Yates, so positions 2+ draw from similar-artist tracks in a random order rather than always playing the server's top-5 tracks in sequence.
-
Internet Radio — stall / buffering recovery: Stall events on the HTML5
<audio>element now trigger automatic reconnection (up to 5 retries), recovering from transient network interruptions without requiring a manual restart. -
Corrupt MP3s — VLC-style frame tolerance: The audio decoder now tolerates up to 100 consecutive bad frames before giving up (previously 3), matching VLC's behavior for files with invalid
main_dataoffset frames. Frame-drop log messages are suppressed in release builds. -
Statistics — album/song totals respect selected music library: Album and track counts on the Statistics page were previously derived from
getGenres(), which is not scoped to the active music folder. Both counts are now derived from the same paginatedgetAlbumListpass used for playtime, with the same 5,000-album cap and a≥prefix when capped. (PR #138 by @cucadmuh) -
Fullscreen — resize grips visible in native fullscreen: Resize grips are now hidden whenever the window enters native fullscreen on all platforms (previously only tracked on Linux). An initial check on mount also catches windows that start in a maximized or fullscreen state.
-
Albums page — year filter input height: The "From year" / "To year" inputs in the Albums filter bar now match the height and font size of adjacent buttons, fixing the mixed-height row introduced in v1.34.4.
-
Russian locale — missing lyrics-source strings: The
lyricsServerFirstand related settings strings were not translated in the Russian locale. (PR #140 by @kilyabin)
Contributors
Thank you to everyone who contributed to this release:
- @cucadmuh — Statistics music-folder scope fix (PR #138)
- @kilyabin — Russian locale lyrics strings (PR #140)