PRISM-TP2M-1.4B / README.md
ZeyuLing's picture
Update README.md
825daaa verified
# PRISM-TP2M-1.4B
<p align="center">
<a href="https://arxiv.org/abs/2603.08590">
<img src="https://img.shields.io/badge/Paper-ArXiv-B31B1B?style=for-the-badge&logo=arxiv" alt="Paper"/>
</a>
<a href="https://github.com/ZeyuLing/PRISM">
<img src="https://img.shields.io/badge/Code-GitHub-181717?style=for-the-badge&logo=github" alt="GitHub"/>
</a>
<a href="https://www.youtube.com/watch?v=3PBFpYcwGIM">
<img src="https://img.shields.io/badge/Demo-YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white" alt="YouTube"/>
</a>
</p>
<p align="center"><b>PRISM: Streaming Human Motion Generation with Per-Joint Latent Decomposition</b></p>
<p align="center"><b>Zeyu Ling</b>, <b>Qing Shuai</b>, <b>Teng Zhang</b>, <b>Shiyang Li</b>, <b>Bo Han</b>, <b>Changqing Zou</b></p>
---
## Abstract
Text-to-motion generation has advanced rapidly, yet two challenges persist. First, existing motion autoencoders compress each frame into a single monolithic latent vector, entangling trajectory and per-joint rotations in an unstructured representation that downstream generators struggle to model faithfully. Second, text-to-motion, pose-conditioned generation, and long-horizon sequential synthesis typically require separate models or task-specific mechanisms, with autoregressive approaches suffering from severe error accumulation over extended rollouts.
We present PRISM, addressing each challenge with a dedicated contribution. **(1) A joint-factorized motion latent space**: each body joint occupies its own token, forming a structured 2D grid (time × joints) compressed by a causal VAE with forward-kinematics supervision. This simple change to the latent space, without modifying the generator, substantially improves generation quality, revealing that latent space design has been an underestimated bottleneck. **(2) Noise-free condition injection**: each latent token carries its own timestep embedding, allowing conditioning frames to be injected as clean tokens (timestep 0) while the remaining tokens are denoised. This unifies text-to-motion and pose-conditioned generation in a single model, and directly enables autoregressive segment chaining for streaming synthesis. Self-forcing training further suppresses drift in long rollouts. With these two components, we train a single motion generation foundation model that seamlessly handles text-to-motion, pose-conditioned generation, autoregressive sequential generation, and narrative motion composition, achieving state-of-the-art on HumanML3D, MotionHub, BABEL, and a 50-scenario user study.
---
## Demo
<p align="center">
<a href="https://www.youtube.com/watch?v=3PBFpYcwGIM">
<img src="https://img.youtube.com/vi/3PBFpYcwGIM/maxresdefault.jpg" alt="PRISM Demo Video" width="720"/>
</a>
</p>
<p align="center">
<a href="https://www.youtube.com/watch?v=3PBFpYcwGIM">
<img src="https://img.shields.io/badge/▶%20Play%20Demo-YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white" alt="Play Demo"/>
</a>
</p>
---
## Model Details
| | |
|---|---|
| **Architecture** | Flow-matching DiT transformer with causal spatio-temporal Motion VAE |
| **Text encoder** | UMT5 (T5-style) |
| **Parameters** | ~1.4B |
| **Output** | SMPL/SMPL-X body parameters (22 joints, rotation_6d, 30 fps) |
---
## Download
This Hugging Face repo contains the pretrained weights. Download to use locally:
```bash
pip install huggingface_hub
huggingface-cli download ZeyuLing/PRISM-TP2M-1.4B --local-dir pretrained_models/prism_1.4b
```
Or in Python:
```python
from huggingface_hub import snapshot_download
snapshot_download("ZeyuLing/PRISM-TP2M-1.4B", local_dir="pretrained_models/prism_1.4b")
```
For full inference scripts and setup, use the [GitHub repository](https://github.com/ZeyuLing/PRISM) (designed to run inside [versatilemotion](https://github.com/ZeyuLing/versatilemotion)).
---
## Usage
**Load from local checkpoint:**
```python
from mmotion.pipelines.prism_from_pretrained import load_prism_pipeline_from_pretrained
pipe = load_prism_pipeline_from_pretrained("path/to/pretrained_models/prism_1.4b")
```
**Text-to-Motion (single segment):**
```python
smplx_dict = pipe(
prompts="A person walks forward and waves.",
negative_prompt="",
num_frames_per_segment=129,
num_joints=23,
guidance_scale=5.0,
)
```
**Sequential multi-segment:**
```python
smplx_dict = pipe(
prompts=["A person waves.", "A person walks.", "A person bows."],
num_frames_per_segment=[97, 129, 97],
guidance_scale=5.0,
)
```
**Pose-conditioned (TP2M):**
```python
smplx_dict = pipe(
prompts="The person stands up and walks.",
first_frame_motion_path="/path/to/first_frame.npz",
num_frames_per_segment=129,
guidance_scale=5.0,
)
```
---
## Requirements
- Python ≥ 3.9
- PyTorch (CUDA recommended)
- transformers, diffusers, einops, mmengine
- SMPL/SMPL-X body model (for full mesh rendering)
---
## Citation
```bibtex
@article{ling2026prism,
title={PRISM: Streaming Human Motion Generation with Per-Joint Latent Decomposition},
author={Ling, Zeyu and Shuai, Qing and Zhang, Teng and Li, Shiyang and Han, Bo and Zou, Changqing},
journal={arXiv preprint arXiv:2603.08590},
year={2026},
url={https://arxiv.org/abs/2603.08590}
}
```
**Links:** [Paper](https://arxiv.org/abs/2603.08590) · [Code](https://github.com/ZeyuLing/PRISM) · [Demo](https://www.youtube.com/watch?v=3PBFpYcwGIM)
---
## License
See the [main repository](https://github.com/ZeyuLing/PRISM) for license terms.