Skip to main content

Yoink

Yoink is a friendly, scriptable CLI for downloading media and extracting information from video URLs. It uses yt-dlp under the hood, so it works with YouTube and the many other sites supported by yt-dlp.

Only download media you are authorized to access. You are responsible for following copyright law and each site's terms.

Install

Python 3.10 or newer is required. ffmpeg is also recommended and is required for audio conversion, thumbnail conversion, and some video stream merges.

git clone <repository-url>
cd yoink
uv tool install .
yoink doctor

uv tool install . installs Yoink into an isolated, user-wide environment and places the yoink executable on your PATH. It can then be run from any directory without activating this project's virtual environment. The repository's PUBLISHING.md explains the complete local-install and PyPI release process.

For development:

python -m pip install -e ".[dev]"
pytest
ruff check .

Interactive mode

Run Yoink without any arguments:

yoink

Yoink will ask for the video URL, show a keyboard-selectable operation menu, and prompt only for the settings needed by the selected operation. Use the arrow keys (or j/k) to move and Enter to select:

Paste a video URL: https://www.youtube.com/watch?v=VIDEO_ID

◆ Choose an operation (↑/↓ move • enter select)
❯ ▸  Video + audio
  ♫  Audio only
  ▯  Video only
  ◆  Metadata
  ▣  Thumbnail
  ≡  Available formats

You can also start the guided flow explicitly with yoink interactive. For download operations, Yoink offers two destinations:

◆ Save files to (↑/↓ move • enter select)
❯ Current directory  ./
  System Downloads  ~/Downloads

The current directory is selected by default, so pressing Enter uses it. The second option resolves to the current user's system Downloads directory.

During downloads, Yoink shows a live progress bar with transferred size, transfer speed, and estimated time remaining.

Direct commands

The command-based interface remains available for scripts and automation.

Download the best video with audio:

yoink video "https://www.youtube.com/watch?v=VIDEO_ID"

Limit the resolution and choose an output directory:

yoink video URL --quality 1080 --output ./downloads

Download audio:

yoink audio URL
yoink audio URL --codec flac

Download the video stream without audio:

yoink video-only URL --quality 720

Print metadata, or save it as JSON:

yoink metadata URL
yoink metadata URL --save info.json

Download or convert the thumbnail:

yoink thumbnail URL
yoink thumbnail URL --format png --output ./artwork

Inspect the available streams:

yoink formats URL

Playlist downloads are deliberately disabled by default. Enable them explicitly:

yoink audio PLAYLIST_URL --playlist

For videos requiring an authenticated session, import cookies from a browser:

yoink video URL --cookies-from-browser chrome

Run yoink COMMAND --help for every option.

Architecture

The CLI layer in src/yoink/cli.py handles input and presentation. The MediaClient in src/yoink/core.py owns yt-dlp configuration and media operations. New features should normally become a method on MediaClient and a small CLI command that calls it. This keeps the library usable outside the terminal and makes commands straightforward to test.

Release files for yoink-cli 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yoink-cli 0.1.0
File Size Uploaded
yoink_cli-0.1.0.tar.gz 25.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yoink-cli 0.1.0
File Interpreter ABI Platform
yoink_cli-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.7 kB

Release files / yoink_cli-0.1.0.tar.gz

Download URL yoink_cli-0.1.0.tar.gz
Size 25.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a12b665c2272aa259e600ffa975a508d86d3bc16535378babe98353cc095651a
BLAKE2b-256 checksum
How to use checksums
956e2f1fb754c6c066f5225ba44e9e04d2923add01447b67f26f77650619a6f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / yoink_cli-0.1.0-py3-none-any.whl

Download URL yoink_cli-0.1.0-py3-none-any.whl
Size 11.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c8779ddc98ad4764d067d74400cf94da6fa114e83d0bb529a983c3fac79b2fc0
BLAKE2b-256 checksum
How to use checksums
d13d2fb49f4a3f41d509f271efd71046dd6c90791777f1818936022efc73530b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page