MolmoAct2 is Ai2's open family of action reasoning models for robot control and real-world deployment. It builds on the Molmo2-ER embodied-reasoning vision-language backbone, adds robot state and action modeling, and connects the VLM to a flow-matching continuous action expert for closed-loop manipulation. The release includes base checkpoints for continued training, fine-tuned robot policies for evaluation and deployment, and the datasets used to build MolmoAct2 and Molmo2-ER.
We provide base checkpoints at every training stage for continued MolmoAct2 training and robot fine-tuning. These are foundation checkpoints rather than one-size-fits-all deployment policies.
| Model | Use Case | Description | Checkpoint Path |
|---|---|---|---|
| MolmoAct2 | Fine-tuning | Post-trained MolmoAct2 model with a continuous flow-matching action expert. Use as the default foundation checkpoint for adapting to a target robot embodiment or benchmark. | https://huggingface.co/allenai/MolmoAct2 |
| MolmoAct2-Think | Fine-tuning | MolmoAct2 foundation checkpoint with depth-token reasoning. Use when downstream policies should reason over compact depth predictions before acting. | https://huggingface.co/allenai/MolmoAct2-Think |
| MolmoAct2-Pretrain | Post-training | Pre-trained discrete autoregressive VLA backbone before the continuous action expert is attached. Intended for continuing MolmoAct2 training stages, not direct continuous-control inference. | https://huggingface.co/allenai/MolmoAct2-Pretrain |
| Molmo2-ER | Pre-training | Embodied-reasoning VLM backbone used as the starting point for MolmoAct2 action models. | https://huggingface.co/allenai/Molmo2-ER |
We also provide fine-tuned checkpoints for common robot platforms and benchmarks. These models are intended to run directly in their target setting, or to serve as a stronger starting point for closely related robots. As with any robot policy, performance depends on hardware, cameras, calibration, action conventions, and language/task distribution.
| Model | Use Case | Description | Checkpoint Path |
|---|---|---|---|
| MolmoAct2-DROID | Inference / Fine-tuning | MolmoAct2 fine-tuned on the filtered DROID Franka mixture with absolute joint-pose control. Intended for DROID-style policy inference or further fine-tuning. | https://huggingface.co/allenai/MolmoAct2-DROID |
| MolmoAct2-BimanualYAM | Inference / Fine-tuning | MolmoAct2 fine-tuned on the bimanual YAM mixture with absolute joint-pose control and annotated language instructions. | https://huggingface.co/allenai/MolmoAct2-BimanualYAM |
| MolmoAct2-SO100_101 | Inference / Fine-tuning | MolmoAct2 fine-tuned on SO-100/SO-101 datasets with absolute joint-pose control and annotated language instructions. | https://huggingface.co/allenai/MolmoAct2-SO100_101 |
| MolmoAct2-LIBERO | Inference / Fine-tuning | MolmoAct2 fine-tuned on the full LIBERO training mixture, combining Spatial, Object, Goal, and Long suites. | https://huggingface.co/allenai/MolmoAct2-LIBERO |
| MolmoAct2-Think-LIBERO | Inference / Fine-tuning | MolmoAct2-Think fine-tuned on LIBERO with depth-and-action examples and adaptive depth reasoning. | https://huggingface.co/allenai/MolmoAct2-Think-LIBERO |
| Data | Description | Dataset Path |
|---|---|---|
| MolmoAct2-BimanualYAM Dataset | Collection of bimanual YAM datasets and related resources used for MolmoAct2 bimanual training and evaluation. | https://huggingface.co/collections/allenai/molmoact2-bimanualyam-dataset-69f81e17b140ec34f430a35e |
| MolmoAct2 Robotics Datasets | Robotics datasets for MolmoAct2 training and fine-tuning, including SO-100/SO-101, DROID, MolmoAct Dataset, BC-Z, Bridge, and RT-1. | https://huggingface.co/collections/allenai/molmoact2-datasets-69f81e316ec3daafe3f9555c |
| Molmo2-ER Datasets | Embodied reasoning datasets used for Molmo2-ER and MolmoAct2 backbone training, including spatial, 3D, robotics, and visual reasoning data. | https://huggingface.co/collections/allenai/molmo2-er-datasets-69f8d605d92d46a5fc24ced2 |
Note that all of the robotics datasets for pre-training and post-training are in LeRobot v3.0 format, paired with extra language annotations.
MolmoAct2 is integrated into LeRobot as a policy implementation, so users can train, evaluate, and deploy MolmoAct2 with standard LeRobot datasets and workflows. This repository includes the LeRobot integration as a Git submodule at lerobot/, pinned to the branch allenai/lerobot:molmoact2-policy.
For training, although all of our experiments start from the base checkpoint allenai/MolmoAct2, we recommend starting from the fine-tuned checkpoints listed in the Finetuned Models section above if your embodiment is similar to Bimanual YAM, DROID Franka, or SO-100/SO-101, as they can provide better initialization and downstream performance. For generic use, use the base checkpoint.
After cloning this repository, initialize the submodule from the repo root:
git submodule update --init --recursive
cd lerobot
For training, evaluation, and deployment instructions, see the MolmoAct2 LeRobot documentation at docs/source/molmoact2.mdx. To reproduce the original LIBERO benchmark results exactly with the v0.5.1 evaluation stack, use the pinned inference branch allenai/lerobot:molmoact2-hf-inference with instructions in MolmoAct2 README.
We also open-source the original MolmoAct2 experiment scripts under experiments/. These cover training and evaluation replication, depth annotation, Hugging Face checkpoint conversion, and fine-tuning on new LeRobot datasets. See experiments/README.md for setup and commands.
[!WARNING] Disclaimer: Out-of-the-box deployment is intended for simple tasks within the training task distribution (e.g., Pick-and-Place, opening, closing and etc). Performance has only been empirically verified on the SO-100 and Franka DROID embodiments. Results on other embodiments and tasks are not guaranteed.
MolmoAct2 supports out-of-the-box deployment on three robot embodiments:
For the best performance, we recommend using an SO-100 with the standard wrist configuration and a third-person camera. Here is an open implementation by Irene Grace. Code
For the best performance, please build your Bimanual YAM setup following the reference design below:

