Video downloader and converter for macOS. Native desktop app wrapping yt-dlp.
yt-dlp and ffmpeg must be installed:
brew install yt-dlp ffmpegcurl -fsSL https://raw.githubusercontent.com/samuelbailey123/clipper/main/scripts/install.sh | bashThis downloads the latest release, removes the macOS quarantine flag, copies Clipper to /Applications, and cleans up.
- Download the latest
.dmgfrom Releases - If macOS says the file is "damaged", open Terminal and run:
xattr -cr ~/Downloads/Clipper_*_aarch64.dmg
- Open the DMG and drag Clipper to Applications
- On first launch, right-click the app > Open (required once for unsigned apps)
"Clipper is damaged and can't be opened" — This happens because the app is not signed with an Apple Developer certificate. macOS quarantines files downloaded from the internet. Run the xattr -cr command above to remove the quarantine flag, or use the install script which handles this automatically.
"Clipper can't be opened because it is from an unidentified developer" — Right-click the app and select Open. Click Open in the dialog. You only need to do this once.
- Paste YouTube, Vimeo, and other video URLs to download
- Quality selector: Best, 1080p, 720p, 480p, Audio Only
- Real-time download progress
- Batch downloads (up to 20 URLs)
- Concurrent queue (max 2 simultaneous downloads)
- Download history with pagination
- Cancel running downloads
- Automatic YouTube cookie detection from your browser
- Auto-reveal in Finder when downloads complete
- In-app auto-updater (checks GitHub Releases)
- Native macOS window with traffic light controls
Clipper runs locally on your machine, so YouTube downloads work without manual cookie configuration. By default, it reads cookies from Chrome automatically.
To change the browser, open Settings in the app. Supported browsers: Chrome, Firefox, Safari, Edge, Brave, Opera, Vivaldi.
Requires Node.js 20+, Rust toolchain, yt-dlp, and ffmpeg.
npm install
npm run devThis starts both the Vite dev server and the Tauri native window.
npm run buildProduces Clipper.app and Clipper.dmg in src-tauri/target/release/bundle/.
npm test # frontend tests (vitest)
npm run test:watch # watch mode
npm run test:coverage # with coverage
npm run test:rust # rust backend tests (cargo test)- Tauri 2 (Rust backend + WebView frontend)
- React 19 + React Router
- Vite + Tailwind 4
- SQLite via rusqlite (embedded, local DB)
- yt-dlp + ffmpeg for downloading and conversion
- Zod for validation
- Vitest + Testing Library for frontend tests
src/ # Frontend (React + TypeScript)
components/ # React components
hooks/ # Client-side hooks (invoke/listen)
lib/ # Utilities and validations
types/ # Shared TypeScript types
src-tauri/ # Backend (Rust)
src/
lib.rs # App entry, state, setup
db.rs # SQLite database layer
queue_manager.rs # Download queue + concurrency
ytdlp.rs # yt-dlp process management
models.rs # Data structures
commands/ # Tauri command handlers
Releases are automated. To release a new version:
- Bump the version in
package.json,src-tauri/tauri.conf.json,src-tauri/Cargo.toml, andsrc-tauri/Cargo.lock - Merge to
main - The release workflow builds, signs, and publishes a GitHub Release with the DMG and auto-updater manifest
If the version tag already exists, the release is skipped.
This software is proprietary. See LICENSE for details.