A minimal, self-contained MP3 player and lyrics manager.
- Single binary — all assets are embedded; no external files or dependencies needed at runtime
- Folder scanning — recursively discovers MP3 files and extracts ID3 metadata (title, artist, album, genre, year), falling back to filename parsing when tags are missing
- Audio playback — play/pause, next/previous, seek, and shuffle
- Lyrics fetching — searches LRCLIB for synced and plain lyrics, with a Google scrape fallback for plain text
- Synced lyrics — timed (LRC format) lyrics with real-time line highlighting and auto-scroll
- Lyrics workflow — approve, reject, edit, delete, or import lyrics from an LRCLIB URL
- Auto-tagging — automatically tags songs by artist, genre, and decade
- Tag-based filtering — filter the playlist by any combination of tags
- Playlist search — live search across title, artist, and filename
- Resizable split-panel UI — draggable divider between the lyrics and playlist panels
- Keyboard shortcuts — quick controls without reaching for the mouse
- SQLite with WAL mode — lightweight storage, remembers your last selected folder
- Dark/light mode
Build and run:
go build -o amp .
./amp
Then open http://localhost:8080 in your browser.
| Flag | Default | Description |
|---|---|---|
-port |
8080 |
HTTP server port |
-db |
./amp.db |
SQLite database path |
Example:
./amp -port 3000 -db ~/music.db
| Key | Action |
|---|---|
Space |
Play / Pause |
N |
Next song |
P |
Previous song |
ArrowRight |
Seek forward 5s |
ArrowLeft |
Seek backward 5s |
Shortcuts are disabled when a text input or textarea is focused.
When you request lyrics for a song, AMP searches in this order:
- LRCLIB exact match — looks up the song by artist and title
- LRCLIB fuzzy search — broader search if the exact match fails
Synced (timed) lyrics are only accepted when the LRCLIB source duration is within ±15 seconds of your local MP3 duration. If the durations differ by more than that, AMP falls back to the next source.
Fetched lyrics start with a pending status. From there you can:
- Approve — marks the lyrics as good
- Reject — marks them as rejected and offers a retry or paste option
- Edit — opens an inline editor; saving automatically approves
- Delete — removes lyrics entirely (with confirmation)
You can paste an LRCLIB URL to preview and import lyrics directly. This is useful when automatic fetching picks the wrong match.
- MP3 only — no FLAC, OGG, WAV, or other formats
- Synced lyrics depend on duration matching — if the LRCLIB source and your local MP3 differ by more than 15 seconds, synced lyrics won't be available for that song
- Single-user / local use — designed to run on your own machine, not as a shared server
- SQLite single-writer concurrency — one write at a time (max 1 open connection)
This project is intentionally minimal. Pull requests are not accepted.
You're welcome to fork it and make it your own.