A universal video downloader with a sleek native GUI — powered by yt-dlp.
Download videos from YouTube, Instagram, TikTok, X/Twitter, Facebook, Vimeo, Reddit, Twitch, SoundCloud, and 1000+ more sites.
- 🎥 Download from anywhere — YouTube, Instagram, TikTok, X/Twitter, Facebook, Reddit, Vimeo, Twitch, SoundCloud, Dailymotion, Bilibili, and more
- 🖥️ Native dark-themed GUI — built with Swift (macOS) and CustomTkinter (Windows/cross-platform)
- 📺 Quality selector — choose from Best (Auto), 4K, 1080p, 720p, 480p, etc.
- 🎵 Multiple formats — MP4, WebM, MP3, M4A
- 🖼️ Video preview — see thumbnail, title, duration, and platform badge before downloading
- 📊 Real-time progress — progress bar with speed, ETA, and live log output
- 📁 Custom save location — pick any folder on your system
- 🏷️ Metadata embedding — automatically embeds thumbnails and metadata (when FFmpeg is available)
- ❌ Cancel downloads — stop any download mid-progress
- 🔄 Auto FFmpeg detection — finds bundled or system FFmpeg, degrades gracefully without it
| Platform | Status |
|---|---|
| YouTube | ✅ Full support |
| ✅ Full support | |
| TikTok | ✅ Full support |
| X / Twitter | ✅ Full support |
| ✅ Full support | |
| Vimeo | ✅ Full support |
| ✅ Full support | |
| Twitch | ✅ Full support |
| SoundCloud | ✅ Full support |
| Dailymotion | ✅ Full support |
| Bilibili | ✅ Full support |
| 1000+ more | ✅ Via yt-dlp |
Make sure you have the following installed:
- Python 3.9+ — Download Python
- FFmpeg (recommended for best quality) — Download FFmpeg
- yt-dlp — installed automatically via
requirements.txt, or install withpip install yt-dlp
- Xcode Command Line Tools — for compiling the Swift GUI
- yt-dlp via Homebrew (for the native Swift app):
brew install yt-dlp ffmpeg
-
Clone the repository:
git clone https://github.com/SiyabongaDlamini/UNIDOWNLOAD.git cd UNIDOWNLOAD -
Install dependencies:
pip install -r requirements.txt
-
Run the app:
python yt_gui.py
Note: On Windows, FFmpeg is optional. Without it, Unidown will download single-stream video (lower quality). Install FFmpeg for best results and audio extraction.
The macOS version is a native Cocoa app written in Swift that calls yt-dlp under the hood.
-
Clone the repository:
git clone https://github.com/SiyabongaDlamini/UNIDOWNLOAD.git cd UNIDOWNLOAD -
Install yt-dlp and FFmpeg:
brew install yt-dlp ffmpeg
-
Compile and run:
swiftc -O -framework Cocoa -o Unidown Unidown.swift ./Unidown
Tip: To build a proper
.appbundle, create your ownInfo.plistandAppIcon.icns, then use the standard macOS app bundle structure.
For a quick terminal-based download (no GUI):
chmod +x download.sh
./download.shThis will prompt you for a URL and download the highest quality MP4 to ~/Downloads.
This project includes a GitHub Actions workflow that automatically builds a Windows .exe using PyInstaller.
To trigger the build:
- Push to
mainormasterbranch - Or manually trigger via the Actions tab → Build Windows EXE → Run workflow
To build locally on Windows:
pip install -r requirements.txt
pip install pyinstaller
pyinstaller --noconfirm --onefile --windowed --collect-all customtkinter --collect-all imageio_ffmpeg --name "Unidown" "yt_gui.py"The executable will be in the dist/ folder.
- Fork this repository on GitHub
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/UNIDOWNLOAD.git cd UNIDOWNLOAD - Make your changes — the codebase is structured as follows:
UNIDOWNLOAD/
├── yt_gui.py # Windows/cross-platform GUI (Python + CustomTkinter)
├── Unidown.swift # macOS native GUI (Swift + Cocoa)
├── download.sh # Simple terminal-based downloader
├── requirements.txt # Python dependencies
├── LICENSE # MIT License
├── .github/
│ └── workflows/
│ └── build-windows.yml # GitHub Actions — auto-build Windows EXE
└── .gitignore
| File | What it does | Language |
|---|---|---|
yt_gui.py |
The full Windows/Linux GUI app — URL input, preview, quality selection, download with progress | Python |
Unidown.swift |
The full macOS native GUI app — same features, Cocoa UI | Swift |
download.sh |
Minimal terminal downloader — edit for custom yt-dlp options | Bash |
requirements.txt |
Python packages — add any new dependencies here | — |
build-windows.yml |
CI/CD pipeline — modify PyInstaller flags or add macOS builds | YAML |
- 🎨 Change the theme — edit the color constants at the top of
yt_gui.pyorUnidown.swift - ➕ Add new platforms — extend the
PLATFORM_MAPdict inyt_gui.pyorplatformInfo()in Swift - 📦 Change default format — modify the
format_vardefault in the GUI code - 🔧 Add yt-dlp flags — customize
ydl_optsdict in_run_download()(Python) orargsarray inrunDownload()(Swift) - 🪟 Customize the EXE build — edit
.github/workflows/build-windows.yml
- Push your changes:
git add . git commit -m "Your changes" git push origin main
| Package | Purpose |
|---|---|
customtkinter |
Modern dark-themed GUI framework |
yt-dlp |
Core video downloading engine |
Pillow |
Thumbnail image processing |
requests |
HTTP requests for thumbnails |
imageio-ffmpeg |
Bundled FFmpeg for PyInstaller builds |
| Tool | Required? | Purpose |
|---|---|---|
| Python 3.9+ | ✅ Yes | Runtime for yt_gui.py |
| FFmpeg | ⚡ Recommended | Video/audio merging, metadata embedding |
| yt-dlp (brew) | 🍎 macOS only | Required by the Swift native app |
This project is licensed under the MIT License — see the LICENSE file for details.
Siyabonga Majaha Dlamini
Social: lugal_siyabonga
Built with ❤️ using yt-dlp, Swift, and Python