Frank Stellmacher a14dba8167 feat(audio): rust track preview engine + inline play/preview buttons (#392)
* feat(audio): rust preview engine with secondary sink

Adds a parallel rodio Sink on the existing OutputStream for 30s
mid-track previews. Two new Tauri commands (audio_preview_play,
audio_preview_stop) plus three events (audio:preview-start /
-progress / -end). The main sink is paused with Sink::pause() and
auto-resumed on preview end iff it was playing beforehand.


* feat(playlists): migrate suggestion preview to rust audio engine

Replaces the HTML5 <audio> path with the new rust preview engine.
previewStore mirrors the engine's start/progress/end events so any
tracklist row can render preview UI from a single source of truth.

Spacebar redirects to stopPreview while a preview plays, hardware
mediakeys are silently dropped (Q5), and tray clicks cancel the
preview before forwarding the original action.


* feat(albums): inline play + preview buttons in tracklist rows

Track number stays static on hover instead of swapping to a play
icon — the dedicated Play and Preview buttons in the title cell
take over click-to-play and click-to-preview. Active+playing rows
keep the eq-bars (also on hover), active+paused rows fall back to
the static accent-coloured number.

Pilot for the wider rollout to other tracklists.

* feat(tracklists): roll out inline play + preview buttons

Mirrors the AlbumTrackList pilot across the remaining track-row
based lists: PlaylistDetail main tracks, Favorites, ArtistDetail
top tracks, RandomMix (both genre-mix and filtered-songs lists).

Track number stays static, the dedicated Play + Preview buttons
in the title cell take over click-to-play and click-to-preview.

* feat(settings): track preview toggle + configurable position and duration

Adds an opt-out switch and two sliders to Settings → Audio:
start position (0-90 % of track length, default 33 %) and preview
duration (5-60 s, default 30 s). The progress-ring animation
follows the duration via a CSS variable so the visual matches the
engine's auto-stop. Disabling the feature hides every inline
preview button via a single root-level data attribute, no per-row
conditional rendering required.

i18n keys added in all 8 locales.

* fix(audio): cancel preview when main playback (re)starts

audio_play, audio_play_radio, audio_resume and audio_stop did not
know about the parallel preview sink, so clicking Play on a track
that was currently being previewed left the preview running on top
of the freshly started main playback. New helper clears the resume
flag, bumps the preview generation, drops the sink and emits an
'interrupted' end event before any of those commands touches the
main sink.


* feat(settings): per-location track preview toggles

Splits the single trackPreviewsEnabled toggle into a master + 6 per-location
sub-toggles (suggestions, albums, playlists, favorites, artist, randomMix).
Master remains the kill switch; sub-toggles are only honoured when master
is on. Each tracklist container is marked with `data-preview-loc="<id>"` and
hidden via scoped CSS when the matching root attribute is "off".
startPreview now takes a location argument so the store can guard logic too.
i18n added in all 8 locales.


* fix(contextmenu): use ChevronsRight for Play Next to distinguish from preview
2026-05-01 09:11:28 +02:00
2026-05-01 08:56:13 +02:00
2026-04-29 12:54:07 +02:00

Psysonic

Psysonic Logo

The Ultimate Desktop Client for Self-Hosted Music Libraries

Fast. Beautiful. Native. Feature-packed. Built primarily for Navidrome. Also compatible with Gonic, Airsonic, LMS and other Subsonic-compatible servers with partial feature support.


Latest Release GitHub Stars License GPLv3 Tauri v2 Discord Community Telegram Community AUR psysonic AUR psysonic-bin Cachix



No telemetry • Native performance • Massive feature set • Community driven


Psysonic Screenshot


Warning

Psysonic is under heavy active development. Bugs and rough edges are to be expected. We reserve the right to change, remove, or rework existing features at any time without prior notice.

Server Compatibility

Psysonic is optimized first and foremost for Navidrome.

Many advanced functions integrate directly with Navidrome APIs for the best possible experience. Other Subsonic-compatible servers generally work well, but some features may be limited depending on server capabilities.

Why Psysonic?

Most Subsonic clients feel like web wrappers.

Psysonic does not.

It is a true desktop experience built with Rust, Tauri v2, and React for users who care about speed, aesthetics, customization, and serious music library management.

If you host your own music, this is what the premium experience should feel like.


Core Features

Playback Engine

  • Gapless playback
  • Crossfade
  • ReplayGain support
  • Smart Loudness Normalization
  • Infinite Queue
  • Smart Radio sessions
  • High responsiveness with low memory usage

Audio Tools

  • 10-band Equalizer
  • Presets
  • AutoEQ headphone correction
  • Per-device optimization

Library Power

  • Lightning-fast search
  • Albums / Artists / Tracks / Genres
  • Ratings system
  • Multi-select bulk actions
  • Drag & drop playlist management
  • Huge library friendly

Lyrics & Discovery

  • Synced lyrics with seek support
  • Auto-scroll sidebar lyrics
  • Fullscreen lyric mode
  • Last.fm scrobbling
  • Similar artists / love tracks / stats

Personalization

  • Huge theme collection
  • Catppuccin / Nord inspired styles
  • Glassmorphism effects
  • Font customization
  • Zoom controls
  • Keybind remapping
  • Theme Scheduler (day/night auto switch)

Power User Extras

  • CLI controls
  • USB / portable sync
  • Backup & restore settings
  • In-app auto updater
  • LAN / remote auto switching

Orbit (Upcoming)

Listen Together. In Sync. Soon.

Currently in final development and testing. Orbit will introduce synchronized shared listening sessions directly inside Psysonic.

  • Host-controlled playback
  • Join via link
  • Shared listening sessions
  • Guest song suggestions
  • Real-time queue interaction

Rolling out in an upcoming release. Community feedback will help shape the final experience.


Platforms

OS Support
Windows Native Installer (certificate pending)
macOS Signed DMG
Linux AppImage / DEB / RPM / AUR (psysonic, psysonic-bin) / NixOS

Supports 8 languages and growing.


Install

Linux

curl -fsSL https://raw.githubusercontent.com/Psychotoxical/psysonic/main/scripts/install.sh | sudo bash

Windows

Download the latest installer from Releases.

SmartScreen warnings may appear until the code-signing certificate is active.

macOS

Download the signed DMG from Releases.


Development

git clone https://github.com/Psychotoxical/psysonic.git
cd psysonic
npm install
npm run tauri:dev

Build release:

npm run tauri:build

Privacy First

  • No telemetry
  • No spyware nonsense
  • No analytics harvesting
  • Your library stays yours

Community

Join Discord, report bugs, suggest features, share themes, shape the future.


License

GNU GPL v3.0


Stop using boring music clients.

Use Psysonic.

Languages
TypeScript 69.9%
Rust 24.9%
CSS 4.3%
JavaScript 0.5%
Shell 0.3%