A premium, always-on-top desktop overlay that displays real-time synchronized lyrics for your currently playing Spotify track. Works with both Spotify Premium API and Spicetify for maximum flexibility.
- 🎤 Real-Time Synced Lyrics — Lyrics scroll and highlight in sync with your music using timestamp-based extrapolation
- 🔄 Dual Source Mode — Choose between Spotify Premium (API) or Spicetify (local) playback
- 🎯 Click-to-Sync — Click any lyric line to instantly calibrate timing offset
- 🖱️ Manual Scroll — Scroll freely through lyrics; auto-resumes after 4 seconds
- 🪟 Always on Top — Transparent, frameless overlay that stays above all windows
- ⚙️ Glassmorphism Settings — Beautiful dark-themed configuration panel
- 📦 One-Click Spicetify Setup — Automatically installs the helper extension
- 🛡️ Focus-Resilient — Lyrics persist even when focusing/minimizing Spotify
- Node.js (v18+)
- Spotify Account
git clone https://github.com/aw4e/SpotifyOverlay.git
cd APP-SpotifyOverlay
npm install
npm startOn first launch, the Settings panel opens. Choose your playback mode:
- Create an app at Spotify Developer Dashboard
- Set Redirect URI to
http://127.0.0.1:8888/callback - Enter your Client ID and Client Secret
- Click Save Configuration
- Login when prompted
- Install Spicetify
- Select Spicetify mode in Settings
- Click Install & Apply Extension — automatically installs the helper
- Spotify will restart with the extension active
- Click Save Configuration
Tip: Spicetify mode provides instant lyrics from Spotify's internal API and doesn't require API credentials.
| Action | Effect |
|---|---|
| Click a lyric line | Instantly syncs offset to that line |
| Scroll wheel | Manually scroll through lyrics |
| Wait 4 seconds | Auto-resumes following current lyric |
Spotify_Overlay/
├── main.js # Electron main process, IPC handlers, HTTP server
├── renderer.js # Overlay UI logic, lyric sync engine
├── index.html # Overlay window layout
├── style.css # Overlay styling with glassmorphism
├── config.html # Settings window
├── spotifyAuth.js # Spotify OAuth2 flow
├── spotifyApi.js # Spotify Web API client
├── lyricsApi.js # lrclib.net lyrics fetcher
├── spicetify-helper.js # Spicetify extension (injected into Spotify)
└── package.json
┌─────────────┐ HTTP POST ┌──────────┐ IPC ┌──────────────┐
│ Spicetify │ ──────────────────>│ main.js │ ──────────> │ renderer.js │
│ Helper │ /local-playback │ (cache) │ get-playback│ (sync loop) │
└─────────────┘ └──────────┘ └──────────────┘
│
Spotify API
(Premium mode)
npm run distOutputs a portable .exe to the dist/ folder.
- Electron — Desktop framework
- Spicetify API — Local Spotify data & lyrics
- Spotify Web API — Premium playback data
- lrclib.net — Fallback synced lyrics
- electron-store — Config persistence
- Outfit — Google Font