gdluxx is nothing more than a self-hosted browser based gui for gallery-dl
- GUI: An interface for gallery-dl to act upon one or more URLs
- Configuration Editor: Built-in JSON editor to create/modify your
configuration file
- Includes syntax highlighting and validation to ensure there are no errors
- Browser Extension Support An endpoint for receiving URLs from the
companion browser extension
- API key management for secure external access
- Real-time Updates: Job monitoring with live output streaming
- Job Queue Management: View running, completed, and failed downloads with output
- Version Management: Download and update gallery-dl from the browser
gdluxx exposes an API endpoint. You can then send the active tab URL to gdluxx with a button click. You can also right-click a single image to be sent. gdluxx will execute gallery-dl against the received URL or image link. Now you don't have to leave your browser to use gallery-dl!
I've been using gallery-dl for a long time now, it's a great program. And while I've come up with processes to make using gallery-dl simpler (rather than executing it against one URL at a time in the terminal), this will eliminate the need to leave the browser. I'm guessing I'll be needing more storage space very soon.
Only Docker installation is supported.
-
⚠️ Create the data directory first⚠️ mkdir data
-
Copy environment file
cp .env.example .env -
Generate your
AUTH_SECRETopenssl rand -hex 32 -
Paste your generated
AUTH_SECRETinto your.envfile -
Run
docker compose up -dname: gdluxx services: gdluxx: image: ghcr.io/gdluxx/gdluxx:latest container_name: gdluxx ports: - '7755:7755' volumes: - ./data:/app/data environment: - AUTH_SECRET=${AUTH_SECRET} restart: unless-stopped deploy: restart_policy: condition: on-failure max_attempts: 3 delay: 3s
You MUST create the bind mount directory before starting the container. The container runs as user 1000:1000, not root, and cannot modify host directory permissions for you.
If you skip step 1 above, Docker will create the directory as root and the container will fail to start with permission errors.
Create the directory first:
mkdir -p ~/Documents/gdluxx/data
Then update your compose volumes to: ~/Documents/gdluxx/data:/app/data
For generating AUTH_SECRET on Windows, try CryptoTool's OpenSSL or install OpenSSL via WSL/Git Bash.
Docker volumes hide your downloads inside Docker's storage. Bind mounts give you direct file access for easy management.
If you're not familiar with Docker bind mounts, you can read about them here
gdluxx will use the data/ directory to store:
gdluxx.db- For storing authentication credentials, jobs data, API keys, and gallery-dl version infoconfig.json- Your gallery-dl configurationgallery-dl.bin- gallery-dl binary file- gallery-dl downloads
The extension isn't available on browser stores yet. You'll need to install it manually:
Or:
- Download the latest
gdluxx-browser-chrome.zipfrom the releases page - Extract the zip file to a folder on your computer
- Open Chrome and go to
chrome://extensions/ - Enable "Developer mode" (toggle in the top right)
- Click "Load unpacked" and select the extracted folder
- The extension should now appear in your browser toolbar
Or:
- Download the latest
gdluxx-browser-firefox.zipfrom the releases page - Open Firefox and go to
about:debugging - Click "This Firefox" in the left sidebar
- Click "Load Temporary Add-on"
- Select the downloaded zip file (don't extract it)
- The extension will be loaded temporarily until you restart Firefox
Note: For permanent installation in Firefox, you'll need to sign the extension or use Firefox Developer Edition.
- Make sure you have gdluxx running and accessible
- Click the extension icon in your browser toolbar
- In the popup, enter:
- Your gdluxx server URL (e.g.,
https://your-server.comorhttp://localhost:8080) - Your API key from gdluxx
- Your gdluxx server URL (e.g.,
- Click "Save Settings"
- Navigate to any webpage you want to download with gallery-dl
- Click the extension icon and hit "Send URL"
- gdluxx will receive the URL and start downloading
The extension remembers your settings, so you only need to configure it once.
- A running instance of gdluxx
- An API key configured in gdluxx
- Chrome/Chromium 88+ or Firefox 78+
-
Auth
- Add authentication
- Add internal key authentication for internal endpoints
- Implement RESTful approach to deleting API keys (instead of POST)
- Add OIDC support
- Migrate API key generation to better-auth
- Add authentication
-
UX/UI
- Combine JobList and JobListModal components
- Fix ConfirmModal not picking up keyboard focus
- Add delete confirm modal for individual job deletion
- Fix spacing for modal in /config for "Loaded example"
-
Docs
- Build documentation
- Tie in gallery-dl docs
-
Misc
- Consolidate SVG icons
- Consider alternatives to deprecated
document.execCommand('copy')(jobOutputModal) - Combine
JobListcomponents -
Adjustapi-keys.jsonfile permissions - Consolidate notification system
- Add CLI options
- Prevent
Runaction when gallery-dl isn't available
-
Features
-
Drag and drop for input files - Drag and drop for config files
- Add
--extractor-infoand--list-keywordspage - Allow ConfigEditor component to update paths smartly
- log paths - /app/data/logs
- archive paths - /app/data/archives
- Add success/failed count per job in JobsList
-
-
Extension
-
Send multiple tabs - Add check
is URL supported? - Add context menu for individual images
-
-
Considerations
- Job queuing
- Job scheduling
-
Incorporate gallery-dl optional dependencies
- yt-dlp or youtube-dl: HLS/DASH video downloads, ytdl integration
If you have interest in using the API endpoint outside the companion browser
extension, create an API key in the settings, then send POST requests to
/api/extension/external:
curl -X POST \
-H "Authorization: Bearer your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"urlToProcess": "https://example.com/image-gallery"}' \
https://your-gdluxx-url/api/extension/externalgdluxx is pronounced jee dee luks
It's a combination of gallery-dl and deluxe








