Automated Metadata + Lyrics Injector for local libraries
The ultimate bridge between your local library and synchronized music perfection.
A powerful tool designed to inject metadata (synchronized lyrics and high-quality covers) directly into your local audio files. Fully compatible with Navidrome, Jellyfin, and other self-hosted media servers.
- πΆ 11+ Supported Formats: MP3, FLAC, M4A, AAC, WAV, OGG, Opus, WMA, APE, WavPack, and Matroska.
- π Smart Search: Utilizes Spotify + LRClib APIs to find accurate, time-synced lyrics.
- π¨ High-Quality Covers: Automatically fetches 600x600px artwork via Spotify API.
- β‘ Asynchronous Processing: Sync 1000+ songs in minutes using async workers.
- π§ Smart Metadata: Detects existing tags to avoid redundant processing.
- π Intelligent Retry: Target only failed files for re-processing.
- π― Spotify-like UI: Clean, responsive sidebar + library view inspired by modern players.
- πΎ Local Database: Persistent tracking of all synchronization history (SQLite).
- Python 3.8+
- Spotify Developer Account (Free)
git clone https://github.com/your-username/syncvibes.git
cd syncvibescp .env.example .envEdit the .env file with your credentials:
SPOTIFY_CLIENT_ID=your_client_id_here
SPOTIFY_CLIENT_SECRET=your_client_secret_herepip install -r requirements.txtpython app.pyAccess: http://localhost:8895
- Go to the Spotify Developer Dashboard.
- Log in or create a free account.
- Click "Create an App".
- Copy your
Client IDandClient Secret. - Paste these values into your
.envfile.
- Open http://localhost:8895.
- Enter the path to your music library.
- Choose a sync mode:
| Mode | Action | Estimated Speed |
|---|---|---|
| Full Sync | Lyrics + Covers | ~6 min / 500 songs |
| Lyrics | Lyrics only | ~3 min / 500 songs |
| Covers | Covers only | ~4 min / 500 songs |
| Refresh All | Forces a full update | ~6 min / 500 songs |
| Retry Errors | Retries failed files | ~1 min / 50 errors |
If you want to help improve the project or add support for new formats, please refer to our Development Setup Guide (DEVELOPMENT.md) for detailed instructions.
| Format | Extension | Metadata Type | Lyrics | Cover |
|---|---|---|---|---|
| MP3 | .mp3 | ID3v2 | β | β |
| FLAC | .flac | Vorbis | β | β |
| M4A/AAC | .m4a, .aac | iTunes MP4 | β | β |
| WAV | .wav | ID3v2 | β | β |
| OGG Vorbis | .ogg | Vorbis | β | β |
| Opus | .opus | Vorbis | β | β |
(Full list in the app settings)
The system automatically detects:
- β If lyrics are already embedded.
- β If high-quality covers already exist.
- β Skips unnecessary duplicates to save bandwidth.
- β Updates only missing tags.
Use Force Refresh mode (force_refresh=true) to overwrite existing metadata.
- Ensure the path is correct and accessible.
- Both
/and\are supported. - Do not use quotes around the path string in the UI.
- Close any application (Spotify, Music Player) that might be locking the files.
- Wait a few seconds and click "Retry Errors".
Build and run:
docker build -t syncvibes .
docker run -p 8895:8895 -v $(pwd):/app syncvibesMIT License - see LICENSE for details.
Made with π for music lovers




