Dataset structure
Every release uses the same directory layout and the same file names, so a loader written against one dataset works against the next one.
Directory layout
electrical-assembly-1.3.0/
├── manifest.json # dataset, version, counts, file map
├── LICENCE.md # terms this release is delivered under
├── CHANGELOG.md # what changed since 1.2.0
├── checksums.txt # sha256 per file
├── episodes/
│ ├── episodes.parquet # one row per episode
│ └── annotations.parquet # one row per subtask span
├── video/
│ └── ep_000123/
│ ├── head.mp4
│ └── chest.mp4
├── calibration/
│ └── ep_000123.json # intrinsics and mount geometry
├── provenance/
│ └── provenance.parquet # one row per episode
└── splits/
├── train.txt
└── eval.txtmanifest.json
The manifest is the entry point. Read it first: it names the schema version your loader must support and maps every logical table to a path.
{
"dataset_id": "electrical-assembly",
"version": "1.3.0",
"schema_version": "2.1",
"released_at": "2026-05-14",
"episode_count": 1420,
"accepted_hours": 56.4,
"environments": ["workshop"],
"sensors": ["gopro-head", "chest-cam"],
"licence": {"tier": "commercial", "file": "LICENCE.md"},
"files": {
"episodes": "episodes/episodes.parquet",
"annotations": "episodes/annotations.parquet",
"provenance": "provenance/provenance.parquet",
"splits": {"train": "splits/train.txt", "eval": "splits/eval.txt"}
},
"checksums": {"algorithm": "sha256", "file": "checksums.txt"}
}episodes.parquet
One row per episode. An episode is one complete attempt at the specified task, with explicit start and end conditions.
- episode_id — stable string identifier, unique within the dataset.
- task — task identifier from the dataset task vocabulary.
- environment — workshop, construction-site, residential or industrial.
- duration_s — episode length in seconds.
- outcome — success, failure or recovery.
- contributor — pseudonymous identifier, stable across episodes.
- streams — sensor streams available for this episode.
annotations.parquet
One row per subtask span, joined to episodes on episode_id. Spans are contiguous and non-overlapping within an episode.
- episode_id, span_index — join key and ordering within the episode.
- label — subtask label from the published vocabulary.
- start_s, end_s — frame-accurate boundaries in seconds.
- tool, object — referenced entities, nullable.
- result — outcome of a verify span, nullable.
Splits
The suggested train and eval splits are contributor-disjoint and site-disjoint, so evaluation does not measure memorised scenes. They are a suggestion, not a constraint — the episode list is yours to resplit.