Free, open-source desktop app to download video & audio from YouTube, Instagram, Twitter/X, Vimeo, and 1,800+ other sites via yt-dlp: plus a growing local toolbox to convert, compress, watermark, redact, generate QR codes, and remove backgrounds. No cloud, no subscriptions, no tracking, no uploads. Everything stays on your computer.
⬇ Download the latest release · Windows, macOS (Apple Silicon), and Linux
- Download & Install
- Common installation mistakes
- See it in action
- Features
- Usage
- Build from Source
- Project Structure
- Credits
- License
Go to the Releases page, scroll down to Assets, and pick the file for your system:
| Platform | File |
|---|---|
| macOS (Apple Silicon) | bWeb-x.x.x.dmg |
| Windows | bWeb-Setup-x.x.x.exe |
| Linux | bWeb-x.x.x.AppImage |
Only Apple Silicon Macs are built at the moment: no Intel (
x64) mac build is published yet.
No dependencies to install. yt-dlp and ffmpeg are bundled inside the app: nothing else to download or configure.
- Download the
.dmgfile and double-click it: a window opens showing the bWeb icon next to a shortcut to your Applications folder - Drag the bWeb icon onto the Applications shortcut (don't skip this: see the mistake below)
- Open Applications (Finder → Applications, or press ⌘⇧A) and double-click bWeb
bWeb isn't code-signed with a paid Apple Developer certificate (that costs $99/year for a free open-source project), so macOS blocks it on first launch. On macOS Sequoia and Sonoma it shows:
"bWeb is damaged and can't be opened. You should move it to the Trash."
The app isn't actually damaged: macOS is just refusing to run anything it can't verify
the publisher of. To fix it, open Terminal (Spotlight → type Terminal → Enter) and
run:
xattr -cr /Applications/bWeb.appThen double-click bWeb again: it opens normally from that point on, no need to repeat this on future launches or updates.
If you haven't moved it to Applications yet, run the same command on the
.dmgfile instead:xattr -cr ~/Downloads/bWeb-*.dmg
- Download and run the
.exeinstaller - Windows SmartScreen will likely show "Windows protected your PC": this appears for any app that isn't from a paid, verified publisher, it doesn't mean anything is wrong. Click More info, then Run anyway (see the mistake below, the "Run anyway" button only appears after clicking "More info")
- bWeb installs automatically and creates a shortcut: no further steps
Installs per-user: no admin rights required. Uninstall from Settings → Apps.
- Download the
.AppImagefile - Make it executable: right-click → Properties → Permissions → Allow
executing file as program (or
chmod +x bWeb-*.AppImagein a terminal) - Double-click to run
On newer Ubuntu/Debian (22.04+), AppImages need
libfuse2to launch at all. If double-clicking does nothing, runsudo apt install libfuse2once.
A few things that trip people up, since bWeb isn't distributed through an app store with its own guided install:
- macOS: opening the app straight from the
.dmgwindow instead of dragging it to Applications first. It may seem to launch fine, but the app will be running from a read-only disk image: settings and updates can behave unpredictably. Always drag it to Applications first, then open it from there. - macOS: copy-pasting the
xattrcommand with the wrong path. If Terminal saysNo such file or directory, double-check bWeb is actually in/Applications(not still in Downloads): or use the.dmgversion of the command shown above instead. - Windows: clicking "Don't run" on the SmartScreen warning. The safe option, Run anyway, is hidden one click deeper behind More info: easy to miss the first time.
- Windows: antivirus flags or deletes a bundled file (usually
yt-dlp.exeorffmpeg.exe). This is a well-known false positive for yt-dlp-based tools: some antivirus engines flag anything that fetches media over the network. If this happens, restore the file from quarantine and add bWeb's install folder to your antivirus's exclusions. - Linux: double-clicking the AppImage before making it executable. Nothing happens, or the file manager offers to open it as an archive/text file instead of running it: see step 2 above.
If none of this fixes it, please open an issue with your OS version and what you see: it helps fix it for the next person too.
Paste a URL, bWeb fetches the title, thumbnail, and every quality/format available for it. Pick one (or hit Batch for up to 50 links at once) and it lands in the queue.
Six local file tools live in one catalog: click Tools in the sidebar to jump straight to any of them without leaving the page you're on.
QR Code: generate and style a QR code from any link or text, live as you type
Sequential queue, one failure never stops the rest |
Bilingual (EN/FR), local-only settings |
Light mode |
Dark mode: one click in the titlebar |
- Single video: Paste a URL, preview the metadata and thumbnail, pick a quality (4K / 2K / 1080p / 720p / 480p or lower), download as MP4 or extract audio as MP3, M4A, OPUS, FLAC, or WAV
- Playlist: Paste a playlist URL, select which items to download, pick a format for the whole batch
- Batch mode: Paste up to 50 URLs at once, pick a quality preset, add them all to the queue
- Trim before download: Scrub a real preview player (or drag the range slider: both stay in sync) to pick start/end points before adding to queue, or use "Mark start/end" while it plays. Supports multiple segments. Works on live streams too: since the total duration isn't known yet, marking is based on elapsed time since the broadcast actually started, and the download uses yt-dlp's
--live-from-startto grab just that part
- Sequential processing with real-time progress per item
- Pause, retry failed, clear done, or cancel all: one failure never stops the rest
- Active download strip always visible at the bottom
- In-progress downloads survive an app quit or crash: they resume as pending on next launch
- A download that stalls for 5 minutes with no progress is auto-cancelled instead of blocking the rest of the queue
Three sub-views for three different jobs: same tab, same "Saving to" destination.
- Video & Audio: drop any local video or audio file to convert or trim it. Supports MP4, MKV, MOV, AVI, WebM, MP3, WAV, FLAC, M4A, and more, including professional/broadcast codecs (HAP for VJ/playback software, DNxHR for mastering). Trim with a visual timeline before converting. Cancel mid-conversion: no partial output file left behind
- Image: convert between JPEG, PNG, WebP, AVIF, TIFF, and GIF, including HEIC (iPhone photos) as an input format, no extra install required
- Document: turn Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, or PDF into clean Markdown, or Word/PowerPoint/Excel straight into a PDF, without needing Microsoft Office or LibreOffice installed
- Once a batch finishes, "Open folder" and "Convert another file" replace the single action button: nothing auto-clears itself
- Drop an image (JPG/PNG/WebP/AVIF/TIFF) or PDF, batch multiple files at once
- Three no-jargon presets, Maximum quality / Balanced / Smallest, ranked by actual measured output size, not a fixed setting
- Target-size mode for images: enter a size in MB and bWeb finds the closest match
- Never overwrites the original: always writes a new
_compressedfile - Once a batch finishes, "Open folder" and "Compress another file" replace the single action button: nothing auto-clears itself
- Watermark: Tile a text or logo watermark diagonally across images or PDFs, batch mode. PDF watermarking rasterizes each page so the mark can't be stripped in a couple of clicks in Acrobat/Illustrator
- Redact: Draw zones over an image or PDF page to permanently black out, blur, or pixelate sensitive content. Redaction is real pixel destruction (rasterized), not a shape drawn on top that can be removed to reveal the original underneath
- Redact PDF editor: Real zoom (25%–400%, mouse wheel/trackpad or +/− buttons) and pan (drag or Space+drag) over the actual PDF, rendered client-side so landscape/portrait pages and fine detail (maps, technical drawings) stay sharp at any zoom level: not a fixed-resolution snapshot
- Generate a QR code from any link or text, live preview as you type
- Optional logo in the center (error correction is bumped automatically: nothing to configure)
- Shape: square, rounded, or circle frame: baked into the exported file, not just the preview
- Export as PNG (512/1024/2048px) or SVG
- Drop, browse, or paste an image from your clipboard: get a transparent PNG back, runs a local AI model, nothing uploaded
- Before/after preview on a checkerboard so you can see the real transparency
- If a photo has no distinct subject to cut out (a full scene/landscape rather than a product-on-background shot), bWeb automatically falls back to trimming solid-color borders instead of handing back a blank image
- YouTube: Sign in to access age-restricted, private, and members-only videos. Your credentials go directly to Google through their standard login page
- Instagram: Sign in to download from your saved collections. The app opens Instagram's login page directly: your password is never stored
- Vimeo: Sign in for Pro/private videos, or import your entire Vimeo library via a personal access token (title, description, upload date, direct download: bypasses yt-dlp's Vimeo bot detection entirely)
yt-dlp doesn't support saved collections natively. bWeb bridges the gap with a built-in scraper:
- Sign in via Settings → Instagram Account
- Paste a saved collection URL
- The app opens the page in a hidden browser, scrolls through it, and collects all post links
- Results appear in a playlist-style picker: select what you want and queue
- French / English: Full bilingual UI, toggle in Settings
- Light and dark mode: Follows your system preference, or force one from the titlebar toggle
- Download history: Quick access to all previously fetched videos with cached metadata
- Download location: Change where files are saved (defaults to
~/Downloads/bWeb) - Language, theme: see Interface above
- Updates: bWeb checks GitHub for a newer version on launch (and on demand from the About tab) and shows a notification with a link to the release: nothing is ever silently downloaded or installed
- Paste a video or playlist URL and click Fetch
- Pick a quality or audio format
- Click Add to Queue
- Go to Queue and click Start Queue
Files are saved to ~/Downloads/bWeb by default. Change the location in Settings → Storage.
You can paste and fetch multiple URLs back-to-back: each result lands in a side panel so you can review and queue them one by one.
git clone https://github.com/CellPod/bweb.git
cd bweb
npm install
npm run devnpm install downloads yt-dlp and ffmpeg automatically for your platform, plus the
Background Remover's ONNX model (~433MB, one-time, skipped if already present).
npm run build:mac # macOS: .dmg + .zip
npm run build:win # Windows: NSIS installer
npm run build:linux # Linux: AppImageFor Apple Silicon:
npm run build:mac -- --arm64If you're building for a different architecture, set environment variables before npm install:
Windows (x64) from macOS:
export npm_config_platform=win32
export npm_config_arch=x64
rm -rf node_modules bin
npm install
npm run build:winLinux (x64):
export npm_config_platform=linux
export npm_config_arch=x64
rm -rf node_modules bin
npm install
npm run build:linuxbweb/
├── src/
│ ├── main/
│ │ ├── main.js # Electron main process: window, IPC, history
│ │ ├── preload.js # Context bridge (window.api)
│ │ ├── ytdlp.js # yt-dlp integration: spawn, parse, download
│ │ ├── queue.js # Sequential download queue with per-item state
│ │ ├── cookies.js # YouTube + Instagram cookie auth
│ │ ├── scraper.js # Instagram collection scraper (BrowserWindow)
│ │ ├── vimeoApi.js # Vimeo API-based library import
│ │ ├── directDownload.js # Plain-HTTPS downloader (Vimeo library items)
│ │ ├── converter.js # Local file conversion via ffmpeg
│ │ ├── compressor.js # Image/PDF compression (sharp + Ghostscript)
│ │ ├── ghostscriptClient.js # Talks to the Ghostscript worker subprocess
│ │ ├── ghostscriptWorker.js # Isolated subprocess running Ghostscript WASM
│ │ ├── watermark.js # Tiled watermark, images + PDF
│ │ ├── redact.js # Zone-based black out / blur / pixelate
│ │ ├── bgRemover.js # Background removal (local ONNX model)
│ │ ├── qrGenerator.js # QR export file-write helper (rendering is client-side)
│ │ ├── updater.js # Update checker via GitHub Releases API
│ │ ├── localServer.js # Loopback-only HTTP server the renderer loads from (not
│ │ │ # file://, so the YouTube trim preview embed can load)
│ │ └── utils.js # Dev mode flag, logging helpers
│ └── renderer/
│ ├── index.html # UI structure
│ ├── renderer.js # UI logic, state, rendering
│ ├── i18n.js # EN/FR translations and language toggle
│ ├── index.css # All styles
│ ├── fonts/ # Bundled Inter woff2 weights
│ └── vendor/ # Vendored client-side libs (qr-code-styling, PDF.js)
├── scripts/
│ ├── postinstall.js # Downloads yt-dlp, ffmpeg, Deno, and the Background Remover
│ │ # model on npm install
│ ├── release-all.js # Automates the mac/Linux/Windows release sequence
│ └── fix-ffmpeg-win.js # Post-pack binary permission fixes + ad-hoc code signing
├── bin/ # yt-dlp + ffmpeg + Deno binaries (auto-populated by postinstall)
├── resources/models/ # Background Remover's ONNX model (gitignored: fetched by
│ # postinstall, too large for a normal git push)
├── licenses/ # Third-party license texts required for bundled models
├── build/ # App icons (icon.icns, icon.ico, icon.png)
├── package.json
├── LICENSE
└── README.md
- ArcDLP by Archis: the foundation this project is built on (MIT)
- yt-dlp: the engine that does all the downloading
- Electron: desktop app framework
- ffmpeg: audio/video processing (bundled per platform: BtbN/FFmpeg-Builds LGPL builds on Windows/Linux, martin-riedl.de on macOS)
- sharp: image compression and processing
- Ghostscript (via @jspawn/ghostscript-wasm): PDF compression/rasterization
- qr-code-styling: QR code rendering
- withoutBG: Background Remover model (built with DINOv3)
- Iconoir: icon set (MIT)
- PDF.js: client-side PDF rendering for the Redact editor (Apache-2.0)
- anydoc by Firecrawl: Document → Markdown conversion (MIT)
- MiniPdf: Word/PowerPoint/Excel → PDF conversion (Apache-2.0)
MIT: see the license file for details.










