| Crates.io | lyricsync |
| lib.rs | lyricsync |
| version | 0.1.1 |
| created_at | 2025-11-16 10:22:56.149195+00 |
| updated_at | 2025-11-16 10:22:56.149195+00 |
| description | Embed LRC lyrics into audio files (FLAC, MP3, M4A) |
| homepage | |
| repository | https://github.com/dantescur/lyricsync |
| max_upload_size | |
| id | 1935383 |
| size | 3,648,551 |
A high-performance Rust tool for embedding LRC lyrics into audio files (FLAC, MP3, M4A). Perfect for organizing your music library with synchronized lyrics.
Download the latest release from the releases page.
git clone https://github.com/dantescur/lyricsync.git
cd lyricsync
cargo install --path .
cargo install lyricsync
# Embed lyrics for all audio files in a directory
lyricsync -d /path/to/music
# Skip files that already have lyrics and delete LRC files after embedding
lyricsync -d /path/to/music -s -r
# Process subdirectories recursively
lyricsync -d /path/to/music -R
| Option | Short | Long | Description |
|---|---|---|---|
| Directory | -d |
--directory |
Required. Path to directory containing audio and LRC files |
| Skip Existing | -s |
--skip |
Skip files that already have embedded lyrics |
| Reduce | -r |
--reduce |
Delete LRC files after successful embedding |
| Recursive | -R |
--recursive |
Process subdirectories recursively |
| Completion | --generate-completion |
Generate shell completion script |
Generate completion scripts for your shell:
# Bash
lyricsync --generate-completion bash > ~/.config/bash_completion/lyricsync
# Zsh
lyricsync --generate-completion zsh > ~/.zsh/completions/_lyricsync
# Fish
lyricsync --generate-completion fish > ~/.config/fish/completions/lyricsync.fish
# PowerShell
lyricsync --generate-completion powershell > lyricsync.ps1
Your music directory should be organized like this:
music_folder/
├── song1.flac
├── song1.lrc
├── song2.mp3
├── song2.lrc
├── song3.m4a
├── song3.lrc
├── album1/
│ ├── track1.flac
│ ├── track1.lrc
│ └── track2.flac
└── album2/
├── song1.m4a
└── song1.lrc
Note: LRC files must have the same base name as their corresponding audio files.
# Process your entire music library
lyricsync -d "~/Music" -s -r -R
# Process a single album, keeping LRC files
lyricsync -d "~/Music/My_Favorite_Album"
# Process and clean up LRC files
lyricsync -d "~/Music/My_Favorite_Album" -r
| Format | Lyrics Storage Method |
|---|---|
| FLAC | Vorbis Comment with "LYRICS" field |
| MP3 | ID3v2 USLT (Unsynchronized Lyrics) frame |
| M4A | iTunes metadata with ©lyr atom |
LyricSync is built in Rust for maximum performance:
.lrc.failed# Debug build
cargo build
# Release build (recommended)
cargo build --release
# Check code quality
cargo clippy --all-targets --all-features --workspace -- -D warnings
# Install git hooks (runs tests, clippy, and formatting checks before push)
./scripts/setup-git-hooks.sh
# Run tests
cargo test
# Format code
cargo fmt
# Run clippy
cargo clippy --all-targets --all-features -- -D warnings
The version is managed in Cargo.toml and automatically used throughout the codebase. The CLI version is derived from Cargo.toml at build time.
Bumping version:
# Bump patch version (0.1.0 -> 0.1.1)
./scripts/bump-version.sh patch
# Bump minor version (0.1.0 -> 0.2.0)
./scripts/bump-version.sh minor
# Bump major version (0.1.0 -> 1.0.0)
./scripts/bump-version.sh major
# Set specific version
./scripts/bump-version.sh 0.2.0
Release workflow:
./scripts/bump-version.sh [major|minor|patch]git commit -am "Bump version to X.Y.Z"git tag -a vX.Y.Z -m "Release vX.Y.Z"git push && git push --tagsThe CI workflow will automatically build and release binaries for all platforms when a tag is pushed.
Contributions are welcome! Please feel free to submit pull requests, open issues , or suggest new features.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions:
Made with ❤️ by dantescur
Sync your lyrics, enhance your music experience!