Desktop YouTube & TikTok downloader for Windows — neo-brutalist UI, yt-dlp powered, local-first queue and history. Built with Electron, React, and TypeScript.
OmniDL wraps yt-dlp and FFmpeg in a focused UI: paste a link, pick a format, enqueue downloads, and track progress in one place. Settings and history stay on disk (SQLite via sql.js). Optional clipboard watch fills the Home URL when you copy a supported link. Updates ship through GitHub Releases (electron-updater).
Paste a YouTube or TikTok video URL, run Fetch to load title, duration, and format ladder (with rough size hints). Choose video or audio, pick a quality preset, set output folder, then Add to queue (next or end). Auto-fetch (in Options) can run Fetch automatically when the URL field changes.
Runs downloads one at a time with progress, speed, and ETA. Pause, resume, or cancel the active job; queued items wait in order. Uses ffmpeg-static for merge when needed.
Enter a playlist URL, set a limit (max entries), and Get playlist to list titles. Enqueue many items at once with your chosen default format mode (e.g. best video, 480p cap, best audio).
Browse past downloads: titles, paths, and quick actions such as opening the output folder. Data is stored locally in the app user data directory.
Configure download directory, clipboard detection (YouTube / TikTok video links; playlist-only URLs are ignored for Home paste), auto-fetch, yt-dlp version check and update, and application updates from GitHub.
- Windows (current build targets NSIS installer + portable).
- Node.js 20+ to build from source.
Download the installer or portable build from Releases.
npm ci
npm run build
npm run distOutput is written to release/ (gitignored).
| Command | Description |
|---|---|
npm run dev |
Dev mode (electron-vite) |
npm run build |
Build main, preload, and renderer |
npm run lint |
ESLint |
npm run dist |
Build + electron-builder (no publish) |
npm run release |
Build + publish to GitHub Releases — requires GH_TOKEN or GITHUB_TOKEN (PAT with repo scope, or fine-grained with Contents write on this repo). If you see 401 Bad credentials, the token is missing, expired, or lacks scope. |
Publish to GitHub (local):
$env:GH_TOKEN = "ghp_your_classic_pat_here"
npm run releaseUse a classic personal access token with the repo scope, or a fine-grained token with Repository contents read/write for HyIsNoob/OmniDL.
build.publish in package.json points at GitHub. After a release is published, the app uses electron-updater against that feed. Code signing may be required for strict Windows SmartScreen policies depending on your environment.
OmniDL is intended for personal, educational use only. Users are responsible for complying with applicable copyright laws and the Terms of Service of any platform they access.
MIT