A professional YouTube downloader consisting of a Chrome Extension frontend and a Python CLI backend powered by yt-dlp and ffmpeg.
- Modern Dark UI with glassmorphism design
- Smart URL Detection - Automatically detects YouTube videos and playlists
- Real-time Server Status - Shows if Python CLI is running
- Video Preview - Shows thumbnail and title before downloading
- Flexible Options:
- Download single video or entire playlist
- Video or audio-only downloads
- Multiple quality options (4K, 1080p, 720p, 480p, 360p)
- Multiple format options (MP4, MKV, WebM, MP3, M4A, OPUS, FLAC)
- In-page Download Button - Injected directly into YouTube's interface
- Async Queue System - Non-blocking downloads with concurrent processing
- Real-time UI - Beautiful terminal dashboard using Rich library
- Smart Processing - ffmpeg conversion runs in parallel with downloads
- Cross-platform - Works on Windows, macOS, and Linux
- RESTful API - FastAPI server for extension communication
- Progress Tracking - Real-time download speed, progress, and ETA
- Google Chrome or Chromium-based browser (Edge, Brave, etc.)
- Chrome 88+ (Manifest V3 support)
- Python 3.10 or higher
- ffmpeg installed and in PATH
- pip (Python package manager)
- Navigate to the Python CLI directory:
cd python-cli- Install Python dependencies:
pip install -r requirements.txt- Install ffmpeg (if not already installed):
Windows:
- Download from ffmpeg.org
- Extract and add to PATH
macOS:
brew install ffmpegLinux:
sudo apt install ffmpeg # Ubuntu/Debian
sudo dnf install ffmpeg # Fedora-
Open Chrome and navigate to
chrome://extensions/ -
Enable "Developer mode" (toggle in top-right corner)
-
Click "Load unpacked"
-
Select the
chrome-extensionfolder -
The PyFlow extension should now appear in your extensions list
- Navigate to the Python CLI directory:
cd server - Run the application:
python main.py- You should see:
🚀 PyFlow - YouTube Downloader CLI
==================================================
✅ Server started on http://localhost:8000
📦 Download directory: /Users/YourName/Downloads/PyFlow
💡 Open your browser and use the PyFlow extension!
==================================================
4.Help for server info
pyflow/server> python main.py -h
usage: pyflow [-h] [--hidden | --show | --stop | --status] [--path DIR] [--port PORT] [--host HOST] [--no-update] [--version]
[--check]
PyFlow – YouTube Downloader Server
options:
-h, --help show this help message and exit
--hidden Run server in background. Terminal can be closed safely.
--show Run server with full live UI dashboard (default when no mode given).
--stop Stop a running background server and exit.
--status Check whether a PyFlow server is currently running.
--path DIR, -p DIR Set download directory. Saved for future runs.
--port PORT HTTP port (default: 8000)
--host HOST Bind address (default: 127.0.0.1)
--no-update Skip background yt-dlp auto-update on startup.
--version, -v show program's version number and exit
--check Check dependencies and exit.
PyFlow –- YouTube Downloader Server
════════════════════════════════════════════════════════════════════
Method 1: Extension Popup
- Navigate to any YouTube video
- Click the PyFlow extension icon in your toolbar
- Configure quality, format, and download type
- Click "Download"
Method 2: In-page Button
- Navigate to any YouTube video
- Look for the "PyFlow" button next to Like/Share buttons
- Click it to open download options
- Configure and download
- Navigate to a YouTube video that's part of a playlist
- Open the PyFlow extension
- You'll see a "Download Mode" toggle
- Choose "Whole Playlist" to download all videos
- Configure quality and format
- Click "Download"
┌─────────────────────────────────┐
│ ● Server Online │
│ YT-DLP Bridge │
├─────────────────────────────────┤
│ [Thumbnail] Video Title │
├─────────────────────────────────┤
│ Type: [Video ▼] │
│ Quality: [1080p ▼] │
│ Format: [MP4 ▼] │
│ │
│ [ Download ] │
└─────────────────────────────────┘
╭─────────────────────────────────────────────────────────── PyFlow Status ───────────────────────────────────────────────────────────╮
│ PyFlow YouTube Downloader │
│ Queued: 0 | Active: 0 | Done: 0 | yt-dlp: v2026.02.21 | 17:30:39 │
│ │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
⬇ Active Downloads
╭─────────────┬───────────────────────┬──────────┬───────────┬────────────────┬─────────────────────────────┬──────────────┬──────────╮
│ ID │ Title │ Type │ Quality │ Status │ Progress │ Speed │ ETA │
├─────────────┼───────────────────────┼──────────┼───────────┼────────────────┼─────────────────────────────┼──────────────┼──────────┤
│ - │ No active downloads │ - │ - │ - │ - │ - │ - │
╰─────────────┴───────────────────────┴──────────┴───────────┴────────────────┴─────────────────────────────┴──────────────┴──────────╯
✔ Recently Completed
╭─────────────────────┬───────────────────────────────────────────────┬───────────────┬───────────────────────────┬───────────────────╮
│ ID │ Title │ Type │ Status │ File │
├─────────────────────┼───────────────────────────────────────────────┼───────────────┼───────────────────────────┼───────────────────┤
│ - │ No completed downloads yet │ - │ - │ - │
╰─────────────────────┴───────────────────────────────────────────────┴───────────────┴───────────────────────────┴───────────────────╯
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ 📁 C:\Users\Mohammod Mizan\Downloads\PyFlowPro_Downloads | Press Ctrl+C to stop | pyflow --help for CLI options │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Settings are automatically saved:
- Default quality preference
- Default format preference
- Default download type
Edit these variables in download_manager.py:
max_concurrent_downloads: Number of simultaneous downloads (default: 2)- Download directory is automatically set to
~/Downloads/PyFlow
- Make sure the Python CLI is running (
python main.py) - Check that it's running on port 8000
- Verify firewall isn't blocking localhost connections
- Check that ffmpeg is installed:
ffmpeg -version - Verify yt-dlp is installed:
yt-dlp --version - Check Python CLI terminal for error messages
- Refresh the YouTube page
- Check that the extension is enabled
- Try disabling and re-enabling the extension
- Not all videos have all quality/format combinations
- yt-dlp will automatically select the best available option
- Check the terminal output for details
chrome-extension/
├── manifest.json # Extension configuration
├── popup.html # Main popup interface
├── popup.css # Popup styling
├── popup.js # Popup logic
├── content.js # YouTube page injection
└── content.css # Injected button styling
python-cli/
├── main.py # Entry point
├── server.py # FastAPI server
├── download_manager.py # Download queue & yt-dlp
├── ui.py # Rich terminal UI
├── utils.py # Helper functions
└── requirements.txt # Dependencies
Check server status
{
"status": "online",
"queue_size": 2,
"active_downloads": 1
}Add download to queue
{
"url": "https://youtube.com/watch?v=...",
"download_type": "video",
"is_playlist": false,
"quality": "1080p",
"format": "mp4",
"title": "Video Title"
}Get queue status and active downloads
Cancel a specific download
Contributions are welcome! Please feel free to submit a Pull Request.
This project is for educational purposes. Please respect YouTube's Terms of Service and copyright laws.
This tool is for personal use only. The developers are not responsible for any misuse of this software. Always respect content creators' rights and YouTube's Terms of Service.
- yt-dlp - The amazing YouTube downloader
- FFmpeg - Media processing
- FastAPI - Modern Python web framework
- Rich - Beautiful terminal formatting
Made with ❤️ by PyFlow Team