The high‑fidelity universal media downloader and VFR → CFR converter built for video editors. Download from YouTube, TikTok, Instagram, Twitch, and 15+ other sites in 4K, trim before downloading, and get edit‑ready CFR MP4s that won't glitch in Premiere Pro or DaVinci Resolve.
A free, open‑source, cross‑platform desktop app that wraps yt‑dlp, FFmpeg, and HandBrakeCLI behind a clean glassmorphism UI. Built specifically to solve the most painful problem video editors hit when sourcing footage online: variable frame rate (VFR) clips that drift out of sync, glitch on cuts, or refuse to render properly in NLEs.
- Why Universal Downloader
- Features
- Supported sites
- Supported operating systems
- How it works
- Installation
- Running the app
- How to use
- Tech stack
- Project structure
- Troubleshooting
- Contributing
- Donations
- License
If you've ever pulled a clip from YouTube, TikTok, or Twitch into Premiere Pro or DaVinci Resolve and watched it stutter, drift, or throw a "media offline" warning halfway through the timeline — that's Variable Frame Rate (VFR) footage. Web platforms encode in VFR to save bandwidth; professional NLEs expect Constant Frame Rate (CFR). The mismatch is the #1 cause of broken edits with downloaded source clips.
Universal Downloader fixes that end‑to‑end:
- Downloads the highest‑quality stream available (up to 4K HDR where supported).
- Trims to the exact in/out timecodes you specify — no wasted bandwidth on a 2‑hour stream when you only need 45 seconds.
- Optimizes through HandBrake to a CFR MP4 with the right preset for the resolution.
- Delivers an edit‑ready file you can drop straight onto a Premiere or Resolve timeline.
No more "Why is this clip de‑syncing?" No more re‑exporting through Shutter Encoder or Adobe Media Encoder before you can even start cutting.
If you've searched for a "yt‑dlp GUI", "4K YouTube downloader", "VFR to CFR converter", "TikTok downloader without watermark", or "video editor download tool", this is the one app that does all of it.
- 🎨 Modern UI — sleek dark glassmorphism interface (Electron).
- 🐍 yt‑dlp under the hood — the most reliable downloader in the open‑source world.
- 🎯 4K / HDR support — pulls the best stream the site exposes, including 2160p60.
- ✂️ Precision trim — set start/end timecodes (
00:30→01:15) and only those bytes are downloaded. - ⚙️ Auto HandBrake — detects 4K / 1080p / 720p and applies the right CFR preset automatically.
- 🎧 Audio extraction — one‑click rip to MP3, WAV, M4A, or FLAC.
- ⚡ Smart Mode — picks optimal settings based on the URL and your selected use case.
- 🌐 Proxy fallback — automatically rotates through
proxies.txtif the direct connection fails (5 retries). - 🚫 Watermark‑free — TikTok and similar sites are downloaded without overlay watermarks.
- 🛑 Stop anytime — abort an in‑progress download mid‑stream.
- 📦 Standalone build — packaged as a single Windows
.exevia PyInstaller (see Releases).
Anything yt‑dlp supports works in principle. The following are explicitly tested and tuned:
| Category | Sites |
|---|---|
| Video platforms | YouTube (4K, Shorts, Live, Playlists), Vimeo, Dailymotion, Bilibili, Rutube, BBC iPlayer |
| Social | TikTok (no watermark), Instagram (Reels, Posts), Facebook (Watch, Reels, Public), Twitter / X, LinkedIn (Posts + Learning), Reddit (video + audio merged), 9GAG, VK |
| Streaming / clips | Twitch (Clips + VODs) |
| Audio | SoundCloud (high‑quality) |
| Adult | Pornhub |
If you hit a site that isn't listed but is supported by yt‑dlp, paste the URL anyway — it will likely just work.
| OS | Status | Notes |
|---|---|---|
| Windows 10 / 11 | ✅ First‑class | Standalone .exe available in Releases |
| macOS | ✅ Supported | Run from source via npm start |
| Linux | ✅ Supported | Run from source via npm start |
Universal Downloader is a hybrid Electron + Python app. Electron handles the UI; Python does the heavy lifting.
┌────────────────────┐ IPC ┌────────────────────┐ spawn ┌────────────────────┐
│ Electron Renderer │ ──────► │ Electron Main (JS) │ ─────────► │ Python CLI (cli.py)│
│ (script.js + UI) │ ◄────── │ (frontend/main.js)│ ◄───stdout─│ yt-dlp + FFmpeg + │
└────────────────────┘ events └────────────────────┘ JSON │ HandBrakeCLI │
└────────────────────┘
- You paste a URL and hit START DOWNLOAD.
- The renderer (
script.js) fires an IPC message to the Electron main process. - Main spawns
python backend/cli.py <url> --folder <path> ...as a child process. cli.pyrunsyt‑dlpto fetch the stream, optionally trims withdownload_range_func, then pipes through FFmpeg if audio extraction was requested, or HandBrakeCLI if "Optimize" is on.- Progress is emitted as line‑delimited JSON on stdout (
{type, data}), parsed by Electron, and rendered as a live progress bar. - The final file lands in the destination folder you picked. CFR. Edit‑ready.
If the direct connection fails (geo‑block, rate limit, ISP throttle), the Python layer transparently rotates through proxies listed in proxies.txt — up to 5 retries before surfacing an error.
Download the latest pre‑built .exe from the Releases page. Double‑click and you're done — FFmpeg and HandBrakeCLI are bundled.
| Tool | Version | Purpose |
|---|---|---|
| Node.js | v14+ | Electron frontend |
| Python | 3.8+ | Download backend |
| FFmpeg | latest static build | Merge video+audio, audio extraction |
| HandBrakeCLI | latest | VFR → CFR optimization (only if Optimize is on) |
ffmpeg.exe and HandBrakeCLI.exe should live either in your system PATH or directly inside the backend/ folder. The app will auto‑download them if missing on first run.
git clone https://github.com/amolbangare08/Universal-Downloader.git
cd Universal-Downloader# Windows
pip install -r requirements.txt
# macOS / Linux
pip3 install -r requirements.txtcd frontend
npm installFrom the frontend/ directory:
npm startOr from the project root:
npx electron .The Universal Downloader window will launch.
- Paste a URL — copy any supported link to your clipboard and click PASTE.
- Pick a mode:
- Video + Audio — standard download.
- Video Only — silent footage, perfect for B‑roll / stock cuts.
- Audio Only — extract music, voiceover, or interview audio.
- Choose options:
- Quality — auto, 4K, 1080p, 720p, 480p, 360p.
- Cut / Trim — toggle on, then enter
StartandEndtimecodes (HH:MM:SS). - Optimize — toggle on to push the result through HandBrake and force CFR. Recommended for any clip headed into an NLE.
- Audio format (Audio Only mode) — MP3, WAV, M4A, FLAC.
- Click START DOWNLOAD, choose a destination folder, and watch the progress bar.
- The finished file opens in Explorer / Finder when complete.
- Frontend — Electron, HTML5, CSS3 (glassmorphism), Vanilla JS
- Backend — Python 3, yt‑dlp, FFmpeg, HandBrakeCLI
- Packaging — PyInstaller for the standalone build
- Fonts — Poppins (bundled)
- IPC — Node
ipcRenderer/ipcMain+ line‑delimited JSON over Python stdout
Universal-Downloader/
├── main.js # Electron entry (root)
├── frontend/ # The face — Electron UI
│ ├── main.js # Electron main process + IPC handlers
│ ├── index.html # UI layout
│ ├── style.css # Glassmorphism styling
│ ├── script.js # Renderer logic
│ └── package.json
├── backend/ # The brains — Python
│ ├── cli.py # Headless entry, JSON-over-stdout bridge
│ ├── core.py # Configs + tool auto-download
│ ├── downloaders.py # yt-dlp + HandBrake orchestration
│ ├── ffmpeg.exe # (optional) bundled binary
│ └── HandBrakeCLI.exe # (optional) bundled binary
├── old-folder/ # Legacy standalone tkinter version
├── proxies.txt # (gitignored) proxy fallback list
├── requirements.txt # Python deps
├── universal_downloader.spec # PyInstaller spec
└── README.md
- Verify Python is installed and on your PATH:
python --version. - Open the app's DevTools with Ctrl+Shift+I and check the Console for errors.
- Make sure the URL is publicly accessible (not a private/unlisted page).
- Drop a static
ffmpeg.exeinto thebackend/folder, or add FFmpeg to your system PATH. - On first run the app tries to auto‑download it; if your network blocks the fetch, do it manually.
- Only required when Optimize is toggled on. Place
HandBrakeCLI.exeinbackend/or your PATH.
- Add working proxies to
proxies.txt(onehost:portper line) — the app rotates through them automatically.
- These sites change their HTML frequently. Update yt‑dlp:
pip install --upgrade yt-dlp
- Ensure Optimize was toggled on for the download. If you've already downloaded without Optimize, re‑run on the same URL with Optimize enabled, or push the file through HandBrake manually with a CFR preset.
Pull requests are welcome.
- Fork the project.
- Create a feature branch —
git checkout -b feature/MyFeature. - Commit —
git commit -m "Add MyFeature". - Push —
git push origin feature/MyFeature. - Open a Pull Request describing the change.
For larger changes (new site support, UI refactors, packaging changes), open an issue first to discuss the approach.
If Universal Downloader saved you hours of re‑encoding, consider tipping the project.
Bitcoin:
1FVP7EdQZ4GmDpv4VvZUBUMm3B5MLLq2P3
Distributed under the MIT License. See LICENSE for full terms.
Built by editors, for editors.
yt-dlp gui, 4k youtube downloader, vfr to cfr converter, video editor download tool, tiktok downloader no watermark, instagram reels downloader, twitch vod downloader, twitch clip downloader, youtube to mp3, youtube to mp4, premiere pro vfr fix, davinci resolve vfr fix, handbrake gui downloader, ffmpeg gui, electron downloader app, free video downloader, open source video downloader, universal video downloader, batch video trimmer, soundcloud downloader
