TUI client for yt music
search, browse, and play from your terminal
zig 0.16, single binary
libmpvfor audio- shells out to
curlandyt-dlp - astats lavfi filter for visualizer via
ffmpeg
v0.1.2
- failures log to
~/.local/share/ytcli/log(timestamp + cause) - ctrl+c restores cleanly to terminal in all cases
- play video ids beginning with
-(yt-dlp--arg fix) - fix freeBSD build (terminal size via std, not
<sys/ioctl.h>) - readme fix:
brew install mpvalready pulls inyt-dlp,libmpv-devhowever does not
previous
v0.1.1
- github actions for release builds
- prebuilt binaries: macOS, linux, freeBSD
- hardened temp writes (mkstemp, 0600)
v0.1
- autoplays through result list
- drills into albums
- handful of color themes
zig build # → zig-out/bin/ytcli
zig build install --prefix ~/.local # → ~/.local/bin/ytcliinstall ex.
brew install mpv ffmpeg # macOS (mpv pulls in yt-dlp)
apt install libmpv-dev yt-dlp ffmpeg # Debian/Ubuntu[ ! ] currently requires
mpv,ffmpegandyt-dlpparticularly on PATH
macOS, Linux, and FreeBSD binaries are attached to each release. windows: run under WSL (no native build currently).
ytcli # TUI
ytcli <query> # play first hit
ytcli -s <query> # search, print results
ytcli history # past queries
ytcli --theme cyan # red (default) | cyan | mono | dracula | nord | gruvbox
ytcli --themes # list themes
ytcli -h | -vmade an effort to use commands that felt intuitive
view
typing:
- text to query
↑/↓ - pick suggestion
tab/→ - accept completion
⏎search escclearCtrl+Tcycle filter (all/songs/videos/albums/artists)
results:
j/kor↑/↓moveg/Gtop/endCtrl+F/Bpageh/escback
playback/anytime:
Ctrl+P/spacepauseCtrl+NnextCtrl+Sstop[/]seek ±10s{/}±60s-/=volume ±5Ctrl+Ytheme
$XDG_DATA_HOME/ytcli/history- query log (falls back to~/.local/share/ytcli/history).$XDG_DATA_HOME/ytcli/log- timestamped failures (search/album/stream) with the underlying error and anycurl/yt-dlpstderr. check here first when something says(see log).$XDG_CONFIG_HOME/ytcli/config-key=valuesettings.
history is just newline-delimited text - grep/cat it, or seed it so the TUI autocompletes your favorites from the first keystroke:
ex.
printf '%s\n' "elephant gym" "autechre" "john zorn" >> ~/.local/share/ytcli/history
grep -i jazz ~/.local/share/ytcli/history[ ! ] loads newest-first and dedups, so re-seeding or reordering is harmless.
ytcli -s <query> prints title — artist [video_id], one per line; pipe it anywhere. YTCLI_THEME sets the theme without a flag.
[ ! ] requests written to
/tmp/ytcli_body*(mkstemp, 0600, unlinked after) per call + audio streamed/buffered via mpv; not written to disk.
simple spectrum bars via astats lavfi filter
dB to linear/modulated per bar - not a true per-band FFT
please feel free to contribute, not a guarantee it will be merged
[ ! ] thank you for your attention
