We trained Molmo 2 (high level) and ManiFlow (low level) only on ToyBlocks data, with no real-world demonstrations, and ran them on a Franka FR3 with a Robotiq gripper.
Molmo 2 looks at the front camera and decides what to do next: which skill, and a point in the image that marks the block. ManiFlow takes that command and controls the arm. Both were trained on renders with heavy domain randomization (lighting, backgrounds, table materials, camera poses and intrinsics), which is a big part of why the real lab doesn't look out of place to them.
Docs: rendering · training ManiFlow
The simulation side is in the repo today: generated environments start from a calibrated copy of our real workcell.
Coming soon: a toolkit for sim-to-real transfer, including the code that runs policies on the real robot and a guide to performing system identification.
sim2real scene in simulation (right), both seen from the front camera.sim2real scene is the default scene for every generated environment. It reproduces the real cell, including calibrated front-camera extrinsics and intrinsics, and datasets record it as their scene_id. Scene and robot flagsfr3_robotiq_gripper_sysid is an FR3 with a Robotiq gripper and system-identified joint armature and friction values. Robot config--use-calibrated-cameras is on by default in evals and gives every environment the real cameras' intrinsics. Cameras in evaluation



Frames from two randomized render passes of the training data.