Writing a schema
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.
sources — an adapter + storage
Each source names an adapter (what format) and its
storage (where the bytes are); per-adapter params like
episode ride alongside.
httpis 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:
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:
End-to-end: hand skeletons via overlays
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:
Write the smallest schema, get a live view, then hand-author panels once you
know what you want. Views → auto-layout covers
the rules.