This project is a modular YouTube/media downloader built around
yt-dlp.
It provides a menu-driven console interface, supports
categories, format selection, parallel downloads,
subtitles, thumbnails, and more.
- Manages download categories and base paths.
- Handles config (
config.yml) with:download_path→ default folder.categories→ user-defined named paths (Music, Movies, etc.).default_category→ preselected category for runs.retries,max_parallel_downloads.
- Features:
- Add, rename, delete categories.
- Set default category.
- Folder picker popup (Tkinter).
- Sound alert on folder selection.
- Returns path to be used in main script.
- Handles format selection and subtitles.
- Fetches available formats from
yt-dlp. - Combines video, audio, and conversion options into a single table.
- Columns: ID, extension, resolution/note, vcodec, acodec, bitrate, fps, size.
- Always merges video + audio (avoids separate raw streams).
- Conversion options:
mp3,m4a,opus(via postprocessor).
- Subtitles:
- Ask user → language codes (default
en). - Download auto-subs + normal subs as
.srt.
- Ask user → language codes (default
- The main entry point of the project.
- Handles update-check for
yt-dlp,rich,PyYAML,plyer. - Features:
- Menu system
- Manage categories
- Start downloading
- Exit (only when user confirms)
- Link collection
- Option 1 → Paste URLs one by one.
- Option 2 → File picker popup to choose a
.txtfile (plays system sound when dialog opens). - Handles playlists (extracts entries).
- Target selection
- Base path, category, or custom folder.
- Saves
last_used_path.
- Format selection
- Calls
format_manager.choose_format_and_postprocessors. - User picks best/custom/index.
- Calls
- Subtitle options
- Prompted once per session.
- Thumbnail options
Y= normal thumbnail.H= best quality thumbnail.N= skip thumbnails.
- Download execution
- Parallel downloads (
ThreadPoolExecutor). - Progress bars (
rich.progress). - Each video = one unique progress bar showing the title (instead of URL).
- Auto-resume partial downloads.
- Parallel downloads (
- Notifications
- Desktop notification when all downloads finish.
- Post-actions
- Auto-open folder after downloads.
- Script does not close → loops back to menu so user can run another batch.
- Menu system
-
Run
Yt_downloader.pypython Yt_downloader.py
-
Menu → Choose option:
[1]Manage categories\[2]Start downloading\[3]Exit
-
Target Path Selection
- Pick a category, custom folder, or default path.
-
Paste Links
- Paste URLs one by one, or drag-drop a
.txtfile containing URLs.\ - Playlists auto-expanded into individual items.
- Paste URLs one by one, or drag-drop a
-
Format Selection
- Unified format table shown.\
- Options: Best, Index, Custom code, Back.
-
Subtitles
- Choose
Y/N/B.\ - Input subtitle language codes (e.g.,
en,hi).
- Choose
-
Thumbnails
- Choose
Y(normal),H(best quality), orN(skip).
- Choose
-
Download Execution
- Progress bars shown for each URL.\
- Resume supported (
--continuedl).\ - Parallel downloads based on config (
max_parallel_downloads).
-
Completion
- Desktop notification pops up.\
- Target folder auto-opened.
Example:
# yt-dlp Manager Downloader Config (config.yml)
download_path: "E:/Downloads"
max_parallel_downloads: 2
categories:
Music: "E:/Media/Music"
Movies: "E:/Media/Movies"
default_category: Music
retries: 3- Unified format table (video + audio + conversions).
- Bitrate, fps, file size estimation.
- Always merges video + audio.
- Resume failed downloads.
- Queue
.txtfile support (drag & drop friendly). - Desktop notifications.
- Optional thumbnail download (normal / best / none).
- Unique progress bars (no more duplicates).
- Python 3.8+
- Packages auto-installed:
yt-dlp\rich\PyYAML\plyer
- Flexible: works with videos, playlists, audio extraction.\
- Configurable: categories, retries, parallelism.\
- User-friendly: colored console UI, progress bars, notifications.