A full-featured web GUI for searching and downloading HuggingFace models and datasets. Built with Flask + vanilla HTML/CSS/JS — no build step, no heavy frameworks.
Runs entirely on your machine — the server binds to
127.0.0.1:5000and your HuggingFace token is stored locally indata/settings.json(git-ignored) and never sent to the browser.
- 🔎 Search models and datasets with sort (downloads / likes / recently updated)
- 📋 Repo detail view — file list with sizes, tags, downloads, likes, README preview
- ✅ Selective download — pick individual files or all, with a live filter (e.g.
.safetensors,.gguf) - 🌿 Revision/branch selection
- 🔑 Token auth for gated/private repos (stored locally, never sent to the browser)
- 🧵 Download queue with configurable concurrent workers
- 📈 Live progress per item — %, speed, ETA, bytes (via Server-Sent Events)
- ⏹ Cancel in-flight downloads
- ↩️ Resume interrupted downloads (HTTP Range requests +
.partfiles) - 💾 Configurable destination + disk space display
- 🕑 Download history log
- 🌓 Dark / light theme, persisted
start.batchmod +x start.sh stop.sh
./start.shThe script creates a virtual environment, installs dependencies, and opens http://127.0.0.1:5000.
To stop:
stop.bat REM Windows
./stop.sh # Linux/macOSpython -m venv .venv
# Windows: .venv\Scripts\activate
source .venv/bin/activate
pip install -r requirements.txt
python app.py- Browse tab — search, or paste a repo id (
owner/name) into the quick-open box. - Click a result to open the detail modal; pick a revision and select files.
- Click Download Selected — items appear in the Queue tab with live progress.
- Set your token and download directory in Settings.
Gated/private repos: add a HuggingFace access token in Settings. Get one at https://huggingface.co/settings/tokens. The token is stored in
data/settings.jsonon your machine only.
HF_Downloaderr/
├── app.py Flask routes + SSE stream
├── backend/
│ ├── config.py settings + history persistence (JSON)
│ ├── hf_api.py HF Hub search + repo info
│ └── downloader.py threaded download manager (progress/cancel/resume)
├── templates/index.html
├── static/css/style.css
├── static/js/app.js
├── data/ settings.json + history.json (created at runtime)
├── downloads/ default download destination
├── requirements.txt
└── start/stop scripts (.bat/.sh)
- Files download to
<download_dir>/<models|datasets>/<owner__name>/.... - Changing the concurrent-worker count takes effect on restart.
- Downloads stream directly via the HuggingFace CDN with resume support.
MIT © 2026 rustyorb