LeRobot Dataset Tool and Visualizer is a web application for interactive exploration and visualization of robotics datasets, particularly those in the LeRobot format. It enables users to browse, view, and analyze episodes from large-scale robotics datasets, combining synchronized video playback with rich, interactive data graphs.
This tool is designed to help robotics researchers and practitioners quickly inspect and understand large, complex datasets. It fetches dataset metadata and episode data (including video and sensor/telemetry data), and provides a unified interface for:
language_persistent + language_events) — subtask, plan, memory, interjection + paired speech, and VQA atoms with bounding-box / keypoint / count / attribute / spatial answers. VQA bboxes and keypoints render as overlays on the video player; drag or click on a camera to draw new ones. Backed by an optional FastAPI service (in backend/) for parquet rewrites and HF Hub push.This project uses Bun as its package manager. If you don't have it installed:
# Install Bun
curl -fsSL https://bun.sh/install | bash
Install dependencies:
bun install
Run the development server:
bun dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying src/app/page.tsx or other files in the src/ directory. The app supports hot-reloading for rapid development.
# Build for production
bun run build
# Start production server
bun start
# Run linter
bun run lint
# Format code
bun run format
DATASET_URL: (optional) Base URL for dataset hosting (defaults to HuggingFace Datasets).NEXT_PUBLIC_ANNOTATE_BACKEND_URL: (optional) URL of the FastAPI annotation
backend (backend/app.py). When set, the Annotations tab can save edits and
rewrite parquet shards / push to the Hub. When unset the tab is read/edit
only with sessionStorage persistence.The Annotations tab edits LeRobot v3.1 language atoms — language_persistent
(broadcast subtask/plan/memory) and language_events (per-frame
interjection / vqa / speech) — and renders existing bbox/keypoint atoms over
the video player. Edits live in sessionStorage by default; to write the
new columns into data/chunk-*/file-*.parquet (matching the writer in
lerobot#3471) and push the
result to the Hub, run the bundled FastAPI service:
# 1. install + start the backend (port 7861 by default)
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --port 7861 --reload
# 2. start the visualizer with the backend URL configured
cd ..
NEXT_PUBLIC_ANNOTATE_BACKEND_URL=http://127.0.0.1:7861 bun run dev
The backend exposes:
POST /api/dataset/load — load a dataset by repo_id or local_pathGET /api/episodes/{ep}/atoms — list atoms for an episodePOST /api/episodes/{ep}/atoms — replace atoms (event timestamps are
snapped to exact source-frame timestamps before persisting)GET /api/episodes/{ep}/frame_timestamps — used client-side for snappingPOST /api/export — rewrite parquet with the new language columns plus
the dataset-level tools column (drops legacy subtask_index)POST /api/push_to_hub — export and push to a target repoThis application can be deployed using Docker with bun for optimal performance and self-contained builds.
docker build -t lerobot-visualizer .
docker run -p 7860:7860 lerobot-visualizer
The application will be available at http://localhost:7860.
docker run -p 7860:7860 -e DATASET_URL=your-url lerobot-visualizer
Contributions, bug reports, and feature requests are welcome! Please open an issue or submit a pull request.
The app was orignally created by @Mishig25 and taken from this PR #1055
LeRobot Dataset Tool and Visualizer is a web application for interactive exploration and visualization of robotics datasets, particularly those in the LeRobot format. It enables users to browse, view, and analyze episodes from large-scale robotics datasets, combining synchronized video playback with rich, interactive data graphs.
This tool is designed to help robotics researchers and practitioners quickly inspect and understand large, complex datasets. It fetches dataset metadata and episode data (including video and sensor/telemetry data), and provides a unified interface for:
language_persistent + language_events) — subtask, plan, memory, interjection + paired speech, and VQA atoms with bounding-box / keypoint / count / attribute / spatial answers. VQA bboxes and keypoints render as overlays on the video player; drag or click on a camera to draw new ones. Backed by an optional FastAPI service (in backend/) for parquet rewrites and HF Hub push.This project uses Bun as its package manager. If you don't have it installed:
# Install Bun
curl -fsSL https://bun.sh/install | bash
Install dependencies:
bun install
Run the development server:
bun dev
Open http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying src/app/page.tsx or other files in the src/ directory. The app supports hot-reloading for rapid development.
# Build for production
bun run build
# Start production server
bun start
# Run linter
bun run lint
# Format code
bun run format
DATASET_URL: (optional) Base URL for dataset hosting (defaults to HuggingFace Datasets).NEXT_PUBLIC_ANNOTATE_BACKEND_URL: (optional) URL of the FastAPI annotation
backend (backend/app.py). When set, the Annotations tab can save edits and
rewrite parquet shards / push to the Hub. When unset the tab is read/edit
only with sessionStorage persistence.The Annotations tab edits LeRobot v3.1 language atoms — language_persistent
(broadcast subtask/plan/memory) and language_events (per-frame
interjection / vqa / speech) — and renders existing bbox/keypoint atoms over
the video player. Edits live in sessionStorage by default; to write the
new columns into data/chunk-*/file-*.parquet (matching the writer in
lerobot#3471) and push the
result to the Hub, run the bundled FastAPI service:
# 1. install + start the backend (port 7861 by default)
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --port 7861 --reload
# 2. start the visualizer with the backend URL configured
cd ..
NEXT_PUBLIC_ANNOTATE_BACKEND_URL=http://127.0.0.1:7861 bun run dev
The backend exposes:
POST /api/dataset/load — load a dataset by repo_id or local_pathGET /api/episodes/{ep}/atoms — list atoms for an episodePOST /api/episodes/{ep}/atoms — replace atoms (event timestamps are
snapped to exact source-frame timestamps before persisting)GET /api/episodes/{ep}/frame_timestamps — used client-side for snappingPOST /api/export — rewrite parquet with the new language columns plus
the dataset-level tools column (drops legacy subtask_index)POST /api/push_to_hub — export and push to a target repoThis application can be deployed using Docker with bun for optimal performance and self-contained builds.
docker build -t lerobot-visualizer .
docker run -p 7860:7860 lerobot-visualizer
The application will be available at http://localhost:7860.
docker run -p 7860:7860 -e DATASET_URL=your-url lerobot-visualizer
Contributions, bug reports, and feature requests are welcome! Please open an issue or submit a pull request.
The app was orignally created by @Mishig25 and taken from this PR #1055