⚡ ydlx (yt-dlp eXtended)
A modern, fast, interactive CLI dashboard and downloader built on top of yt-dlp.
ydlx eliminates complex parameter strings and brings an intuitive interactive menu, universal codec compatibility presets, automated SponsorBlock skipping, browser cookie integration, and smart platform-agnostic output organization.
✨ Features
- 🎮 Interactive Dashboard: Run
ydlxwithout arguments to launch a guided terminal menu. - 📁 Smart Output Routing:
- Audio files automatically save to
~/Downloads/audio - Videos automatically save to
~/Downloads/video
- Audio files automatically save to
- 🎬 Universal MP4 Mode: Automatically selects and muxes compatible H.264 + AAC streams that play everywhere.
- 🎵 Dedicated Audio Extraction: One-command audio downloading with format conversion (M4A, MP3, WAV, FLAC).
- 💬 Subtitles & Closed Captions: Download separate
.srtfiles, embed subtitles into video files, or download subtitles only without fetching the video. - 🛡️ SponsorBlock Integration: Seamlessly skip sponsors and self-promotions with
--sponsorblock/-s. - 🍪 Browser Cookie Extraction: Avoid 403 Forbidden / bot-detection errors by loading cookies directly from Chrome, Firefox, Edge, Brave, Safari, or Opera.
- 🎨 Rich UI: Beautiful formatted metadata tables and download progress bars with native UTF-8 support.
📦 Installation
Prerequisites
Make sure FFmpeg is installed and accessible on your system PATH.
Deno is optional but recommended: it lets yt-dlp solve YouTube's JavaScript challenges, so downloads run at full speed and all formats stay available.
Install from PyPI (recommended)
# with uv
uv tool install ydlx
# or with pip
pip install ydlx
# or with pipx
pipx install ydlx
Install from source (requires uv)
Clone this repository and install it as an isolated tool:
git clone git@github.com:yousefmrashad/ydlx.git
cd ydlx
uv tool install .
This installs the ydlx command globally while keeping dependencies isolated from your system Python.
To upgrade after pulling new changes:
git pull
uv tool install . --force
To uninstall:
uv tool uninstall ydlx
🚀 Usage
1. Interactive Wizard (Default)
Simply run:
ydlx
This opens the interactive dashboard where you can inspect metadata, choose resolutions, extract audio, download subtitles, and manage cookies.
2. Download Video / Playlist
# Download Universal MP4 (H.264 + AAC) to ~/Downloads/video
ydlx download "https://www.youtube.com/watch?v=..."
# Cap the resolution (picks the best available at or below it)
ydlx download "https://www.youtube.com/watch?v=..." --res 1080
# Highest quality instead (AV1/VP9, native container)
ydlx download "https://www.youtube.com/watch?v=..." --preset best --res 720
# Escape hatch: raw yt-dlp format code or selector (cannot be combined with --preset/--res)
ydlx download "https://www.youtube.com/watch?v=..." -f "137+140"
ydlx download "https://www.youtube.com/watch?v=..." -f "bestvideo[height<=720]+bestaudio"
# Download and embed subtitles directly into the video
ydlx download "https://www.youtube.com/watch?v=..." --embed-subs --sub-langs en,ar
# Download subtitles as separate .srt file alongside the video
ydlx download "https://www.youtube.com/watch?v=..." --subs --auto-subs
# Skip sponsor segments
ydlx download "https://www.youtube.com/watch?v=..." -s
# Custom output destination
ydlx download "https://www.youtube.com/watch?v=..." -o "./custom_folder"
| Preset | Result |
|---|---|
universal (default) |
H.264 video + AAC audio, merged into MP4 — plays on any device |
best |
yt-dlp's highest ranked quality (usually AV1/VP9), native container |
3. Download Subtitles Only
# Download English subtitles (.srt) to ~/Downloads/video without downloading the video
ydlx subs "https://www.youtube.com/watch?v=..."
# Download specific languages with auto-caption fallback
ydlx subs "https://www.youtube.com/watch?v=..." --sub-langs en,es,ar
# Choose the subtitle format
ydlx subs "https://www.youtube.com/watch?v=..." --sub-format vtt
4. Extract Audio
# Extract M4A audio to ~/Downloads/audio
ydlx audio "https://www.youtube.com/watch?v=..."
# Convert to MP3
ydlx audio "https://www.youtube.com/watch?v=..." --codec mp3
5. Inspect Metadata & Available Subtitles
# View metadata, formats, and available subtitle languages
ydlx info "https://www.youtube.com/watch?v=..."
# Save metadata to .info.json in the current directory
ydlx info "https://www.youtube.com/watch?v=..." --save
# Save metadata into a specific directory
ydlx info "https://www.youtube.com/watch?v=..." -o "./metadata"
Shared Flags
| Flag | Meaning |
|---|---|
-o |
Output directory |
-b |
Extract cookies from browser (chrome, firefox, edge, brave, safari, opera) |
-l |
Comma-separated subtitle languages |
-S |
Download subtitles as a separate file |
--auto-subs / --no-auto-subs |
Include auto-generated captions |
-s |
Skip sponsor segments via SponsorBlock |
-v |
Verbose output |
🧪 Development
# Install with dev dependencies
uv sync --group dev
# Run the test suite (no network required)
uv run pytest
# Lint, format, and type check
uv run ruff check .
uv run ruff format --check .
uv run basedpyright
CI runs lint, format check, tests, and type checks on Linux and Windows.
📄 License
GPL-3.0 — see LICENSE
Metadata
Release files for ydlx 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ydlx-0.3.0.tar.gz | 36.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ydlx-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 66.3 kB
Release files / ydlx-0.3.0.tar.gz
| Download URL | ydlx-0.3.0.tar.gz |
|---|---|
| Size | 36.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b7447fad06e40017e087751cfcfd774408ec328db25d7ff9832853443dd02f0
|
|
BLAKE2b-256 checksum How to use checksums |
e83e619e68f34142e6df6bbdda7a8ae5581f9b57567f44dadb686a0278445bec
|
| 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 3, 2026.
Transparency logRelease files / ydlx-0.3.0-py3-none-any.whl
| Download URL | ydlx-0.3.0-py3-none-any.whl |
|---|---|
| Size | 29.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d99ed916f2207629a0e5aa0247b58059dc5015d959452032e7a78ca3f060225b
|
|
BLAKE2b-256 checksum How to use checksums |
968ee63a90f0aa38a728b9e37fa2d2ac26c6a48625e8accb4d3d280e1f8c3142
|
| 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 3, 2026.
Transparency log