Skip to main content

yt-stash

Download YouTube videos and playlists from your terminal. Any quality, parallel downloads, members-only videos, subtitles, and a friendly arrow-key menu.

CI PyPI Python License: MIT

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.txt file, 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 --yes plus 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 https://youtu.be/dQw4w9WgXcQ                      # 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 .

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 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.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 yt-stash 1.0.0
File Size Uploaded
yt_stash-1.0.0.tar.gz 109.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yt-stash 1.0.0
File Interpreter ABI Platform
yt_stash-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 183.3 kB

Release files / yt_stash-1.0.0.tar.gz

Download URL yt_stash-1.0.0.tar.gz
Size 109.0 kB
Tags Source
SHA-256 checksum
How to use checksums
530f1727ebcbbf17c6fe6e545ac37605d662d7f7c5340d94653922fde255239f
BLAKE2b-256 checksum
How to use checksums
2befe7bc83f080f1698fd948858ededf0cdd9e537fbbc50e065e660474e50d46
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

Release files / yt_stash-1.0.0-py3-none-any.whl

Download URL yt_stash-1.0.0-py3-none-any.whl
Size 74.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d70a55d4cf8d13a1d26d0b96dd3400e554d901055ddc5faa004d8c3ed84f6f8
BLAKE2b-256 checksum
How to use checksums
160abf6e7f5860d636c40afbdad4771900b2b444b92b01c9a146905f54c92076
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

Release history Release notifications | RSS feed

1.0.1

2 release files

This release

1.0.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