yank

yank

A terminal UI for downloading video with yt-dlp.

Paste a URL, pick a format from a short list, watch a progress bar, get the path of the file that landed on disk.

View on GitHub
brew install amornnan19/tap/yank

yank in motion

Illustration, not a screen recording: a scripted replay of yank's screens and motion. The video, sizes and speeds are made up.

What it does

  • Seven rows, not a hundred

    A full yt-dlp extraction can list a hundred-odd formats. yank reduces them to at most seven: up to six video heights plus one mp3 audio row.

  • Sensible codec choice

    Within a height it prefers avc1/h264, which plays everywhere, unless the vp9/av01 stream is at least 25% smaller.

  • yt-dlp fetched for you

    Uses yt-dlp from your PATH if present, and never updates that copy. Otherwise it downloads the release asset and verifies it against the SHA-256 in the release's SHA2-256SUMS. Once a day, in the background, it checks for a newer release, verifies it the same way, and switches to it on the next launch that finds no other yank window using the old one.

  • ffmpeg is optional

    Without ffmpeg you get fewer rows, only formats that already carry video and audio, and the picker says why. A smaller menu, not a failure.

  • Progress, then a path

    Watch a progress bar while it downloads. The done screen tells you where the file landed: ~/Downloads.

Pick a format

Illustration, not a screenshot. Titles, formats and sizes vary by video.

Install & use

yank is a single static binary. It needs neither Go nor yt-dlp at runtime: it fetches and updates its own yt-dlp.

Homebrew (macOS and Linux)

brew install amornnan19/tap/yank

ffmpeg is optional and not installed with yank; brew install ffmpeg adds the merged and mp3 rows to the format picker.

Download a binary

Each release carries a yank_<version>_<os>_<arch>.tar.gz for darwin and linux on amd64 and arm64, and a checksums.txt with their SHA-256:

shasum -a 256 -c checksums.txt --ignore-missing
tar -xzf yank_<version>_<os>_<arch>.tar.gz yank
./yank --version

Then put the yank binary somewhere on your PATH.

macOS Gatekeeper. The binaries are not signed or notarized, so macOS quarantines one downloaded by a browser and refuses to run it. Clear the flag once:

xattr -d com.apple.quarantine ./yank

Homebrew installs are not affected.

With Go

Go 1.27.1 or newer is required. The binary lands in go env GOBIN or $(go env GOPATH)/bin, which must be on your PATH.

go install github.com/amornnan19/yank/cmd/yank@latest

Use

$ yank                   # start on the input screen, ready for a pasted URL
$ yank <url>             # start with that URL
$ yank --update          # update the cached yt-dlp now; no terminal UI needed
$ YANK_NO_UPDATE=1 yank  # turn the daily background check off
enter
fetch the URL; in the picker, download the selected row; on the done screen, start another
↑ ↓ / j k
move the cursor in the picker
1–9
jump to a row without starting it
esc
cancel a fetch or download and go back
q
quit from the done screen
ctrl+c
quit from anywhere