filetransfer
A Claude-driven downloader that wraps aria2 and shows progress in AriaNg (opened in the browser). When you need to save a file to disk, reach for filetransfer download instead of curl -O / wget.
When to use
- Downloading any file to disk: release assets, tarballs/zips, datasets, model weights, ISOs, images, audio, video.
- Downloading a Hugging Face repo/model/dataset — prefer
filetransfer hfoverhuggingface-cli/hf download. - Especially large or slow downloads — you get multi-connection speedup, automatic resume on failure, and a live progress bar.
When NOT to use
- Fetching an API response, JSON, or HTML to stdout or into a pipe → keep using
curl.
Commands
filetransfer download <url>... [--dir DIR] [--out NAME] [--window] [--no-window]
filetransfer hf <repo> [--include GLOB]... [--exclude GLOB]... [--revision REV] [--repo-type model|dataset|space] [--link DIR]
filetransfer verify <repo> [--include GLOB]... [--fix]
filetransfer list # all transfers, as a table
filetransfer status [gid] # one transfer (or all)
filetransfer window # open the progress window on demand
filetransfer pause <gid>
filetransfer resume <gid>
filetransfer cancel <gid>
filetransfer daemon start|stop|status
- Destination:
downloaddefaults to the current directory (--dirto change).hf/verifyalways use the canonical store~/.filetransfer/models/<repo>(override withFT_MODELS_DIR), independent of cwd — a repo can't be downloaded to two places. Use--link DIRto symlink a project path to the store copy. - Big files (>50 MB or unknown size) auto-open the AriaNg progress window. Small files stay quiet and just print a progress URL. Force with
--window, suppress with--no-window. - The Engine (
aria2c --enable-rpc) starts automatically on the first download and stays resident, so transfers keep running after the command returns, after the window closes, and after the session ends. Stop it withfiletransfer daemon stop.
Hugging Face
filetransfer hf <repo> downloads the whole repo by default (configs included; use --include/--exclude globs to narrow). Every repo goes to one canonical path ~/.filetransfer/models/<repo> regardless of cwd, so it is never downloaded twice; --link DIR symlinks a project path to that single copy. Xet-backed files download over the HTTPS xet bridge — no special handling. Re-running is idempotent: complete files are skipped, in-flight/partial ones are refreshed with a fresh signed URL and resumed. Errored transfers self-heal (the manager re-adds them with a fresh URL), and once a repo finishes it is auto-verified (size + sha256) and any corrupt file is re-downloaded. Run filetransfer verify <repo> --dir ... [--fix] to check/repair on demand. Set HF_TOKEN for gated repos, HF_ENDPOINT for a mirror.
Install
Requires aria2:
brew install aria2
go install github.com/sunfmin/filetransfer@latest