π‘οΈ A note on safety investments: Making sure Psysonic is trusted on every OS takes real money out of my pocket β an Apple Developer Account (now active, which is why macOS builds are signed + notarized for everyone starting with this release) and a Windows code-signing certificate (ordered, currently in validation). If you'd like to help cover those costs, you can chip in at ko-fi.com/psychotoxic β completely voluntary, no pressure at all. Every bit helps keep Psysonic free and safe across Windows, macOS and Linux.
β οΈ Windows users: This is one of the last releases with an unsigned Windows installer. Until the certificate clears validation, any SmartScreen or antivirus warning on the installer is a false positive β the binary itself is safe.
π macOS users: Starting with v1.40.0, Psysonic is signed + notarized and can update itself silently. No more DMG downloading and dragging to Applications β the updater fetches the signed
.appbundle, verifies the signature, replaces the app in place, and relaunches. Just click "Install now" when the update notification appears.π¦ Version jump 1.34.x β 1.40.0: The 1.34.x patch series was bumped a lot as each small feature landed. 1.40.0 consolidates the last few weeks of work β macOS signing + auto-updater, the Device-Sync overhaul, theme work and contrast audits β into a single coherent release. The next major bump (2.0.0) is planned once Windows code-signing + Windows auto-updater are active as well.
Added
-
macOS β signed and notarized builds (by @Psychotoxical): macOS releases are now signed with a Developer ID Application certificate and notarized by Apple. Gatekeeper no longer shows the "app from unidentified developer" dialog; the DMG opens and runs with a single click on both Apple Silicon and Intel Macs. Signing + notarization happens in CI on every release.
-
macOS β in-app auto-update (by @Psychotoxical): The Tauri Updater plugin is now active on macOS. When a new release is available, clicking Install now in the notification modal downloads the signed
.app.tar.gzbundle, verifies its minisign signature against the bundled public key, replaces/Applications/Psysonic.appin place, and relaunches the app β all in one click, no Gatekeeper re-approval, no manual DMG handling. The modal shows trust badges ("Notarized by Apple" + "Signature verified"), a 3-second restart countdown after install with a manual "Restart now" option, and hides redundant buttons during each download/install phase. Windows and Linux continue to use the existing "download installer / point to folder" flow until their signing pipelines are wired up. -
WebKitGTK wheel scroll mode (Linux) (contributed by @cucadmuh, PR #207): The Linux build now defaults to WebKitGTK's native smooth (kinetic) wheel scrolling and exposes a toggle in Settings β General to fall back to classic linear line-by-line scroll. Existing installs are migrated to smooth scrolling once, after which the toggle is fully user-controlled.
Changed
-
Device Sync β fixed naming scheme + playlist folders (by @Psychotoxical): The user-configurable filename template is gone. Every sync now writes files under a single, non-negotiable scheme:
- Album / artist sources:
{AlbumArtist}/{Album}/{TrackNum:02d} - {Title}.{ext} - Playlist sources:
Playlists/{PlaylistName}/{Index:02d} - {Artist} - {Title}.{ext}plus a self-contained.m3u8that references sibling filenames.
Why: different OSes normalised separators and special characters differently, so the same library synced from macOS and then plugged into a Windows machine appeared "different" and re-downloaded every album. The fixed scheme ends that forever.
Playlist folders instead of the album tree: playlists used to be scattered across the album structure as
.m3u8references. For playlists with 40 artists that meant 40 new folders on the stick. Now every playlist is one self-contained folder; the.m3u8sits inside it and references siblings, so you can copy the whole folder anywhere.Migration for existing sticks: a "Reorganize existing filesβ¦" button on the Device Sync page reads the legacy template from the v1 manifest, computes per-track rename pairs, detects collisions, and executes atomic
fs::renames. Empty directories left behind are cleaned up automatically. Playlist tracks synced under the old scheme are left for the next sync to re-download into the new playlist folder, rather than being force-moved.Album-Artist fallback: libraries without an albumArtist tag fall back to the track artist β "Unknown Artist" is only ever a last-resort placeholder.
- Album / artist sources:
Fixed
-
WCAG contrast audit β Middle-Earth theme (by @Psychotoxical): Raised
--warning,--border,--text-muted,--positive, and multiple component-level overrides (connection indicators, nav section labels, lyrics status, queue duration, player time, glass-panel muted text) to AA thresholds on all background variants. The warm bronze / aged-parchment palette is preserved β no cool tones introduced. -
WCAG contrast audit β Nucleo theme (by @Psychotoxical): Darkened
--warning,--border,--text-muted, and--positivetokens to reach AA on the warm cream palette; added a component-level override for the column resize grip (default--ctp-surface1was 1.08:1 on the card background, effectively invisible) using the new--bordertoken at 2px width. Brass-and-parchment aesthetic preserved.
Contributors
- PR #205 β Apple Music-style scrolling lyrics with spring-physics scroll, by @kilyabin.
- PR #206 β Golos Text + Unbounded fonts with Cyrillic support, by @kilyabin.
- PR #207 β WebKitGTK wheel scroll mode toggle, by @cucadmuh.
All three now credited in Settings β About.