1cd inference/robotwin/Motus
2
3# Single task evaluation
4bash eval.sh place_dual_shoes
5
6# Multi-task batch evaluation
7bash auto_eval.sh
1python inference/real_world/Motus/inference_example.py \
2 --model_config inference/real_world/Motus/utils/robotwin.yml \
3 --ckpt_dir ./pretrained_models/Motus_robotwin2 \
4 --wan_path /path/to/pretrained_models \
5 --image /path/to/input_frame.png \
6 --instruction "pick up the cube and place it on the right" \
7 --use_t5 \
8 --output result.png
1import torch
2import yaml
3from models.motus import Motus, MotusConfig
4
5# Load config
6with open("configs/robotwin.yaml", "r") as f:
7 config = yaml.safe_load(f)
8
9# Initialize model
10model_config = MotusConfig(
11 wan_checkpoint_path=config['model']['wan']['checkpoint_path'],
12 vae_path=config['model']['wan']['vae_path'],
13 wan_config_path=config['model']['wan']['config_path'],
14 vlm_checkpoint_path=config['model']['vlm']['checkpoint_path'],
15 action_dim=14,
16 load_pretrained_backbones=False,
17)
18
19model = Motus(model_config).to("cuda").eval()
20model.load_checkpoint("./pretrained_models/Motus_robotwin2", strict=False)
21
22# Inference
23with torch.no_grad():
24 predicted_frames, predicted_actions = model.inference_step(
25 first_frame=frame_tensor,
26 state=state_tensor,
27 num_inference_steps=20,
28 language_embeddings=t5_embeddings,
29 vlm_inputs=[vlm_inputs],
30 )
31
32# Action chunk: [1, 48, 14]
33actions = predicted_actions.squeeze(0).cpu().numpy()
1@misc{bi2025motusunifiedlatentaction,
2 title={Motus: A Unified Latent Action World Model},
3 author={Hongzhe Bi and Hengkai Tan and Shenghao Xie and Zeyuan Wang and Shuhe Huang and Haitian Liu and Ruowen Zhao and Yao Feng and Chendong Xiang and Yinze Rong and Hongyan Zhao and Hanyu Liu and Zhizhong Su and Lei Ma and Hang Su and Jun Zhu},
4 year={2025},
5 eprint={2512.13030},
6 archivePrefix={arXiv},
7 primaryClass={cs.CV},
8 url={https://arxiv.org/abs/2512.13030},
9}