Complete command-line reference for hfdownloader.
- Installation
- Quick Reference
- Global Flags
- Commands
- Environment Variables
- Configuration File
- Examples
# One-liner install (Linux/macOS/WSL)
bash <(curl -sSL https://g.bodaay.io/hfd) -i
# Or build from source
git clone https://github.com/bodaay/HuggingFaceModelDownloader
cd HuggingFaceModelDownloader
go build -o hfdownloader ./cmd/hfdownloader# Download a model
hfdownloader download owner/model
# Download specific quantizations
hfdownloader download TheBloke/Mistral-7B-Instruct-v0.2-GGUF:q4_k_m,q5_k_m
# Download a dataset
hfdownloader download facebook/flores --dataset
# Analyze before downloading
hfdownloader analyze owner/model
# Start web UI
hfdownloader serve
# List downloaded repos
hfdownloader list
# Show repo details
hfdownloader info Mistral-7BThese flags work with all commands:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--token |
-t |
string | $HF_TOKEN |
HuggingFace access token |
--json |
bool | false |
Emit machine-readable JSON events | |
--quiet |
-q |
bool | false |
Minimal output |
--verbose |
-v |
bool | false |
Debug output |
--config |
string | Path to config file (JSON/YAML) | ||
--log-file |
string | Write logs to file | ||
--log-level |
string | info |
Log level: debug, info, warn, error |
# Via flag
hfdownloader download meta-llama/Llama-2-7b -t hf_xxxxx
# Via environment variable (recommended)
export HF_TOKEN=hf_xxxxx
hfdownloader download meta-llama/Llama-2-7bDownload models or datasets from HuggingFace Hub.
This is the default command — runs when no subcommand is specified.
hfdownloader download [REPO] [flags]
hfdownloader [REPO] [flags] # Same as above
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--repo |
-r |
string | Repository ID (owner/name) | |
--dataset |
bool | false |
Treat as dataset | |
--revision |
-b |
string | main |
Branch, tag, or commit |
--filters |
-F |
strings | Comma-separated LFS filters | |
--exclude |
-E |
strings | Patterns to exclude | |
--append-filter-subdir |
bool | false |
Create subdirs per filter |
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--connections |
-c |
int | 8 |
Connections per file |
--max-active |
int | 3 |
Max concurrent downloads | |
--multipart-threshold |
string | 32MiB |
Min size for multipart |
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--retries |
int | 4 |
Retry attempts | |
--backoff-initial |
string | 400ms |
Initial retry delay | |
--backoff-max |
string | 10s |
Max retry delay | |
--verify |
string | size |
Verification: none, size, etag, sha256 | |
--stale-timeout |
string | 5m |
Timeout for stale downloads |
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cache-dir |
string | ~/.cache/huggingface |
Cache directory | |
--endpoint |
string | https://huggingface.co |
Custom endpoint (mirrors) | |
--no-manifest |
bool | false |
Don't write hfd.yaml manifest | |
--no-friendly |
bool | false |
Don't create friendly symlinks | |
--dry-run |
bool | false |
Plan only, no download | |
--plan-format |
string | table |
Plan format: table, json |
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--proxy |
-x |
string | Proxy URL (http://, https://, socks5://) | |
--proxy-user |
string | Proxy authentication username | ||
--proxy-pass |
string | Proxy authentication password | ||
--no-env-proxy |
bool | false |
Ignore HTTP_PROXY/HTTPS_PROXY env vars |
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--legacy |
bool | false |
Use flat directory structure | |
--output |
-o |
string | Output directory (legacy only) |
# Basic download
hfdownloader download TheBloke/Mistral-7B-Instruct-v0.2-GGUF
# Filter syntax in repo name
hfdownloader download TheBloke/Mistral-7B-Instruct-v0.2-GGUF:q4_k_m,q5_k_m
# Or use --filters flag
hfdownloader download TheBloke/Mistral-7B-Instruct-v0.2-GGUF -F q4_k_m,q5_k_m
# Exclude files
hfdownloader download owner/repo -E ".md,.txt,fp16"
# Specific branch
hfdownloader download CompVis/stable-diffusion-v1-4 -b fp16
# Download dataset
hfdownloader download facebook/flores --dataset
# High-speed download
hfdownloader download owner/repo -c 16 --max-active 4
# Dry run (preview files)
hfdownloader download owner/repo --dry-run
hfdownloader download owner/repo --dry-run --plan-format json
# Use mirror (e.g., for China)
hfdownloader download owner/repo --endpoint https://hf-mirror.com
# Private/gated models
hfdownloader download meta-llama/Llama-2-7b -t hf_xxxxx
# Strict verification
hfdownloader download owner/repo --verify sha256
# Download via proxy
hfdownloader download owner/repo --proxy http://proxy:8080
# Download via authenticated SOCKS5 proxy
hfdownloader download owner/repo --proxy socks5://localhost:1080 \
--proxy-user myuser --proxy-pass mypasswordStart HTTP server with Web UI, REST API, and WebSocket support.
hfdownloader serve [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--addr |
string | 0.0.0.0 |
Bind address | |
--port |
-p |
int | 8080 |
Port |
--cache-dir |
string | ~/.cache/huggingface |
Cache directory | |
--connections |
-c |
int | 8 |
Connections per file |
--max-active |
int | 3 |
Max concurrent downloads | |
--multipart-threshold |
string | 32MiB |
Min size for multipart | |
--verify |
string | size |
Verification mode | |
--retries |
int | 4 |
Retry attempts | |
--endpoint |
string | Custom HF endpoint | ||
--auth-user |
string | Basic auth username | ||
--auth-pass |
string | Basic auth password | ||
--models-dir |
string | ./Models |
Legacy models directory | |
--datasets-dir |
string | ./Datasets |
Legacy datasets directory |
# Start with defaults (port 8080)
hfdownloader serve
# Custom port
hfdownloader serve --port 3000
# With authentication
hfdownloader serve --auth-user admin --auth-pass secret123
# With HuggingFace token
hfdownloader serve -t hf_xxxxx
# Use mirror
hfdownloader serve --endpoint https://hf-mirror.com
# High-performance settings
hfdownloader serve -c 16 --max-active 8- Web UI at
http://localhost:8080- Analyze page: auto-detect model type, show files/sizes
- Jobs page: real-time download progress
- Cache browser: view downloaded repos
- REST API at
/api/*endpoints - WebSocket at
/api/wsfor live updates
Analyze a HuggingFace repository without downloading. Auto-detects whether it's a model or dataset.
hfdownloader analyze <repo> [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--endpoint |
string | Custom HF endpoint | ||
--format |
string | text |
Output: text, json |
- Tries model API first, falls back to dataset API
- If repo exists as both, prompts you to choose
| Type | Detection |
|---|---|
| GGUF | .gguf files |
| Transformers | config.json with model architecture |
| Diffusers | model_index.json |
| LoRA | adapter_config.json |
| GPTQ | quantize_config.json |
| AWQ | AWQ config in config.json |
| ONNX | .onnx files or onnx/ directory |
| Audio | Audio-specific configs |
| Vision | Vision-specific configs |
| Multimodal | Multiple modality configs |
| Dataset | Dataset configs |
# Analyze model
hfdownloader analyze TheBloke/Mistral-7B-Instruct-v0.2-GGUF
# Analyze dataset
hfdownloader analyze facebook/flores
# JSON output
hfdownloader analyze owner/repo --format json
# Use mirror
hfdownloader analyze owner/repo --endpoint https://hf-mirror.comRepository: TheBloke/Mistral-7B-Instruct-v0.2-GGUF
Type: GGUF Model
Files: 12 files (4.2 GiB total)
GGUF Quantizations:
Q2_K 2.1 GiB ★★☆☆☆ ~2.8 GiB RAM Smallest, lowest quality
Q4_K_M 3.8 GiB ★★★★☆ ~4.7 GiB RAM Good balance (recommended)
Q5_K_M 4.5 GiB ★★★★★ ~5.4 GiB RAM High quality
Q8_0 7.2 GiB ★★★★★ ~8.3 GiB RAM Near-lossless
Transformers Analysis:
Architecture: MistralForCausalLM
Parameters: 7.24B
Context: 32768 tokens
Vocabulary: 32000
List downloaded models and datasets.
hfdownloader list [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cache-dir |
string | ~/.cache/huggingface |
Cache directory | |
--type |
string | Filter: model, dataset | ||
--sort |
string | name |
Sort: name, size, date | |
--format |
string | table |
Output: table, json | |
--scan |
bool | false |
Scan structure (not manifests) |
# List all
hfdownloader list
# Models only
hfdownloader list --type model
# Sort by size
hfdownloader list --sort size
# JSON output
hfdownloader list --format json
# Scan cache structure
hfdownloader list --scanDownloaded Repositories
TYPE REPO SIZE BRANCH DATE
model TheBloke/Mistral-7B-Instruct-v0.2-GGUF 4.2 GiB main 2024-01-15
model meta-llama/Llama-3-8B-Instruct 16.1 GiB main 2024-01-14
dataset facebook/flores 128 MiB main 2024-01-10
Total: 3 repositories (20.4 GiB)
Show detailed information about a downloaded repository.
hfdownloader info <repo> [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cache-dir |
string | ~/.cache/huggingface |
Cache directory | |
--format |
string | text |
Output: text, json |
# Full repo name
hfdownloader info TheBloke/Mistral-7B-Instruct-v0.2-GGUF
# Partial match
hfdownloader info Mistral-7B
# JSON output
hfdownloader info Mistral-7B --format jsonRepository: TheBloke/Mistral-7B-Instruct-v0.2-GGUF
Type: model
Branch: main
Commit: a1b2c3d4e5f6...
Files: 12
Total Size: 4.2 GiB
Downloaded: 2024-01-15 10:30:45
Paths:
Friendly: ~/.cache/huggingface/models/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/
Cache: ~/.cache/huggingface/hub/models--TheBloke--Mistral-7B-Instruct-v0.2-GGUF/
Original Command:
hfdownloader download TheBloke/Mistral-7B-Instruct-v0.2-GGUF -F q4_k_m
Files:
NAME SIZE LFS
config.json 1.2 KiB no
mistral-7b-instruct-v0.2.Q4_K_M.gguf 4.1 GiB yes
README.md 8.5 KiB no
Regenerate friendly view symlinks from hub cache.
hfdownloader rebuild [flags]
Use after downloading with the official HuggingFace Python library, or after manually modifying the cache.
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cache-dir |
string | ~/.cache/huggingface |
Cache directory | |
--clean |
bool | false |
Remove orphaned symlinks | |
--write-script |
bool | false |
Write standalone rebuild.sh |
# Rebuild symlinks
hfdownloader rebuild
# Clean orphaned links
hfdownloader rebuild --clean
# Write standalone script
hfdownloader rebuild --write-script{
"repos_scanned": 5,
"symlinks_created": 23,
"symlinks_updated": 2,
"orphans_removed": 1,
"errors": []
}Sync HuggingFace cache between locations.
hfdownloader mirror <subcommand> [flags]
Add a named mirror target.
hfdownloader mirror target add <name> <path> [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description |
-d |
string | Target description |
hfdownloader mirror target add office /mnt/nas/hfcache -d "Office NAS"
hfdownloader mirror target add usb /media/usb/hfcacheList configured targets.
hfdownloader mirror target list [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--format |
string | table |
Output: table, json |
hfdownloader mirror target listRemove a mirror target.
hfdownloader mirror target remove <name>
hfdownloader mirror target remove usbShow differences between local and target.
hfdownloader mirror diff <target> [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cache-dir |
string | ~/.cache/huggingface |
Local cache | |
--format |
string | table |
Output: table, json | |
--repo |
string | Filter by repo name |
hfdownloader mirror diff office
hfdownloader mirror diff office --repo MistralPush local repos to target.
hfdownloader mirror push <target> [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cache-dir |
string | ~/.cache/huggingface |
Local cache | |
--repo |
string | Filter by repo name | ||
--dry-run |
bool | false |
Preview only | |
--verify |
bool | false |
Verify SHA256 after copy | |
--delete |
bool | false |
Delete repos not in source | |
--force |
bool | false |
Re-copy incomplete repos |
# Preview
hfdownloader mirror push office --dry-run
# Push all
hfdownloader mirror push office
# Push specific repo
hfdownloader mirror push office --repo Mistral-7B
# With verification
hfdownloader mirror push office --verifyPull repos from target to local.
hfdownloader mirror pull <target> [flags]
Same flags as mirror push.
hfdownloader mirror pull office
hfdownloader mirror pull office --repo LlamaManage and test proxy configuration.
hfdownloader proxy <subcommand> [flags]
Test proxy connectivity by making a test request.
hfdownloader proxy test [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--proxy |
-x |
string | Proxy URL (required) | |
--proxy-user |
string | Proxy username | ||
--proxy-pass |
string | Proxy password | ||
--url |
string | https://huggingface.co/api/whoami |
URL to test | |
--timeout |
string | 30s |
Connection timeout |
# Test HTTP proxy
hfdownloader proxy test --proxy http://proxy.corp.com:8080
# Test with authentication
hfdownloader proxy test --proxy http://proxy.corp.com:8080 \
--proxy-user myuser --proxy-pass mypassword
# Test SOCKS5 proxy
hfdownloader proxy test --proxy socks5://localhost:1080
# Test against specific URL
hfdownloader proxy test --proxy http://proxy:8080 --url https://example.comShow current proxy configuration from environment variables.
hfdownloader proxy info [flags]
# Show proxy info
hfdownloader proxy info
# JSON output
hfdownloader proxy info --jsonProxy Configuration:
Environment Variables:
HTTP_PROXY: http://proxy.corp.com:8080
HTTPS_PROXY: http://proxy.corp.com:8080
NO_PROXY: localhost,.internal.com
Effective Proxy: http://proxy.corp.com:8080
Proxy settings can be specified via CLI flags, config file, or environment variables.
# Basic proxy
hfdownloader download meta-llama/Llama-2-7b --proxy http://proxy:8080
# With authentication
hfdownloader download meta-llama/Llama-2-7b \
--proxy http://proxy:8080 \
--proxy-user myuser \
--proxy-pass mypassword
# SOCKS5 proxy
hfdownloader download meta-llama/Llama-2-7b --proxy socks5://localhost:1080
# Ignore environment proxy
hfdownloader download meta-llama/Llama-2-7b --no-env-proxy# ~/.config/hfdownloader.yaml
proxy:
url: http://proxy.corp.com:8080
username: myuser
password: mypassword
no_proxy: localhost,.internal.com,10.0.0.0/8
no_env_proxy: false
insecure_skip_verify: false| Variable | Description |
|---|---|
HTTP_PROXY / http_proxy |
Proxy for HTTP requests |
HTTPS_PROXY / https_proxy |
Proxy for HTTPS requests |
ALL_PROXY / all_proxy |
Fallback for all protocols |
NO_PROXY / no_proxy |
Comma-separated bypass list |
| Type | URL Format | Description |
|---|---|---|
| HTTP | http://host:port |
Standard HTTP proxy |
| HTTPS | https://host:port |
TLS-encrypted proxy |
| SOCKS5 | socks5://host:port |
SOCKS5 TCP tunneling |
| SOCKS5h | socks5h://host:port |
SOCKS5 with remote DNS |
The no_proxy setting supports:
- Exact hostnames:
localhost,myserver.local - Domain suffixes:
.internal.com(matches*.internal.com) - CIDR ranges:
10.0.0.0/8,192.168.0.0/16 - Wildcard:
*(bypass all)
Manage configuration file.
hfdownloader config <subcommand>
Create default configuration file.
hfdownloader config init [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--force |
-f |
bool | false |
Overwrite existing |
--yaml |
bool | false |
Create YAML instead of JSON |
hfdownloader config init
hfdownloader config init --yaml
hfdownloader config init -fDisplay current configuration.
hfdownloader config showPrint configuration file path.
hfdownloader config path
# Output: /home/user/.config/hfdownloader.json{
"connections": 8,
"max-active": 3,
"multipart-threshold": "32MiB",
"verify": "size",
"retries": 4,
"backoff-initial": "400ms",
"backoff-max": "10s",
"token": ""
}Show version information.
hfdownloader version [flags]
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--short |
-s |
bool | false |
Version number only |
hfdownloader version
# hfdownloader v3.0.3
# Go: go1.21.0
# OS/Arch: darwin/arm64
# Commit: abc123
# Built: 2024-01-15T10:30:00Z
hfdownloader version -s
# 3.0.0| Variable | Description |
|---|---|
HF_TOKEN |
HuggingFace access token |
HF_HOME |
Override ~/.cache/huggingface root |
HF_HUB_CACHE |
Override just the hub/ directory |
HTTP_PROXY / http_proxy |
Proxy for HTTP requests |
HTTPS_PROXY / https_proxy |
Proxy for HTTPS requests |
ALL_PROXY / all_proxy |
Fallback proxy for all protocols |
NO_PROXY / no_proxy |
Comma-separated proxy bypass list |
export HF_TOKEN=hf_xxxxx
export HF_HOME=/mnt/data/huggingface
# Proxy configuration
export HTTPS_PROXY=http://proxy.corp.com:8080
export NO_PROXY=localhost,.internal.comConfiguration is loaded from (in order):
--configflag path~/.config/hfdownloader.json~/.config/hfdownloader.yaml
{
"token": "hf_xxxxx",
"connections": 8,
"max-active": 3,
"multipart-threshold": "32MiB",
"verify": "size",
"retries": 4,
"backoff-initial": "400ms",
"backoff-max": "10s",
"endpoint": "",
"proxy": {
"url": "http://proxy.corp.com:8080",
"username": "myuser",
"password": "mypassword",
"no_proxy": "localhost,.internal.com",
"no_env_proxy": false,
"insecure_skip_verify": false
}
}token: hf_xxxxx
connections: 8
max-active: 3
multipart-threshold: 32MiB
verify: size
retries: 4
backoff-initial: 400ms
backoff-max: 10s
endpoint: ""
# Proxy configuration
proxy:
url: http://proxy.corp.com:8080
username: myuser
password: mypassword
no_proxy: localhost,.internal.com
no_env_proxy: false
insecure_skip_verify: false# 1. Analyze → Select → Download
hfdownloader analyze TheBloke/Mistral-7B-Instruct-v0.2-GGUF
hfdownloader download TheBloke/Mistral-7B-Instruct-v0.2-GGUF:q4_k_m
# 2. Download entire model
hfdownloader download meta-llama/Llama-3-8B-Instruct
# 3. Download with filters and excludes
hfdownloader download owner/repo -F safetensors -E ".md,fp16"
# 4. High-speed download
hfdownloader download owner/repo -c 16 --max-active 8
# 5. Resume interrupted download
hfdownloader download owner/repo # Automatically resumes# 1. Basic server
hfdownloader serve
# 2. Production server
hfdownloader serve \
--port 8080 \
--auth-user admin \
--auth-pass secure123 \
-t hf_xxxxx
# 3. Mirror server
hfdownloader serve --endpoint https://hf-mirror.com# View downloads
hfdownloader list --sort size
# Get details
hfdownloader info Mistral-7B
# Rebuild after Python downloads
hfdownloader rebuild --clean
# Mirror to backup
hfdownloader mirror target add backup /mnt/backup/hf
hfdownloader mirror push backup --verify# JSON output for parsing
hfdownloader download owner/repo --json 2>&1 | jq '.event'
# Dry run for planning
hfdownloader download owner/repo --dry-run --plan-format json
# Quiet mode for scripts
hfdownloader download owner/repo -q| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Invalid arguments |
| 130 | Interrupted (Ctrl+C) |
SIGINT(Ctrl+C): Graceful shutdown, saves progressSIGTERM: Same as SIGINT
Interrupted downloads can be resumed by running the same command again.