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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a12b665c2272aa259e600ffa975a508d86d3bc16535378babe98353cc095651a
|
|
| MD5 |
1d48162ec3176bb6a941de536b24b2bb
|
|
| BLAKE2b-256 |
956e2f1fb754c6c066f5225ba44e9e04d2923add01447b67f26f77650619a6f2
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8779ddc98ad4764d067d74400cf94da6fa114e83d0bb529a983c3fac79b2fc0
|
|
| MD5 |
e2eaecc758c64c2360db12cfb191ff1c
|
|
| BLAKE2b-256 |
d13d2fb49f4a3f41d509f271efd71046dd6c90791777f1818936022efc73530b
|