Psysonic v1.51.0-rc.1
Pre-releaseAdded
True simultaneous multi-server support — use every server as one music library
- Select music folders from several configured servers in the same priority-ordered library scope. Psysonic browses them simultaneously without making you switch the active server before every search, album, artist or playback action.
- Home, Albums, Artists, Composers, Genres, Favourites, Playlists, Folder Browser, Search, Most Played, Statistics, album details and artist details aggregate the selected servers into one catalogue. Shared music is de-duplicated by scope priority instead of appearing once per server.
- De-duplication no longer discards physical ownership: each logical track, album and artist retains every concrete server source. Psysonic can therefore show one clean catalogue while still knowing exactly which server must handle playback, artwork, metadata and mutations.
Mixed-server playback — one queue can play tracks from different servers
- A single queue can contain tracks owned by different servers. Each item resolves its stream, cover, lyrics, ReplayGain data and analysis against its own server instead of whichever server is currently active.
- Server play queues are pulled, updated and reconciled per owner, so mixed queues survive restart without one server replacing another server's tracks. Gapless, crossfade, infinite queue, shuffle, history and queue restore keep the same ownership.
- When one copy cannot play, a new source chooser can offer equivalent copies from the selected servers rather than failing the whole action. Album, artist and track source controls also let you choose a specific physical copy when that distinction matters.
Server-aware destinations and actions
- Playlist creation, smart-playlist editing, radio actions and other destination-sensitive flows select the target server explicitly instead of silently using the active server.
- Context menus, ratings, favourites, sharing, offline pins, device sync and Orbit carry the item's owner through the complete action. Creating an Orbit session from a multi-server scope now asks which server should host it, temporarily keeps only that server in the library scope and shared queue, then restores the previous scope when the session ends.
- Sharing a mixed-server queue opens a compact server picker directly below the share button; choosing a server copies its tracks immediately, while single-server queues still copy without an extra prompt. Unavailable servers are marked with an explanatory warning.
Debug logging — selectable multi-server diagnostics
- Settings → System → Logging and PsyLab → Logs offer basic and verbose debug-depth levels while Debug logging is enabled. Verbose mode adds structured multi-server scope, reachability, music-folder and New Releases diagnostics, with credentials and sensitive URL data redacted.
Streaming quality — per-address Navidrome bitrate and format controls
By @Manwe-777, PR #1334
- Saved Navidrome servers can request no bitrate cap or a 320…64 kbps ceiling, with Auto / MP3 / Opus / AAC as the target format. Settings are stored per address, so LAN and public endpoints can use different quality profiles and playback follows the connected endpoint.
- Offline pins, favourites sync and hot-cache prefetch use the original-stream path; confirmed Navidrome profiles request
format=raw, while other servers keep the existing uncapped request. Transcoded live bytes are not promoted as original files, and completed-stream reuse stays isolated by endpoint, account, format and bitrate cap. - Waveform, loudness and enrichment may analyse the played stream, but canonical results stay anchored to the original file's validated raw fingerprint. Different bitrate representations share one track revision, and a failed original probe cannot overwrite library identity.
- Because analysis stays anchored to the original, the first play of a track that arrives transcoded also fetches that original once in the background. Later plays skip it, but on a slow link the first play of each new track costs the capped stream plus the original — the cap saves bandwidth from the second play onwards.
- After updating, Psysonic checks every offline pin, synced favourite and hot-cache file once against the original's fingerprint, using a 16 KB request per file rather than a fresh download. Pinned albums can briefly show as incomplete while that runs; files that turn out to be a server transcode are replaced with the original.
Album details — disc covers in the multi-disc separator
By @Psychotoxical and @cucadmuh, PR #1336
- Multi-disc albums show each disc's cover next to "CD N" instead of a generic disc icon. Releases with distinct per-disc artwork show each disc's own cover; other albums fall back to the shared album art.
- On Navidrome, the queue, playbar mini-cover and "Who is listening?" use the same per-disc artwork, so a multi-disc release no longer keeps showing disc 1 everywhere outside the album page.
- Clearing the cover cache no longer leaves junk
mf-*directories under the album cover store after browsing All Albums.
Fullscreen player — volume slider in Minimal and Immersive modes
By @Psychotoxical, PR #1340
- The fullscreen player's volume control, previously only in Prism mode, is now also in the Minimal and Immersive styles — a mute toggle plus an always-visible level slider.
Theme store — respect a theme's minimum app version
By @Psychotoxical, PR #1344
- A store theme that needs a newer Psysonic now shows "requires a newer version" in place of the install button, and pending updates that need a newer app are held back, instead of the install failing with a generic error. The notice clears once the app itself is updated.
Themes — bundle local images and fonts
By @Psychotoxical, PR #1345
- Themes can ship their own images and fonts in an
assets/folder and reference them with a relativeurl("assets/…"), instead of embedding everything as inline data. Assets are written to disk on install and served locally — themes still never reach the network. Works for both Theme Store installs and imported.zipthemes; uninstalling a theme removes its files.
Theme store — a random theme of the moment
By @Psychotoxical, PR #1357
- The store now suggests one theme above the search box, picked from further down the catalogue and preferring themes you have not installed. The store lists themes by last change, so older ones were only ever found by paging to the end. Show another picks a different one; installing or applying the suggestion leaves it in place.
Player views — click any artist of a credit
- Artist names link to the artist page in all three fullscreen styles, the detached mini player and the mobile layout — until now only album and queue rows offered this. Clicking one in fullscreen closes the overlay so the artist page is right there.
- Joined credits such as "Primary feat. Guest" read as separate artists, including the bullet separator Navidrome uses when a track carries only plural artist tags. Names like AC/DC stay intact.
Audio visualizer — spectrum, scopes and fullscreen views
By @Manwe-777, PR #1375
- Now Playing and every fullscreen-player style can show a responsive spectrum, oscilloscope, radial scope or stereo field, with cover-derived or theme colours and an expanded window view.
- Sensitivity, response, frame rate and peak markers are configurable under Settings → Appearance → Visualizer. Internet radio is supported while its equalizer audio graph is active.
Visualizer — separate switches for Now Playing and the fullscreen player
By @Psychotoxical, PR #1378
- The visualizer can now be switched on for the fullscreen player alone, or for Now Playing alone, under Settings → Appearance → Visualizer. An existing off setting is kept as it was.
- The section's controls are grouped into two panels, and long option names such as the radial scope are no longer cut off in translated interfaces.
Performance benchmarks — measure real pages from the CLI
psysonic benchmark rundrives the running desktop app through representative core or all-page scenarios, with realistic and isolated profiles plus repeatable run counts.- JSON reports retain route readiness, React work, quiet time, long tasks and environment details, then compare each run with the previous matching report.
Changed
Library index — designed for several live servers at once
- The local SQLite library now keeps server ownership, music-folder scope and cross-server identity as separate indexed concepts. Scoped browse projections power combined catalogues without scanning or merging every server response in the UI.
- Home feeds, text search, genre counts, details, Most Played and Statistics use indexed multi-server reads when local data is ready, while retaining network fallbacks for a server that has not completed its index yet.
- Identity matching and browse projections update incrementally after each server sync. A durable invalidation journal resumes unfinished work after restart instead of forcing repeated full-catalogue rebuilds on startup.
Sync and reachability — one unavailable server no longer blocks the others
- Psysonic tracks readiness, sync progress and reachability independently for every configured server. Available servers remain browsable while another selected server is offline, still indexing or recovering from an interrupted sync.
- Full and delta sync preserve source ownership through remaps, deletions and tombstones; no-op syncs avoid unnecessary catalogue refreshes, and stale multi-server state is repaired automatically.
- Scope indicators retain the total server count when one is unavailable, while the Library picker reports selected music libraries instead of server profiles.
Library browsing — less repeated work on large catalogues
- Home, Albums, Artists, New Releases, Lossless Albums and Search reuse bounded local results instead of repeating large scoped reads while routes mount, paginate or restore their session.
- Browse pages coordinate cover traffic and background catalogue work more carefully, so the first useful content appears before non-visible enrichment and prefetch work.
Fixed
Cross-server ownership — IDs no longer collide or drift to the active server
- Album and artist navigation, covers, lyrics, ratings, favourites, playlists, radio, sharing, offline browse, device sync and context-menu actions no longer jump to the wrong server when two servers reuse the same entity ID.
- Orbit host/guest state, queue suggestions and cleanup stay bound to the session server; switching the visible library or active server cannot redirect an existing session.
- Composer, genre, favourite, playlist and folder views preserve the selected multi-server scope through filtering, sorting, selection and playback instead of collapsing back to a single server.
Startup — keep the loading splash until initial content is ready
- Cold starts no longer reveal a blank or partially committed app shell between the splash and the first route content; the handoff is atomic after the initial screen is ready.
Live indicator — preserve the pulse without high idle CPU
- The header Live icon keeps its pulsing state while listeners are present, but confines the animation to an isolated 10 FPS layer and pauses it while the window is unfocused or reduced motion is requested.
Library startup — recover interrupted large syncs without a CPU spin
- Large fresh libraries now refresh SQLite's query-planner statistics after bulk indexing. Restarting after an interrupted multi-server sync no longer enters a minutes-long single-core identity rebuild, and existing affected databases repair their stale statistics automatically.
New Releases — remove duplicate albums from the freshness overlay
- The first New Releases page now keeps the local catalogue's logical album de-duplication when fresh network results arrive, including alternate physical copies on one server and matching copies across several servers.
Artist details — show the artist name, not a featured-guest track credit
By @Psychotoxical, PR #1328
- The artist detail header no longer adopts a per-track "featuring" credit when a single track in the discography is tagged with a guest artist. It shows the artist's own name, matching the artist browse list.
Artist details — group releases by type again
By @Psychotoxical, PR #1329
- The artist page groups a discography into Albums, Singles, EPs, Live and Compilations again instead of one flat list. The release type is read from each album's tags; releases without a type tag stay in the default group.
Multi-server library scope — recover empty persisted selections
- Existing profiles that retained an empty Library server selection recover the configured active server when another server is added. Music-folder discovery and New Releases no longer collapse to an empty result in that legacy state.
- Artist browse no longer waits for a full identity rebuild on the first launch after upgrading an existing large library.
Album details — play multi-disc albums in disc order
By @Psychotoxical, PR #1332
- Playing a multi-disc album from the header no longer interleaves the discs (disc 1 track 1, disc 2 track 1, disc 1 track 2, …). Tracks queue in disc-then-track order, so disc 1 plays in full before disc 2. Tracks without a disc number are treated as disc 1, matching the track list.
Artist details — Various Artists shows every compilation
By @Psychotoxical, PR #1335
- The "Various Artists" artist page lists every compilation again, instead of only the few tracks tagged directly with the Various Artists id. Compilations link to the artist through their album-artist label, which the local index now follows across all selected servers.
- A compilation's album header links to "Various Artists" rather than to one of the individual track performers.
Now playing — show the real streamed format when the server transcodes
By @Manwe-777, PR #1338
- The quality badge (queue, now-playing hero, mobile player, immersive fullscreen) was built from the track's stored library metadata, so a server-side transcode still read the original file — e.g. "FLAC · 3149 kbps · 24-bit" while actually receiving Opus. It now shows the format the audio engine actually decoded, with the original file's format in a tooltip, and falls back to the stored metadata when no transcode is happening. When the transmitted bitrate is unknown, none is shown instead of a wrong one.
Various Artists cards — link to the compilation, not a guest performer
By @Psychotoxical, PR #1339
- Clicking "Various Artists" on a New Releases card, a browse grid or a search result opened one of the compilation's guest performers instead of the Various Artists overview. Every album card now links to the album-artist, matching the artist page and album header. The link is recovered from any track on the compilation, so it resolves even when the representative track carries no album-artist tag.
Artist details — separate guest appearances from the discography
By @Psychotoxical, PR #1341
- An artist page derived every album from that artist's own tracks, so Various Artists compilations, split releases and other artists' albums they only guest on sat in the main discography. Those now appear under Also featured on, while the artist's own releases — including their own best-of compilations — stay in the discography.
- Albums with no album-artist tag are kept with the artist that owns their tracks, so a catalogue whose files spell the artist name differently from the server's artist entry no longer empties into the featured section.
Artist credits — separate and link each artist of a joined credit
By @Psychotoxical, PR #1342
- A release credited to several artists showed one joined label ("A feat. B") in the album header and track lists, while the home rails already showed them separated. Every surface now separates them, and each artist links to their own page instead of only the first one. Albums whose server provides a structured artist list are unaffected.
- Splitting follows the server's own tagging rules, so an artist name containing a slash stays intact and a comma-joined credit is left as one entry. For reliably separated credits, tag multi-valued ARTISTS / ALBUMARTISTS rather than relying on separators.
Artist details — biography and Last.fm link are back under a multi-server scope
By @Psychotoxical, PR #1343
- The "About the artist" section and the Last.fm link vanished from artist pages as soon as more than one server was selected in the library scope. Both are shown again, with the artist information read from the server that owns the artist.
- Everything the page derives from that information now follows the same owner: the similar artists it lists open the right artist instead of an unrelated one on the active server, and the setting that decides whether the server's own suggestions are used is read for the owning server too. This also applies when browsing a single server while a different one is active.
Music network — a clearer message when a service blocks the connection
By @Psychotoxical, PR #1346
- Connecting a scrobbling service over a route it refuses — a VPN exit node, a proxy, a captive portal — failed with a generic network error and a raw decoder message attached. Psysonic now recognises a webpage arriving where data was expected and says so, pointing at the connection instead of leaving you to guess whether the app or the service is broken. Reported by zunoz on Discord.
Orbit — joining a session no longer depends on how the server address was typed
By @Psychotoxical, PR #1356, reported by Sakura on Discord
- Joining an invite could fail with "You don't have access to …" even for guests with a working account on that very server — they could browse and play music, only joining was refused. An invite carries the server address in its full form, while the check compared it against the address exactly as saved, so one entered without
http://never matched. - The same check now also recognises a server saved under its second address. Hosts who configure a local and a public address share invites pointing at the public one, which previously matched no account at all.
New Releases — the long pause before more albums appear
By @Psychotoxical, PR #1359
- On large libraries the page showed its first albums quickly and then sat for roughly three quarters of a minute before loading any more. Leaving the page during that pause could lock the window up entirely. Both are gone; scrolling now loads continuously.
- Root cause: a database lookup the page performs once per album was scanning the whole track table instead of using its index, which on a library of this size cost close to a second every time.
Artists — the page that never finished loading
By @Psychotoxical, PR #1360
- On large libraries the Artists page could show nothing but a spinner, indefinitely. It now loads in well under a second.
- Root cause: the query that collects the artists in the selected music folders was combining two steps in the wrong order, redoing the expensive one once per artist instead of once in total. On a library of this size that meant the query never finished at all.
Hot Cache — prefetch mixed-server queues from the right server
- Hot Cache now downloads each upcoming track from its owning server instead of sending the whole prefetch window to whichever server is currently playing. Replacing the queue can no longer leave a delayed job caching the wrong copy when two servers reuse the same track ID.
- When the cache is full, the current and next tracks stay protected per server, so an identically numbered track on another server cannot evict the queued copy and trigger a download loop.
AppImage — installing through an AppImage manager
By @Psychotoxical, PR #1364, reported by Arutosio
- Handing the AppImage to an AppImage manager or a desktop-integration tool failed with a missing symlink target. The bundle's icon link pointed at a directory that only exists on the machine that built it; it is now relative and resolves wherever the AppImage is unpacked.
- Starting the AppImage directly was never affected. The 1.50.0 download has also been replaced with a repacked build carrying the corrected link, so it does not have to wait for this release.
Library — albums deleted on the server no longer linger in your library
By @Psychotoxical and @cucadmuh, PR #1365
- Albums and tracks removed on the server could stay in the library indefinitely, and a full resync did not reliably clear them. Psysonic now verifies a server's albums against the index on its background schedule instead of only reacting once enough stale rows have piled up, so a deletion is noticed on its own merits. Albums the index never received arrive the same way. On Navidrome, files still listed under Missing Files remain visible through the server API and must be cleared there before Psysonic can retire them.
- A full resync only sweeps unconfirmed rows when a server-visible track count proves the ingest was complete; otherwise it keeps them and records why the sweep was skipped. Sparse bulk responses also keep richer metadata and the incremental-sync resume point without preventing the server from explicitly clearing those fields later.
- Copies of the same album stop splitting into separate cards when one carries a correctly credited guest track. Unrelated compilations tagged with collection labels such as “Various” or “Soundtrack” stay separate instead of collapsing by title.
Servers — removing a profile clears its local library state
By @Psychotoxical and @cucadmuh, PR #1365
- Removing the last profile for a server now stops its URL-keyed background sync session and, when requested, purges the matching local library rows even if another cleanup step fails. If another profile shares that server URL, Psysonic keeps the shared index and rebinds it to the remaining profile instead.
Offline library — freshly prepared tracks keep the correct sync time
By @Psychotoxical and @cucadmuh, PR #1365
- Opening or pinning an album no longer stamps its tracks with a seconds-based timestamp that makes them look as if they were indexed in 1970 and moves them to the front of stale-track verification.
Album grids — scrolling no longer stalls partway down the list
By @Psychotoxical, PR #1367
- New Releases and Lossless Albums stopped fetching further albums after a few pages, and only picked up again once you scrolled up and back down. Both now keep loading while you are at the bottom of the list, and stop once it is exhausted.
Playback — the displayed track no longer runs ahead of the audio
By @Psychotoxical, PR #1369, reported by @moldavia
- Resuming after a long pause could leave Now Playing several tracks ahead of what you were hearing, with a flat waveform to match, until you clicked back through the queue. Pausing long enough releases the audio stream, and restarting it was mistaken for a track change; that no longer moves the queue.
- Long-running stream seek recovery no longer mistakes an unresolved position jump for a gapless track change.
Buttons — outlines are visible without hovering first
By @Psychotoxical, PR #1379
- Secondary buttons such as Back on artist and album pages, Cancel in the server form and the connect actions under Music Network showed no outline until the pointer was over them. They now look clickable at rest. Reported by zunoz.
- The row for a custom HTTP header no longer pushes its remove button onto a second line where it filled a whole column and looked like another input field.
- On a genre page, the add-to-queue button now matches the height of Play and carries a proper label for screen readers.
- Internet radio shows its sort picker next to the browse and add buttons instead of on a separate line below them.
Linux — recognise MangoWM as a tiling window manager
By @Leinad745, PR #1380
- Psysonic now detects MangoWM as a tiling environment and leaves window decoration to the compositor instead of adding its custom title bar.
Composers — names outside A–Z can be found again
By @Psychotoxical, PR #1381
- The letter bar on Composers ended at Z, so a composer whose name begins with a quote, a bracket or a non-Latin character could not be filtered to at all. The bar now carries the same Other entry the Artists page already had. Reported by zunoz.
- In the list view that group is labelled instead of showing the raw key, and it is placed after Z rather than between O and P.
Genres — accurate scoped counts without the long detail-page wait
- Genre Detail no longer presents the first 60 loaded albums as the total. Multi-server pages show a cached value immediately when available, then settle on the exact de-duplicated count.
- All Albums genre counters follow every selected server and music folder instead of the active server or a temporary server-wide fallback. Genre album pages now drive from the indexed genre rows, cutting the measured first-page database read from about 1.1 seconds to about 0.37 seconds on a large three-server library.
Back navigation — return to the page you just left
- Back from an album opened on an artist page now returns to that artist, and Back from a related album returns to the previous album. A second Back continues to the original Albums or Artists page with its browse state intact.
Linux playback — keep audio smooth under heavy CPU load
- Sustained CPU-heavy work no longer starves Psysonic's audio threads and causes playback stutter or dropouts. The player now asks Linux's realtime service to prioritise both its output callback and PipeWire processing, while keeping the previous scheduling when that service is unavailable.
Gapless playback — the audible gap between MP3 tracks
By @Psychotoxical, PR #1388
- Playing a continuous album in MP3 no longer inserts a short silence at every track change. Two adjacent tracks now join exactly where they were split, for files whose encoder recorded the gap in the file header — which is what the common MP3 encoders write.
- Root cause: MP3 encoders add a few milliseconds of silence to the beginning and end of every file. Psysonic played that silence instead of skipping it, which put roughly 50 ms of it into each track boundary. Unchanged: internet radio, playback from servers that cannot serve range requests, and files that carry only an iTunes-style tag instead of that header when they are played from disk or streamed.
Internet radio — keep non-Latin track titles readable
By @RdrSeraphim, PR #1389
- ICY track metadata sent as UTF-8 now displays Japanese, Korean and wide-width Latin text correctly instead of mojibake. Legacy Latin-1 titles remain readable in both the player and system now-playing metadata.
Linux — internet radio no longer blanks the window
By @Psychotoxical, PR #1390
- Starting an internet radio station no longer clears the whole window on systems installed from the AUR,
.debor.rpmpackages. Those packages now ask for the GStreamer plugins that radio playback needs. - Root cause: radio is the one path that plays through the WebView rather than the audio engine, so it relies on GStreamer plugins the distributions treat as optional and do not install on their own. AppImage builds were never affected because they carry the plugins with them.
Lyrics — the YouLyPlus source has been removed
By @Psychotoxical, PR #1391
- The service behind this option no longer has a single working server, and its operator states publicly that a replacement cannot be funded, so the option has been removed rather than left pointing at dead addresses. If it was the only lyrics source you had switched on, LRCLIB is enabled for you automatically.
- Word-by-word highlighting is unaffected: it also comes from lyrics embedded in your files and from Navidrome 0.63+.
Startup window — controls and close actions stay reliable
- On Linux with the custom title bar enabled, the loading splash keeps native window controls until Psysonic's own controls are ready, so startup no longer leaves a borderless window with no mouse-accessible close, minimise or maximise buttons.
- Close, tray Exit, mini-player restore and second-instance focus actions are queued and ordered during startup or a webview reload instead of being lost or overridden by a stale window operation.
AIFF playback — streamed and cached files play reliably
- AIFF, AIF and AIFC tracks now play from servers, local files and playback caches, including files whose metadata appears after their audio data.
- Servers without byte-range support now fall back to a complete download instead of leaving the track unable to start.
Internet radio — keep homepage URLs when editing stations
By @cucadmuh, PR #1397, reported by @vt100-music
- Homepage URLs supplied by Navidrome no longer disappear from station cards or the edit form after saving or reloading the station.
Linux playback — keep speed, pitch and queue advancement correct
- ALSA and PipeWire devices that select a different sample rate no longer play tracks at half or double speed with shifted pitch. Native Hi-Res remains available, and the selected output configuration verifies the rate the device actually accepted.
- Hi-Res and gapless source replacement no longer loses the track-completion signal, so playback advances to the next queued track reliably.
Servers — prevent duplicate account profiles
By @cucadmuh, PR #1399, reported by zunoz on Discord
- Settings no longer saves a second profile with the same server address and username. The same server can still be saved for a different account.
Tracks — reroll the Highly Rated selection
By @cucadmuh, PR #1400, reported by zunoz on Discord
- Highly Rated now reshuffles tracks within each rating tier instead of requesting and redisplaying the same fixed order. Higher ratings stay first, and rerolls reuse the short-lived list cache so the new selection appears without another server roundtrip.
Genres — line up the page heading with its album count
By @Psychotoxical, PR #1402, reported by zunoz
- The genre name and the album count beside it now sit on one line instead of a couple of pixels apart, on the Genres overview as well as on a genre's own page. The alignment holds when the heading shrinks as you scroll.
- The small icon between the two gives way to a dash, and a long genre name now shortens with its full text on hover instead of making the row taller.
App icon — a fresh look
By @Psychotoxical, PR #1403, reported by JU3RG and rtfact
- Psysonic has a new app icon. It keeps the same rounded outline as before, so nothing shifts in the taskbar, dock or app launcher.
Queue — start the first track added after clearing
- Adding a track to a cleared queue now mounts and starts it immediately instead of leaving it hidden as the current queue item without playing.
Device sync — migration stays inside the folder you picked
By @Psychotoxical, PR #1411, reported by @youremailaddress
- Migrating a device to the current folder layout now refuses any rename that would reach outside the folder you selected, and reports it per file instead of carrying it out. The paths came from a settings file stored on the device itself, so a device prepared elsewhere could name locations the migration was never pointed at.
- A drive that disappears during a migration is reported as exactly that, rather than as a rejected path.
Surround tracks — hear all of the music on stereo speakers
By @Psychotoxical, PR #1413, reported by @tossmilestone
- A 5.1 track played on stereo speakers or headphones now mixes every channel into the two you hear. Previously only the front left and right were played, so anything the recording placed in the centre, the bass channel or the rear — often a large part of the arrangement — was silently dropped.
- Surround output is unaffected: on a device that can take all the channels, the track still plays with them.