velai-workshop / scripts /publish_to_hf.py
kratadata's picture
Upload folder via script
0f8b3a0 verified
#!/usr/bin/env python3
import argparse
import os
from huggingface_hub import HfApi
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Upload a local folder to a Hugging Face Space, respecting .gitignore and showing progress."
)
parser.add_argument("repo_id", help="Space repository ID in the form 'username/space-name'")
parser.add_argument(
"--folder-path", "-f", default=".", help="Local folder path to upload (default: current directory)"
)
parser.add_argument("--path-in-repo", "-p", default="", help="Target path in the repository (default: root)")
parser.add_argument(
"--commit-message", "-m", default="Upload folder via script", help="Commit message for the upload"
)
parser.add_argument(
"--token",
"-t",
default=None,
help=(
"Hugging Face access token (will use HF_TOKEN or HUGGINGFACE_HUB_TOKEN from environment if not provided)"
),
)
parser.add_argument("--large", action="store_true", help="Use upload_large_folder for large uploads")
return parser.parse_args()
def main() -> None:
args = parse_args()
# Determine token from argument or environment
token = args.token or os.getenv("HF_TOKEN") or os.getenv("HUGGINGFACE_HUB_TOKEN")
if not token:
print(
"Warning: No token provided via --token or environment variable. "
"Please set HF_TOKEN/HUGGINGFACE_HUB_TOKEN or run `huggingface-cli login`."
)
api = HfApi()
if args.large:
api.upload_large_folder(
folder_path=args.folder_path, repo_id=args.repo_id, repo_type="space", print_report=True
)
else:
api.upload_folder(
folder_path=args.folder_path,
path_in_repo=args.path_in_repo,
repo_id=args.repo_id,
repo_type="space",
token=token,
commit_message=args.commit_message,
)
print(f"Successfully uploaded '{args.folder_path}' to '{args.repo_id}'.")
if __name__ == "__main__":
main()