github Psychotoxical/psysonic app-v1.44.0-rc.2
Psysonic v1.44.0-rc.2

pre-release6 hours ago

πŸ§ͺ Release Candidate: This is 1.44.0-rc.2 β€” a release candidate for 1.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

By @cucadmuh, PRs #278, #332

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

By @cucadmuh, PR #261

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

By @cucadmuh, PR #258

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

By @cucadmuh, PR #272

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

By @cucadmuh, PR #331

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

By @cucadmuh, PR #269

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

By @cucadmuh, PR #323

Double-clicking any field in the Song Info modal copies that value to the clipboard.

Mobile UI Overhaul

By @kilyabin, PR #238

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

By @cucadmuh, PR #241

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

By @cucadmuh, PR #337

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 CachedImage to reduce redundant image loading.
  • Device Sync parallelizes getAlbum calls 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

By @cucadmuh, PR #235

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

By @cucadmuh, PR #268

Wayland drag operations no longer leave GTK drag proxies or PsyDnD ghost elements behind after drag end or cancel.

Queue Panel Resize Handle

By @cucadmuh, PR #324

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

By @cucadmuh, PR #322

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

By @cucadmuh, PR #320

Waveform path logging in the analysis cache now reports the correct LUFS pipeline state.

UI Overlay and Scroll Fixes

By @cucadmuh, PR #255

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).

Don't miss a new psysonic release

NewReleases is sending notifications on new releases.