Learn

Get good at
seeing your data

Paths for the first hour, the first week, and the point where you start designing entity hierarchies on purpose.

Tutorials

Follow along end to end

Each one is a runnable repository. Clone it, run it, then change something and watch what happens in the viewer.

Basics

Your first recording

Log points, images and scalars; understand what set_time actually does.

12 min · Python

Basics

Entity paths that scale

Why world/robot/cam beats cam_0, and how naming decides what you can filter later.

18 min · Concepts

Robotics

Debugging a transform tree

Find the joint that lies. Compare forward kinematics against measured pose frame by frame.

35 min · Python + URDF

Robotics

Bridging a ROS 2 stack

Subscribe to live topics, map message types to archetypes, and record a bag alongside.

40 min · ROS 2 Jazzy

Vision

Depth, disparity and reprojection

Turn a depth image into a cloud and check your intrinsics by whether the walls come out straight.

28 min · Python

Vision

Annotating detections properly

Class IDs, color maps and keypoint connections so the overlay stays readable at 40 objects.

22 min · Python

ML

Watching a model train

Log activations, gradients and predictions per step, and scrub through the optimization.

30 min · PyTorch

ML

Gaussian splat reconstruction

Stream splats, cameras and loss curves; see densification happen instead of inferring it.

45 min · Python + CUDA

ML

Regression triage at scale

Diff two nightly runs, isolate the frames that changed, and file the recording as evidence.

25 min · CLI + Hub

Concepts

The ideas worth understanding once

A path is not a name — it's a position in a tree. Transforms compose down it, visibility toggles cascade along it, and blueprint queries select subtrees with globs. Design the tree once, and filtering, styling and coordinate frames all fall out of it for free.
Querying a timestamp returns, for each component, the most recent value logged at or before it. So you only log what changed: a mesh logged at t=0 is still there at t=900. It also means a component you never update stays pinned at its first value — usually what you want, occasionally a surprise worth knowing about.
Log at least two: a monotonic sequence for determinism, and a wall clock for correlating with the outside world. Add a simulation clock when sim time and real time diverge. Timelines are cheap; switching between them in the viewer costs nothing.
Log images as encoded frames rather than raw arrays, mark calibration and geometry as static, downsample high-rate scalars that nobody reads at full rate, and split long sessions into chunks. A well-shaped 10-minute run is usually under a gigabyte.
As soon as two people open the same recording. Manual panel arrangement doesn't survive contact with a teammate; a blueprint checked into the repo does, and it turns "look at the third panel" into a shared reference.
Community

Ask, and read what others asked

Most questions about entity design have been answered by someone who hit the same wall last month. The archive is public and searchable.

Office hours

Thursdays, 16:00 UTC. Bring a recording that confuses you and an engineer will open it with you. No signup — the link is pinned in Discord.


Newsletter

Release notes and one deep-dive a month.