Skip to main content

A friendly, scriptable CLI for downloading media and extracting information from video URLs.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yoink_cli-0.1.0.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yoink_cli-0.1.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file yoink_cli-0.1.0.tar.gz.

File metadata

  • Download URL: yoink_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for yoink_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a12b665c2272aa259e600ffa975a508d86d3bc16535378babe98353cc095651a
MD5 1d48162ec3176bb6a941de536b24b2bb
BLAKE2b-256 956e2f1fb754c6c066f5225ba44e9e04d2923add01447b67f26f77650619a6f2

See more details on using hashes here.

File details

Details for the file yoink_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: yoink_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for yoink_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8779ddc98ad4764d067d74400cf94da6fa114e83d0bb529a983c3fac79b2fc0
MD5 e2eaecc758c64c2360db12cfb191ff1c
BLAKE2b-256 d13d2fb49f4a3f41d509f271efd71046dd6c90791777f1818936022efc73530b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page