Skip to content
Docs menu

datasets

Dataset-kind repo extras — episode index, frames index, per-episode playback payload, dataset meta

4 operations · 9 schemas

GET /v1/datasets/{owner}/{repo}/episodes

List dataset episodes

listDatasetEpisodes · scope none

Episode index of a dataset-kind repo (LeRobotDataset layout; parsed from repo files — the parser lands in M6, the contract is fixed now). 409 problem if the repo is not a dataset.

Parameters

listDatasetEpisodes parameters
NameInTypeDescription
ownerrequiredpathHandle

Repo owner handle (username or org slug).

reporequiredpathSlug

Repo slug.

limitqueryinteger

default 20 · ≥ 1 · ≤ 100

Page size.

cursorquerystring

length ≤ 512

Opaque cursor from the previous page's next_cursor.

Responses

listDatasetEpisodes responses
StatusDescriptionBody
200

Page of episodes.

EpisodePage
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
409

State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...).

Problemapplication/problem+json

GET /v1/datasets/{owner}/{repo}/episodes/{episode_index}/frames-index

Frames index for one episode

getEpisodeFramesIndex · scope none

Maps an episode to the repo files that store its frames (parquet data slices, per-camera videos) so clients can range-read instead of downloading the whole dataset.

Parameters

getEpisodeFramesIndex parameters
NameInTypeDescription
ownerrequiredpathHandle

Repo owner handle (username or org slug).

reporequiredpathSlug

Repo slug.

episode_indexrequiredpathinteger

≥ 0

Zero-based episode index.

Responses

getEpisodeFramesIndex responses
StatusDescriptionBody
200

The frames index.

FramesIndex
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
409

State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...).

Problemapplication/problem+json

GET /v1/datasets/{owner}/{repo}/episodes/{episode_index}/series

Playable payload for one episode

getEpisodeSeries · scope none

Everything a viewer needs to play one episode in a single round trip: presigned per-camera video URLs, the downsampled observation.state / action channels as {t, name, value} points, fps and the episode's task strings. getEpisodeFramesIndex says where the frames live; this says what they are. The server range-reads the parquet columns it needs — it never downloads the whole file — and decimates each channel to at most max_points samples with a min/max algorithm that preserves spikes. 409 problem if the repo is not a dataset, or if its files are not a readable LeRobotDataset.

Parameters

getEpisodeSeries parameters
NameInTypeDescription
ownerrequiredpathHandle

Repo owner handle (username or org slug).

reporequiredpathSlug

Repo slug.

episode_indexrequiredpathinteger

≥ 0

Zero-based episode index.

max_pointsqueryinteger

default 2000 · ≥ 2 · ≤ 2000

Maximum samples returned per channel. The series is decimated to fit (min/max per bucket, so spikes survive); a shorter episode is returned whole.

Responses

getEpisodeSeries responses
StatusDescriptionBody
200

The episode payload.

EpisodeSeries
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
409

State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...).

Problemapplication/problem+json

PUT /v1/datasets/{owner}/{repo}/meta

Set dataset meta

putDatasetMeta · scope key:write

Full replace of the dataset meta block on a dataset-kind repo (written by uploaders/workers). 409 problem if the repo kind is not dataset.

Parameters

putDatasetMeta parameters
NameInTypeDescription
ownerrequiredpathHandle

Repo owner handle (username or org slug).

reporequiredpathSlug

Repo slug.

Request body

application/json · required · DatasetMetaPut

putDatasetMeta request body
FieldTypeDescription
episode_countrequiredinteger

≥ 0

fpsnumber | null

> 0

robot_typestring | null

length ≤ 128

total_framesrequiredinteger

≥ 0

Responses

putDatasetMeta responses
StatusDescriptionBody
200

Stored dataset meta.

DatasetMeta
401

Missing or invalid credentials.

Problemapplication/problem+json
403

Authenticated but not allowed (visibility, membership or scope).

Problemapplication/problem+json
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
409

