Skip to main content

A full-featured YouTube Music TUI client for the terminal

Project description

ytm-player

A full-featured YouTube Music player for the terminal. Browse your library, search, queue tracks, and control playback — all from a TUI with vim-style keybindings. Runs on Linux, macOS, and Windows.

ytm-player screenshot

Features

  • Vim-style keybindings — j/k movement, multi-key sequences (g s for search, g l for library), count prefixes (5j)
  • Synced lyrics — live-highlighted with LRCLIB fallback for tracks YouTube doesn't have, with title sanitization for better LRCLIB matches
  • mpv backend — gapless audio, stream prefetching, broad codec support
  • Cross-platform native integrations — MPRIS (Linux), Now Playing (macOS), media keys (Windows)
  • Theming — 18+ Textual themes plus per-app color overrides in theme.toml
  • Spotify import — pull playlists in via API or scraper fallback
  • CLI + IPC — control a running TUI from another terminal (ytm play, ytm pause, etc.)
  • Free-tier support — works without YouTube Music Premium
  • Session resume — last-playing track + queue restored on launch
  • Local cache — LRU audio cache for offline-like replay of previously heard tracks
  • Discord + Last.fm — Rich Presence and scrobbling

Requirements

  • Python 3.10+
  • mpv (audio playback backend, must be installed system-wide)
  • A YouTube Music account (free or Premium)

Install

# PyPI (Linux / macOS / Windows)
pip install ytm-player

# Arch / CachyOS / Manjaro (AUR)
yay -S ytm-player-git

For NixOS, Gentoo, Windows-specific mpv DLL setup, source builds, and optional extras (Discord, Last.fm, Spotify import, etc.), see docs/installation.md.

Quickstart

ytm setup    # one-time auth (auto-detects browser cookies)
ytm          # launch the TUI

Windows: replace ytm with py -m ytm_player.

Documentation

Topic Link
Per-platform install + optional extras docs/installation.md
config.toml + theme.toml reference docs/configuration.md
Full keyboard + mouse keybindings docs/keybindings.md
All ytm CLI subcommands docs/cli-reference.md
Spotify playlist import docs/spotify-import.md
Troubleshooting (mpv / auth / MPRIS / macOS / cache) docs/troubleshooting.md
File layout + stack docs/architecture.md
Contributing CONTRIBUTING.md
Security policy SECURITY.md

Changelog

See CHANGELOG.md for the full release history.

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

ytm_player-1.7.2.tar.gz (544.4 kB view details)

Uploaded Source

Built Distribution

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

ytm_player-1.7.2-py3-none-any.whl (196.1 kB view details)

Uploaded Python 3

File details

Details for the file ytm_player-1.7.2.tar.gz.

File metadata

  • Download URL: ytm_player-1.7.2.tar.gz
  • Upload date:
  • Size: 544.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for ytm_player-1.7.2.tar.gz
Algorithm Hash digest
SHA256 8082878fee5b0824364b10413052669f38233c131c4a4ddfea159f38b4bc0183
MD5 bcbc8f566fb5c36c39fd1e7edaa18e80
BLAKE2b-256 2f298a021c6a75f43968db878c3b8f171c8cb861eddb84f75b6707c6e6dd92f1

See more details on using hashes here.

File details

Details for the file ytm_player-1.7.2-py3-none-any.whl.

File metadata

  • Download URL: ytm_player-1.7.2-py3-none-any.whl
  • Upload date:
  • Size: 196.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for ytm_player-1.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d6161ce1eacd28545f0c42e7607c5b9703ac840d81e3fb1a5677c04901e926cf
MD5 1cbc467d747e5fe55fd1df255cbf4d24
BLAKE2b-256 3c934c0e46a45937aafa06649cc947be878274f2be9cb257e8a9eb296991b9fe

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