Add weights download script for repos without LFS support
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
"""Download Inflect-Nano-v1 model weights from HuggingFace.
|
||||
|
||||
Run this once after cloning the repo:
|
||||
python download_weights.py
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Use requests or urllib — try both
|
||||
try:
|
||||
import requests
|
||||
_has_requests = True
|
||||
except ImportError:
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
_has_requests = False
|
||||
|
||||
WEIGHTS_DIR = Path(__file__).resolve().parent / "weights"
|
||||
HF_BASE = "https://huggingface.co/owensong/Inflect-Nano-v1/resolve/main/weights"
|
||||
|
||||
FILES = [
|
||||
"inflect_nano_v1_acoustic.pt",
|
||||
"inflect_nano_v1_vocoder.pt",
|
||||
]
|
||||
|
||||
|
||||
def download_file(url: str, dest: Path) -> None:
|
||||
dest.parent.mkdir(parents=True, exist_ok=True)
|
||||
print(f"Downloading {dest.name}...", end=" ", flush=True)
|
||||
|
||||
if _has_requests:
|
||||
resp = requests.get(url, stream=True)
|
||||
resp.raise_for_status()
|
||||
total = int(resp.headers.get("content-length", 0))
|
||||
with dest.open("wb") as f:
|
||||
downloaded = 0
|
||||
for chunk in resp.iter_content(chunk_size=8192):
|
||||
f.write(chunk)
|
||||
downloaded += len(chunk)
|
||||
if total:
|
||||
pct = downloaded * 100 // total
|
||||
print(f"\rDownloading {dest.name}... {pct}%", end="", flush=True)
|
||||
print(" done.")
|
||||
else:
|
||||
urllib.request.urlretrieve(url, str(dest))
|
||||
print("done.")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
missing = [f for f in FILES if not (WEIGHTS_DIR / f).is_file()]
|
||||
if not missing:
|
||||
print("All weights already present.")
|
||||
return
|
||||
|
||||
print(f"Missing {len(missing)} weight file(s). Downloading from HuggingFace...\n")
|
||||
for filename in missing:
|
||||
url = f"{HF_BASE}/{filename}"
|
||||
dest = WEIGHTS_DIR / filename
|
||||
try:
|
||||
download_file(url, dest)
|
||||
except Exception as e:
|
||||
print(f"\n FAILED: {e}")
|
||||
print(f" Manual download: {url}")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"\nAll weights downloaded to {WEIGHTS_DIR}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user