A schema names the sources you want to look at and the panels to lay over
them. <DatasetPreview> takes the parsed object — parse YAML upstream if you
author in YAML; viz has no YAML dependency.
http is the credential-free built-in driver for public data. Private
GitHub / HuggingFace / DreamLake data uses a driver injected by the host app
— see Storage.
panels — views over fields
A panel names a view, points at a source, and binds fields. How you bind
depends on the view:
yaml
# videoStack — list the camera fields (wildcards expand against the catalog){ view: videoStack, source: ep, fields: ['observation.images.*'] }# lineChart — styled series; a field may select one dim of a vector feature{ view: lineChart, source: ep, series: [ { field: [action, left_waist], label: cmd }, { field: [observation.state, left_waist], label: actual, dash: "3 2.4" },] }# timeline — labelled cue tracks{ view: timeline, source: ep, tracks: [{ field: task_index, label: Task }] }
A field is a feature name (action) or [feature, dim] to pick one dim
([action, left_waist]); dim globs work too ([observation.effort, "left_*"]).
Views covers each view's options.
End-to-end: a folder of clips → one videoStack
No manifest, no per-dataset code — list a directory and merge the clips into one
synchronized component:
The folder has no clock, so the stack takes the longest clip as the scrub extent
and every tile scrubs together.
End-to-end: a LeRobot episode → multi-panel
A manifest indexes everything; one source feeds several synchronized panels. The
adapter's timeline gives them one shared clock, and the line charts overlay
action (cmd) against observation.state (actual, dashed) per joint:
A videoStack panel can lay media overlays
over its tiles. Each overlays entry names an annotation-file field in
the same source (globs work) and its format — the exact JSON shape each
format expects is specced in
Media overlays → data formats.
Here two files annotate one video: 21-joint hand detections
(format: handJoints → skeletons) and subtask segments
(format: subtasks → subtitle-style captions). The same subtasks
field also feeds a timeline panel as a track row:
Add on: <video field> to target one tile when a panel has several
(omitted, the layer draws on every video tile); format: raw reads a file
that already contains MediaOverlay JSON.
Omit panels → auto-layout
Don't know the dataset yet? Leave panels out. viz reads the primary
source's fields and lays them out by kind — a camera stack, a task timeline, and
one chart per numeric field: