A cross-platform floating lyrics overlay for Spotify, built with Tauri 2.x (Rust + TypeScript).
| Platform | Status | Method |
|---|---|---|
| Windows | Full | SMTC event subscription (push-based) |
| macOS | Full | AppleScript polling (500ms) |
| Linux | Planned | MPRIS / D-Bus |
- Real-time lyrics synchronization with Spotify playback
- Always-on-top floating window with transparent background
- Works with Spotify Free and Premium
- Lock mode: click-through window for non-intrusive overlay
- Customizable lyrics appearance (color, size, alignment)
- LRC cache — remembers lyrics for previously played songs
- Playback controls (play/pause, next, previous)
- Optional Spotify OAuth login for enhanced features
┌──────────────────────┐
│ TypeScript Frontend │ ← smtc-update event → lyrics display
├──────────────────────┤
│ Tauri Commands │ get_spotify_track / spotify_control / fetch_proxy
├──────────────────────┤
│ Platform Workers │
│ Windows: SMTC │
│ macOS: AppleScript│
└──────────────────────┘
{
title: string,
artist: string,
status: number, // 4 = Playing, 5 = Paused
position: number, // ms
duration: number, // ms
last_updated: number // unix timestamp ms
}npm install
npm run tauri devnpm run tauri build-
Ensure Spotify's "Show desktop overlay when using media keys" is enabled in settings.
-
This app listens via Windows System Media Transport Controls (SMTC). Supported versions:
- Desktop (from spotify.com):
Spotify.exe - Microsoft Store:
SpotifyAB.SpotifyMusic_...
If your Spotify was installed via Scoop, Chocolatey, or portable mode, it may have a different AUMID. Run the diagnostic tool:
cd src-tauri cargo run --bin diagnose_smtc - Desktop (from spotify.com):
-
If the diagnostic shows error
0x80010002, the system service may be busy — retry or restart your computer.
- Ensure Spotify.app is running. The app polls Spotify via AppleScript every 500ms.
- Grant accessibility permissions if prompted — AppleScript requires it to query Spotify.
- Lock mode shows a translucent unlock button at the top of the window (or use the tray menu "取消锁定").
MIT