yt-stash
Download YouTube videos and playlists from your terminal. Any quality, parallel downloads, members-only videos, subtitles, and a friendly arrow-key menu.
yt-stash is a cross-platform (Linux, macOS, Windows) command-line downloader for single videos, several videos and whole playlists, including members-only and private videos. It is a thin, heavily tested workflow layer on top of yt-dlp, the best-maintained YouTube extraction library, so it keeps working when YouTube changes.
Features
- Every quality: detects all resolutions (144p … 8K, high frame rate, HDR) and lets you choose once for a whole batch. Defaults to 1080p, or the highest available.
- Videos and playlists: one or many links, a text file of links, or every video of a playlist.
- Parallel downloads: several videos at once, plus parallel fragments per video.
- Members-only, private and age-restricted videos through your browser's signed-in session, a
cookies.txtfile, or cookies pasted for one run (never saved). - Audio only (m4a, mp3, opus) and subtitles (save or embed, any language, auto-generated too).
- Resume and skip: interrupted downloads continue; files you already have are skipped; transient errors and rate limits are retried automatically.
- Interactive or scriptable: arrow-key menus with an explanation under every entry, or
--yesplus flags for cron and CI, with documented exit codes. - English and Turkish interface.
Quickstart
# 1. Install (details for every system: docs/installation.md)
pipx install yt-stash
# 2. Open the interactive menu
yt-stash
# 3. Or download straight away
yt-stash video URL # asks for quality and folder
yt-stash video URL -q 720 -o ~/Videos # no questions
yt-stash video URL1 URL2 URL3 -j 3 # three at once
yt-stash playlist "https://www.youtube.com/playlist?list=PL..." # a whole playlist
yt-stash video URL -a mp3 # audio only
yt-stash video URL --subs en,tr --embed-subs # with subtitles
yt-stash video URL --cookies-from-browser firefox # members-only video
$ yt-stash
yt-stash 1.0.0 Download YouTube videos and playlists
▶ What do you want to do? (↑↓ to move, Enter to choose)
❯ Download videos
Download a playlist
Download links from a text file
Show available qualities
Sign-in (off)
Language (English)
Check setup
Command-line options
Quit
Description: Paste one or more video links.
Installation
yt-stash needs Python 3.10+; install ffmpeg and deno too for full quality.
| System | Install |
|---|---|
| macOS | brew install python pipx ffmpeg deno && pipx ensurepath, then pipx install yt-stash |
| Windows (PowerShell) | winget install Python.Python.3.13, winget install Gyan.FFmpeg, winget install DenoLand.Deno, reopen PowerShell, py -m pip install --user pipx, py -m pipx ensurepath, reopen, then pipx install yt-stash |
| Debian / Ubuntu | sudo apt install python3 pipx ffmpeg && pipx ensurepath, install deno, then pipx install yt-stash |
| Fedora / Arch / openSUSE / uv / pip / source | see the installation guide |
Check it: yt-stash --version. If downloads suddenly fail, update first: pipx upgrade yt-stash.
Documentation
| Guide | What is in it |
|---|---|
| Installation | Step by step for macOS, Windows and Linux; updating and uninstalling |
| Using yt-stash | Every feature: menus, videos, playlists, quality, audio, subtitles, resume, language, scripting, all options, recipes |
| Members-only videos | Sign-in with browser cookies, a cookies file or pasted cookies |
| Troubleshooting | Common problems and fixes |
| Translating | Add or improve a language |
| Architecture | How the code is organised and why |
| Changelog | What changed in each release |
Quick reference: yt-stash --help, yt-stash video --help, yt-stash playlist --help.
Exit codes: 0 everything downloaded or already present · 1 at least one video failed ·
2 invalid usage · 130 interrupted with Ctrl+C.
Getting help
- Question or idea? Open a Discussion.
- Found a bug? Open an issue; the form asks for the details that make it fixable.
- Security problem? Please don't open an issue; follow the security policy.
yt-stash is maintained by one volunteer in their spare time. Replies may take a few days; thank you for your patience.
Contributing
Contributions of every size are welcome: bug reports, documentation fixes, translations and code. Read
CONTRIBUTING.md first; issues
labelled good first issue are
a good place to start. By taking part you agree to the
Code of Conduct.
git clone https://github.com/ilkerkeklik01/yt-stash.git && cd yt-stash
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest && ruff check . && ruff format --check .
Legal
yt-stash is released under the MIT License. It is an independent project, not affiliated with or endorsed by YouTube or Google. Only download content you have the right to download, and respect YouTube's Terms of Service and the creators' rights. You are responsible for how you use this tool.
yt-stash does not remove DRM, bypass paywalls or circumvent access controls of its own; it drives yt-dlp, and sign-in works only through cookies you already have. It collects no data and has no telemetry: the only thing it stores is the language you choose, in a local settings file. Everything that goes over the network is done by yt-dlp, to YouTube and its video servers.
yt-stash builds on yt-dlp (Unlicense), rich (MIT), questionary (MIT) and prompt_toolkit (BSD-3-Clause). Thank you to their authors.
Metadata
Release files for yt-stash 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yt_stash-1.0.1.tar.gz | 109.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yt_stash-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 183.7 kB
Release files / yt_stash-1.0.1.tar.gz
| Download URL | yt_stash-1.0.1.tar.gz |
|---|---|
| Size | 109.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa4e49b695e89a9b84bd4da3b7d3116a575ccdc23b3d70402665460b7f9db8a3
|
|
BLAKE2b-256 checksum How to use checksums |
e0fdb7b5afe18faef801989231087613cf3608e84a672c51905035f4d7501491
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency logRelease files / yt_stash-1.0.1-py3-none-any.whl
| Download URL | yt_stash-1.0.1-py3-none-any.whl |
|---|---|
| Size | 74.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
92cfabfb8d7d07585da3ed6fb3a2e984aee25ec7b3c38a8f00d55578b7472b8f
|
|
BLAKE2b-256 checksum How to use checksums |
d0a4ac84e88b5d13017cbf228515567813087662d27c2448135dff55b10341b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.
Transparency log