Two independent user-facing fixes rolled together. ── Lyrics: YouLyPlus provider (issue #172) ── Adds word-by-word synced (karaoke) lyrics as an alternative lyrics mode. Backed by the public lyricsplus aggregator (Apple Music / Spotify / Musixmatch / QQ Music) — no API keys on our side, subscription costs are borne by the backend operator. Five mirrors are tried on network failure. Settings → Lyrics now exposes a mode radio (Standard vs YouLyPlus) plus a static-only toggle. YouLyPlus misses silently fall back to the existing server + LRCLIB + Netease pipeline so obscure tracks still resolve. The drag-to-reorder source list is hidden in YouLyPlus mode since the external aggregator manages its own source priority. Rendering: per-word spans on each line, active word highlighted with accent-tinted glow. Subscribed imperatively via usePlayerStore.subscribe so 500 ms progress ticks do not re-render the whole lyrics block. The Fullscreen Player reuses the same pattern; the 5-line rail layout is unchanged. white-space: pre on .fs-lyric-word preserves the trailing spaces the API embeds in each syllabus token (flex context would otherwise collapse them). i18n: new keys in all 8 locales (de, en, fr, nl, nb, ru, es, zh). ── macOS mic-prompt suppression ── Ships a vendored cpal 0.15.3 at patches/cpal-0.15.3/ wired via [patch.crates-io]. The only change is in src/host/coreaudio/macos/mod.rs: audio_unit_from_device now unconditionally uses IOType::DefaultOutput for output streams instead of conditionally choosing HalOutput. AUHAL (HalOutput) is classified as input-capable by macOS TCC and triggers the microphone-permission dialog at first launch / after each update even for playback-only apps. Previous attempts (removing NSMicrophoneUsageDescription, setting com.apple.security.device.audio-input false in Entitlements.plist) did not suppress the prompt because TCC fires at AudioUnit instantiation, not at plist level. The upstream fix in cpal PR #1070 / cpal 0.17 only helps when the pinned device equals the system default; always-DefaultOutput covers all cases. Tradeoff: per-device output selection is a no-op on macOS — the stream always follows the system default. Settings.tsx surfaces this via audioOutputDeviceMacNotice (hides the CustomSelect on macOS) and skips audio_list_devices + device-watcher effects there. Matches the behaviour of Apple Music / Spotify on macOS. Also removes the now-obsolete com.apple.security.device.audio-input entitlement (sandbox is disabled anyway, so it was ignored). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A modern, gorgeous, and blazing fast desktop client for Subsonic API compatible music servers (Navidrome, Gonic, etc.).
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.
Psysonic is a beautiful desktop music player built completely from the ground up for the modern era. Utilizing Tauri v2 and React, it offers a native-feeling, lightweight, and incredibly fast experience with a stunning UI inspired by the Catppuccin and Nord aesthetics.
Designed specifically for users hosting their own music via Navidrome or other Subsonic API servers, Psysonic aims to be the best way to interact with your personal library.
✨ Features
- 🎨 Wide Theme Selection: Dozens of themes across 8 groups — Open Source Classics (Catppuccin, Nord, Gruvbox, Nightfox, Dracula), Operating Systems, Games, Movies, Series, Social Media, and Psysonic originals. Glassmorphism effects, micro-animations, and a time-based Theme Scheduler for automatic day/night switching.
- ⚡ Native Performance: Built with Rust & Tauri — native audio engine (rodio), minimal RAM usage, no Electron overhead.
- 🎵 Last.fm Integration: Scrobbling, Now Playing, love/unlove, Similar Artists, and top stats — no Navidrome config needed.
- 🎤 Synchronized Lyrics: Auto-scrolling synced lyrics with click-to-seek in the sidebar and fullscreen player, powered by LRCLIB and your Navidrome server.
- 📻 Radio & Infinite Queue: Smart Radio sessions from any song or artist, built-in Internet Radio (ICY/HLS), and an Infinite Queue that silently refills when the queue runs out.
- 🎛️ Advanced Audio: 10-band graphic EQ with custom presets, AutoEQ headphone correction, Replay Gain, gapless playback, and crossfade.
- 〰️ 10 Seekbar Styles: Waveform, Bar, Thick Bar, Segmented, Line+Dot, Neon, Pulse Wave, Particle Trail, Liquid Fill, and Retro Tape.
- 🖥️ Fullscreen Player: Album art, animated synced lyrics overlay, and artist image in a dedicated fullscreen view.
- 📋 Playlists & Library: Full playlist management with drag-and-drop reorder and smart suggestions. Genre browsing, Random Mix, Advanced Search, ratings (1–5 stars), and multi-select actions.
- 💾 Device Sync: Export your library to a USB drive or portable device using a configurable filename template.
- 🖥️ CLI Control: Control playback, switch servers, manage the queue, and more directly from the command line.
- ⌨️ Customization: Configurable keybindings, UI fonts, global zoom slider, system tray, backup & restore, and in-app auto-update.
- 🌍 8 Languages: English, German, French, Dutch, Spanish, Chinese, Norwegian, Russian.
- 🖥️ Cross-Platform: Windows, macOS, and Linux (Arch AUR, .deb, .rpm).
🗺️ Roadmap
📋 Planned
- Theme contrast & legibility audit — systematic review of text/background contrast ratios across all themes
- Accessibility (a11y) — keyboard navigation, screen reader support, ARIA labels
- More languages
📥 Installation
Navigate to the Releases page and download the installer for your operating system.
🐧 Linux
Quick Install (Recommended):
curl -fsSL https://raw.githubusercontent.com/Psychotoxical/psysonic/main/scripts/install.sh | sudo bash
Manual Installation:
- Ubuntu / Debian:
.debfrom GitHub Releases - Fedora / RHEL:
.rpmfrom GitHub Releases
🍎 macOS
- macOS:
.dmg(Universal or Apple Silicon)
Warning
Gatekeeper Note: Since the app is released without an Apple Developer certificate, macOS will block it by default. To bypass this, run the following command in the Terminal after moving the app to the Applications folder:
xattr -cr /Applications/Psysonic.app
🪟 Windows
- Windows:
.exe(NSIS installer)
Warning
SmartScreen Note: Windows SmartScreen might show a warning because the installer isn't signed with an expensive developer certificate. Click on "More info" and then "Run anyway".
📦 Installation (Arch Linux / AUR)
Psysonic is available in the AUR in two versions. Choose the one that best fits your needs:
| Package | Type | Description |
|---|---|---|
| psysonic | Source | Builds from source using your system's native WebKitGTK (no bundled libs, no EGL/Mesa compatibility issues). |
| psysonic-bin | Binary | Pre-compiled version for faster installation. |
Tip
The AUR binary package is kindly provided and maintained by kilyabin.
🚀 Getting Started
- Download and install Psysonic.
- Open the app and enter your Subsonic/Navidrome server details (URL, Username, Password).
- If applicable, you can provide both an external URL and a local LAN IP. Psysonic allows you to quickly toggle between them in the Settings.
- Enjoy your music!
🛠️ Development
If you want to build Psysonic from source or contribute to the project:
Prerequisites
- Node.js (v18+)
- Rust (v1.75+)
cmake— required to compile the bundled libopus (Opus audio support). Install it before runningcargo buildornpm run tauri:build:- Linux:
sudo apt install cmake/sudo pacman -S cmake - macOS:
brew install cmake - Windows: cmake.org/download or
winget install cmake
- Linux:
- OS-specific build dependencies for Tauri (see the Tauri prerequisites guide).
Setup
# Clone the repository
git clone https://github.com/Psychotoxical/psysonic.git
cd psysonic
# Install node dependencies
npm install
# Run in development mode
npm run tauri:dev
# Build for production
npm run tauri:build
🤝 Contributing
Contributions are completely welcome! Whether it is translating the app into a new language, fixing a bug, or proposing a new feature.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
Distributed under the GNU General Public License v3.0. See LICENSE for more information.
This means: you are free to use, study, and modify Psysonic. If you distribute a modified version, you must release it under the same GPL v3 license and keep the original copyright notice intact. You may not incorporate this code into proprietary software.
🔒 Privacy
Psysonic contains no telemetry or analytics. All third-party integrations (Last.fm, LRCLIB, Discord) are opt-in. See PRIVACY.md for full details.