State conflict (duplicate handle/slug, wrong repo kind, terminal job, ...).

Problemapplication/problem+json
422

Request failed validation.

Problemapplication/problem+json

Schemas (9)

The schemas these operations reach before any other tag’s do. A type that links elsewhere is rendered on that tag’s page.

EpisodePage

object

EpisodePage fields
FieldTypeDescription
itemsrequiredarray of Episode
next_cursorrequiredstring | null

FramesIndex

object

Where one episode's frames live, for range reads (v0 of the index — M6's parser fills it from the LeRobotDataset layout).

FramesIndex fields
FieldTypeDescription
episode_indexrequiredinteger

≥ 0

fpsnumber | null

> 0

num_framesrequiredinteger

≥ 0

filesrequiredarray of FrameFile

EpisodeSeries

object

One episode, ready to play: video URLs plus decimated numeric channels on a shared time axis (seconds from episode start).

EpisodeSeries fields
FieldTypeDescription
episode_indexrequiredinteger

≥ 0

fpsnumber | null

> 0

num_framesrequiredinteger

≥ 0

Frames in the episode (rows read from the data file).

duration_snumber | null

≥ 0

tasksrequiredarray of string
sampled_pointsrequiredinteger

≥ 0

Samples returned per channel after decimation.

downsamplerequiredstring

one of none · minmax

How the series was reduced. minmax keeps the minimum and the maximum of every bucket, so a one-frame spike survives; none means the episode was short enough to return whole.

channelsrequiredarray of EpisodeChannel
pointsrequiredarray of EpisodeSeriesPoint

Flat {t, name, value} samples across every channel.

videosrequiredarray of EpisodeVideo
warningsrequiredarray of string

Human-readable notes about what could not be produced (a camera with no file, a layout feature this version does not map).

DatasetMetaPut

object

DatasetMetaPut fields
FieldTypeDescription
episode_countrequiredinteger

≥ 0

fpsnumber | null

> 0

robot_typestring | null

length ≤ 128

total_framesrequiredinteger

≥ 0

Episode

object

Episode fields
FieldTypeDescription
indexrequiredinteger

≥ 0

num_framesrequiredinteger

≥ 0

tasksarray of string

Natural-language task strings attached to the episode.

FrameFile

object

FrameFile fields
FieldTypeDescription
pathrequiredFilePath
rolerequiredstring

one of data · video

What this file holds for the episode.

formatstring | null

length ≤ 32

File format hint (e.g. parquet, mp4).

camera_keystring | null

length ≤ 128

Camera stream key for video files.

row_startinteger | null

≥ 0

First row of this episode inside a shared data file.

row_endinteger | null

≥ 0

Exclusive end row of this episode inside a shared data file.

EpisodeChannel

object

One plottable scalar track inside a vector feature.

EpisodeChannel fields
FieldTypeDescription
namerequiredstring

length ≤ 128

Channel label — the joint/motor name from info.json when the feature declares one, else {feature}[{index}].

grouprequiredstring

one of state · action · other

Which feature family this channel came from.

featurerequiredstring

length ≤ 128

Source feature key, e.g. observation.state.

indexrequiredinteger

≥ 0

Position of this channel inside the feature vector.

EpisodeSeriesPoint

object

One sample of one channel.

EpisodeSeriesPoint fields
FieldTypeDescription
trequirednumber

Seconds from the start of the episode.

namerequiredstring

length ≤ 128

Channel name (matches an EpisodeChannel.name).

valuerequirednumber

EpisodeVideo

object

One camera stream for this episode, ready to play.

EpisodeVideo fields
FieldTypeDescription
camera_keyrequiredstring

length ≤ 128

Feature key of the camera, e.g. observation.images.front.

pathrequiredFilePath
urlrequiredstring (uri)

Short-lived presigned GET for the video file.

expires_atrequiredstring (date-time)
widthinteger | null

≥ 1

heightinteger | null

≥ 1