lyrics-sync
A python package to sync your local songs' lyrics, mainly TTML. Therefore, you need a player that can parse TTML and show syllable-synced lyrics. I recommend Gramophone.
To use, simply run this in Termux (you need uv installed, pkg install uv):
uvx --from hakimifr-lyrics-sync@latest lsync <path-to-music-files 1> [path-to-music-files 2] ...
where path-to-music-files is a directory or files. Directories will be
traversed recursively.
It's fine to run the script many times on the same directory, as the script maintains its own JSON containing list of files that have already been synced. Any failed sync will be reattempted when ran on the same directory.
Lyrics Source
Currently, lyrics are, in order of priority, sourced from BetterLyrics (TTML), Paxsenix (TTML) and LRCLIB (LRC). Granted, BetterLyrics mostly source their TTML from Apple, and so Paxsenix might seem redundant. But BetterLyrics endpoint sometimes does not have a match, especially if the audio files metadata differs even slightly. In which case, Paxsenix might actually succeds.
The reason is, Paxsenix is not alone on its own because the API only allows
fetching Apple's TTML by the Apple Music/iTunes song id. So, Paxsenix
implementation actually uses iTunes search API to get the song id, and only
then is it fetched from Paxsenix's cache. Please see
lyrics_provider.py to see the
actual implementation. TL;DR, Paxsenix is actually iTunes + Paxsenix itself.
License
Copyright 2026 Firdaus Hakimi <hakimifr@proton.me>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Metadata
Release files for hakimifr-lyrics-sync 0.0.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hakimifr_lyrics_sync-0.0.13.tar.gz | 14.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hakimifr_lyrics_sync-0.0.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.6 kB
Release files / hakimifr_lyrics_sync-0.0.13.tar.gz
| Download URL | hakimifr_lyrics_sync-0.0.13.tar.gz |
|---|---|
| Size | 14.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20896e3ab4260cfa5a4da9eb4ea30257b7dd6fabe3f89dbc8a6b32e79851faff
|
|
BLAKE2b-256 checksum How to use checksums |
6932e73252ae0d69f2f0f5df91503288acbd154a54145458ed3b6902ceed575e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"46","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / hakimifr_lyrics_sync-0.0.13-py3-none-any.whl
| Download URL | hakimifr_lyrics_sync-0.0.13-py3-none-any.whl |
|---|---|
| Size | 19.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a732a655cb26363369bca57b23c1f2a413165e40c6bbaa251f3bcfd213bc7612
|
|
BLAKE2b-256 checksum How to use checksums |
f1e6c6ce26dcb4b3221feb5dc9529e0ef87265a64fa3f39e19592d2282746430
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"46","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|