ROOM / setup_spaces.py
solo363614's picture
Upload folder using huggingface_hub
fcf076d verified
#!/usr/bin/env python3
"""
Auto-run on HF Spaces startup: clone ACE-Step and OpenVoice, download checkpoints.
Called from app.py before the Gradio UI launches.
"""
from __future__ import annotations
import os
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent
MODELS = ROOT / "models"
def run(cmd, **kw):
print(f" $ {' '.join(cmd)}")
subprocess.run(cmd, check=True, **kw)
def pip(*args):
subprocess.run([sys.executable, "-m", "pip", "install", "--quiet", *args], check=False)
def setup():
MODELS.mkdir(exist_ok=True)
# ── ACE-Step ──────────────────────────────────────────────────────
acestep_dir = MODELS / "ace-step"
if not (acestep_dir / "pyproject.toml").exists():
print("[setup] Cloning ACE-Step 1.5...")
run(["git", "clone", "https://github.com/ACE-Step/ACE-Step-1.5.git", str(acestep_dir)])
pyproject = acestep_dir / "pyproject.toml"
text = pyproject.read_text()
if ">=3.11,<3.13" in text:
pyproject.write_text(text.replace(">=3.11,<3.13", ">=3.10,<3.14"))
else:
print("[setup] ACE-Step already present.")
pip("-e", str(acestep_dir), "--no-deps")
# Patch sys.path so acestep is importable
if str(acestep_dir) not in sys.path:
sys.path.insert(0, str(acestep_dir))
# ── OpenVoice ─────────────────────────────────────────────────────
openvoice_dir = MODELS / "openvoice"
if not openvoice_dir.exists():
print("[setup] Cloning OpenVoice...")
run(["git", "clone", "https://github.com/myshell-ai/OpenVoice.git", str(openvoice_dir)])
pip("-e", str(openvoice_dir), "--no-deps")
ckpt_dir = openvoice_dir / "checkpoints_v2"
if not (ckpt_dir / "converter" / "checkpoint.pth").exists():
print("[setup] Downloading OpenVoice V2 checkpoints...")
from huggingface_hub import snapshot_download
snapshot_download("myshell-ai/OpenVoiceV2", local_dir=str(ckpt_dir))
else:
print("[setup] OpenVoice checkpoints present.")
print("[setup] Done.")
if __name__ == "__main__":
setup()