wan13-zero-video / deploy_zero_space.py
bykhan's picture
Deploy Wan ZeroGPU Space
9a19757 verified
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())