You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Turn handheld GoPro demonstrations into robot-learning datasets, then inspect, train on, and simulate them.
Voilab is a fork of UMI (Universal Manipulation Interface). Instead of teleoperating a robot to collect training data, a person holds a 3D-printed gripper with a GoPro on it and performs the task by hand; the recorded video is reverse-engineered into end-effector trajectories using visual-inertial SLAM. This fork rebuilds UMI's pipeline as a YAML-configured service pipeline, swaps conda for uv, adds GoPro 13 telemetry support, and layers on Jupyter/Voila viewers, diffusion-policy training, and an Isaac Sim simulation path.
The three-layer ROS 2 stack in the training package, its real class signatures, and its known defects
Quickstart
Before you run this: Linux with Docker (stage 2 runs ORB-SLAM3 in a container and pulls ~1 GB on first use), plus make install-ffmpeg install-exiftool for the video and metadata tools. Full prerequisites: Getting started.
# 1. Install uv and all dependencies (dev extra needed for the viewers)
make install-dev
# 2. Check the two CLIs are on the path
uv run umi --help
uv run voilab --help
# 3. Run the pipeline on a session directory of GoPro clips# my_session/ = a folder of GoPro .MP4 clips (one slow room sweep + gripper-calibration clips + demos).# No footage yet? Getting started links a downloadable example session — it is GoPro 9# footage, so run that one with official_gopro9_pipeline_config.yaml instead.
uv run umi run-slam-pipeline umi_pipeline_configs/gopro13_fisheye_2-7k_pipeline_config.yaml \
--session-dir /abs/path/to/my_session
# 4. Open dataset.zarr.zip
uv run voilab launch-viewer
uv run voilab launch-dataset-visualizer # or: review the session (SLAM, ArUco, per-demo quality)
Run every command from the repository root — relative paths inside the shipped configs resolve against the current working directory. Full walkthrough: Getting started.
Contributing
Pipeline stage: subclass BaseService in packages/umi/src/umi/services/, then reference it by dotted path from a config in umi_pipeline_configs/. See Pipeline overview.
Viewer: put the logic in src/voilab/applications/, data loading in src/voilab/utils/, and a notebook entry point in nbs/. See Visualization.
Dependencies: add them with uv add --package <member> so uv.lock stays in sync; the lockfile is committed. See uv workspace.
Docs: one topic per file under docs/, and add the row to the index above.
About
A lightweight visualization toolkit for exploring robotics datasets, built on a pre-configured JupyterLab environment with Voila for interactive applications.