Interface and simulation¶
The scene is made of resources¶
Sim2Bot organizes the workspace into robots, objects, cameras, lights, sensors, rooms, and an environment. These resources appear in the Scene Tree and have task-oriented inspector panels. Cameras are scene-level streams even when they are mounted on a robot; the mount describes the relationship without changing stream identity.
The workspace¶
The top right holds Sign in or your Account menu. The logo and scene name sit beside the top-left Tools button. Search sits next to Undo/Redo in the command bar (⌘K / Ctrl+K). A separate Simulator / Dataset Studio segmented switch sits immediately after the command bar, with the active workspace highlighted. Choose the other segment or press V to switch. Search, history and the workspace switch keep their positions when Studio replaces simulation controls with Record, Review, Quality and Statistics. Scene history and deletion are disabled in Studio.
Open Tools for Docs, the single Preferences entry, and Help. Docs opens documentation directly; Help contains updates, feedback, shortcuts, privacy and About. These entries are also inside Studio's compact Tools menu. Preferences opens in Studio without leaving it. In Edit mode (W), Move and Rotate gizmo choices open directly below the Edit button.
- Scene Tree (left) lists everything in the scene. Double-click a name, or select it and press F2, to rename it; the eye button hides an item in the viewport without removing it from the simulation. Rows show names and icons; group headers keep their counts. Item details are available in their settings.
- Get started, at the foot of the Scene Tree on a first visit, shows one next step at a time: move the robot, add an object, connect Python, then record an episode. It advances when you really complete the action; click the visible step to go where it is done, or hide the guide with its ×.
- Settings open in a dock on the right, over any windows already there; those windows stay where you put them. Open it with the gear on a Scene Tree row, Edit settings in the right-click menu, Enter with something selected, or a double-click in Edit mode. While the dock is open, selecting another robot, object, camera or light shows its settings instead, and it stays open across a reload until you close it. New camera and telemetry windows open where they do not cover anything.
- Settings live where they belong. What the view draws (frames, collision shapes, centre of mass, joint axes, the TCP trail, camera frustums, X-ray) is in the toolbar's Overlays button, whose number counts what is switched on. The scene's physics (dynamics, gravity compensation, gravity, floor grip) is in Scene settings: the gear on the Scene row of the Scene Tree. How this device looks and runs is in Tools › Preferences. A robot, object, camera, light or sensor keeps its own settings in its Inspector.
- Gripper follows the active robot in a multi-robot scene. In IK mode a labeled opening slider and percentage sit directly above the labeled 1 mm, 10 mm and 50 mm jog steps. There is no separate open/close icon in the mode toolbar. Controls appear only for a robot with a gripper and pause while the scene rebuilds. The same continuous control also remains in Tools › Teleop.
- The scene's name, beside the logo, shows the open scene and where it is saved (a draft in this browser, My scenes, your account, or unsaved changes). Click it to open Tools › Scene › Scenes.
- Tools (the menu button at the top left) holds Scene, Teleop, Motion, Analysis, Telemetry, Bridge, Log, Preferences and Info. Scene lists its sections (Robots, Objects, Sensors, Lights, Cameras, Environment, Scenes) down its left side, and its drawer is wider while it is open. Tools entries show icons and labels; on narrow screens the Scene section tabs scroll horizontally to leave room for their content.
- Status bar shows, left to right: Simulation (Running, Paused or Updating while the scene recompiles), Selected, the TCP jog Frame, Bridge (Disconnected, or how many controllers are connected; click it to open Tools › Bridge), Cloud (where your work is saved; it becomes a button when there is something to do, such as creating an account), Storage (the local save, which opens recovery if it fails) and Tab (Primary when this browser tab owns the local save). On narrower windows, items with nothing to report give way first. Physics step rate and real-time speed are in Tools › Info, described below.
- While a robot or structural scene change loads, the progress pill names the current phase—preparing, loading assets, building the MuJoCo model, or starting the result—rather than presenting an undifferentiated wait.
- Deleting something offers Undo for a few seconds; deleting data that cannot be restored asks first.
Importing articulated objects¶
In Scene → Objects → Add object, choose a sim2bot-prop/1 ZIP. It imports
as an object with passive hinge/slide joints, not as a robot. Ordinary OBJ/STL
files still import as single rigid meshes; arbitrary robot/scene ZIPs are not
prop packages.
Open Object settings → Physics & grasp for joint sliders, named poses and
fixed/free placement. Pause simulation when setting a pose: these controls
reset positions, while robot contacts drive physical motion. Authored scale,
materials and per-link physics are preserved; regenerate the package to change
its dimensions. Saving the scene retains the package and joint positions.
Standalone MuJoCo exports include its model; use the export's view.py to
restore the live pose.
Edit, Surface, Air drop, Near world and Point place act on the complete imported mechanism. Surface-based actions use its current articulated bounds, so an off-centre model origin or an open drawer does not substitute a generic box height. Done in Air drop lands the object after choosing its top-down X/Y position.
Signing in and out¶
Your account and signed-out use each keep their own scene and library in this browser.
- Signing in for the first time on a computer keeps what you had on screen: it becomes your account's. Sim2Bot offers to add it to your account: the scene, and the robots and objects in your library that the account does not have yet (nothing is uploaded twice). It then lists what is in your account now and what stays only in this browser, such as scenes you saved here and saved environments.
- After that, signing in opens your account's own scene and library. If you made something while signed out in between, Sim2Bot asks once whether to bring it in: its robots and objects join your library and your account, and its scenes stay in this browser, where Save as can put one in your account. Nothing you have open is replaced. Choose Leave it to keep it for the next time you sign out.
- Saved on two computers. If you save a scene that was saved on another computer since you opened it, Sim2Bot does not overwrite it. The status bar shows Newer copy in cloud; click it to choose: save yours as a copy, open the newer one, or replace it with yours.
- Signing out opens a clean signed-out workspace. Your account's work stays in this browser, hidden, and comes back when you sign in here again.
- If something has not reached your account yet (an imported robot or object, or your latest scene changes), Sim2Bot lists it before signing out. Choose Upload and sign out to send it first, or Sign out anyway to leave it on this computer only.
- Reset saved data clears only the workspace you are in.
- Product update emails are off unless you choose them. Tick the box when you create an account, or say yes to the one question a new account sees after signing in with Google, GitHub, Discord or an email link. Change it any time in the account menu under Account settings. Sign-in and security emails are not affected.
On a shared computer, open Privacy from the account menu and, under Your work on this computer, choose Sign out and remove instead. It signs you out and deletes what your account keeps in this browser. Everything already in your account stays there. It lists anything that would be lost first: work not uploaded yet, scenes saved only in this browser, and saved environments. Choose Upload, then remove to save what can be uploaded before it goes.
Keeping workspaces apart is not a lock: anyone who uses the same browser profile could read what is stored in it while it is there.
Keyboard¶
Help → Keyboard shortcuts lists every shortcut; command search (Cmd/Ctrl+K) shows a command's shortcut beside it. Escape closes the most recent menu first, then the settings dock, and only then clears the selection. Shortcuts never act on the scene while a dialog, command search or the Room Editor is open, or while you are typing in a field.
Simulator and Edit modes¶
- Simulator mode interacts with the running physical scene. Dragging a robot link applies a force rather than teleporting it.
- Edit mode changes authored scene placement. Translation and rotation gizmos position robots, objects, cameras, and supported room elements.
Pause the simulation before making exact structural edits when you do not want physics to react during placement.
Scene snapshots and reset points¶
Open Scene snapshots beside Reset to capture up to ten named physics reset points for the open scene. Select one to make it the active reset point. The normal Reset button then restores that snapshot, including robot and object motion, actuator state and a held object. Undo last restore returns to the state from immediately before the most recent restore.
Moving existing objects or robot bases in Edit mode remains restorable, including welded/static objects. Adding, deleting, replacing, resizing or otherwise changing the physical structure marks an older snapshot as needing an update. Sim2Bot refuses to apply that incompatible state; choose Update after arranging the new structure. Renaming a snapshot does not change its captured state. Snapshots are saved with the scene and follow it through local, cloud and portable scene storage. The same snapshot menu is available in Dataset Studio. Finish or discard an active recording before restoring, so a recorded episode cannot silently jump between two world states.
Physics resolution versus wall-clock scheduling¶
MuJoCo integrates the model at its configured timestep. A timestep of 0.002 s
means a simulated physics/control resolution of 500 Hz. This is similar in spirit
to a real robot's low-level control loop, but it is not the same scheduling model.
By default, MuJoCo steps happen in bursts inside the browser frame loop: about eight 2 ms steps at once, every 16.7 ms. The timestep therefore gives high simulation resolution, while commands wait for the next frame. With Preferences → Performance → Physics → Separate thread, MuJoCo steps on its own thread and its own clock instead: evenly, about one step every 2 ms, and a command is used at the next step. See Performance.
Telemetry and displays¶
Contact sensors¶
In Scene → Sensors, add Body contact to measure a chosen body's total solved normal contact force (newtons) and number of active contacts. For a two-finger gripper, add two sensors and attach one to each finger body in their settings. The first unused finger is suggested when available. The readings are visible in the sensor inspector and Sensors monitor, and can be sent in bridge telemetry. The existing Touch sensor is different: it measures normal force in a site-defined zone. Neither sensor is a pressure map or a reliable slip detector; an unbound sensor shows no reading.
Telemetry packets can contain a high-rate samples batch so consumers retain
physics-substep information without requiring a 500 Hz network packet rate. GUI
derivative smoothing is display-only; SDK telemetry and exports retain raw
velocity, acceleration, and jerk values.
Cameras¶
Camera rendering is subscription-gated. A camera can be world-mounted, attached to a robot, attached to an object, or associated with a sensor anchor. Its global camera ID is used to subscribe; robot indices are used only for robot commands and per-robot telemetry.
Dataset Studio¶
Dataset Studio (the button in the top bar, or V) is where datasets are made. Its Record view replaces the 3D view with the scene's cameras, so you see the world only as the cameras do — useful for teleoperating a robot the way a real operator would, and for collecting camera-based datasets. The studio's tabs sit beside the logo; the sidebar on the left holds the dataset: the task for the next episode and every episode so far. Fold it with the button at its top right. The gear at the end of the tabs opens Studio settings: how episodes are recorded, and the robot readout. Choose which cameras appear on screen from the Cameras list: cameras you placed, cameras built into a robot model, and camera sensors. The list tags the cameras being recorded; which cameras are recorded is chosen in Studio settings, and the list's link takes you there. Each tile keeps its camera's recording shape, so it shows exactly what that camera records.
Drag a camera to move it, drag its corner to resize it (it keeps its shape), and double-click it to fill the screen. Your arrangement is remembered on this computer; Arrange puts every camera back in a grid.
The robot readout shows the selected robot live, or the one being recorded, in a tile beside the cameras:
- Values: each joint's measured value (observation.state) and commanded value (action) now, in degrees (millimetres for sliding joints). A joint within the last 5% of its range turns amber.
- Signal: Pos, Vel, Acc, Jerk or Torque at the top.
- Tool point (TCP): where it is (measured) and where the commanded joints would put it (commanded), with the error between them in millimetres and degrees: how far the arm lags, sags, or is held back by something it pushes on. World or Base gives these relative to the world or to the robot's base.
- Force: what the tool touches: the push on the hand and fingers from contacts, in newtons, and its twist in N·m. In the air it reads nothing touching.
- Gripper: how far it is open and was told to open, in millimetres for sliding fingers (the Franka opens 80 mm), in degrees for a hinged jaw.
It fits in with the cameras: with three of them it fills the fourth space. Move it, resize it from its corner and double-click it to fill the screen, as you do a camera; everything in it grows with it, and Arrange puts it back. The Robot readout switch in Studio settings shows or hides it. With several robots, pick which one it shows.
In the studio, the menu button at the top left opens a small card with what you need while recording: Teleop, to drive the robot, and Bridge, for a controller in Python. Close it with its × or Esc. The simulator's own camera, telemetry and kinematics windows are hidden in the studio, and are back as you left them when you exit. The free 3D view is not drawn while it is on, which leaves more of the computer's graphics power for the cameras. Press V or Esc, or choose 3D view (top right), to return. The studio comes back as you left it: the same tab, the same episode in Review, and the same pictures shown.
Recording a dataset¶
Dataset Studio records teleoperation as training data for imitation-learning and vision-language-action models: what each camera sees, the robot's joint positions and gripper, and the commands it was given, frame by frame.
- In the studio's sidebar, type the task (for example pick up the red cube).
- In Studio settings (the gear at the end of the tabs, or Change under the dataset's name), choose a rate (10, 15 or 30 frames per second) and a size. At most 640 wide (the default) records a 1280×720 camera at 640×360, keeping its shape, for a quarter of the work. Models shrink images further anyway: pi0 to 224×224, SmolVLA to 512×512. Camera's own keeps each camera's full stream resolution.
- Under Cameras to record, tick the cameras you want. By default these are the cameras shown in the studio, but they are chosen separately: a camera can be recorded without being shown, and shown without being recorded.
- Press Record episode (or Enter) and drive the robot: Teleop in the Tools drawer, or a controller over the bridge. The recorded cameras get a red outline, and their tiles show exactly the recorded picture.
- Press Save episode (or Enter again) to keep the take, or Discard to throw it away. Repeat for as many episodes as you need; each can have its own task. Each one appears in the sidebar with its length, its rate and a coloured dot for how well it kept that rate.
- Open Export, choose the formats and press Download .zip (or Save to folder… in Chrome and Edge). Export first says whether every episode kept its rate.
Reviewing an episode¶
Open the Review tab (or click an episode in the sidebar) to watch a take before you export it. Every recorded camera plays side by side, with charts of the whole episode under them in the style of the LeRobot Dataset Visualizer: a chart for each joint and the gripper, a solid line for where it was (observation.state) and a dashed one for where it was told to go (action). Under each chart, tick or untick a line, and read its values at the playhead; point at a chart to read any other moment, and click to jump there. Combine all puts every line in one chart.
Above the charts, choose what to chart: Position, Velocity, Acceleration, Jerk or Torque (what each joint's motors pushed with). Jerk shows shaking and sudden starts that position hides. The gripper is charted like a joint, in millimetres open (degrees for a hinged jaw), with its speed and its motor's force. TCP charts the tool point instead of the joints: its x, y and z in millimetres, its roll, pitch and yaw, and for the rates its speed. There, Force takes Torque's place: what the tool touched, in newtons along x, y and z and in all, and the twist about the tool point in N·m. These are measured in the world frame; the commands were given to the joints, so there is no dashed line. Episodes recorded before 28 September 2026 have the gripper as a percentage, and no force at the tool.
Under the charts, the timeline runs the length of the episode: a ruler in seconds, a strip of pictures from the first camera, the steps and annotations, and Motion, how much the arm moves at each moment (flat where it is still). Click or drag on it to move through the episode. − and + (or Ctrl/⌘ and the scroll wheel, or a trackpad pinch) zoom in on part of it, and the charts show the same part; Fit shows the whole episode again.
- The cameras and the scene are tiles, as in Record: drag one to move it, drag its corner to resize it, and double-click it to fill the area (Arrange puts them back in a grid). Tiles snap to each other and to the edges. Move the scene by the bar across its top, since dragging inside it turns the view. The handle under them makes their area taller or shorter.
- Space plays and pauses; ← and → step one frame (with Shift, ten).
- ↑ and ↓ move to the episode above or below in the sidebar.
- Record this task again takes you back to Record with the same task.
- To fix an episode's task, click it beside the episode number, type, and press Enter (Esc keeps the old one).
- The scene is shown beside the cameras, with a blue ghost of the arm as it was at that moment and the path its tool took. Drag in it to turn the view and scroll to zoom; your 3D view outside the studio stays as it was. Move it by the bar across its top. It shows while the recorded robot is still in the scene; an opened dataset replays on a robot in your scene with the same joints (see below).
- Views (top right) chooses which pictures Review shows: the scene and each camera.
Review is closed while an episode records.
Trimming an episode¶
A take often starts and ends with the arm standing still. To leave that out, drag the orange handles at either end of the timeline to where the part worth keeping starts and ends. The parts outside are dimmed, on the timeline and the charts. You can also:
- press [ to keep from the playhead, and ] to keep up to it (or the [ In and Out ] buttons);
- press Trim still ends to keep from just before the arm first moves to just after it last does;
- select a handle and press ← / → to move it a frame (Shift: ten).
Loop plays the kept part round and round. The sidebar shows the kept length, marked ✂. Nothing recorded is thrown away: Keep all (or ****) brings the whole take back. Quality, Statistics and the exports use only the kept part. The videos are not re-encoded: the exports point into each whole video where the kept part starts.
Editing, deleting and finding episodes¶
Each episode in the sidebar has a ⋯ menu (point at the episode to see it): Rename task, Flag for a second look, Trim still ends (or Keep all of it), Record this task again and Delete. To rename an episode's task in place, you can also double-click it. The task is the instruction the dataset stores with the episode.
To change several at once, ⌘-click (Ctrl-click on Windows and Linux) to select them, or Shift-click to select a run. The bar above the list then gives them all one task (Set task), flags them, or deletes them. Esc clears the selection.
Delete an episode with Delete while reviewing it (or the Delete key), or from its menu. Undo brings back what you deleted last, until you delete again, record a new episode, clear the dataset or reload the page. Type in the sidebar's filter to list only the episodes whose number or task contains it. Before you export, Export says how many episodes and frames go in, and how much the trims cut.
Marking subtasks¶
To split each episode into steps, type them in the sidebar's Subtasks field,
in order: reach, grasp, lift, place. While recording, press M (or the
button in the recording bar, which shows the next step) when each one begins.
In Review, the steps appear above the timeline. Click a step to jump to it, double-click to rename it, drag its left edge (or select it and press ← / →) to move where it starts, and press × to remove it. The marker button beside the time adds a step where you are.
In the LeRobot export, steps become subtask rows of LeRobot's language
columns, which LeRobot's own tools read. The raw export lists them in
dataset.json.
Annotating episodes¶
For policies that plan, remember and take instructions as they work, an episode can carry LeRobot's other annotations. In Review, go to a moment and press the Annotate this frame button (a speech bubble with a plus, beside the time):
- Plan: what is left to do from here, until the next plan. Press Shift+Enter to start a new line.
- Memory: what the robot should keep in mind from here.
- Interjection: something a person says to the robot here, and what the robot answers. The plan from here starts as the current one: LeRobot refreshes the plan at every interjection, so change it to what the robot now intends.
- Robot says: something the robot says out loud here.
- Box or Point: drag a box round something on a camera's picture, or click a point on it, then say what it is ("red cube"). It becomes a question about the picture, "Where is the red cube in the image?", with your box as the answer. Several boxes on one moment and camera make one question about all of them; a point needs a moment of its own. The boxes and points show on the video at their moment.
Enter saves and Esc cancels. The annotations are listed between the videos and the charts, with the plan and memory in effect where you are. Click one's time to go there, the pencil to edit it, or × to remove it. Each has a tick above the timeline.
A moment holds one of each kind: choosing a kind where there is one edits it.
In the LeRobot export they become LeRobot's language rows, which its own
tools read, and the raw export lists them in dataset.json. An opened
dataset's annotations are listed too, read-only.
Opening a LeRobot dataset¶
To compare with a dataset recorded elsewhere (a real SO-101's, say), use
the folder button at the top of the sidebar (Open a LeRobot dataset):
Folder… for the
dataset's folder (the one holding meta, data and videos) or Zip… for
a zip of it. Sim2Bot opens LeRobot v2.0, v2.1 and v3.0 datasets. It reads the files in your
browser; nothing is uploaded.
Hub… opens a public dataset straight from the Hugging Face Hub. Type part
of a name (so101, aloha) and pick from the LeRobot datasets the Hub finds,
most downloaded first. Or paste a dataset's link, or type its full name
(lerobot/svla_so101_pickplace), and press Open.
Its first 100 episodes open, and their videos play from the Hub without being
downloaded first. Private and gated datasets need a Hugging Face sign-in,
which Sim2Bot does not ask for: download those, then open the folder.
The opened dataset appears beside yours, in Review, Quality and
Statistics, read-only: its values are shown as recorded, in its own units.
You can flag its episodes. Sim2Bot doesn't change the dataset itself, so
Quality gives the LeRobot command that makes a copy without the flagged
episodes (lerobot-edit-dataset), with a Copy command button. Its flags
last until you close the dataset.
To watch a real SO-100 or SO-101 recording on the 3D arm, add an SO-101 to
the scene and open Review: the scene shows the replay. The ghost follows
the recorded joints, gripper included, and the tool's path is worked out from
them. A dataset calibrated differently from LeRobot's current SO-101
calibration shows the motion offset by that difference.
Switch between the two at the top of the sidebar; Record always records
into yours. The × closes the opened one.
Checking quality and flagging episodes¶
The Quality tab puts every episode side by side: its length, whether it kept its rate, how much it moved, how jerky it was, how long a joint sat at a limit, and how often the gripper closed. Where something looks off it says why: skipped samples, slow motion, commands that never changed, or, from three episodes on, an episode that moved much less, was much jerkier, or was much shorter or longer than the others. Movement and jerk are measured as the LeRobot Dataset Visualizer measures them.
Frames (beside Table) shows every episode's first or last frame from one camera, side by side: an episode that starts or ends wrong stands out, such as a cube that was never lifted. Click a frame to review that episode, or flag it from its corner.
Keep lengths above the table flags every episode shorter or longer than the range you set, with one click.
Suggestions only point. To mark an episode as not wanted, press its flag in Quality, or Flag while reviewing it. A flagged episode stays in the dataset (you can still review it or unflag it), and the export leaves it out: Download without flagged in Quality, or the Leave out flagged box in Export. The sidebar marks flagged episodes and can show only those.
The Statistics tab shows the dataset at a glance: episodes, frames, time and size, the cameras, the tasks, how many episodes kept their rate, a histogram of episode lengths, and how much of each joint's range the episodes cover.
Under them, Action insights says what the commands mean for training, as the LeRobot Dataset Visualizer does:
- Suggested action chunk: how many steps the commands stay alike. Beyond it, a policy gains little by executing its predicted actions without looking again.
- Command to motion: how long the joints take to follow their commands.
- Smoothness: each joint's commands rated smooth, moderate or jerky. Jerky commands suggest shorter chunks, or finding the shakiest episodes in Quality.
- Speed consistency (from three episodes): each episode's speed against the median. Click one to review it.
- Where the demonstrations disagree (from two episodes): which joints differ between episodes, and when. Where they differ, the demonstrations take different ways through the task.
Joints that barely moved, and a gripper that only opens and closes, are left out of the ratings.
Two formats are offered:
- LeRobot v3.0, the format Hugging Face LeRobot trains on (ACT, Diffusion
Policy, SmolVLA, pi0). Load it with
LeRobotDataset("local/my-dataset", root="path/to/lerobot"). - Raw folder: one MP4 per camera and a CSV per episode, for your own
pipeline.
dataset.jsondescribes every column.
For ACT, robomimic (HDF5) or OpenVLA and Octo (RLDS), convert the raw folder: see Dataset formats.
What each frame holds:
| LeRobot | Raw folder | |
|---|---|---|
| Every recorded camera's picture | ✓ | ✓ |
Joint positions and the gripper opening (observation.state) |
✓ | ✓ |
The joint targets and gripper command sent (action) |
✓ | ✓ |
| The task text | ✓ | ✓ |
| Joint velocities | ✓ | |
| The tool point's position and orientation | ✓ | |
| Each camera's position, orientation and lens (intrinsics) | ✓ | |
| Exact simulation time and real time | ✓ |
The LeRobot file keeps to what policies read as input: LeRobot hands every
observation.* value to the policy, so extras stay in the raw folder.
The robot, cameras, camera sizes and rate are fixed by a dataset's first episode, because every episode in a dataset must have the same shape. Change camera resolutions in a camera's stream settings before you start.
Is it keeping up?¶
While you record, a chip next to the timer says how the recording is going. Hover over it for the reason.
- Steady · 30.0 fps (green): every frame taken, at real-time speed.
- Dropping frames · 27.1 fps (amber or red): the computer could not draw some frames in time, so those samples were skipped. The data has gaps there.
- Slow motion · 0.45× (amber or red): no frame is lost, but the simulation runs slower than real time, so you are driving the robot in slow motion. A demonstration given in slow motion is usually not the one you meant.
- Paused: the simulation is paused, so nothing is recorded.
Each saved episode keeps its verdict in the Dataset panel, and both exports record it.
If it says Slow motion, the page is drawing fewer than about 30 frames a second (the tooltip says how many). Try, in this order:
- Plug in the charger. On battery, Chrome's Energy Saver (on by default below 20% battery) holds pages to 30 frames a second, which leaves no room when recording at 30 fps. You can switch it off in Chrome under Settings → Performance.
- At most 640 wide in the Dataset panel, if you changed it.
- Fewer cameras, or a lower rate. A camera you show but do not record still has to be drawn, so hide the ones you don't need to watch.
- Preferences → Performance → Balanced, which draws the tiles of cameras that are not recorded at a lower resolution.
Video encoder in the Dataset panel chooses how the videos are compressed:
- Automatic (the default) uses the processor on a Mac and the graphics card (NVIDIA, AMD or Intel) on other computers.
- Hardware uses the graphics card's encoder, which leaves the processor free for the simulation.
- Software encodes on the processor.
The panel says which one recorded the last episode. On a Mac, keep it on Automatic. Some Macs' hardware encoder stops after a few frames in Chrome.
Is it really 30 fps?¶
Frames follow simulation time: 30 fps means 30 frames per simulated second. Each frame is taken on the screen refresh closest to its moment, and a frame the computer could not reach is skipped, never made up.
- The Dataset panel shows each episode's achieved rate. 30.0 fps means every frame was taken.
- The raw export's
samples.csvhas, for every row, the moment the frame stands for (grid_time) and the moment it was actually taken (sim_time), so anyone can check the rate from the data.dataset.jsonstates each episode's achieved rate. - The videos hold exactly one frame per row, 1/30 s apart.
Where your episodes are kept
Episodes are kept in this browser, on this computer, until you delete them or clear the dataset. A reload, a crash or a closed tab does not lose them; they come back when you open Sim2Bot again. Nothing is uploaded. Each account signed in on this computer has its own dataset, and Remove from this device deletes it. Export to keep a copy anywhere else: clearing the browser's site data deletes the episodes too.
If the browser runs out of space, or Sim2Bot is open in a second tab, episodes are kept in that tab only, and the sidebar says so. Sim2Bot then asks before you leave the page with episodes not yet exported.
Performance¶
Use the renderer's performance profiles on weaker machines. Keep the Quality / Current profile when exact authored appearance matters, and reduce reflections, shadows, camera previews, or resolution when throughput matters more.
Physics chooses where MuJoCo runs:
- Page (the default) steps physics once per drawn frame. When the page draws fewer than about 30 frames a second, the simulation runs in slow motion.
- Separate thread runs MuJoCo on its own thread and clock. The robot keeps real time even when the page draws slowly (many cameras, a slower computer), steps are spaced evenly, and a controller's command is used within a few milliseconds instead of at the next frame.
While a dataset episode records, both keep the picture and the robot's state together: when drawing falls behind, the recording runs in slow motion rather than skipping frames. The choice is saved on this computer only. Tools → Info shows where physics is running, how evenly it steps and how long a command waits.
Background tabs
Browsers may heavily throttle hidden tabs. Keep Sim2Bot visible while running a controller that depends on stable command, telemetry, or camera cadence.