Favicon of yt-dlp

yt-dlp

A feature-rich command-line audio and video downloader supporting thousands of sites, with format selection, subtitles, and metadata handling.

Screenshot of yt-dlp website

yt-dlp is a command-line tool for downloading audio and video from thousands of supported websites. It's a fork of youtube-dl, built on top of the now-inactive youtube-dlc fork, and it's aimed at users and scripters who need reliable downloads with fine control over format, quality, and post-processing rather than a simple GUI tool. Because it's driven entirely by command-line flags and configuration files, it's also easy to embed inside other Python scripts and automation pipelines.

Key features

  • Broad site support: works with thousands of sites beyond YouTube, tracked in the project's supported sites list.
  • Format selection and sorting: detailed control over which video, audio, and subtitle streams get downloaded and how they're filtered, sorted, and merged.
  • Post-processing pipeline: options for embedding thumbnails, extracting audio, modifying metadata, and running through SponsorBlock to skip sponsored segments automatically.
  • Update channels: choice of stable, nightly, or master release channels, with a built-in -U update command and the ability to pin or downgrade to a specific tagged version.
  • Plugin system: supports installing and developing plugins to extend or override extractor behavior.
  • Configurable via files or environment: behavior can be driven by command-line flags, configuration files, or environment variables, which makes it practical to embed in scripts and pipelines.
  • Output templates: a flexible templating system for naming downloaded files based on video metadata like title, uploader, or upload date.
  • Embeddable in Python: the project can be imported directly as a Python module and driven from code, not just invoked as a standalone CLI.

Ideal use cases

yt-dlp is a good fit for archiving, batch downloading playlists, or building automation around video and audio retrieval, since it exposes granular options for output naming, format selection, and post-processing that a GUI downloader typically hides. It's also useful when you need to work around site-specific quirks, since active development keeps up with changes to how sites serve media, and release channels let cautious users stay on stable while power users track nightly fixes. For embedding into other tools, it can be imported directly and used from Python code rather than shelling out to a separate binary.

It's not the right tool if you're looking for a polished graphical download manager. There's no official GUI in this repository, and getting full functionality, especially for some YouTube features, requires installing extra dependencies like ffmpeg and a JavaScript runtime. Casual users who just want to paste a link and click download may find the command-line interface and dependency setup to be more than they need, and should look at a wiki-recommended GUI wrapper instead.

The project also documents extractor-specific arguments, geo-restriction workarounds, and metadata modification options for more advanced scripting needs, and a plugin system lets developers extend or override how specific sites are handled without patching the core project. Detailed embedding examples in the docs show how to call yt-dlp's internal API from another Python program, which is useful if you're building a larger tool around it rather than shelling out to the command-line binary.

Installation

yt-dlp supports Python 3.10+ (CPython) and 3.11+ (PyPy). Install with pip:

python -m pip install -U "yt-dlp[default]"

Standalone binaries are also available for Windows, Linux, and macOS from the project's releases page, along with a source tarball. For full functionality, install these strongly recommended dependencies separately:

  • ffmpeg and ffprobe, required for merging separate video and audio streams and for most post-processing options.
  • yt-dlp-ejs, required for full YouTube support, along with a JavaScript runtime such as Deno (recommended), Node.js, Bun, or QuickJS.
  • curl_cffi, recommended for impersonating Chrome, Edge, or Safari requests on sites that use TLS fingerprinting.

To update an existing installation:

yt-dlp -U

To switch release channels, for example to the nightly channel recommended for regular users:

yt-dlp --update-to nightly

Tags:

Frequently asked questions

Share:

Stars
176.7K
Forks
14.9K
Last commit
3 days ago
Repository age
6 years
License
Unlicense
Self-hosted
No
Activity score
92/100
View Repository
Built with:

Similar to yt-dlp

Favicon

 

  
  
Favicon

 

  
  
Favicon