yt-dlp/yt-dlp

▲ 313 stars today★ 191,267⑂ 16,604

A feature-rich command-line audio/video downloader

191,267Star
16,604Fork
943Watch
2,652Issue
PythonLanguage
UnlicenseLicense
Created 2020-10-26 · last push 2026-08-30 · repository size 64775 KB · default branch master

README

YT-DLP

[Release version](#installation "Installation") [Python Version](https://github.com/yt-dlp/yt-dlp/blob/master/pyproject.toml "Python Version") [PyPI](https://pypi.org/project/yt-dlp "PyPI") [Discord](https://discord.gg/H5MNcFW63r "Discord") [License: Unlicense](LICENSE "License") [Commits](https://github.com/yt-dlp/yt-dlp/commits "Commit History")

yt-dlp is a feature-rich command-line audio/video downloader with support for thousands of sites. The project is a fork of youtube-dl based on the now inactive youtube-dlc.

INSTALLATION

Windows Unix MacOS PyPI Source Tarball Other variants All versions

You can install yt-dlp using the binaries, pip or one using a third-party package manager. See the wiki for detailed instructions

RELEASE FILES

Recommended

File|Description :---|:--- yt-dlp|Platform-independent zipimport binary. Needs Python (recommended for Linux/BSD) yt-dlp.exe|Windows (Win8+) standalone x64 binary (recommended for Windows) yt-dlp_macos|Universal MacOS (10.15+) standalone executable (recommended for MacOS)

Alternatives

File|Description :---|:--- yt-dlp_linux|Linux (glibc 2.17+) standalone x86_64 binary yt-dlp_linux.zip|Unpackaged Linux (glibc 2.17+) x86_64 executable (no auto-update) yt-dlp_linux_aarch64|Linux (glibc 2.17+) standalone aarch64 binary yt-dlp_linux_aarch64.zip|Unpackaged Linux (glibc 2.17+) aarch64 executable (no auto-update) yt-dlp_linux_armv7l.zip|Unpackaged Linux (glibc 2.31+) armv7l executable (no auto-update) yt-dlp_musllinux|Linux (musl 1.2+) standalone x86_64 binary yt-dlp_musllinux.zip|Unpackaged Linux (musl 1.2+) x86_64 executable (no auto-update) yt-dlp_musllinux_aarch64|Linux (musl 1.2+) standalone aarch64 binary yt-dlp_musllinux_aarch64.zip|Unpackaged Linux (musl 1.2+) aarch64 executable (no auto-update) yt-dlp_x86.exe|Windows (Win8+) standalone x86 (32-bit) binary yt-dlp_win_x86.zip|Unpackaged Windows (Win8+) x86 (32-bit) executable (no auto-update) yt-dlp_arm64.exe|Windows (Win10+) standalone ARM64 binary yt-dlp_win_arm64.zip|Unpackaged Windows (Win10+) ARM64 executable (no auto-update) yt-dlp_win.zip|Unpackaged Windows (Win8+) x64 executable (no auto-update) yt-dlp_macos.zip|Unpackaged MacOS (10.15+) executable (no auto-update)

Misc

File|Description :---|:--- yt-dlp.tar.gz|Source tarball SHA2-512SUMS|GNU-style SHA512 sums SHA2-512SUMS.sig|GPG signature file for SHA512 sums SHA2-256SUMS|GNU-style SHA256 sums SHA2-256SUMS.sig|GPG signature file for SHA256 sums

The public key that can be used to verify the GPG signatures is available here Example usage:

curl -L https://github.com/yt-dlp/yt-dlp/raw/master/public.key | gpg --import
gpg --verify SHA2-256SUMS.sig SHA2-256SUMS
gpg --verify SHA2-512SUMS.sig SHA2-512SUMS

Licensing

While yt-dlp is licensed under the Unlicense, many of the release files contain code from other projects with different licenses.

Most notably, the PyInstaller-bundled executables include GPLv3+ licensed code, and as such the combined work is licensed under GPLv3+.

The zipimport Unix executable (yt-dlp) and release tarball (yt-dlp.tar.gz) contain ISC licensed code from meriyah and MIT licensed code from astring.

See THIRD_PARTY_LICENSES.txt for more details.

The git repository, the PyPI source distribution and the PyPI built distribution (wheel) only contain code licensed under the Unlicense.

Note: The manpages, shell completion (autocomplete) files etc. are available inside the source tarball

UPDATE

You can use yt-dlp -U to update if you are using the release binaries

If you installed with pip, simply re-run the same command that was used to install the program

For other third-party package managers, see the wiki or refer to their documentation

There are currently three release channels for binaries: stable, nightly and master.

When using --update/-U, a release binary will only update to its current channel. --update-to CHANNEL can be used to switch to a different channel when a newer version is available. --update-to [CHANNEL@]TAG can also be used to upgrade or downgrade to specific tags from a channel.

You may also use --update-to (/) to update to a channel on a completely different repository. Be careful with what repository you are updating to though, there is no verification done for binaries from different repositories.

Example usage:

Important: Any user experiencing an issue with the stable release should install or update to the nightly release before submitting a bug report:
# To update to nightly from stable executable/binary:
yt-dlp --update-to nightly

To install nightly with pip:

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

When running a yt-dlp version that is older than 90 days, you will see a warning message suggesting to update to the latest version. You can suppress this warning by adding --no-update to your command or configuration file.

DEPENDENCIES

Python versions 3.10+ (CPython) and 3.11+ (PyPy) are supported. Other versions and implementations may or may not work correctly.

While all the other dependencies are optional, ffmpeg, ffprobe, yt-dlp-ejs and a supported JavaScript runtime/engine are highly recommended

Strongly recommended

Since ffmpeg is such an important dependency, we provide our own builds at yt-dlp/FFmpeg-Builds. In the past, patches were applied to these builds in order to fix common issues for yt-dlp users, but currently our builds are equivalent to upstream ffmpeg. See the readme for details

Important: What you need is ffmpeg binary, NOT the Python package of the same name

A JavaScript runtime/engine like deno (recommended), node.js, bun, or QuickJS is also required to run yt-dlp-ejs. See the wiki.

Networking

Impersonation

The following provide support for impersonating browser requests. This may be required for some sites that employ TLS fingerprinting.

Metadata

Misc

Deprecated

To use or redistribute the dependencies, you must agree to their respective licensing terms.

The standalone release binaries are built with the Python interpreter and the packages marked with \* included.

If you do not have the necessary dependencies for a task you are attempting, yt-dlp will warn you. All the currently available dependencies are visible at the top of the --verbose output

COMPILE

Standalone PyInstaller Builds

To build the standalone executable, you must have Python and pyinstaller (plus any of yt-dlp's optional dependencies if needed). The executable will be built for the same CPU architecture as the Python used.

You can run the following commands:

python devscripts/install_deps.py --include-group pyinstaller
python devscripts/make_lazy_extractors.py
python -m bundle.pyinstaller

On some systems, you may need to use py or python3 instead of python.

python -m bundle.pyinstaller accepts any arguments that can be passed to pyinstaller, such as --onefile/-F or --onedir/-D, which is further documented here.

Note: Pyinstaller versions below 4.4 do not support Python installed from the Windows store without using a virtual environment.

Important: Running pyinstaller directly instead of using python -m bundle.pyinstaller is not officially supported. This may or may not work correctly.

Platform-independent Binary (UNIX)

You will need the build tools python (3.10+), zip, make (GNU), pandoc\ and pytest\.

After installing these, simply run make.

You can also run make yt-dlp instead to compile only the binary without updating any of the additional files. (The build tools marked with \* are not needed for this)

Related scripts

Note: See their --help for more info.

Forking the project

If you fork the project on GitHub, you can run your fork's build workflow to automatically build the selected version(s) as artifacts. Alternatively, you can run the release workflow or enable the nightly workflow to create full (pre-)releases.

USAGE AND OPTIONS

yt-dlp [OPTIONS] [--] URL [URL...]

Tip: Use CTRL+F (or Command+F) to search by keywords

General Options:

-h, --help Print this help text and exit --version Print program version and exit -U, --update Update this program to the latest version --no-update Do not check for updates (default) --update-to [CHANNEL]@[TAG] Upgrade/downgrade to a specific version. CHANNEL can be a repository as well. CHANNEL and TAG default to "stable" and "latest" respectively if omitted; See "UPDATE" for details. Supported channels: stable, nightly, master -i, --ignore-errors Ignore download and postprocessing errors. The download will be considered successful even if the postprocessing fails --no-abort-on-error Continue with next video on download errors;

More Today's Trending projects

1

debpalash / VoiceStudio

Python★ 29,840⑂ 3,606▲ 2,776 stars
2

JustVugg / colibri

C★ 32,609⑂ 3,430▲ 2,173 stars
3

bilawalsidhu / gods-eye-view

JavaScript★ 33,945⑂ 6,772▲ 1,831 stars
4

alibaba / open-code-review

Go★ 26,516⑂ 1,906▲ 1,571 stars
5

ever-co / ever-gauzy

TypeScript★ 6,164⑂ 994▲ 1,130 stars
6

pacifio / atlas

Rust★ 4,440⑂ 274▲ 1,091 stars