youtube tui
- Rust 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
ci/woodpecker/tag/release Pipeline was successful
Videos opened from anywhere but a playlist now show YouTube's related videos (from video_details) in the sidebar instead of the page they came from. n plays the top related video, p returns to the previous one, and autoplay: all follows the related list, also in the background. Playlists keep their own list. If related videos can't be loaded, the source list is used as before, without an error. |
||
| .woodpecker | ||
| assets/thumbnails | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
ytp
A keyboard-driven YouTube client for the terminal. Browse, search and watch videos without leaving it: real thumbnails, vim-style navigation, and mpv playback right inside the terminal.
Features
- Grid or list view with real thumbnails (kitty graphics protocol)
- Search for videos, playlists and channels, with endless scrolling
- Playlists and mixes you can open, with autoplay through the whole list
- Built-in player: mpv draws into the terminal (or its own window), with an up-next sidebar, fullscreen and volume that sticks between sessions
- YouTube login via a TV code: your home feed, subscriptions and account history
- Watch history that resumes where you stopped
- Back and forward through everything you opened, like a browser
- Configurable keys, layout and player in one YAML file
Requirements
- A terminal with the kitty graphics protocol (kitty, Ghostty, WezTerm). Others fall back to block-character thumbnails and a separate mpv window.
- mpv and yt-dlp
- To build: Rust 1.85+, plus
cmake,clang,go,perlandnasmfor the TLS library
Build
ytp uses a fork of rustypipe, which Cargo fetches automatically.
cargo build --release
./target/release/ytp
Without YouTube support (offline demo data only, no extra build tools):
cargo build --release --no-default-features
Keys
| Key | Action |
|---|---|
h j k l / arrows |
move |
⏎ |
open |
/ |
search |
v |
switch grid / list |
Esc H / L |
back / forward |
1 2 3 4 |
home, subscriptions, account, history |
f |
subscription feed (on Subscriptions) |
d |
remove from history (on History) |
q |
quit |
In the player:
| Key | Action |
|---|---|
space |
pause, or replay after the end |
h l / J K |
seek 5 s / 30 s |
j k, ⏎ |
move in the sidebar, play selected |
n p |
next / previous video |
+ - |
volume |
f |
fullscreen |
a |
autoplay on/off |
Logging in
Press 3, then ⏎. Open the address shown on another device, enter the code, and ytp logs in by itself.
Configuration
On first start ytp writes ~/.config/ytp/config.yaml with every option and its default. Edit any of them, for example:
default_view: list
player:
strategy: auto # auto | integrated | window
autoplay: playlists # playlists | all | off
keybindings:
fullscreen: ["f", "F"]
Files
| Path | Contents |
|---|---|
~/.config/ytp/config.yaml |
configuration |
~/.local/state/ytp/ytp.db |
volume and watch history |
~/.local/state/ytp/ytp.log |
error log |
~/.local/share/ytp/rustypipe/ |
YouTube login |
~/.cache/ytp/ |
thumbnails and cached responses (safe to delete) |

