Skip to content

PithomLabs/amp

Repository files navigation

AMP

A minimal, self-contained MP3 player and lyrics manager.

Features

  • 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

Usage

Build and run:

go build -o amp .
./amp

Then open http://localhost:8080 in your browser.

Flags

Flag Default Description
-port 8080 HTTP server port
-db ./amp.db SQLite database path

Example:

./amp -port 3000 -db ~/music.db

Keyboard Shortcuts

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.

Lyrics

Fetching

When you request lyrics for a song, AMP searches in this order:

  1. LRCLIB exact match — looks up the song by artist and title
  2. 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.

Approval Workflow

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)

Import from LRCLIB URL

You can paste an LRCLIB URL to preview and import lyrics directly. This is useful when automatic fetching picks the wrong match.

Limitations

  • 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)

Contributing

This project is intentionally minimal. Pull requests are not accepted.

You're welcome to fork it and make it your own.

About

MP3 Player (without the fuss)

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors