Visualization Controls
Once the visualizer is running, you can interact with the simulation using the following controls:
Camera
- Rotate: Left-click + drag OR
Ctrl(CMDon Mac) + Arrow keys - Pan: Right-click + drag OR Arrow keys
- Zoom: Scroll wheel
- Track Body: Automatically follow a specific body (via the "Camera Options" menu)
- Split Screen: Compare two batches side-by-side (via the "Camera Options" menu, requires ≥2 batches)
- Field of View: Adjust camera FOV (via the "Camera Options" menu)
- Copy View Link: Click the "Copy view link" button (in the "Camera Options" menu) to copy a URL that encodes the current camera, playback time, focused batch, and visualization toggles -- opening it restores that view.
Timeline
- Step Forward/Backward:
Alt+ Arrow Right / Arrow Left - Seek: Click on the timeline bar (
Alt+ click also pauses) - Play/Pause:
Spaceor Click the Play button - Record:
Ror Click the Record button (select WEBM or, if your browser supports recording it, MP4 via the dropdown). Recording seeks to the start, plays exactly one loop at the current playback speed, then automatically stops and downloads the file. - Screenshot:
Sor Click the camera button next to Record to save the current frame as a PNG. - Playback Speed: Adjust speed (0.1x to 5x) via the dropdown next to the timeline
- Previous/Next Episode:
[/]or the |◀ / ▶| buttons. Only shown for a scene that declares episodes; boundaries are also ticked on the timeline bar.
Rendering Many Batches
Each batch gets its own patch of world — its own terrain mesh, axes, arrows and point clouds — which is fine for a handful and hopeless for the hundreds of parallel environments an RL run produces.
Render All Batches (in "Body Options") switches between drawing every batch and drawing only the focused one. Above 32 batches, focused-only is the default, and a batch's per-batch scene objects are built the first time you focus it — so a 256-env scene loads as fast as a single-env one, and batches you never look at cost nothing. Split-screen's two batches stay drawn either way.
Batch Selection
- Move Selection:
Shift+ Arrow keys
Visualization Options
B: Toggle Body Visualization Mode (Mesh / Wireframe / Points)A: Toggle Axes VisibilityG: Toggle Trajectory TrailsI: Toggle Smooth Interpolation (on by default; interpolates position/orientation between recorded states during playback and scrubbing instead of snapping to the nearest frame)C: Toggle Contact Points (or, in a scene with point clouds and no contacts, Show Point Clouds)V: Toggle Linear VelocityW: Toggle Angular VelocityF: Toggle Linear ForceT: Toggle TorqueP: Toggle Terrain Data Probe (interactive tooltip on hover)
"Show Polylines" (Body Options, shown when the scene has model.polylines) toggles planned
routes and per-frame local paths. Bodies, static objects and polylines with visibleRanges
hide themselves while the playhead is outside their time ranges.
You can also customize terrain colors, colormaps, and toggle surface/wireframe/normals from the "Terrain Options" menu. The terrain's colormap legend (bottom-left) follows "Show Surface": hiding the surface hides it too.
Hover any control in the panel for a short description of what it does. With 2 or more batches, the "diff" Color Mode colors the terrain by the difference between two batches' terrains for one layer ("Diff Layer", "Diff Batch A"/"Diff Batch B").
Point Cloud and Terrain Similarity Coloring
Point-cloud bodies and terrain cells can each carry an optional per-point/per-cell
feature embedding (see create_pointcloud(embedding=) / create_terrain(embedding_map=)
in the JSON format). When present, clicking a point (with
"Point Color Mode" already set to "similarity" in the Body Options panel) or a terrain
cell (with "Data Probe" on and terrain "features" color mode already selected)
recolors the whole cloud/grid by cosine similarity to the clicked location — computed
entirely client-side, no backend round-trip. A colormap legend (coolwarm, [-1, 1])
appears alongside the existing terrain legend to read values off the result. Clicking
without the matching mode active does nothing.
With "Link Similarity" on, a point click also recolors every other point cloud with the
same number of points by its similarity to the point at the same index — useful when the
clouds are one set of points with features from different models, shown side by side
(e.g. one per batch in split screen). Point clouds may also ship named color layers
(create_pointcloud(color_layers={"class": rgb, ...})); each name is an extra
"Point Color Mode" choice.
Trajectory Trails
Toggling trails (G, or "Show Trails" in the Body Options panel) draws each body's
path from the start of the simulation up to the current playback time, one line per
batch in that batch's color. Useful for comparing the overall shape of two
trajectories (e.g. real vs. simulated) at a glance instead of scrubbing frame by frame.
Analysis Panel
Scalars, Error Metrics and Terrain share one collapsible panel at the top-center of the screen. When more than one is available, a mode switcher lets you flip between them; if only one is available (e.g. a single-batch scene has no Error Metrics), that one is shown directly without the switcher. A scene with nothing to analyse over time (e.g. only static point clouds) has no Analysis panel at all. Clicking any of its charts seeks playback to that time.
- Scalars: one tab per scalar defined in the model, each plotting its value over
time for every batch (colored per batch, click a line to focus that batch). An
"Export CSV" button on the active tab downloads its full series as
timeplus one column per batch, named after each batch's current display name. - Error Metrics: shown once a scene has 2 or more batches and a body with a
trajectory. Pick a body and two
batches ("Batch A" / "Batch B", defaulting to a
gt/ground truth-named batch vs. apost/adapt-named one when the batch names have them) to compare — e.g. the real and simulated batches produced by merging multiple files — and it computes, over the full timeline, the Euclidean position error and the quaternion angle (orientation) error between the two batches for that body. A live readout shows the current-frame values, and the chart plots both error curves over time with a marker at the current playback position. The "Per-axis" toggle swaps the combined position error curve for the signed X/Y/Z error components (Batch A minus Batch B), useful for spotting a directional bias instead of just overall magnitude. The "Details" toggle adds a compact stats block summarizing the full timeline: position RMSE, the max position error (and when it occurs), the final-frame drift, and the orientation RMSE and max angle error. An "Export CSV" button downloads the current selection's per-frame series (time,pos_error,err_x,err_y,err_z,angle_error_deg). - Terrain: shown for a scene that has terrain and at least one body with a
trajectory. Samples one terrain layer (
Height, or any named property the terrain was authored with, e.g. friction/stiffness) under a body's path over time, one curve per batch, with a marker at the current playback position — so a divergence you spot in Error Metrics can be lined up against the terrain the body was on at that moment. Pick the layer, the body, and whether each batch is sampled along its own path or all batches along one chosen batch's path (the usual ground-truth-path comparison). An "Export CSV" button downloads the sampled series.
Body States
The collapsible "Body states" panel in the top-left lists the scene's bodies; select
one to see its live position and rotation for the batch picked in the panel's own
"Batch" selector. It is hidden when no body has a pose (e.g. a scene of only static
point clouds). It starts collapsed when the model sets collapse;
viewerDefaults.bodyStatesOpen overrides that.
Batch Legend
When a scene has 2 or more batches, a toggleable "Batches" legend appears in the
bottom-right corner, listing each batch's color, index, and name. Click a row to focus
that batch, or click a name to rename it in place — renames persist next to the input
file(s), so they survive a reload or server restart. A viewer with no scene file to
write next to (scene.show(), LiveViewer, simview render) keeps renames for the
session only and says so under the legend.
Scene Info
When the scene JSON includes a model.metadata object, a read-only "Scene Info" panel
appears in the GUI listing each key/value pair — e.g. the engine, checkpoint path, git
commit, or CLI args a run was produced with — so a scene saved months ago is still
self-describing. simview info <file> prints the same fields on the command line.