Replay every robot run
Walk through a synced timeline of video, sensors, and motor commands. Pause on the exact frame your robot did the wrong thing.
- Multi-camera support
- Frame-accurate playback
- Bookmark moments
RoboTrace records every robot run - video, sensors, actions, model version, code version, and environment - so teams can replay failures, compare models, and catch regressions before they reach real hardware.
“We stopped shipping blind regressions to the robot.”
Canonical install · v0.1.0a6
PyPI robotrace-dev; import robotrace in code. Tabs use python3 -m pip /py -m pip so install targets the interpreter you intend.
Production-grade observability isn't a nice-to-have - it's the bar a robot run has to clear before it counts as shippable. A run is replayable when the recording is enough to reconstruct it byte-for-byte, months later, on a fresh laptop, by someone who wasn't in the room.
Every camera stream, frame-aligned to the moment the policy made each decision. The same .mp4 your model was looking at - not a thumbnail, not a screenshot.
Every joint state, IMU sample, force reading on the input side; every command vector on the output side. Time-aligned, no manual stitching.
policy_version, env_version, git_sha, seed. The exact weights, the exact code, the exact RNG that produced this run - so a year from now you can re-roll a new candidate against it.
That's what RoboTrace captures on every log_episode(...). If a run can't be replayed from those four things alone, we treat it as a bug - not a missing feature.
Every robotics team starts the same way - rosbags piling up on a dev machine, an MP4 from the wrist cam in someone's Downloads folder, regression checks in a notebook nobody can rerun. It works until a model regresses in the field and you can't tell which run, which sensor, or which scene broke it.
Built for robotics ML teams shipping to hardware
Who gets mileage first: imitation / RL / VLA engineers wiring real logs into training - robotics platform leads bridging sim, datasets, and the floor - teams already on ROS 2 or HF LeRobot and tired of rewriting the same ingest scaffolding every quarter.
Python SDK on PyPI
Install mirrors docs - wired for signed uploads to object storage.
Rosbag · LeRobot ready
ROS 2 bag scans + HF LeRobot v2.1 → episodes without heavyweight extras.
Replay regression harness
Candidate policies rerun against baseline episodes inside your own infra.
Invite-first Phase 1
Access is approved by hand - we onboard every org before they ship real bytes.
Logs your robot writes today - every team starts here, and almost everyone hits the same wall three months later.
One pip install behind the ingest path you\u2019d eventually have to build yourself - without losing the quarter to plumbing.
log_episode(...) call ships video, sensors, and motor commands as a single synced episode. Resumable uploads, signed URLs, and R2 storage are already wired up.Your engineers' job is the policy that makes the robot do the right thing. RoboTrace is everything between that policy and the engineer - the SDK, the storage, the replay, the regression harness - so the next quarter goes into the model, not into rebuilding the dashboard your team complains about every standup.
RoboTrace is the single surface for replay, regressions, datasets, and ops - without gluing FFmpeg folders, Jupyter reruns, and bespoke Slack bots together every sprint.
We didn't need louder dashboards - we needed the same synced episode twice: once when we debated a model change, once when hardware in the field disagreed with the spreadsheet.
Walk through a synced timeline of video, sensors, and motor commands. Pause on the exact frame your robot did the wrong thing.
Run a new model against thousands of past runs. See exactly where it improves and where it regresses - before it touches a real robot.
Tag, slice, and snapshot runs into reproducible training sets. Reach for the same data weeks later without juggling git-LFS or shared drives.
Stream live telemetry from your deployed robots. Get notified the moment a model behaves out of distribution or crashes in the field.
pip installto your first synced replay URL in five minutes.The pillars above assume episodes that survive the lab - here is how a team earns them without rewiring training: bolt the CLI onto the rollout you already ship, mint a replay link when ingest finishes, review motion and sensors inside one synced portal pane, then line up robotrace replay run batches against your archive before the arm books another slot.
One pip install plus one `robotrace login` and your machine is authorized - no copy-pasting API keys out of a portal. The CLI opens your browser, you click Authorize, and the credentials drop into ~/.robotrace/credentials.
$ python3 -m pip install robotrace-dev
Successfully installed robotrace-dev-0.1.0a6
$ robotrace login
Welcome to RoboTrace!
RoboTrace - sign in via your browser
https://app.robotrace.dev
Verification link (already includes your user code):
[robotrace] → https://app.robotrace.dev/cli/auth?code=XKDF-PQ4N
Opening your default browser…
Confirm this matches the page before Authorize
XKDF-PQ4N
✓ Signed in as art@robotrace.dev
Credentials · ~/.robotrace/credentials
Profile · default
Portal · https://app.robotrace.dev/portal
Three lines around the loop you already have - LeRobot rollouts, ROS 2 bags, a Gymnasium env, or bespoke training glue. Once the episode opens, the SDK prints a replay URL you paste into Slack: one permalink to the synced run your whole team rewatches.
# import robotrace as rt
#
# with rt.start_episode(name="pick-and-place v3",
# policy_version="vla-7b@v12") as ep:
# rollout(env, policy, ep)
# ep.upload_video('./run.mp4')
$ python train.py
[robotrace] → https://app.robotrace.dev/portal/episodes/ep_8f3c
uploading run.mp4 … 100% sensors.bin … 100%
✓ Episode ready in 4.2s.
Runs surface in your project within seconds - scrub frame-accurate video with ingest-time sensors and torque traces pinned to one playhead, bookmark the frame where things went wrong, and hand teammates the identical scrub via a permalink.
Once runs live in object storage instead of a disappearing laptop folder, rerun them offline with robotrace replay run and robotrace.evals. Seed baseline episode IDs inline or from file, attach your callable so checkpoints stay on your runners, publish metrics upward, then read the DiffCard under /portal/evals before the next torque pass.
robotrace replay run \
--policy my_team.policies:candidate_v13 \
--candidate-version pap-v13 \
--baseline-episodes a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
f9e8d7c6-b5a4-3210-fedc-ba0987654321 \
--baseline-version pap-v12 \
--name nightly-vs-v13Scrub once and the whole run stays locked: cameras, joint torque, and policy output share one timeline. Pause where something breaks, bookmark that instant, and paste the link - whoever opens it sees the same frame you did.
One scrubber
Every stream shares the same clock - video, sensors, and actions move together.
Shareable bookmarks
Copy a link with ?t=…ms and teammates land on your exact frame.
Inspect before re-roll
Find the failure in the portal before you queue another eval or book the arm.
Reference video
Synced signals
Shared timeline
Demo run: pick-and-place with two cameras, joint torque, and policy actions on one scrubber. The playhead you see moves all four tracks and the arm animation together.
Every run RoboTrace records becomes a test case. Use robotrace.evals or robotrace replay run to replay a candidate against thousands of baseline episodes, see exactly where it does better - and worse, and land the rollup in /portal/evals - without booking another hour on the arm.
No extra rack time
Re-roll candidates against archived observations - train the comparison loop without booking the arm.
Compare labeled policy versions
Baseline and candidate versions roll up side-by-side in the portal DiffCard - same metrics every run.
Curate any baseline list
Pass episode IDs inline or from a file - build the slice however you query your archive today.
Weights stay on your machines
Signed URLs fetch tensors for replay; your callable executes locally - RoboTrace only receives the metric payloads.
Bring your simulator, policy, or dataset format. RoboTrace ships lean optional extras ([ros2], [lerobot]) so heavy dependencies never land on rigs that do not need them. Everything else can go straight through log_episode with NumPy-friendly buffers and paths.
No buzzwords - what robotics teams actually ask before they wire log_episode into training.
Join the early-access cohort. We're onboarding teams one at a time so we can stay close to the painful parts. Tell us what you're building and we'll get back to you this week.
Phase 1 · Free for early-access teams · English only