About this project

Tide is a Linux desktop music client built with Python, PySide6 (Qt6) and mpv, with no Electron. It aggregates multiple music sources into a single library and queue: YouTube Music, Spotify, Subsonic/Navidrome, local files, SoundCloud, Bandcamp and Mixcloud. A federated search mode queries all enabled sources at once and labels each result by origin; tracks from different services can sit in the same queue and play through the appropriate backend. Since version 2.0 the app ships two distinct interface personalities sharing one library and queue. "Brutalist" is a monospace, hard-edged, non-animated player with bracket buttons and block meters. "Modern" uses soft corners, icons, springy sliders with magnetic detents, and a backdrop that takes color from album art and reacts to bass. Each personality keeps its own theme, layout, motion, corners, navigation icons, glyphs, backdrops and customizations independently. A chooser appears on fresh installs or after upgrading to 2.0; existing 1.x installs keep their look. Sixteen bundled themes are included (five brutalist, eleven modern), each defining its own fonts, text casing, corner radius, widget variants, list markers and default visualizer. Custom themes can be added via theme.toml and theme.qss files in ~/.config/tide/themes/, or created through an in-app theme editor that previews changes live and saves them as real themes. Additional power tools include a strip builder for the player bar, a keymap editor for rebinding shortcuts, and a glyph editor for transport symbols. Source support varies: YouTube Music offers search plus playlists, songs, albums, artists, subscriptions, home, charts, moods and account history, requiring cookie import; Spotify supports search and library but playback is currently silent due to a platform-security change affecting librespot decryption; Subsonic/Navidrome needs a server URL and login; local files need a music directory; SoundCloud, Bandcamp and Mixcloud support search only. Day-to-day features include queue with radio autoplay, synced lyrics with karaoke mode (YouTube timings first, LRClib fallback), history view, sleep timer, like button, resume-on-launch, stream prefetch, single-instance behavior, a mini player, a fullscreen mode, and a song page with view/like counts, credits, related songs and threaded YouTube comments with clickable timestamps. Optional play reporting to YouTube Music is off by default and asked about explicitly in setup. An FX rack (Ctrl+8) provides a 10-band EQ, reverb presets, bass/treble shelves, loudness normalization, stereo width, compressor, and effects such as chorus, flanger, phaser, tremolo, exciter, headphone crossfeed and lofi. Playback speed ranges 0.5x to 2x with pitch shift by default and a preserve-pitch toggle. Ten visualizer renderers use PipeWire capture. Adaptive accent and a bass-reactive backdrop are modern defaults; the bass pulse learns each track by recording detector output and replaying it against the player clock on subsequent plays. System integration includes MPRIS2 for media keys and desktop panels, a tray with hide-on-close, optional Discord rich presence with live-lyric mode, optional ListenBrainz scrobbling, and a daily update check against GitHub releases. Installation is via AUR (yay -S tide) on Arch, a Flatpak submission in review, or manual build with makepkg. The Flatpak runs on the KDE 6.11 runtime with its own libmpv and requires overrides for browser cookie access and extra music folders. Sign-in relies on browser cookie import (Chromium family or Firefox, including Flatpak/Snap installs) since Google blocks OAuth for YouTube Music endpoints; a one-click refresh re-imports when sessions expire. Config and cache roots are 0700, credential files 0600, and writes are atomic. Licensed GPL-3.0-or-later.