Skip to main content

lrc-tools

  _      ____   ___    _____           _
 | |    |___ \ / _ \  |_   _|_ _  ___| |_
 | |      __) | | | |   | |/ _` |/ _ \ __|
 | |___  / __/| |_| |   | | (_| |  __/ |_
 |_____|_____| \___/    |_|\__,_|\___|\__|

Terminal synced lyrics toolkit — fetch, process, and visualize .lrc lyrics from your terminal.

CI Lint PyPI Python License Platform

What is this?

Three operations from the terminal:

  1. Fetch synced lyrics from LRCLIB for your music library
  2. Process .lrc into word-level .wlrc with phrase splitting and onset detection
  3. 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)

Source distribution for lrc-tools 0.3.0
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)

Table of built distributions (wheels) for lrc-tools 0.3.0
File Interpreter ABI Platform Actions
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.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page