CoomerDL is a Python-based desktop application that has evolved into a Universal Media Archiver. It supports downloading images, videos, and galleries from 1000+ websites through integrated engines (yt-dlp, gallery-dl) while maintaining specialized, high-speed scrapers for sites like Coomer, Kemono, and SimpCity.
What: Universal media archiver with three engines:
- Native Engine (specialized): Coomer, Kemono, Bunkr, Erome, SimpCity, jpg5 (fast, purpose-built)
- Universal Video Engine (yt-dlp): YouTube, Twitter/X, Reddit, TikTok, Instagram, Twitch, and 1000+ sites
- Universal Gallery Engine (gallery-dl): DeviantArt, Pixiv, image boards, and galleries
Tech Stack: Python 3.8+, CustomTkinter (GUI), SQLite (download tracking + job history), yt-dlp, gallery-dl, requests (HTTP)
Architecture:
app/- UI components (CustomTkinter)downloader/- Multi-engine download systembase.py- BaseDownloader abstract class with standardized interfacefactory.py- Smart URL routing withcan_handle()classmethod patternytdlp_adapter.py- yt-dlp integration (1000+ sites)gallery.py- gallery-dl integration (image galleries)queue.py- Unified job queue manager with event callbackshistory.py- SQLite persistence for jobs and eventsmodels.py- JobStatus, ItemStatus, DownloadEvent dataclassespolicies.py- RetryPolicy, DomainPolicy for "press & forget" automationratelimiter.py- Per-domain concurrency and rate limiting
resources/config/- Settings JSON, SQLite DB, cookies
Key Features:
- β Universal Mode: Support for 1000+ sites via yt-dlp and gallery-dl
- β Smart Routing: Factory pattern with 4-tier fallback (native β gallery β yt-dlp β generic)
- β Job Queue System: Persistent job history, crash recovery, event-driven UI
- β Press & Forget: Exponential backoff + jitter, per-domain rate limiting, auto-retry
- β Browser Cookie Import: Automatic authentication from Chrome/Firefox/Edge
- β FFmpeg Integration: Video/audio merging, format conversion, metadata embedding
- β
Thread-safe cancellation with
threading.Event() - β Progress tracking with throttled callbacks (10 FPS)
- β SQLite caching for duplicate detection (indexed queries)
- β Connection pooling for faster downloads
- β Multi-language support (i18n)
Performance:
- Startup: <1s (with indexed DB queries)
- Memory: ~25MB baseline (no cache preload)
- Concurrent downloads: 5-20 threads (configurable)
- Per-domain rate limiting: 2 concurrent requests, 1s minimum interval
For Development:
- See
ROADMAP.mdfor tasks and priorities - See
tests/CONTRACTS.mdfor system behavior contracts - See
AI_AGENT_WORKFLOW.mdfor development workflows - Run tests:
pytest tests/(241 tests, all offline/deterministic) - Use
python main.pyto run the application
If you find this tool helpful, please consider supporting my efforts:
- 1000+ Supported Sites: YouTube, Twitter/X, Reddit, TikTok, Instagram, Twitch, and more via yt-dlp
- Gallery Support: DeviantArt, Pixiv, image boards via gallery-dl
- Smart Format Selection: Best video+audio merge, audio-only, low quality modes
- Browser Cookie Import: Auto-authenticate from Chrome, Firefox, or Edge
- Metadata Embedding: Thumbnails, subtitles, and video metadata
- Auto-Retry: Exponential backoff with jitter (1s β 2s β 4s β 8s, max 30s)
- Rate Limiting: Per-domain concurrency caps and minimum request intervals
- Crash Recovery: Jobs resume from where they stopped after app restart
- Duplicate Prevention: URL-based and hash-based duplicate detection
- Persistent History: All jobs and events stored in SQLite database
- Event-Driven UI: Backend emits events (JOB_ADDED, JOB_PROGRESS, JOB_DONE, etc.)
- Cancellation: Clean stop within 2 seconds, partial file cleanup
- Status Tracking: PENDING β RUNNING β COMPLETED/FAILED/CANCELLED
- Multithreaded Downloads: Boosts download speed by utilizing multiple threads.
- Progress Feedback: Real-time progress updates during downloads.
- Queue Management: Efficiently handles large download queues.
Supported File Extensions:
- Videos:
.mp4,.mkv,.webm,.mov,.avi,.flv,.wmv,.m4v - Images:
.jpg,.jpeg,.png,.gif,.bmp,.tiff - Documents:
.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx - Compressed:
.zip,.rar,.7z,.tar,.gz
- Video Platforms: YouTube, Vimeo, Dailymotion, Twitch, etc.
- Social Media: Twitter/X, Reddit, TikTok, Instagram, Facebook, etc.
- Adult Sites: (yt-dlp supported sites)
- And many more: Full yt-dlp supported sites list
- Art Platforms: DeviantArt, Pixiv, ArtStation
- Image Boards: Various supported boards
- Social: Tumblr, Pinterest, etc.
- And more: Full gallery-dl supported sites list
If you prefer using command-line interfaces, check out the following projects:
-
Coomer CLI
A CLI tool for downloading media from Coomer and similar sites. It offers customizable options for file naming, download modes, rate limiting, checksum verification, and more. -
Simpcity CLI
A CLI tool specifically designed for downloading media from Simpcity. It shares many features with Coomer CLI and is tailored for the Simpcity platform.
Have questions or just want to say hi? Join the Discord server:
- Latest Version: Visit the Releases Page to download the newest version.
- Install Python 3.8+ (if not already installed)
- Clone the repository:
git clone https://github.com/Emy69/CoomerDL.git cd CoomerDL - Install dependencies:
pip install -r requirements.txt
- Run the application:
python main.py
Note: On Linux, you may need to install tkinter separately:
sudo apt install python3-tkFor detailed installation instructions and troubleshooting, see Installation & Troubleshooting below.
- Launch the application.
- Paste the URL of the image or video you want to download.
- Click Download and wait for the process to finish.
- Python: 3.8 or higher (3.9, 3.10, 3.11, 3.12 supported)
- Operating Systems: Windows 10/11, macOS, Linux
- Memory: Minimum 2GB RAM recommended
- Storage: ~500MB for application and dependencies
Make sure Python 3.8+ is installed:
python --version # Should show Python 3.8.x or higherIf not installed:
- Windows: Download from python.org
- macOS:
brew install python@3.11or download from python.org - Linux: Usually pre-installed, or
sudo apt install python3 python3-pip
On Linux, tkinter needs to be installed separately:
# Ubuntu/Debian
sudo apt install python3-tk
# Fedora
sudo dnf install python3-tkinter
# Arch Linux
sudo pacman -S tkgit clone https://github.com/Emy69/CoomerDL.git
cd CoomerDLpip install -r requirements.txtOr if you prefer using pip3:
pip3 install -r requirements.txtFor Universal Mode (yt-dlp) video/audio merging:
- Windows:
winget install ffmpegor download from ffmpeg.org - macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpeg
python main.pySolution (Linux):
sudo apt install python3-tk # Ubuntu/Debian
sudo dnf install python3-tkinter # Fedora
sudo pacman -S tk # Arch LinuxSolution (Windows/macOS): Tkinter should come with Python. Reinstall Python from python.org and make sure to check "Install tkinter" during installation.
Solution: Make sure you're using the latest version of the code:
git pull origin main # or master
pip install -r requirements.txt --upgradeSolution: Install/reinstall dependencies:
pip install -r requirements.txt --force-reinstallSolution:
- Install FFmpeg (see step 5 above)
- Make sure FFmpeg is in your system PATH
- Verify installation:
ffmpeg -version
The app will work without FFmpeg, but video/audio merging in Universal Mode won't be available.
Solution: This usually means there's a syntax error or missing dependency. Check:
python -c "import app.ui" # Test if module loads
pip list # Check installed packagesSolution:
- 403 Forbidden: Site may require cookies. Use browser cookie import feature in settings.
- 429 Too Many Requests: Rate limiting. Wait a few minutes and try again with lower concurrency.
Solution (Windows):
# Try running with pythonw instead of python
pythonw main.pySolution (Linux/macOS): Check if you have a display server running. For headless servers, CoomerDL requires a GUI environment.
Solution:
- Reduce concurrent downloads in settings
- Clear completed downloads from queue
- Restart the application periodically for long sessions
Solution: Close other instances of CoomerDL. Only one instance should run at a time.
If you encounter issues not listed here:
- Check existing issues: GitHub Issues
- Join Discord: Discord Server
- Create a new issue: Include:
- Python version (
python --version) - OS and version
- Error message (full traceback)
- Steps to reproduce
- Python version (
This repository is optimized for AI coding agents (GitHub Copilot, Claude, GPT-4, etc.). The documentation is structured to help agents understand and implement changes effectively.
| File | Purpose | Use When |
|---|---|---|
| ROADMAP.md | User-friendly feature roadmap and planned features | Understanding what's available and coming soon |
| DEVELOPMENT_ROADMAP.md | Technical roadmap with detailed task breakdowns | Finding what to work on (developers) |
| TASKS.md | Detailed task breakdowns with acceptance criteria | Implementing a specific task |
| SPECIFICATIONS.md | Full code specifications for new features | Building new classes/functions |
| POTENTIAL_ISSUES.md | Known blockers and edge cases | Understanding risks |
Read ROADMAP.md and implement task BUG-001.
Context: This is a Python desktop app using CustomTkinter.
The bug is in downloader/downloader.py.
Follow the FIND/REPLACE instructions in the task.
Read ROADMAP.md and SPECIFICATIONS.md, then implement FEATURE-002 (BaseDownloader class).
Requirements:
1. Create the new file at downloader/base.py
2. Follow the class specification in SPECIFICATIONS.md
3. Include all abstract methods and data classes
4. Ensure backward compatibility
Read ROADMAP.md and implement REFACTOR-001 (standardize cancel mechanisms).
Files to modify: downloader/bunkr.py, downloader/erome.py, downloader/simpcity.py
Follow the step-by-step instructions in the task.
Test by running: python main.py
- Always reference the task ID (e.g., BUG-001, FEATURE-002)
- Point to the documentation files - agents work better with context
- Specify the scope - "only modify X file" prevents over-engineering
- Include test instructions - so the agent can verify the fix
- Mention constraints - "maintain backward compatibility", "minimal changes"
# 1. Ask agent to read the roadmap and pick a task
"Read ROADMAP.md and list all π΄ CRITICAL tasks"
# 2. Ask agent to implement one task
"Implement BUG-001 from ROADMAP.md. Show me the exact changes."
# 3. Verify the changes
python main.py
# 4. Ask agent to run tests if applicable
"Run any tests related to the downloader module"| Icon | Priority | Agent Instruction |
|---|---|---|
| π΄ | CRITICAL | "Fix this bug first, it causes crashes" |
| π | HIGH | "Important feature, implement carefully" |
| π‘ | MEDIUM | "Improvement, make minimal changes" |
| π’ | LOW | "Nice-to-have, only if time permits" |
Copy-paste these prompts to get started:
List all tasks:
Read ROADMAP.md and give me a summary of all open tasks by priority.
Fix a specific bug:
Read ROADMAP.md task BUG-001. Show the current code, explain the bug, and provide the fix.
Implement a feature:
Read SPECIFICATIONS.md section "BaseDownloader" and create the file downloader/base.py with the full implementation.
Check for issues:
Read POTENTIAL_ISSUES.md and tell me which issues might affect task FEATURE-001.
