Spaces:
Running
Running
| import subprocess | |
| import uuid | |
| import os | |
| from pathlib import Path | |
| import gradio as gr | |
| # --------------------------------------------------------------------- | |
| # CONFIG | |
| # --------------------------------------------------------------------- | |
| CKPT_PATH = "checkpoints/t2m_50step.pt" # make sure this file exists | |
| DEVICE = "cpu" # free HF Spaces have no GPU | |
| # --------------------------------------------------------------------- | |
| def generate_motion(prompt: str) -> str: | |
| """ | |
| Runs the MDM sampling script in a subprocess and returns the BVH | |
| file path so Gradio can hand it to the user. | |
| """ | |
| out_file = Path("/tmp") / f"{uuid.uuid4().hex}.bvh" | |
| cmd = [ | |
| "python", | |
| "-m", | |
| "motion_diffusion_model.sample.generate", | |
| "--model_path", str(CKPT_PATH), | |
| "--prompt", prompt, | |
| "--output", str(out_file), | |
| "--device", DEVICE, | |
| "--num_steps", "50", # matches the checkpoint | |
| ] | |
| # --- make sure the local repo root is on PYTHONPATH so | |
| # 'utils.*' imports inside the script can be resolved | |
| env = os.environ.copy() | |
| root = Path(__file__).parent | |
| repo_inner = root / "motion_diffusion_model" | |
| env["PYTHONPATH"] = ( | |
| f"{env.get('PYTHONPATH', '')}:{root}:{repo_inner}" | |
| ) | |
| completed = subprocess.run(cmd, env=env, capture_output=True, text=True) | |
| if completed.returncode != 0: | |
| raise RuntimeError(f"Inference failed:\n{completed.stderr}") | |
| return str(out_file) | |
| # ----------------------- Gradio UI ---------------------------------- | |
| iface = gr.Interface( | |
| fn=generate_motion, | |
| inputs=gr.Textbox( | |
| lines=2, | |
| placeholder="e.g. a person walks forward and waves" | |
| ), | |
| outputs=gr.File(label="Download BVH"), | |
| title="Motion Diffusion Model – Text-to-Motion (50-step CPU demo)", | |
| description=( | |
| "Enter a natural-language prompt and receive a 3-D skeletal " | |
| "animation in BVH format." | |
| ), | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |