Flex-π · Pretrain RGB (preview) — RGB + DINO

arXiv Project Page Code Preview

Preview. An early release of the pretrained Flex-π model; a stronger pretrained model will follow.

Flex-π is a 6B-parameter world-action model that supervises three visual futures — RGB, 3D pointmaps and DINOv3 semantics — alongside actions. A single checkpoint runs on any subset of its streams, so the compute/accuracy operating point is a runtime flag.

This checkpoint is a pretrain for bimanual 6-DoF YAM-family robots with one head camera and two wrist cameras. It trains on RGB + DINO modalities, no depth. It serves the action-only path and joint video and DINO generation. It is a starting point for fine-tuning; zero-shot use is possible on a matching rig. The sibling with optional depth, trained on a larger mixture, is flex-pi/flexpi-pretrain-preview.

Model details

Architecture Mixture-of-Transformers: Wan2.2-TI2V-5B video expert (5.00 B) + ActionDiT action expert (1.02 B), 30 layers, HBridge 7 / 16 / 7
Cameras cam_high 256×320, cam_left_wrist and cam_right_wrist 224×224, composited at 384×320 (robotwin_uniform14), 33 frames
Modalities RGB + DINO (no depth)
Visual streams RGB through the frozen Wan2.2 VAE; DINOv3 ViT-B/16 (frozen), temporal stride 2 (keep-far); pointmap stream off (p_present_pointmap = p_jp = 0)
Flex regime p_present_video = p_present_dino = p_jv = p_jd = 0.5; cross-modal forcing on for video and DINO
Action head 34-D, shared by 6- and 7-joint arms. Channels 26 and 33 are each arm's 7th joint, which a YAM arm does not have: they are left out of the loss on YAM data and held at 0 when serving a YAM robot, which sends and receives 32-D
Wire format 32-D YAM end-effector state in, 32 × 32 absolute action chunk out
Normalization per-episode q01/q99 over 32 channels (dataset_stats.json), normalized targets clamped to ±1
Training data ~760 hours of robot data: MolmoAct2 and in-house YAM teleoperation data
Checkpoint step_286545, bf16, 12,082,213,301 bytes, sha256 273745e56bdbd559aa1852788c3ff6e5117109312fb63fa68a63494715410f9d

Usage

The serving and fine-tuning code is in the Flex-π repository; the zero-shot guide is docs/PRETRAINED.md.

huggingface-cli download flex-pi/flexpi-pretrain-rgb-preview --local-dir ./checkpoints/flexpi-pretrain-rgb-preview

config.yaml and dataset_stats.json stay beside the weights: the server reads the architecture back from the saved config, and --dataset-stats-path names the statistics the checkpoint was trained with.

Zero-shot server

D=./checkpoints/flexpi-pretrain-rgb-preview
python -u scripts/serve_yam_flexpi.py \
  --ckpt-path $D/checkpoints/weights/step_286545.pt \
  --dataset-stats-path $D/dataset_stats.json \
  --default-prompt "Pick up the plates from the table one by one and place each into a slot on the dish rack." \
  --host 0.0.0.0 --port 8000 --no-torch-compile --offload-text-encoder \
  --action-horizon 32 --mixed-precision bf16 --num-inference-steps 10 \
  <regime flags>

--num-inference-steps is 10 in the pre-release robot deploy of this architecture and 4 in the repository's configs/real_yam.yaml; neither has been measured on this checkpoint.

Regime Regime flags
Action only --infer-present-video true --infer-present-dino true --infer-present-pointmap false --infer-joint-video false --infer-joint-dino false --infer-joint-pointmap false
Joint video and/or DINO --infer-present-pointmap false with --infer-joint-video true and/or --infer-joint-dino true, --infer-joint-pointmap false

The client sends RGB and state only. With no regime flags the model defaults to joint video and DINO generation with the pointmap stream off, and the connect metadata reports depth_required: false; --infer-present-pointmap true is not a trained regime and makes the server require depth. Video and DINO both absent is not a trained regime either. The server wraps the bare instruction in the training prompt template. A correct start logs action_dim_mask: channels [26, 33] zero-filled, Pointmap stream GLOBALLY OFF and a FlexPi inference regime: line. The client contract (state layout, frames, gripper sense) is in docs/YAM.md.

Fine-tuning

docs/FINETUNE.md covers fine-tuning from this checkpoint with the task preset configs/task/yam_finetune_pretrain_rgb_preview_3cam_34d_rel_1e-4.yaml: RGB + DINO, no depth (pointmap stream off), DINO temporal stride 2 (keep-far), and this checkpoint's own dataset_stats.json.

Scope

  • Zero-shot use needs a bimanual 6-DoF YAM-family rig with one head and two wrist cameras speaking the 32-D wire format; LIBERO and RoboTwin need fine-tuning.

License

The weights are released under the MIT license, as is the code. The training data carries its own terms: MolmoAct2 BimanualYAM is Apache-2.0 and the released flex-pi YAM datasets are CC BY 4.0. At inference the model downloads DINOv3 timm/vit_base_patch16_dinov3.lvd1689m, which is under the DINOv3 License, and Wan2.2 components, which are Apache-2.0.

Citation

@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}
}
Downloads last month
29
Video Preview
loading

Datasets used to train flex-pi/flexpi-pretrain-rgb-preview

Paper for flex-pi/flexpi-pretrain-rgb-preview