woros

Real2Sim manipulation studio

A photo in. A robot demo out.

Take a few photos of anything on a table. woros reconstructs it as a real 3D world, drops a Franka Panda arm in front of it, and plans a contact-rich pick or push — simulated with real MuJoCo physics, right in your browser, on your phone or your laptop.

Real MuJoCo physics·Works on your phone or laptop·No CAD models, no install

Live in your browser — drag to orbit, press Plan & Run for a real physics-verified pick.

Real capture

This photo became that scene

Phone photo of a plate and a salt shaker on a wooden table
01INPUT— one shot, phone camera
The same plate and salt shaker reconstructed as a manipulable 3D scene with a robot arm
02OUTPUT— real geometry, ready to grasp

Pipeline

01

Capture

Record or take a few photos of a tabletop scene from your phone.

02

Reconstruct

woros estimates each object's shape, scale, mass, and pose.

03

Simulate

A real Franka Panda arm is placed in front of it in MuJoCo physics.

04

Plan

A contact-rich planner picks or pushes your object — watch it replay.

Playground

Or skip the camera — build an environment and write the brain yourself

woros is a free, lightweight MuJoCo simulator you can shape by hand: start from a premade tabletop, drop in boxes, balls, and cylinders, and write your own controller(obs) in JavaScript instead of running CoRAL's planner — it gets every body's position and the object you picked as the target, and returns joint commands, stepped against real physics live in your browser. Good for practicing motion planning, or just watching your own policy actually move an arm.

Open the Playground →
controller.js
function controller(obs) {
const ctrl = obs.ctrl.slice();
const ee = obs.bodies["hand"];
const target = obs.bodies[obs.targetId];
 
if (ee && target) {
const dx = target.pos[0] - ee.pos[0];
const dy = target.pos[1] - ee.pos[1];
ctrl[0] += Math.atan2(dy, dx) * 0.01;
}
 
return ctrl;
}

Under the hood

Nothing here is canned

Every scene on this page — including the one you just ran above — went through the same job API: submit a photo, poll for status, get back a SceneSpec and a MuJoCo world once reconstruction finishes.

capture.sh
curl -X POST https://woros.app/api/jobs \
-H "content-type: application/json" \
-d '{
"photos": [{"contentType":"image/jpeg"}]
}'
 
# → job created, upload target(s) returned
{
"job": { "id": "b37a8764…", "status": "awaiting_upload" }
"uploads": [{ … }]
}