{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreicpjpareaaf4whxcuhvqq2ieb4orl7g3b3wxq3f4zwucu45hib4wu",
    "uri": "at://did:plc:pgryn3ephfd2xgft23qokfzt/app.bsky.feed.post/3mku37c2oecz2"
  },
  "path": "/t/how-can-i-tell-the-size-of-a-model-before-downloading-it/174108#post_7",
  "publishedAt": "2026-05-02T05:55:27.000Z",
  "site": "https://discuss.huggingface.co",
  "textContent": "Use Hugging Face’s generic `search=` parameter. It behaves like the site search: partial/fuzzy-ish matching across model names and metadata.\n\n#!/usr/bin/env python3\n\nfrom **future** import annotations\n\nimport argparse\nfrom huggingface_hub import HfApi\nfrom huggingface_hub.utils import HfHubHTTPError\n\ndef human_size(num_bytes: int | None) → str:\nif not num_bytes:\nreturn “0 B”\n\n\n    units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"]\n    size = float(num_bytes)\n\n    for unit in units:\n        if size < 1024 or unit == units[-1]:\n            return f\"{size:.2f} {unit}\"\n        size /= 1024\n\n    return f\"{size:.2f} TB\"\n\n\ndef get_repo_size(api: HfApi, repo_id: str) → tuple[int, list[tuple[str, int]]]:\ninfo = api.model_info(repo_id, files_metadata=True)\n\n\n    files = []\n    total = 0\n\n    for sibling in info.siblings or []:\n        name = sibling.rfilename\n        size = sibling.size or 0\n        files.append((name, size))\n        total += size\n\n    files.sort(key=lambda x: x[1], reverse=True)\n    return total, files\n\n\ndef main() → int:\nparser = argparse.ArgumentParser(\ndescription=“Search Hugging Face models by partial term and show approximate repo sizes.”\n)\nparser.add_argument(“query”, help=“Partial search term, e.g. qwen, llama, flux, embedding, whisper”)\nparser.add_argument(“-n”, “–limit”, type=int, default=20, help=“Number of model results to check”)\nparser.add_argument(“–show-files”, action=“store_true”, help=“Show largest files per repo”)\nparser.add_argument(“–top-files”, type=int, default=5, help=“Number of files to show with --show-files”)\nparser.add_argument(“–sort”, default=“downloads”, help=“HF sort field: downloads, likes, lastModified, createdAt”)\nparser.add_argument(“–ascending”, action=“store_true”, help=“Sort HF results ascending”)\n\n\n    args = parser.parse_args()\n\n    api = HfApi()\n\n    models = api.list_models(\n        search=args.query,\n        limit=args.limit,\n        sort=args.sort,\n        direction=1 if args.ascending else -1,\n        full=True,\n    )\n\n    rows = []\n\n    for model in models:\n        repo_id = model.modelId\n\n        try:\n            total_size, files = get_repo_size(api, repo_id)\n        except HfHubHTTPError as e:\n            rows.append({\n                \"repo_id\": repo_id,\n                \"size\": None,\n                \"downloads\": getattr(model, \"downloads\", None),\n                \"likes\": getattr(model, \"likes\", None),\n                \"pipeline\": getattr(model, \"pipeline_tag\", None),\n                \"error\": str(e),\n                \"files\": [],\n            })\n            continue\n\n        rows.append({\n            \"repo_id\": repo_id,\n            \"size\": total_size,\n            \"downloads\": getattr(model, \"downloads\", None),\n            \"likes\": getattr(model, \"likes\", None),\n            \"pipeline\": getattr(model, \"pipeline_tag\", None),\n            \"error\": None,\n            \"files\": files,\n        })\n\n    rows.sort(key=lambda r: r[\"size\"] or 0, reverse=True)\n\n    print()\n    print(f\"Search: {args.query}\")\n    print()\n\n    print(f\"{'SIZE':>12}  {'DOWNLOADS':>10}  {'LIKES':>7}  {'TYPE':<24}  MODEL\")\n    print(\"-\" * 90)\n\n    for row in rows:\n        size = human_size(row[\"size\"])\n        downloads = row[\"downloads\"] if row[\"downloads\"] is not None else \"-\"\n        likes = row[\"likes\"] if row[\"likes\"] is not None else \"-\"\n        pipeline = row[\"pipeline\"] or \"-\"\n\n        print(f\"{size:>12}  {downloads:>10}  {likes:>7}  {pipeline:<24}  {row['repo_id']}\")\n\n        if row[\"error\"]:\n            print(f\"{'':>12}  error: {row['error']}\")\n\n        if args.show_files and row[\"files\"]:\n            for filename, file_size in row[\"files\"][:args.top_files]:\n                print(f\"{'':>12}  {human_size(file_size):>10}  {filename}\")\n            print()\n\n    return 0\n\n\nif **name** == “**main** ”:\nraise SystemExit(main())",
  "title": "How can I tell the size of a model before downloading it?"
}