A visual URL batch downloader tool
Project description
⬇ URLDrop
Batch download files from a URL list — fast, simple, zero config.
Getting Started · Usage · Options · UI Tool · PyPI
What it does
URLDrop reads a plain text file of URLs and downloads everything in it — PDFs, images, ZIPs, anything. It skips files you already have, retries failed downloads, and saves a full report when it's done.
https://example.com/report.pdf ✓ downloaded
https://example.com/photo.jpg ✓ downloaded
https://example.com/broken-link ✗ failed (saved to report.txt)
📂 Project Structure
When you set up URLDrop, your folder will look like this:
url-downloader/
├── downloader.py ← main script
├── index.html ← visual UI (open in browser)
├── style.css ← UI styles
├── urls.txt ← your URL list (you create this)
├── downloads/ ← saved files (auto-created)
└── report.txt ← run summary (auto-created)
🚀 Getting Started
Requirements: Python 3.8+
Step 1: Install dependencies
pip install requests tqdm
Or install the package directly from PyPI:
pip install urldrop
No database, no server, no config file needed.
📋 Usage
Step 1: Create your urls.txt file with one URL per line:
https://example.com/file.pdf
https://example.com/image.png
https://example.com/archive.zip
# Lines starting with # are comments — ignored at runtime
Step 2: Run the downloader:
python downloader.py
Step 3: Done! Files land in downloads/ and a full summary is written to report.txt.
⚙️ Options
| Argument | Default | Description |
|---|---|---|
--urls |
urls.txt |
Path to your URL list |
--output |
downloads |
Folder to save downloaded files into |
--retries |
3 |
How many times to retry a failed download |
--timeout |
30 |
Seconds before a request times out |
--skip |
true |
Skip files that already exist locally |
Example with custom options:
python downloader.py --urls my_links.txt --output my_files --retries 5 --timeout 60
🖥 UI Tool
Don't want to edit urls.txt by hand? URLDrop comes with a browser-based UI. Just open index.html and you get:
- Paste or upload URLs visually
- Instant image thumbnail preview
- List and grid view toggle
- One-click
urls.txtexport with your options baked in
urldrop
open index.html
📦 Install via PyPI
pip install urldrop
urldrop
📁 Output Files
After a run, these files are created automatically:
| File | Contents |
|---|---|
report.txt |
Full summary — total attempted, succeeded, failed, time taken |
downloads/ |
All successfully downloaded files, named from their URLs |
Failed URLs are not lost — they're printed at the end of the run. Simply keep them in urls.txt and run again to retry.
🚨 Error Handling
Things go wrong — here's how URLDrop handles them:
| Error | What Happens | Where to Look |
|---|---|---|
| Broken or dead URL | Waits (exponential back-off) and retries up to --retries times, then logs the failure. |
report.txt |
| No internet connection | Retries with back-off. If all retries fail, the URL is skipped and logged. | report.txt |
| File already downloaded | Skipped automatically if --skip is true. Re-download by setting --skip false. |
Terminal output |
| Timeout exceeded | Request is cancelled and the URL is retried. Increase --timeout for slow servers. |
Terminal output |
| Malformed URL in list | Skipped with a warning. Check your urls.txt for typos or missing https://. |
Terminal output |
❓ FAQ
1. What file types can URLDrop download? Anything accessible via a direct URL — PDFs, images (JPG, PNG, GIF, WebP), ZIPs, MP4s, CSVs, and more. If a browser can download it, so can URLDrop.
2. Will it overwrite files I already downloaded?
No. By default (--skip true), URLDrop checks if a file with the same name already exists in the output folder and skips it. Set --skip false to force re-downloading.
3. Can I download from password-protected or login-required pages? Not currently. URLDrop sends simple unauthenticated HTTP requests. URLs that require cookies or a login session will fail.
4. What happens if my script crashes halfway through?
Check report.txt to see what already succeeded. Remove those URLs from your urls.txt and run again — or just run again with --skip true (the default) so already-downloaded files are safely skipped.
5. I'm getting ModuleNotFoundError: No module named 'requests'. What do I do?
Run pip install requests tqdm to install the required dependencies, then try again.
6. Can I comment out URLs without deleting them?
Yes! Any line starting with # is treated as a comment and ignored. Useful for temporarily disabling a URL without losing it.
📜 License
This project is licensed under the MIT License. Feel free to use it, modify it, and share it!
👤 Author
Developed by Aiswarya Pokharel
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file urldrop-1.0.2.tar.gz.
File metadata
- Download URL: urldrop-1.0.2.tar.gz
- Upload date:
- Size: 57.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71aa716b7dcfcfa25befd6b4656193b5a0953db2fd3baf1fecc8dbafe5f1bbeb
|
|
| MD5 |
082dede1534717d539285163b89e4360
|
|
| BLAKE2b-256 |
cdc393000949b1418399be73348bfbfa6d9458c03d2a42e159522fb68a5e827e
|
File details
Details for the file urldrop-1.0.2-py3-none-any.whl.
File metadata
- Download URL: urldrop-1.0.2-py3-none-any.whl
- Upload date:
- Size: 3.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e44c0295eb925c8fa4d13daa0304c745b6811eddf6e0f086d147962cf1c60e5e
|
|
| MD5 |
dfbc59182cc187740df587a792c5d9d5
|
|
| BLAKE2b-256 |
87eab9f8cb2c5bb41e3f62114295b495769d8c458edbb6ad8685b67346ec9993
|