Skip to main content

Terminal synced lyrics toolkit with CLI tools and a Textual TUI

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lrc_tools-0.3.0.tar.gz (53.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lrc_tools-0.3.0-py3-none-any.whl (58.3 kB view details)

Uploaded Python 3

File details

Details for the file lrc_tools-0.3.0.tar.gz.

File metadata

  • Download URL: lrc_tools-0.3.0.tar.gz
  • Upload date:
  • Size: 53.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for lrc_tools-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8d3dba790b4b7d80dc36d3663bb77377c37778f00176e6d6c9cff3685b8b4911
MD5 fedcebf65a9ffe9cb8d02dbf2c0a28ce
BLAKE2b-256 464c31a42fa8c300924bbbb6b2ac9ccd055c55260102208b8ba03fbdf32ea74e

See more details on using hashes here.

File details

Details for the file lrc_tools-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: lrc_tools-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 58.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for lrc_tools-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7206749fa4a4d2d8fddde49e9a2e8c011bff7bd101cd51d8e7f9227c7f6a2657
MD5 59c5ec48147dca34bcb8463c7dc0a144
BLAKE2b-256 24d39f2d04adcea7d650b31db79fda853e93ac6bff00e76ff627976ea82e2320

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page