DownPlay is a YouTube video and playlist downloader built on yt-dlp. It supports a normal Python development workflow and a py2c build pipeline that compiles the CLI through Cython into native executables.
This section is for users who only want to download videos and do not care about Python, Cython, compilers, or build tools.
You only need the ready-made DownPlay executable, which you can download from the GitHub Releases page:
For Linux:
downplay-linux-x86_64
For Windows:
downplay-windows-x64.exe
(You can rename these to downplay or downplay.exe for convenience after downloading).
You do not need to install:
- Python
- pip
- yt-dlp
- Cython
- ffmpeg
- any compiler
Run it directly
##OR
Open a terminal in the folder where the downplay file is located.
###On Linux:
Step 1:
Giving execute permissions to the executable file
chmod +x downplay-linux-x86_64Step 2:
./downplay-linux-x86_64 -u "PASTE_YOUTUBE_LINK_HERE" -o downloadsOn Windows Command Prompt:
downplay-windows-x64.exe -u "PASTE_YOUTUBE_LINK_HERE" -o downloadsOn Windows PowerShell:
.\downplay-windows-x64.exe -u "PASTE_YOUTUBE_LINK_HERE" -o downloadsExample:
Linux:
./downplay-linux-x86_64 -u "https://www.youtube.com/watch?v=VIDEO_ID" -o downloadsWindows Command Prompt example:
downplay-windows-x64.exe -u "https://www.youtube.com/watch?v=VIDEO_ID" -o downloadsWindows PowerShell example:
.\downplay-windows-x64.exe -u "https://www.youtube.com/watch?v=VIDEO_ID" -o downloadsFor a playlist:
./downplay -u "https://www.youtube.com/playlist?list=PLAYLIST_ID" -o downloadsWindows PowerShell playlist example:
.\downplay.exe -u "https://www.youtube.com/playlist?list=PLAYLIST_ID" -o downloadsDownPlay will automatically detect whether the link is a single video or a playlist.
Use --output to choose where downloads go:
./downplay -u "PASTE_YOUTUBE_LINK_HERE" -o MyVideosWindows PowerShell:
.\downplay.exe -u "PASTE_YOUTUBE_LINK_HERE" -o MyVideosIf the folder does not exist, DownPlay creates it.
If you do not provide --output, files are saved in the current folder.
During a download, DownPlay shows:
- download percentage
- speed
- estimated time remaining
- completed file name
- final summary
If the download fails, the most common reasons are:
- the YouTube link is private, deleted, age-restricted, or region-blocked
- YouTube changed something and the downloader needs an update
- the video is only available as separate audio/video streams, which this app intentionally avoids
- your internet connection is unstable
If no file downloads, try another public YouTube video first to confirm the app works.
DownPlay downloads progressive formats only, meaning video and audio must already be in one file. It does not merge separate audio and video streams. This keeps the app simple and avoids requiring ffmpeg, but some YouTube videos may not be downloadable in the requested format.
- Download a single video or a full playlist.
- Auto-detect video vs playlist URLs.
- Uses progressive formats only: video and audio in the same file.
- Avoids ffmpeg merging and post-processing.
- Provides visible progress, speed, ETA, and final summary.
- Supports native debug and release builds through
py2c.
For Python development:
- Python 3.10+
yt-dlp
For native builds:
- Python 3 with
venv - C compiler:
gcc/ccon Linux, Visual Studio Build Tools or MinGW on Windows makeon Linux for the wrapper bootstrap
py2c can create the build virtual environment and install Python dependencies automatically.
Run directly with Python:
python3 src/main.py -u "https://www.youtube.com/watch?v=VIDEO_ID" -o downloadsInstall dependencies manually if needed:
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txtpython3 src/main.py -u URL [-o DIR] [--mode video|playlist|auto] [-v]Options:
-u, --url: YouTube video or playlist URL.-o, --output: Output directory. Defaults to the current directory.--mode:video,playlist, orauto. Defaults toauto.-v, --version: Show the app version and author, then exit.
Example:
python3 src/main.py -u "https://www.youtube.com/playlist?list=PLAYLIST_ID" -o downloads --mode playlistLinux/macOS entrypoint:
./py2c <command>Windows entrypoint:
py2c.bat <command>Initialize the build venv and install or refresh dependencies:
./py2c installDepsWindows:
py2c.bat installDepsForce dependency refresh during a build:
./py2c --auto-install assembleDebug
./py2c --auto-install assembleRelease./py2c assembleDebugOutput:
build/downplay
assembleDebug is for development and inspection:
- Uses live source and
.build-venv/site-packages. - Enables Python fault handler, unbuffered output, and tracemalloc.
- Prints py2c boundary diagnostics.
- Keeps Python stack traces and runtime behavior visible.
- Compiles with debug-oriented native flags.
./py2c build is an alias for assembleDebug.
./py2c assembleReleaseOutput:
release/downplay
assembleRelease is the production target:
- Produces a single ready-to-run executable on Linux.
- Produces a single ready-to-run
downplay.exeon Windows. - Requires no Python installation for the end user.
- Requires no pip install or manual library setup.
- Embeds the Cython-built binary, Python runtime, stdlib, native modules,
libpython, and installed site-packages. - Hides py2c, Cython, and Python internals from normal runtime output.
- Uses optimized native build flags.
The release executable extracts its private runtime internally before launching the compiled application.
DownPlay uses GitHub Actions to fully automate its release engineering:
- On every push of a new version tag (e.g.,
v1.0.0), the release.yml workflow triggers automatically. - It spins up isolated Ubuntu and Windows runners.
- The pipeline securely bootstraps the
py2cC compiler toolchain, Python environment, and dependencies (yt-dlp). - It seamlessly bundles everything into architecture-specific, zero-dependency, single-file executables (
downplay-linux-x86_64anddownplay-windows-x64.exe). - The final artifacts are published directly to the GitHub Releases page.
src/main.py Python CLI entrypoint
src/wrapper/py2c.c Linux py2c build wrapper
src/wrapper/onefile_launcher.c Single-file release launcher
src/wrapper/onefile_launcher_windows.c Windows one-file release launcher
src/wrapper/libft/ C helper library used by py2c
py2c Linux/macOS wrapper bootstrap
py2c.bat Windows wrapper entrypoint
py2c_windows.py Windows py2c build implementation
requirements.txt Python runtime dependencies
PY2C_TARGETS.md Detailed target contract
Remove generated build artifacts and build venv:
./py2c clean- Download behavior depends on YouTube and
yt-dlpsupport for the provided URL. - The app intentionally selects progressive formats only, so some videos may fail if YouTube only exposes separate audio/video streams for the requested content.
- Generated outputs in
build/,release/, and.build-venv/are intentionally ignored by git.