File size: 4,154 Bytes
87d3833
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: mit
library_name: pytorch
pipeline_tag: robotics
tags:
  - robotics
  - robot-learning
  - imitation-learning
  - embodied-ai
  - world-model
  - vision-language-action
  - robotwin
---

# Flex-π — RoboTwin 2.0 (3-camera, 384×320)

Flex-π checkpoint for **RoboTwin 2.0**, trained jointly on all 50 tasks.

- Paper: [arXiv:2608.10860](https://arxiv.org/abs/2608.10860)
- Project page: <https://flex-pi.github.io/>
- Code: <https://github.com/geyan21/flex-pi>

## Results

RoboTwin 2.0, success rate (%) over 50 tasks, as reported in the paper (Table 1).
*Clean* and *Randomized* are background conditions; the two rows are **inference
regimes served by these same weights**.

| Inference regime | Clean | Randomized | Avg. |
| --- | --- | --- | --- |
| Action-only | 94.5 | 94.6 | 94.6 |
| Full joint | 94.3 | 94.8 | 94.6 |

`K = 4` Euler denoising steps throughout. Full joint additionally denoises the
future-video, DINO, and pointmap streams; action-only skips them, trading them
for cheaper inference at the same average success rate. Selecting a regime is an
inference-time flag — no retraining, no separate weights.

## Architecture

A Mixture-of-Transformers pairing a video DiT with an action DiT, coupled by
HBridge. Alongside actions the model can denoise three auxiliary streams:
future video, DINO features, and pointmaps.

| | |
| --- | --- |
| Video expert | Wan2.2-TI2V-5B, 5.00 B params |
| Action expert | ActionDiT, 1.02 B params |
| Layers | 30 (HBridge: 7 bottom / 16 middle / 7 top) |
| Semantic encoder | DINOv3 `vit_base_patch16_dinov3.lvd1689m`, 768-d, frozen |
| Cameras | `cam_high`, `cam_left_wrist`, `cam_right_wrist` @ 240&times;320 |
| Composite video | 384&times;320, 33 frames |
| Action / proprio | 14-d each (bimanual ALOHA-AgileX), `ConcatLeftAlign` |
| Action : video rate | 4:1 |

## Training

| | |
| --- | --- |
| Data | 2,500 clean + 25,000 randomized demos, all 50 tasks |
| Epochs | 6 |
| Learning rate | 1e-4 |
| Precision | bf16 |

Trained with flex-joint sampling at `p = 0.5` on every present and joint flag,
with cross-modal prediction enabled for all three streams. That is what lets one
set of weights serve any regime in the results table above.

## Files

```text
config.yaml                            # architecture + processor; autoloaded by the eval
dataset_stats.json                     # action/state normalization statistics
checkpoints/weights/step_048060.pt     # 12 GB
```

Keep this directory layout. The eval locates `config.yaml` and
`dataset_stats.json` by walking up from the checkpoint path.

## Usage

This repository holds the **policy weights only**. The Wan2.2 base components
and the ActionDiT backbone are separate downloads, resolved through
`DIFFSYNTH_MODEL_BASE_PATH` — see [`docs/INSTALL.md`](https://github.com/geyan21/flex-pi/blob/main/docs/INSTALL.md)
and [`docs/ROBOTWIN.md`](https://github.com/geyan21/flex-pi/blob/main/docs/ROBOTWIN.md).

```bash
hf download flex-pi/flexpi-robotwin --local-dir runs/flexpi-robotwin

export DIFFSYNTH_MODEL_BASE_PATH="$(pwd)/checkpoints"   # Wan2.2 weights
```

Then set the checkpoint at the top of `scripts/eval_flexpi_robotwin.sh`:

```bash
CKPT="./runs/flexpi-robotwin/checkpoints/weights/step_048060.pt"
DATASET_STATS="./runs/flexpi-robotwin/dataset_stats.json"
```

and run:

```bash
bash scripts/eval_flexpi_robotwin.sh
```

The launcher defaults reproduce the **full joint** row: `NUM_INFERENCE_STEPS=4`,
`INSTRUCTION_TYPE=unseen`, `EVAL_NUM_EPISODES=100`, and all six regime flags
`true`. For the **action-only** row, set the three `INFER_JOINT_*` flags to
`false`. `PHASES=clean,random` covers both background conditions.

## License

MIT — see [LICENSE](https://github.com/geyan21/flex-pi/blob/main/LICENSE).

## Citation

```bibtex
@article{yan2026flexpi,
  title   = {Flex-$\pi$: A Multi-Stream World-Action Model with Compute Flexibility},
  author  = {Yan, Ge and Liu, Jinghao and Fan, Yuzhi and Cai, Lei and Liao, Minwen
             and Zhang, Jesse and Fox, Dieter},
  journal = {arXiv preprint arXiv:2608.10860},
  year    = {2026},
  url     = {https://arxiv.org/abs/2608.10860}
}
```