LyriChroma
A powerful tool to convert audio files into videos with auto-generated, synchronized, and highlighted subtitles (Karaoke style).
Features
- Auto Transcription: Uses
faster-whisperfor high-accuracy speech-to-text with word-level timestamps. - Dynamic Backgrounds: Moving multi-color gradient with selectable palettes (plasma/aurora effects).
- Karaoke Subtitles: Real-time highlighting of spoken words.
- Customizable: Adjust font size, color, highlight color, and position.
- Transcript Editing: Export transcripts to JSON for manual correction, then re-import to generate the perfect video.
Installation
This project is managed with uv.
# Install uv if you haven't (https://github.com/astral-sh/uv)
pip install uv
# Clone and sync dependencies
uv sync
Usage
Basic Usage
Convert audio to video with a black background:
uv run lyrichroma --input audio.mp3 --output video.mp4
Advanced Usage
1. Dynamic Background
Generate a video with a cool moving background:
uv run lyrichroma --input audio.mp3 --output video.mp4 --bg-type dynamic --bg-value aurora
Available palettes: aurora (default), sunset, ocean, cyberpunk, forest.
2. Transcript Editing Workflow
- Generate transcript JSON (skip video generation):
uv run lyrichroma --input audio.mp3 --save-transcript transcript.json
- Edit
transcript.jsonmanually. - Generate video from edited transcript:
uv run lyrichroma --input audio.mp3 --output video.mp4 --load-transcript transcript.json
3. Styling
Customize the subtitle appearance:
uv run lyrichroma \
--input audio.mp3 \
--output video.mp4 \
--font-size 60 \
--font-color "#FFFFFF" \
--highlight-color "#FF0000" \
--text-y 0.8
Arguments
| Argument | Description | Default |
|---|---|---|
--input, -i |
Input audio file path | Required |
--output, -o |
Output video file path | Optional |
--bg-type |
color, image, or dynamic |
color |
--bg-value |
Hex color (#000000), image path, or palette name (aurora, sunset, ocean, cyberpunk, forest) |
#000000 or aurora |
--model-size |
Whisper model size (tiny, base, large-v2, etc.) | base |
--save-transcript |
Path to save JSON transcript | None |
--load-transcript |
Path to load JSON transcript | None |
--font-size |
Subtitle font size | 40 |
--font-color |
Text color | white |
--highlight-color |
Highlight color for active word | yellow |
--text-y |
Vertical position (0.0=top, 1.0=bottom) | 0.8 |
Testing
Run unit tests:
uv run pytest
Advanced Configuration
Pluggable ASR
Lyrichroma supports a pluggable ASR architecture. By default, it uses faster-whisper.
You can implement your own ASR provider by subclassing lyrichroma.asr.base.ASRProvider and passing it to the Transcriber.
Development
- Install Dependencies:
uv sync - Run Tests:
uv run pytest - Format & Lint:
uv run ruff check . uv run black .
- Pre-commit Hooks:
Install hooks to automatically check code before committing:
uv run pre-commit install
Metadata
Release files for lyrichroma 0.1.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 | |
|---|---|---|---|---|
| lyrichroma-0.1.0.tar.gz | 3.9 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lyrichroma-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.9 MB
Release files / lyrichroma-0.1.0.tar.gz
| Download URL | lyrichroma-0.1.0.tar.gz |
|---|---|
| Size | 3.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6660201cb9ae0c1cf525d1dd41f3fab6e1556ce888f6b84600b6cf66da2b4e67
|
|
BLAKE2b-256 checksum How to use checksums |
38b4f7f77295e515d9c6c22d0e520bea10ae3acc3743897351918995406fd2c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / lyrichroma-0.1.0-py3-none-any.whl
| Download URL | lyrichroma-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7a230725de9860c64bef413b389189b662cf3a1a5ae57cf792c2b16b4a4af7c2
|
|
BLAKE2b-256 checksum How to use checksums |
87d4cbfacce2d5696d37ec0266c35109e95327779c091ead588ab3d30c47baa6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for lyrichroma 0.1.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.