Added
Audio Preview — Rust Preview Engine and Tracklist Rollout
By @Psychotoxical, PRs #392, #394
Psysonic now has a native Rust-powered preview engine for tracklist previews. Instead of using a separate HTML5 audio path, previews run through a parallel rodio sink on the existing output stream, with dedicated Tauri commands and engine events for preview start, progress and end.
When a preview starts, the main player pauses and only resumes automatically if it was playing beforehand. Starting normal playback, radio playback, resume or stop actions cancels any active preview first, so preview audio and main playback cannot overlap.
The new preview UI is rolled out across the main tracklist surfaces:
- Albums
- Playlist detail including suggestions
- Favorites
- Artist detail top tracks
- Random Mix genre and filtered-song lists
Track numbers now stay stable on hover, while dedicated inline Play and Preview buttons handle playback actions from the title cell. Active playing rows keep the equalizer bars, including on hover; active paused rows fall back to a static accent-colored track number. SongRow is intentionally left untouched in this pass.
Settings → Audio now includes a preview section with a master toggle, configurable start position, configurable duration and per-location toggles. Users can keep previews enabled on discovery-heavy surfaces while hiding them on owned-content views. The preview progress ring follows the configured duration automatically.
Preview state is mirrored through a new previewStore, giving the UI one reliable source of truth for preview progress, active state and the currently previewing track metadata.
While a preview is playing, the player bar mirrors the previewed track with cover, title, artist, a dedicated Preview label and an accent top border. Actions that would otherwise target the queued track, such as rating, fullscreen hint and album/artist links, are suppressed during preview playback.
The main play button also reflects preview state with a stop-style preview control and progress ring. Its behavior matches the inline preview buttons: stopping the preview resumes the main player only if it was already playing before. The smaller Stop button uses silent preview stop semantics, cancelling the preview and leaving the main player paused so Stop always means silence.
Spacebar stops an active preview, media keys are ignored during previews, and tray actions cancel the preview before continuing with the requested player action.
Play Next in the context menu now uses a double-chevron icon, making it visually distinct from the Preview button.
The feature includes updated i18n coverage across all supported locales, including the new player-bar preview labels.
Tray — Now Playing Tooltip and Localized Menu Labels
By @Psychotoxical, PR #395, closes #383
The system tray now reflects the current playback state more clearly. On Windows and macOS, the tray tooltip shows the currently playing track as Artist – Title on play, pause and track changes, falling back to Psysonic when nothing is playing.
On Linux, where AppIndicator does not expose a hover-tooltip API, the same now-playing text is shown as a disabled entry at the top of the tray menu instead.
Tray menu labels are now localized across all supported languages, including Play/Pause, Next/Previous, Show/Hide, Exit and the Linux-only empty-state label. The frontend updates the tray labels on startup and whenever the app language changes, without rebuilding the tray icon.
Themes — Kanagawa, Atom One and 1984 Palettes
By @Psychotoxical, PR #390
Open Source Classics gains three new theme families: Kanagawa, Atom One and 1984, adding nine new themes in total.
- Kanagawa: Wave, Dragon and Lotus
- Atom One: Dark and Light
- 1984: Default, Cyberpunk, Light and Orwell
Each theme defines the full token set, including background, accent, text, Catppuccin compatibility, waveform, status and select-arrow tokens. This lets login, queue sidebar and subpages inherit the palette cleanly without component-specific overrides.
The theme picker now groups Open Source Classics by family with dedicated family headings. Theme scheduler dropdown labels are also family-prefixed, making it clearer which palette family a scheduled theme belongs to.
Sidebar Discovery Indicators
Sidebar navigation now includes a dedicated unread indicator for New Releases, with persistence per server/library scope and delayed mark-as-seen behavior after opening the New Releases page.
Albums added within the last 48 hours now receive a localized New badge in both album cards and album detail header.
Adaptive Header Controls
The top header behavior was reworked for narrow widths: search, Live and Orbit controls now compress in a deterministic order with improved stability in edge-width ranges.
Waveform Wheel Seeking
Waveform mouse-wheel seeking now uses fixed step-based jumps with debounce smoothing for more predictable navigation and less jitter during rapid scrolling.
Fixed
-
Settings → Audio no longer blanks the app on macOS (Issue #382, PR #384, by @Psychotoxical): Fixed a macOS-only crash where opening Settings → Audio could turn the whole app into a blank window. The Equalizer canvas now waits until it has valid layout dimensions before drawing, and redraws automatically once the section is visible.
-
Polish (PR #397, by @cucadmuh): multiple branch-local interaction fixes around sidebar drag/drop behavior, Live dropdown layering, queue-resize handle behavior during scroll/overlay-scrollbar interaction, and now-playing narrow-layout stability.