Modern desktop GUI wrapper for gallery-dl, built with Tauri, React, TypeScript, Tailwind CSS, and Bun.
GDL GUI runs gallery-dl without manual CLI typing.
Features:
- Dashboard with multi-URL queue input
- Quick Download panel for simple one-off downloads
- Advanced options for common
gallery-dlflags - Config profiles with visual fields and JSON validation
- Realtime stdout/stderr logs
- Queue status, progress estimates, copied commands, retry, cancel, remove
- Local download history stored in SQLite through the Tauri SQL plugin
- Settings for executable path, theme, concurrency, notifications, and safe mode
- Portable storage mode for USB/self-contained app folders
Install gallery-dl separately. GDL GUI wraps your installed executable. It does not bundle or rewrite it.
Check install instructions here:
Example:
python -m pip install -U gallery-dl
gallery-dl --versionbun installIf Bun is not compatible on your machine, use pnpm:
pnpm installbun run tauri devpnpm fallback:
pnpm tauri devbun run tauri buildpnpm fallback:
pnpm tauri buildGDL GUI stores data in the OS app-data directory by default. Portable mode stores data next to the executable:
<app folder>/
gdl-gui.exe
gdl-gui.portable
data/
settings.json
profiles.json
queue.json
history.db
Enable portable mode with either method:
bun run portable:markerOr create an empty file named gdl-gui.portable next to the built executable.
You can also set:
GDL_GUI_PORTABLE=1The Settings page shows the active storage mode and app data directory.
For a simple portable ZIP, include these files from src-tauri/target/release/:
GDL-GUI-Portable/
gdl-gui.exe
gdl-gui.portable
data/ # optional; app creates this on first run
Steps:
bun run tauri build
bun run portable:markerThen zip:
src-tauri/target/release/gdl-gui.exe
src-tauri/target/release/gdl-gui.portable
Usage:
- Unzip anywhere.
- Run
gdl-gui.exe. - App detects
gdl-gui.portable. - App stores data in adjacent
data/.
Notes:
- Install
gallery-dlon the target PC, or set the exact path in Settings. - Use the installer build if the portable exe fails to start (missing Windows WebView).
- Keep the marker filename exactly
gdl-gui.portable.
- Arguments pass as arrays, avoiding shell injection.
- Unsafe flags (
--exec,--exec-before,--exec-after) are blocked. - Secrets (cookies, tokens, passwords) are redacted from logs and UI.
- The UI warns before passing browser cookies.
- Obey site terms, robots.txt, and rate limits.
- Use rate limits and archive files for repeat downloads.
- Do not bypass paywalls or login restrictions.
src/
App.tsx
types.ts
services/
galleryDlService.ts
queueService.ts
profileService.ts
appStorageService.ts
historyService.ts
settingsService.ts
src-tauri/
src/lib.rs
Responsibilities:
src-tauri/handles process execution, event streaming, cancellation, filesystem/runtime access, portable path detection, and SQLite plugin wiring.src/handles React UI, client state, profiles, command generation, logs, and history display.galleryDlServicebuilds safe argument arrays and calls Tauri commands.queueServiceupdates queue state from process events.profileServiceimports/exports profile data.appStorageServiceresolves portable/system data paths and reads/writes app JSON data.historyServicestores history in SQLite with localStorage fallback.settingsServicepersists app settings and theme through portable-aware storage.
This GUI is a separate wrapper application. gallery-dl is licensed GPL-2.0. Review and comply with gallery-dl licensing when distributing binaries or bundles that include or depend on it.
See:
