File size: 5,541 Bytes
5484092
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Hosting Time-to-Move on Hugging Face

This guide explains how to mirror the Time-to-Move (TTM) codebase on the 🤗 Hub and how to expose an interactive demo through a Space. It assumes you already read the main `README.md`, understand how to run `run_wan.py`, and have access to Wan 2.2 weights through your Hugging Face account.

---

## 1. Prerequisites

- Hugging Face account with access to the Wan 2.2 Image-to-Video model (`Wan-AI/Wan2.2-I2V-A14B-Diffusers` at the time of writing).
- Local environment with Git, Git LFS, Python 3.10+, and the `huggingface_hub` CLI.
- GPU-backed hardware both locally (for testing) and on Spaces (A100 or A10 is strongly recommended; CPU-only tiers are too slow for Wan 2.2).
- Optional: organization namespace on the Hugging Face Hub (recommended if you want to publish under a team/org).

Authenticate once locally (this stores a token in `~/.huggingface`):

```bash
huggingface-cli login
git lfs install
```

---

## 2. Publish the code as a model repository

1. **Create an empty repo on the Hub.** Example:

   ```bash
   huggingface-cli repo create time-to-move/wan-ttm --type=model --yes
   git clone https://huggingface.co/time-to-move/wan-ttm
   cd wan-ttm
   ```

2. **Copy the TTM sources.** From the project root, copy the files that users need to reproduce inference:

   ```bash
   rsync -av \
     --exclude ".git/" \
     --exclude "outputs/" \
     /path/to/TTM/ \
     /path/to/wan-ttm/
   ```

   Make sure `pipelines/`, `run_wan.py`, `run_cog.py`, `run_svd.py`, `examples/`, and the new `huggingface_space/` folder are included. Track large binary assets:

   ```bash
   git lfs track "*.mp4" "*.png" "*.gif"
   git add .gitattributes
   ```

3. **Add a model card.** Reuse the main `README.md` or create a shorter version describing:
   - What Time-to-Move does.
   - How to run `run_wan.py` with the `motion_signal` + `mask`.
   - Which base model checkpoint the repo expects (Wan 2.2 I2V A14B).

4. **Push to the Hub.**

   ```bash
   git add .
   git commit -m "Initial commit of Time-to-Move Wan implementation"
   git push
   ```

Users can now do:

```python
from huggingface_hub import snapshot_download
snapshot_download("time-to-move/wan-ttm")
```

---

## 3. Prepare a Hugging Face Space (Gradio)

This repository now contains `huggingface_space/`, a ready-to-use Space template:

```
huggingface_space/
├── README.md                # Quickstart instructions
├── app.py                   # Gradio UI (loads Wan + Time-to-Move logic)
└── requirements.txt         # Runtime dependencies
```

### 3.1 Create the Space

```bash
huggingface-cli repo create time-to-move/wan-ttm-demo --type=space --sdk=gradio --yes
git clone https://huggingface.co/spaces/time-to-move/wan-ttm-demo
cd wan-ttm-demo
```

Copy everything from `huggingface_space/` into the Space repository (or keep the whole repo and set the Space’s working directory accordingly). Commit and push.

### 3.2 Configure hardware and secrets

- **Hardware:** Select an A100 (preferred) or A10 GPU runtime in the Space settings. Wan 2.2 is too heavy for CPUs.
- **WAN_MODEL_ID:** If you mirrored Wan 2.2 into your organization, set the environment variable to point to it. Otherwise leave the default (`Wan-AI/Wan2.2-I2V-A14B-Diffusers`).
- **HF_TOKEN / WAN_ACCESS_TOKEN:** Add a Space secret only if the Wan checkpoint is private. The Gradio app reads from `HF_TOKEN` automatically when calling `from_pretrained`.
- **PYTORCH_CUDA_ALLOC_CONF:** Recommended value `expandable_segments:True` to reduce CUDA fragmentation.

### 3.3 How the app works

`huggingface_space/app.py` exposes:

- A dropdown of the pre-packaged `examples/cutdrag_wan_*` prompts.
- Optional custom uploads (`first_frame`, `mask.mp4`, `motion_signal.mp4`) following the README workflow.
- Sliders for `tweak-index`, `tstrong-index`, guidance scale, seed, etc.
- Live status messages and a generated MP4 preview using `diffusers.utils.export_to_video`.

The UI lazily loads the `WanImageToVideoTTMPipeline` with tiling/slicing enabled to reduce VRAM usage. All preprocessing matches the logic in `run_wan.py` (the same `compute_hw_from_area` helper is reused).

If you need to customize the experience (e.g., restrict to certain prompts, enforce shorter sequences), edit `huggingface_space/app.py` before pushing.

---

## 4. Testing checklist

1. **Local dry-run.**
   ```bash
   pip install -r huggingface_space/requirements.txt
   WAN_MODEL_ID=Wan-AI/Wan2.2-I2V-A14B-Diffusers \
   python huggingface_space/app.py
   ```
   Ensure you can generate at least one of the bundled examples.

2. **Space smoke test.**
   - Open the deployed Space.
   - Run the default example (`cutdrag_wan_Monkey`) and confirm you receive a video in ~2–3 minutes on A100 hardware.
   - Optionally upload a small custom mask/video pair and verify that `tweak-index`/`tstrong-index` are honored.

3. **Monitor logs.** Use the Space “Logs” tab to confirm:
   - The pipeline downloads from the expected `WAN_MODEL_ID`.
   - VRAM usage stays within the selected hardware tier.

4. **Freeze dependencies.** When satisfied, tag the Space (`v1`, `demo`) so users know which TTM commit it matches.

You now have both a **model repository** (for anyone to clone/run) and a **public Space** for live demos. Feel free to adapt the instructions for the CogVideoX or Stable Video Diffusion pipelines if you plan to expose them as well; start by duplicating the provided Space template and swapping out `run_wan.py` for the relevant runner.