lrc-tools
_ ____ ___ _____ _
| | |___ \ / _ \ |_ _|_ _ ___| |_
| | __) | | | | | |/ _` |/ _ \ __|
| |___ / __/| |_| | | | (_| | __/ |_
|_____|_____| \___/ |_|\__,_|\___|\__|
Terminal synced lyrics toolkit — fetch, process, and visualize .lrc lyrics from your terminal.
What is this?
Three operations from the terminal:
- Fetch synced lyrics from LRCLIB for your music library
- Process
.lrcinto word-level.wlrcwith phrase splitting and onset detection - Visualize lyrics in real time while music is playing (MPRIS / mpv / ffplay)
New? Run lrc-tools, pick your music folder, fetch → process → enjoy.
Quick install
pip install --user lrc-tools
# Or with extras:
pip install --user "lrc-tools[full]" # +mutagen +syncedlyrics +textual
Or download a binary from Releases.
System requirements: Python 3.12+, ffmpeg/ffprobe, playerctl (Linux only).
Commands
| Command | What it does |
|---|---|
lrc-tools / lt |
Interactive TUI (or simple menu if Textual is missing) |
lrc-fetch |
Batch download .lrc lyrics from LRCLIB |
lrc-processor |
Split phrases, convert .lrc → .wlrc |
lrc-vis |
Real-time lyric visualizer in the terminal |
CLI examples
# Fetch lyrics for all songs in ~/Music
lrc-fetch --audio-dir ~/Music --output-dir ~/.local/share/lrc-tools/lyrics/raw
# Process to word-level with custom split settings
lrc-processor --lrc-dir ./raw --audio-dir ./music --output-dir ./out --wlrc \
--max-phrase-duration 3.0 --max-words 10
# Visualize with auto-match from media player
lrc-vis --lrc-dir ~/.local/share/lrc-tools/lyrics/processed --wlrc
# Validate an LRC file
python3 -c "from lrc_tools.parser import validate_lrc; print(validate_lrc('file.lrc'))"
# Export LRC to SRT subtitles
python3 -c "from lrc_tools.exporters import export_srt; export_srt('file.lrc', 'file.srt')"
See --help on any command for full options.
Default paths
| What | Path |
|---|---|
| Raw lyrics | ~/.local/share/lrc-tools/lyrics/raw |
| Processed lyrics | ~/.local/share/lrc-tools/lyrics/processed |
| Config | ~/.config/lrc-tools/config.yaml |
On macOS: ~/Library/Application Support/ and ~/Library/Preferences/.
On Windows: %LOCALAPPDATA% and %APPDATA%.
Workflow
Audio files ──→ lrc-fetch ──→ .lrc (raw) ──→ lrc-processor ──→ .wlrc ──→ lrc-vis
Or from the TUI: lrc-tools → Configure paths → Fetch → Process → Visualize.
Features
| Feature | Status |
|---|---|
| Fetch lyrics from LRCLIB | ✅ |
| syncedlyrics fallback provider | ✅ |
| Phrase splitting (commas, duration, word count) | ✅ |
| Word-level WLRC format | ✅ |
| Onset detection via librosa | ✅ |
| Real-time visualizer (playerctl / mpv / ffplay) | ✅ |
| Textual TUI | ✅ |
| CLI with rich progress bars and colors | ✅ |
| Cross-platform (Linux / macOS / Windows) | ✅ |
| LRC validation and repair | ✅ |
| Timestamp offset (shift all timestamps) | ✅ |
| Merge / split LRC files | ✅ |
| Export to SRT subtitles | ✅ |
| Export/import JSON | ✅ |
| Dry-run mode | ✅ |
| Auto-backup before overwrite | ✅ |
| PyInstaller binaries | ✅ |
| Custom ASCII fonts | ✅ |
Docs
Development
git clone https://github.com/RicknotDev/lrc-tools
cd lrc-tools
pip install -e ".[full]"
python -m unittest discover -s tests
See CONTRIBUTING.md.
License
MIT
Metadata
Release files for lrc-tools 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| lrc_tools-0.3.0.tar.gz | 53.9 kB | Without provenance | Details for lrc_tools-0.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| lrc_tools-0.3.0-py3-none-any.whl | Python 3 | none | any | Details for lrc_tools-0.3.0-py3-none-any.whl |
Total release size: 112.1 kB
Release files / lrc_tools-0.3.0.tar.gz
| Download URL | lrc_tools-0.3.0.tar.gz |
|---|---|
| Size | 53.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8d3dba790b4b7d80dc36d3663bb77377c37778f00176e6d6c9cff3685b8b4911
|
|
BLAKE2b-256 checksum How to use checksums |
464c31a42fa8c300924bbbb6b2ac9ccd055c55260102208b8ba03fbdf32ea74e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Release files / lrc_tools-0.3.0-py3-none-any.whl
| Download URL | lrc_tools-0.3.0-py3-none-any.whl |
|---|---|
| Size | 58.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7206749fa4a4d2d8fddde49e9a2e8c011bff7bd101cd51d8e7f9227c7f6a2657
|
|
BLAKE2b-256 checksum How to use checksums |
24d39f2d04adcea7d650b31db79fda853e93ac6bff00e76ff627976ea82e2320
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Security for lrc-tools 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.