Skip to main content

croon

Synced lyrics for whatever is playing, in your terminal.

Detects the currently playing song system-wide on macOS, fetches time-synchronized lyrics from LRCLIB (free, no API key), and falls back to scraping plain lyrics from Genius when no synced version exists. Synced lines highlight and auto-scroll in time with playback.

croon showing synced lyrics and album art

Note: Genius itself only has plain-text lyrics (no timestamps), which is why LRCLIB is the primary source for true sync.

Install & run

uvx croon            # run without installing
# or
pip install croon && croon
# or, from a checkout
uv run croon

Now-playing backends

Tried in order; the first one that works is remembered:

  1. media-control — system-wide, works on macOS 15.4+ (brew install media-control)
  2. nowplaying-cli — system-wide, older macOS (brew install nowplaying-cli)
  3. Spotify via AppleScript (no install needed)
  4. Apple Music via AppleScript (no install needed)

So with Spotify or Apple Music it works out of the box; install media-control for other players (browser, VLC, etc.). The first AppleScript call may trigger a macOS Automation permission prompt for your terminal.

Keys

Key Action
q Quit
r Refetch lyrics
+/- Nudge sync offset ±0.5 s
f Toggle auto-follow (free scrolling)
h Toggle footer
l Toggle lyrics-only mode
o Open the song's Genius page in a browser

Behavior notes

  • Synced (LRCLIB): current line is highlighted and centered.
  • Plain (LRCLIB/Genius): position is estimated from track progress, so scrolling is approximate.
  • Header shows position, lyrics source, and detection backend; a non-zero sync offset appears top-right (e.g. delay +1.5s).

Download files

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

Source Distribution

croon-0.1.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

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

croon-0.1.0-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file croon-0.1.0.tar.gz.

File metadata

  • Download URL: croon-0.1.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for croon-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a86932f4dcf4107c037e653f715ed3be18627d9fe54210cb7d83dbdc996551d0
MD5 74a17a857f3cf19f9ae18503e0eea91e
BLAKE2b-256 bd0d74a27d520dde4fb4dd23fd4dafff204beef4dc108044a91596305e5a572a

See more details on using hashes here.

File details

Details for the file croon-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: croon-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for croon-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9c6d841766a04637fb0749389b111a09f90fdc074e21970e6f1505246357ce55
MD5 2b4860858ea1617187bdadae47f270d6
BLAKE2b-256 d67cdc9cab5832f42f0e527dd177dec648d25e1f5cf7417695b4c99f80fb8d98

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