π§ͺ Release Candidate: This is
1.44.0-rc.2β a release candidate for1.44.0. It is distributed as a draft release only and does not push via the auto-updater. Test feedback welcome before the final tag.
Highlights
- Orbit Listening Sessions β synchronized multi-user listening for Psysonic users, including host/guest roles, queue mirroring, track suggestions, participant strip, host-presence handling and full in-app help.
- Loudness Normalization β EBU R128 / LUFS analysis with persistent cache, configurable target level and improved waveform data from the same analysis pass.
- Now Playing Dashboard β a richer, customizable dashboard with draggable and resizable cards, artist context, album tracklist, credits, tour dates and discography.
- Tracks Hub β a new full-library track-level view with random discovery, searchable browsing and Navidrome-native sorting.
- Smart Playlists β first-class Navidrome smart playlist creation, editing and management directly inside the Playlists page.
- Share Links / Magic Strings β share servers, tracks, albums, artists and queues through Psysonic magic strings.
- Lucky Mix β instant AudioMuse-powered mixes based on listening history, ratings and similar-song discovery.
- Settings Overhaul β cleaner tab structure, accordion sections, in-page search and better grouping of integrations and personalization options.
Added / New Features
Orbit β Multi-User Listen-Together
By @Psychotoxical, PR #304
Orbit introduces synchronized listening sessions for multiple Psysonic users. A host starts a session, shares a magic-string invite, and guests can join to mirror the host's queue, current track and playback position.
Guests can suggest individual tracks instead of replacing the full queue. Hosts can approve suggestions manually or enable auto-approve. Orbit also includes a live participant strip in the queue, per-guest mute, host-presence detection, automatic handling of stalled sessions and a detailed 9-section in-app help modal.
Orbit is integrated across Psysonic's interactive song surfaces, including Tracks Hub, Albums, Playlists, Random Mix, Favorites, Artist pages, Search and Advanced Search. When a session is active, song actions are routed through Orbit so guests suggest tracks and hosts enqueue them correctly.
The feature includes full i18n coverage across all supported locales and end-to-end documentation in ORBIT.md.
Available in 1.44 RC1.
Loudness Normalization β EBU R128 / LUFS
By @cucadmuh and @Psychotoxical, PRs #315, #317, #326, #333
Psysonic now supports integrated-loudness analysis using LUFS and applies per-track gain so material mastered at different levels lines up more consistently at a user-chosen target loudness.
Analysis results are cached in SQLite, so cold-cache analysis happens once per track and later playback reuses the stored measurement without repeating the heavy analysis work. The available LUFS targets are -16, -14, -12 and -10 LUFS, with -12 LUFS as the default.
Normalization now lives in one section under Settings β Audio β Normalization, with Off, ReplayGain and LUFS as mutually exclusive modes.
Until a track has a stored LUFS measurement, Psysonic applies pre-analysis attenuation using a -14 LUFS reference calibration in storage, while the active target is reflected as an effective dB value in both the audio engine and the UI. Legacy saved values are migrated on rehydrate.
Follow-up work stabilized the LUFS analysis loop, serialized CPU-heavy seed and analysis work, kept queue target, pre-trim and ReplayGain IPC in sync when the target or pre-analysis state changes, including reseeding when analysis was cleared but waveform cache data still existed, and refined queue/settings behavior and copy.
The same analysis path now also provides richer waveform data through mixed mean/peak waveform bins without requiring a second full decode.
Now Playing β Customizable Info Dashboard
By @Psychotoxical, PRs #266, #267
The Now Playing page has been rebuilt from a flat card list into a two-column info dashboard focused on context, metadata and discovery.
The page now includes a richer cover hero, release-age information, technical badges, Last.fm love state, lyrics toggle, star rating and per-user play count. The dashboard can show a sliding-window album tracklist, top songs by the same artist, OpenSubsonic credits, artist biography, discography and Bandsintown tour dates.
Cards are draggable and resizable, and the layout is persisted per user. The implementation also includes memoized cards and TTL caches for song metadata, artist info, top songs, discography, Bandsintown and Last.fm data to avoid unnecessary refetching during same-artist playback.
Tracks β Full Library Hub Page
By @Psychotoxical, PR #300, closes #299
Psysonic now has a dedicated Tracks page between All Albums and Build a Mix. Instead of browsing only through albums, users can explore the library directly at track level.
The page includes a rerollable βTrack of the momentβ hero, a random-pick rail and a virtualized, paginated browse list with search. On Navidrome, browsing uses the native /api/song?_sort=title&_order=ASC endpoint for proper AβZ sorting, with a graceful fallback for non-Navidrome servers.
A new enqueueAndPlay() helper appends a track to the queue and jumps to it instead of replacing the queue.
Genres β Tag Cloud Refactor
By @Psychotoxical, PR #311
The Genres page has been redesigned as a compact, flowing tag cloud. This replaces the previous large SVG-card grid, which could freeze the WebKitGTK renderer on large libraries.
Genre pills are sized by album count, use deterministic palette colors and open instantly even with hundreds of genres. Pagination is no longer needed.
Now Playing Info Tab in Queue Panel
By @Psychotoxical, PR #244
The right-side queue panel now includes a third tab next to Queue and Lyrics. The new Info tab shows context for the currently playing track.
It includes an artist card with biography and image from Subsonic getArtistInfo, song contributors from OpenSubsonic metadata, and optional Bandsintown tour dates. Bandsintown integration is opt-in and includes privacy information when disabled.
Discover Songs Rail on Mainstage
By @Psychotoxical, PR #301
The Home page now includes a new Discover Songs rail, surfacing fresh track-level recommendations alongside the existing album-focused sections.
ReplayGain β Auto Mode
By @Psychotoxical, PR #242
ReplayGain now has an Auto mode. Psysonic automatically chooses album gain when the current queue is a contiguous album and track gain for shuffled or mixed playback.
This removes the need to manually switch normalization behavior between full-album listening and mixed queues.
Settings β Refactor, Accordions and Search
By @Psychotoxical, PRs #259, #263, #264, closes #257
Settings have been reorganized into clearer thematic tabs: Servers, Library, Audio, Lyrics, Appearance, Personalisation, Integrations, Input, Storage, System and Users.
Tabs are now split into accordion sections for a calmer landing view. A new in-page search can expand matching sections automatically, search across tabs, support keyboard navigation and flash matching results.
Integrations such as Last.fm, Discord, Bandsintown and Now-Playing Share now live together in the Integrations tab. Sidebar, Artist and Home customizers live under Personalisation. Contributors are shown in a dedicated System section.
Artist Page β User-Configurable Sections
By @Psychotoxical, PR #254, closes #252 from @bcorporaal
The Artist Detail page now lets users reorder and hide/show individual sections such as Top Songs, Albums, Similar Artists and Bio.
The layout is persisted per user and can be configured from Settings β Personalisation.
Album Enqueue Actions
By @Psychotoxical, PR #256, closes #253 from @bcorporaal
Album covers now include an Enqueue hover action next to Play. Album context menus and the multi-select toolbar also gained Enqueue actions.
All three actions append to the existing queue instead of replacing it.
Playlists β Bulk Delete and Duplicate Confirmation
By @Psychotoxical, PRs #290, #329
The Playlists page now includes a bulk-delete action while in selection mode. When adding a song that already exists in a playlist, Psysonic now asks for confirmation instead of silently adding a duplicate.
Search β Unified SongRow and Paginated Song Results
By @Psychotoxical, PR #303
Search results, Advanced Search and the Tracks Hub now share one SongRow component.
Song results in search pages are paginated with infinite scroll instead of being limited to a single capped batch.
Login β Language Picker
By @Psychotoxical, PR #328
The login page now includes a language picker so first-run users can choose their language before they have a server profile where that preference can be saved.
Lucky Mix
Lucky Mix builds an instant queue from listening history, ratings and AudioMuse similar-song batches. It skips low-rated tracks, honors the active library scope and can be cancelled while building.
The feature appears in the sidebar, mobile overlay and Mix landing page when AudioMuse is available. Follow-up work corrected the rating filter against Navidrome's OpenSubsonic rating fields.
Library Deep Links β psysonic2- Share Scheme
Psysonic can now share tracks, albums, artists and queues through psysonic2- magic strings. Pasting one into the app switches to the matching server and plays or navigates to the shared item.
Queue links resolve tracks in chunks and report how many tracks could be played or skipped when the receiving server is missing items.
Magic-String Server Invites and Navidrome Admin Sharing
Navidrome admins can generate a psysonic1- invite string that pre-fills the add-server form for another user. The add-user dialog also validates library access so non-admin users cannot be saved without any libraries.
Sleep Timer β Circular Ring UI
The sleep timer and delayed-start UI now use a circular progress ring around the play/pause button, with an in-button countdown and redesigned timer modal.
The updated UI works across PlayerBar, FullscreenPlayer and MobilePlayerView.
Queue β Undo/Redo with Hotkeys
Queue edits can now be undone and redone with Ctrl/Cmd+Z and Ctrl/Cmd+Shift+Z. Queue snapshots include order, current track, playback position, play/pause state and scroll offset.
Restoring a snapshot preserves playback when possible and resyncs the audio engine when needed.
Sidebar β Long-Press Drag to Reorder
Sidebar items can now be reordered by long-press dragging. Dropping an item outside the sidebar hides it, using the same hidden-state model as the Settings customizer.
Playlists β Navidrome Smart Playlists
By @cucadmuh, PR #289, proposed by bequbed on Discord
Navidrome smart playlists are now managed directly inside the Playlists page. Users can create, edit and delete smart playlists using the same flow as regular playlists, with a dedicated rule editor for smart playlist parameters.
Smart playlists have distinct icons and support filters such as genre include/exclude, year ranges, ratings and metadata rules.
Song Info β Copy Fields via Double-Click
Double-clicking any field in the Song Info modal copies that value to the clipboard.
Mobile UI Overhaul
A broad pass over mobile and narrow-viewport layouts, including the sidebar drawer, player view, queue, search and detail pages.
Logging β Runtime Levels and Debug Export
Settings now allow switching between info and debug log levels at runtime. Users can also export the current debug log for bug reports.
CLI β Logs Subcommand
The psysonic CLI now includes a logs subcommand with tail and --follow support.
Changed / Improved
Performance Suite
By @Psychotoxical, PRs #245, #246, #247, #248, #249, #250, #251
A coordinated performance pass improved several expensive areas of the app:
- Search thumbnails now use
CachedImageto reduce redundant image loading. - Device Sync parallelizes
getAlbumcalls when syncing artist sources. - Album infinite-scroll prefetching starts earlier for smoother scrolling.
- Resolved lyrics are persisted to IndexedDB and survive app restarts.
- Rarely used pages are lazy-loaded and vendor chunks are split.
- Artist list filtering and grouping are memoized.
- Genre sorting and rendering were optimized, later replaced by the new tag-cloud layout.
Navidrome Admin API Resilience
By @Psychotoxical, PR #260
The Navidrome admin REST client is more resilient against flaky upstream behavior. Psysonic now forces HTTP/1.1 for these calls, requires TLS 1.2+, retries transient errors and shows a cleaner UI retry surface instead of raw error toasts.
Linux Audio Device Selection
By @Psychotoxical, PR #288
On Linux, Psysonic now prefers pipewire and then pulse before falling back to the default CPAL device resolution.
This avoids cases where the default device resolves to a null sink on PipeWire-based systems. Explicit user device selection in Settings is still respected.
Tauri Devtools Behavior
By @Psychotoxical, PRs #307, #310
Devtools no longer auto-open during development and are disabled in production builds. In dev builds, they can still be opened with Ctrl+Shift+I.
Dependency Updates
By @Psychotoxical, PR #306
Updated rustls-webpki and postcss.
Subsonic HTTP User-Agent Alignment
Rust-side HTTP requests now send the same User-Agent as the main WebView requests, helping servers, rate limiters and reverse proxies identify Psysonic consistently.
Fixed Since Preview / RC
Cross-Device Resume Position
By @Psychotoxical, PR #318
Server-side play-queue position could remain at the start of a long track if the app was closed without a seek or track change. Psysonic now flushes queue position through a playback heartbeat, on pause and through shared quit paths.
Image Cache Blob URL Lifetime
By @Psychotoxical, PRs #313, #321
The shared blob URL cache could revoke an image URL while another component still used it, causing blob: load errors. Cover URLs are now reference-counted and only revoked after the last consumer unmounts.
Queue Scroll Context
By @Psychotoxical, PR #314
Clicking a track in the queue no longer snaps the queue list back to the current now-playing position when the user is browsing elsewhere in the queue.
Mini Player Saved Position
By @Psychotoxical, PR #280
Saved mini-player coordinates are now checked against the current monitor layout. If the saved monitor no longer exists, the position is discarded instead of opening the mini player off-screen.
Mini Player Volume Popover
By @Psychotoxical, PR #279
The mini-player volume popover is now portal-rendered so it can no longer be clipped by the mini-player window bounds.
Gapless Volume Handling
By @Psychotoxical, PR #277
Volume changes prepared for the next gapless track are now deferred until the actual transition, preventing them from affecting the still-playing track.
Search Context Menu and Live Search Behavior
By @Psychotoxical, PRs #298, #302
Live-search clicks now enqueue and play correctly, right-clicking repositions the existing context menu instead of opening a second one, and artist/album rows in search results now support the expected context menu behavior.
Server Switch Playback and Home Refresh
By @Psychotoxical, PRs #262, #291
Switching servers no longer tears down playback when the same track is still cached locally. The Home page also refreshes correctly after changing the active server.
Queue Panel Persistence and LUFS Cleanup
By @Psychotoxical, PR #336
The queue panel's open/closed state is now persisted across restarts. A dead loudness-store binding left over from the LUFS branch was removed.
Toolbar Icons
By @Psychotoxical, PR #284, closes #274
The Gapless and Infinite Queue toolbar icons now match their actions correctly.
Pointer Gesture Performance Regression
By @cucadmuh and @Psychotoxical, PRs #281, #282, #283
A short-lived performance spike caused by overlapping pointer gestures was fixed after an initial patch, revert and clean re-landing.
pingWithCredentials Diagnostics
By @Psychotoxical, PR #312
Credential ping failures are now logged instead of failing silently, making server/auth issues easier to diagnose from debug logs.
Fullscreen WebKitGTK Halo
By @Psychotoxical, PR #239
The fullscreen mesh-blob background no longer shows a faint halo ring on WebKitGTK.
Custom Titlebar Glyphs
By @Psychotoxical, PR #243
The macOS-style traffic-light glyphs in the custom titlebar are now hidden at rest and only appear on hover.
Discord Rich Presence Diagnostics
By @Psychotoxical, PR #330
Debug-only logging was added for the Discord Rich Presence IPC path to make connection issues easier to inspect.
Streaming Seek UI Freeze
By @cucadmuh, PR #236, closes #218
Seeking on streaming tracks no longer blocks the render thread or causes the progress indicator to snap back during the pending seek.
Windows WebView2 Hidden-Window Activity
By @peri4ko, PR #273, follow-up by @Psychotoxical, PR #276
Hidden Windows WebView2 windows now pause more UI work while hidden, including CSS animations and selected periodic tasks.
Linux Wayland Drag Ghost
Wayland drag operations no longer leave GTK drag proxies or PsyDnD ghost elements behind after drag end or cancel.
Queue Panel Resize Handle
The queue panel resize handle is no longer blocked by the main page scroll hit-test area at certain viewport widths.
Album Queueing and Smart Playlist Targets
Queueing a full album after the current track now behaves reliably. Smart playlists are also filtered out of manual βAdd to playlistβ target lists.
Analysis Cache Logging
Waveform path logging in the analysis cache now reports the correct LUFS pipeline state.
UI Overlay and Scroll Fixes
Overlay-scrollbar state reporting, column-resizer hit testing and Linux mini-player mouse-wheel scrolling were improved.
Contributors
- @cucadmuh β Loudness Normalization headline (#315), LUFS stabilisation (#326), Lucky Mix (#278), Queue undo/redo (#331), Sleep Timer ring UI (#272), Library deep links (#261), Magic-string invites (#258), CLI logs subcommand (#337), runtime log levels + debug log export (#241), smart playlists workflow (#289), several streaming + UI fixes.
- @Psychotoxical β Orbit (#304), Now-Playing dashboard (#266 / #267), Tracks Hub (#300), Genres tag-cloud (#311), Settings refactor (#259), perf suite (#245β#251), and most of the cross-device + admin-API hardening work.
- @peri4ko β Windows WebView2 idle hooks (#273).
- @kilyabin β Mobile UI overhaul (#238).