{"id":50521895,"url":"https://github.com/peternaame-boop/ytm-player","last_synced_at":"2026-06-19T23:00:36.624Z","repository":{"id":337946564,"uuid":"1155862219","full_name":"peternaame-boop/ytm-player","owner":"peternaame-boop","description":"YouTube Music TUI client with vim keybindings, synced lyrics, and cross-platform media keys","archived":false,"fork":false,"pushed_at":"2026-06-19T08:15:37.000Z","size":3566,"stargazers_count":406,"open_issues_count":0,"forks_count":33,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-06-19T08:27:10.211Z","etag":null,"topics":["cli","mpv","music-player","python","terminal","textual","tui","vim-keybindings","youtube-music"],"latest_commit_sha":null,"homepage":"https://ytm-player.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peternaame-boop.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["peternaame-boop"]}},"created_at":"2026-02-12T01:40:37.000Z","updated_at":"2026-06-19T08:15:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/peternaame-boop/ytm-player","commit_stats":null,"previous_names":["peternaame-boop/ytm-player"],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/peternaame-boop/ytm-player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peternaame-boop%2Fytm-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peternaame-boop%2Fytm-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peternaame-boop%2Fytm-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peternaame-boop%2Fytm-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peternaame-boop","download_url":"https://codeload.github.com/peternaame-boop/ytm-player/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peternaame-boop%2Fytm-player/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34550858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","mpv","music-player","python","terminal","textual","tui","vim-keybindings","youtube-music"],"created_at":"2026-06-03T05:00:34.589Z","updated_at":"2026-06-19T23:00:36.606Z","avatar_url":"https://github.com/peternaame-boop.png","language":"Python","funding_links":["https://github.com/sponsors/peternaame-boop"],"categories":["Entertainment","Python"],"sub_categories":["Music"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/peternaame-boop/ytm-player/master/docs/images/header.svg\" alt=\"ytm-player — YouTube Music in your terminal — synced lyrics, vim keys, mpv backend. Runs on Linux, macOS, Windows. Free-tier supported.\" width=\"720\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://ytm-player.com\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/peternaame-boop/ytm-player/master/docs/images/website-button.svg\" alt=\"Visit ytm-player.com\" width=\"240\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/ytm-player/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/ytm-player?style=for-the-badge\u0026logo=pypi\u0026color=ff4e45\u0026labelColor=0f0f0f\u0026logoColor=ff4e45\" alt=\"PyPI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org/downloads/\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.10%2B-ff4e45?style=for-the-badge\u0026logo=python\u0026labelColor=0f0f0f\u0026logoColor=ff4e45\" alt=\"Python 3.10+\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/peternaame-boop/ytm-player/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/peternaame-boop/ytm-player/ci.yml?style=for-the-badge\u0026logo=githubactions\u0026labelColor=0f0f0f\u0026logoColor=ff4e45\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/peternaame-boop/ytm-player/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/peternaame-boop/ytm-player?style=for-the-badge\u0026logo=opensourceinitiative\u0026color=ff4e45\u0026labelColor=0f0f0f\u0026logoColor=ff4e45\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#install\"\u003e\u003cimg src=\"https://img.shields.io/badge/Install-ff4e45?style=for-the-badge\u0026labelColor=0f0f0f\" alt=\"Install\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"#quickstart\"\u003e\u003cimg src=\"https://img.shields.io/badge/Quickstart-ff4e45?style=for-the-badge\u0026labelColor=0f0f0f\" alt=\"Quickstart\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"#documentation\"\u003e\u003cimg src=\"https://img.shields.io/badge/Documentation-ff4e45?style=for-the-badge\u0026labelColor=0f0f0f\" alt=\"Documentation\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://github.com/peternaame-boop/ytm-player/blob/master/CONTRIBUTING.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/Contributing-ff4e45?style=for-the-badge\u0026labelColor=0f0f0f\" alt=\"Contributing\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://github.com/peternaame-boop/ytm-player/blob/master/CHANGELOG.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/Changelog-ff4e45?style=for-the-badge\u0026labelColor=0f0f0f\" alt=\"Changelog\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n![ytm-player demo](https://raw.githubusercontent.com/peternaame-boop/ytm-player/master/docs/images/ytm-demo.gif)\n\n\u003e Available on **PyPI**, **AUR**, **NixOS**, and **Gentoo** — actively maintained with cross-platform support.\n\n## Features\n\n- **Vim-style keybindings** — j/k movement, multi-key sequences (`g s` for search, `g l` for library), count prefixes (`5j`)\n- **Synced lyrics** — live-highlighted with LRCLIB fallback for tracks YouTube doesn't have, with title sanitization for better LRCLIB matches\n- **mpv backend** — gapless audio, stream prefetching, broad codec support\n- **Cross-platform native integrations** — MPRIS (Linux), Now Playing (macOS), media keys (Windows)\n- **Theming** — 18+ Textual themes plus per-app color overrides in `theme.toml`\n- **Spotify import** — pull playlists in via API or scraper fallback\n- **CLI + IPC** — control a running TUI from another terminal (`ytm play`, `ytm pause`, etc.)\n- **Free-tier support** — works without YouTube Music Premium\n- **Session resume** — last-playing track + queue restored on launch\n- **Local cache** — LRU audio cache for offline-like replay of previously heard tracks\n- **Discord + Last.fm** — Rich Presence and scrobbling\n\n## Requirements\n\n- **Python 3.10+**\n- **[mpv](https://mpv.io/)** (audio playback backend, must be installed system-wide)\n- A YouTube Music account (free or Premium)\n\n## Install\n\n```bash\n# PyPI (Linux / macOS / Windows)\npip install ytm-player\n\n# Arch / CachyOS / Manjaro (AUR)\nyay -S ytm-player-git\n```\n\nFor NixOS, Gentoo, Windows-specific mpv DLL setup, source builds, and optional extras (Discord, Last.fm, Spotify import, etc.), see [docs/installation.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/installation.md).\n\n## Quickstart\n\n```bash\nytm setup    # one-time auth (auto-detects browser cookies)\nytm          # launch the TUI\n```\n\nWindows: replace `ytm` with `py -m ytm_player`.\n\n## Documentation\n\n| Topic | Link |\n|-------|------|\n| Per-platform install + optional extras | [docs/installation.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/installation.md) |\n| `config.toml` + `theme.toml` reference | [docs/configuration.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/configuration.md) |\n| Full keyboard + mouse keybindings | [docs/keybindings.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/keybindings.md) |\n| All `ytm` CLI subcommands | [docs/cli-reference.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/cli-reference.md) |\n| Spotify playlist import | [docs/spotify-import.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/spotify-import.md) |\n| Troubleshooting (mpv / auth / MPRIS / macOS / cache) | [docs/troubleshooting.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/troubleshooting.md) |\n| File layout + stack | [docs/architecture.md](https://github.com/peternaame-boop/ytm-player/blob/master/docs/architecture.md) |\n| Contributing | [CONTRIBUTING.md](https://github.com/peternaame-boop/ytm-player/blob/master/CONTRIBUTING.md) |\n| Security policy | [SECURITY.md](https://github.com/peternaame-boop/ytm-player/blob/master/SECURITY.md) |\n\n## Contributors\n\nThanks to [@dmnmsc](https://github.com/dmnmsc), [@Villoh](https://github.com/Villoh), [@valkyrieglasc](https://github.com/valkyrieglasc), [@dsafxP](https://github.com/dsafxP), [@Thayrov](https://github.com/Thayrov), [@glywil](https://github.com/glywil), [@Kineforce](https://github.com/Kineforce), [@CarterSnich](https://github.com/CarterSnich), [@Tohbuu](https://github.com/Tohbuu), [@nitsujri](https://github.com/nitsujri), [@uhs-robert](https://github.com/uhs-robert), [@moschi](https://github.com/moschi), [@firedev](https://github.com/firedev), [@wgordon17](https://github.com/wgordon17), [@gitiy1](https://github.com/gitiy1), [@hanandewa5](https://github.com/hanandewa5), [@aimar-a](https://github.com/aimar-a), [@Gimar250](https://github.com/Gimar250), [@Wiibleyde](https://github.com/Wiibleyde), [@szx19970521](https://github.com/szx19970521), [@aaguilar-hub](https://github.com/aaguilar-hub), [@TheoBassaw](https://github.com/TheoBassaw), [@holstvoogd](https://github.com/holstvoogd), and [@ProfessionalGriefer](https://github.com/ProfessionalGriefer) for bug reports, fixes, packaging, and platform support.\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/peternaame-boop/ytm-player/blob/master/CHANGELOG.md) for the full release history.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeternaame-boop%2Fytm-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeternaame-boop%2Fytm-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeternaame-boop%2Fytm-player/lists"}