All required components can be purchased using this Bimanual YAM parts list.
Implementation code for setting up, data collection, and inference for Bimanual YAM is here
Standardize evaluation implementation for zero-shot by Cortex AI here
For the Franka setup, we recommend following the official DROID implementation for best results.
This repository ships two FastAPI inference servers under examples/, one per fine-tuned checkpoint. Each server exposes the same /act wire protocol — json_numpy-encoded request/response — but with an embodiment-specific schema (camera count, state dimension, normalisation tag).
| Server | Checkpoint | Default port | State dim | Cameras |
|---|---|---|---|---|
examples/droid/host_server_droid.py |
allenai/MolmoAct2-DROID |
8000 |
(8,) = [q1..q7, gripper] |
external, wrist |
examples/yam/host_server_yam.py |
allenai/MolmoAct2-BimanualYAM |
8202 |
(14,) (per-arm 7-D × 2 arms) |
top, left, right (order matters) |
curl -LsSf https://astral.sh/uv/install.sh | sh
exec $SHELL # reload PATH so the `uv` binary is picked up
uv --version
The pinned dependencies (CUDA-12.1 PyTorch wheels, transformers, fastapi, json-numpy, …) live in pyproject.toml. From the repo root:
uv sync # creates .venv/ and installs all deps
uv run python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
# expected: True NVIDIA RTX A6000
uv reads .python-version (3.11) and downloads a matching interpreter if needed. Re-run uv sync after pulling new commits.
export HF_HUB_ENABLE_HF_TRANSFER=1 # fast parallel download
uv run hf download allenai/MolmoAct2-DROID # for the DROID server
uv run hf download allenai/MolmoAct2-BimanualYAM # for the YAM server
To put the cache on a different disk, set HF_HOME=/path/to/cache before the download (and when starting the server).
# DROID (Franka)
uv run python examples/droid/host_server_droid.py --host 0.0.0.0 --port 8000 --dtype bfloat16
# Bimanual YAM
uv run python examples/yam/host_server_yam.py --host 0.0.0.0 --port 8202 --dtype bfloat16
Useful flags (both servers):
--dtype bfloat16|float16|float32 — default bfloat16. The DROID model card uses float32 (~88 GB), which only fits on ~96 GB of free VRAM. The YAM model card reports float32 at ~26 GB (fits on a single A6000), bfloat16 under 16 GB. bfloat16 is the safe default for both.$ claude mcp add molmoact2 \
-- python -m otcore.mcp_server <graph>