Spaces:
Runtime error
Runtime error
| import argparse | |
| from pathlib import Path | |
| from huggingface_hub import HfApi | |
| from huggingface_hub.errors import HfHubHTTPError | |
| DEFAULT_SPACE_REPO_ID = "bykhan/wan13-zero-video" | |
| DEFAULT_HARDWARE = "zero-a10g" | |
| DEFAULT_SLEEP_TIME = 60 | |
| def read_env_file(file_path: Path) -> dict[str, str]: | |
| values: dict[str, str] = {} | |
| for raw_line in file_path.read_text(encoding="utf-8").splitlines(): | |
| line = raw_line.strip() | |
| if not line or line.startswith("#") or "=" not in line: | |
| continue | |
| key, value = line.split("=", 1) | |
| values[key.strip()] = value.strip() | |
| return values | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser(description="Create or update a Hugging Face Gradio ZeroGPU Space for the Wan backend.") | |
| parser.add_argument("--repo-id", default=DEFAULT_SPACE_REPO_ID) | |
| parser.add_argument("--hardware", default=DEFAULT_HARDWARE) | |
| parser.add_argument("--sleep-time", type=int, default=DEFAULT_SLEEP_TIME) | |
| parser.add_argument("--private", action="store_true") | |
| parser.add_argument("--skip-hardware-request", action="store_true") | |
| parser.add_argument("--dry-run", action="store_true") | |
| return parser.parse_args() | |
| def build_space_url(repo_id: str) -> str: | |
| owner, name = repo_id.split("/", 1) | |
| return f"https://{owner}-{name}.hf.space" | |
| def main() -> int: | |
| args = parse_args() | |
| project_root = Path(__file__).resolve().parents[1] | |
| env_values = read_env_file(project_root / ".env") | |
| token = env_values.get("HF_TOKEN", "") | |
| if not token: | |
| raise SystemExit(".env icinde HF_TOKEN bulunamadi.") | |
| space_variables = [ | |
| {"key": "WAN_VACE_CONFIG_REPO", "value": "Wan-AI/Wan2.1-VACE-1.3B-diffusers"}, | |
| {"key": "WAN_VACE_GGUF_REPO", "value": "bykhan/wan-1.3b-gguf"}, | |
| {"key": "WAN_VACE_GGUF_FILE", "value": "wan2.1-vace-1.3b-q4_0.gguf"}, | |
| {"key": "WAN_TEXT_ENCODER_REPO", "value": "bykhan/wan-1.3b-gguf"}, | |
| {"key": "WAN_TEXT_ENCODER_GGUF_FILE", "value": "umt5-xxl-encoder-q4_k_m.gguf"}, | |
| {"key": "WAN_ENABLE_CPU_OFFLOAD", "value": "1"}, | |
| {"key": "WAN_ENABLE_VAE_TILING", "value": "1"}, | |
| {"key": "WAN_FLOW_SHIFT", "value": "3.0"}, | |
| {"key": "WAN_DEFAULT_HEIGHT", "value": "480"}, | |
| {"key": "WAN_DEFAULT_WIDTH", "value": "832"}, | |
| {"key": "WAN_DEFAULT_NUM_FRAMES", "value": "81"}, | |
| {"key": "WAN_DEFAULT_NUM_STEPS", "value": "30"}, | |
| {"key": "WAN_DEFAULT_GUIDANCE", "value": "5.0"}, | |
| {"key": "WAN_DEFAULT_CONDITIONING_SCALE", "value": "1.0"}, | |
| {"key": "WAN_DEFAULT_FPS", "value": "16"}, | |
| {"key": "WAN_RESULTS_REPO_ID", "value": env_values.get("WAN_RESULTS_REPO_ID", "bykhan/generated-videos")}, | |
| {"key": "WAN_RESULTS_REPO_TYPE", "value": env_values.get("WAN_RESULTS_REPO_TYPE", "dataset")}, | |
| {"key": "WAN_RESULTS_PATH_PREFIX", "value": env_values.get("WAN_RESULTS_PATH_PREFIX", "generated-videos")}, | |
| ] | |
| space_secrets = [{"key": "HF_TOKEN", "value": token}] | |
| if args.dry_run: | |
| print(f"repo_id={args.repo_id}") | |
| print(f"hardware={args.hardware}") | |
| print(f"sleep_time={args.sleep_time}") | |
| print(f"space_url={build_space_url(args.repo_id)}") | |
| return 0 | |
| api = HfApi(token=token) | |
| api.create_repo( | |
| repo_id=args.repo_id, | |
| repo_type="space", | |
| space_sdk="gradio", | |
| private=args.private, | |
| exist_ok=True, | |
| space_secrets=space_secrets, | |
| space_variables=space_variables, | |
| space_sleep_time=args.sleep_time, | |
| ) | |
| api.upload_folder( | |
| repo_id=args.repo_id, | |
| repo_type="space", | |
| folder_path=Path(__file__).resolve().parent, | |
| commit_message="Deploy Wan ZeroGPU Space", | |
| ignore_patterns=["__pycache__/*", "*.pyc", ".env", ".env.*"], | |
| ) | |
| runtime = api.get_space_runtime(args.repo_id) | |
| if not args.skip_hardware_request: | |
| try: | |
| request_kwargs = { | |
| "repo_id": args.repo_id, | |
| "hardware": args.hardware, | |
| } | |
| if args.hardware != "zero-a10g": | |
| request_kwargs["sleep_time"] = args.sleep_time | |
| runtime = api.request_space_hardware(**request_kwargs) | |
| except HfHubHTTPError as error: | |
| print(f"space_url={build_space_url(args.repo_id)}") | |
| print(f"stage={runtime.stage}") | |
| print("hardware_request=blocked") | |
| print(f"reason={error}") | |
| return 2 | |
| print(f"space_url={build_space_url(args.repo_id)}") | |
| print(f"stage={runtime.stage}") | |
| print(f"hardware={getattr(runtime, 'hardware', None)}") | |
| print(f"requested_hardware={getattr(runtime, 'requested_hardware', None)}") | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) |