Guide

How to Version a Robot Pretraining Dataset

A practical guide to tracking spec versions, batches, data cards, and format fields across an ongoing pretraining data collection.
By the Firsthand capture teamLast updated October 5, 2026

Short answer

Versioning a robot pretraining dataset means tracking three things across batches: the written skill spec version, the batch identifier and its data card, and the delivery format fields that carry version information, like LeRobot’s v2.1 layout. Keeping the same QA and acceptance gates across every batch is what makes one version comparable to another, rather than just newer.

Last reviewed:

Why does a robot pretraining dataset need versioning?

A pretraining dataset built through custom data collection is rarely delivered once. An ongoing data collection program runs the same written-spec, pilot, QA, and licensed-delivery pipeline repeatedly, as a series of batches, so new tasks, new environments, and new failure cases can be added to the spec and captured as they are identified, rather than reopening a one-off order every time a model needs more data. That repetition is exactly why versioning matters: without a clear record of which spec a batch was captured against, which QA pass it cleared, and which format fields it shipped with, a buyer training on the accumulated corpus cannot say with confidence what changed between one delivery and the next, or why.

The risk is not hypothetical. If a later batch is quietly captured against a looser read of the spec, or reviewed with a different QA pass than the batch before it, mixing the two into one training run teaches a model on data that looks uniform but is not. Versioning is the discipline that keeps that from happening silently: it names what stayed the same, what changed, and where the record of that change lives, so a buyer can decide whether two batches belong in the same training run or need to be treated separately.

This guide covers how to version a pretraining dataset delivered in batches over time, using the written skill spec, the batch, the data card, the episode schema, and the delivery format already described elsewhere on this site. It is not a stand-alone spec-writing guide — see how to write a skill spec for that — and it is not the ongoing program’s sales page, which covers program structure rather than version tracking mechanics.

What should a dataset version include?

A dataset version is not a single number stamped on a zip file. It is the combination of five things that each carry their own record: the written skill spec a batch was captured against, the batch itself as the unit of delivery, the data card that documents that batch, the episode schema every episode in the batch follows, and the delivery format that schema is packaged into. Tracking a version means knowing where each of these five lives and keeping them aligned when any one of them changes.

The five components of a dataset version, and where each one lives on this site.
Version componentWhat it recordsWhere it lives
Skill specThe written task, environment, object, and coverage definitions, plus the accept and reject criteria a batch has to clearThe written skill spec described in custom data collection and how to write a skill spec
BatchOne capture run against the spec, validated through its own QA pass before it is deliveredThe per-batch structure described on the ongoing data collection program page
Data cardJurisdictions of capture, the consent basis, the de-identification detector version, the pass timestamp, reviewer confirmation, and the reject log for that batchData card (glossary) and provenance & licensing
Episode schemaThe canonical meta, streams, annotations, and calibration layout and field set every episode in the batch followsEpisode schema (formats)
Delivery formatThe packaging the episode schema is projected into for that delivery — RLDS, LeRobot, WebDataset, HDF5/zarr, or Rerun .rrdWhat format should robot pretraining data be delivered in?

The five components of a dataset version, and where each one lives on this site.

How does spec versioning work in a custom collection?

In an ongoing data collection program, the written skill spec that passed the Spec Pilot carries forward into every later batch rather than being replaced. New tasks, environments, or failure cases identified after delivery are added to the spec as new cells, not as a rewrite of the whole document. That matters for versioning because it means a spec version is additive and traceable: a batch captured early in the program stays valid against the version of the spec it was actually captured under, even after later cells are added for new coverage.

Spec corrections work the same way. If a coverage gap is found during a pilot sample — the kind of gap a diversity plan is designed to catch before scaling — the fix is to correct the relevant cell of the spec and re-validate it, not to discard everything captured so far. Each cell’s version history is really the sequence of batches captured against it, which is why the batch and the spec cell have to be tracked together rather than as separate, unlinked records.

How do you keep QA and acceptance gates consistent across versions?

Every batch in an ongoing program passes through the same calibration, sync, and label review as the pilot that originally validated the spec, so later batches do not quietly drift from the quality bar the first batch set. Footage that does not clear the spec’s written accept and reject criteria is rejected and recaptured rather than delivered with a caveat. That consistency is what makes versioning meaningful in the first place: if the acceptance bar moved between batches, a buyer could not treat two batches as the same version even if they were captured against the same spec, because they would not have been held to the same standard.

In practice, that means a version comparison is really a QA comparison. Before mixing two batches into one training run, the question to check is not just "were these captured against the same spec cell" but "did both clear the same calibration, sync, and label review, and does each batch’s data card confirm it."

Common change types during an ongoing collection, the version bump each implies, and what the buyer should re-check before mixing batches.
Change typeVersion bumpWhat the buyer re-checks
New task or environment added to the specSpec cell addition — existing cells are unchangedConfirm earlier batches still match the cells that did not change; review the pilot sample for the new cell on its own
Coverage gap found during a pilot sampleSpec correction to the affected cell before scalingRe-check only the coverage target the gap was found against, rather than re-auditing the whole spec
Same episodes re-exported into a new delivery formatFormat re-export of an existing batch, same episode schemaConfirm the new format’s field mapping is complete for that episode content — this is a packaging change, not a data change
Detector or review pass updated for new batchesData card detector version changes for new batches onlyCompare the data card’s detector version and pass timestamp between the old and new batch before mixing them in one training run

Common change types during an ongoing collection, the version bump each implies, and what the buyer should re-check before mixing batches.

How should batches be delivered and identified?

The batch is the practical unit a buyer can identify a version by: each batch is captured, run through its own QA pass, delivered, and billed per validated hour on its own, with its own data card. That data card is what carries the batch-level identity forward — the jurisdictions of capture, the consent basis, the detector version and pass timestamp, and the reject log all belong to one specific batch, not to the program as an undifferentiated whole.

Underneath the batch, identity also lives at the episode level. The episode schema’s meta.json group carries episode_id, skill_id, site_id, and participant_id for every episode, which is what keeps individual episodes traceable even after several batches have been merged into one training corpus. A buyer can trace any single episode back to the skill and site it was captured for, and back to the batch’s data card, independent of which delivery format that episode was eventually exported into.

How do formats carry version information?

Every delivery format on this site — RLDS, LeRobot, WebDataset, HDF5/zarr, and Rerun .rrd — is a projection of the same underlying episode schema, so choosing a format is a packaging decision, not a data-completeness one. But the formats differ in how much version information they carry inside the file itself, and that difference matters when a buyer is comparing batches delivered in the same format over time.

RLDS
episode_metadata.calib_drift_mm records calibration quality per episode, but the tfrecord shards carry no explicit dataset version field
LeRobot
An explicit layout version — v2.1 — is stated in the field mapping and is what loads with lerobot.common.datasets
WebDataset
Shards are numbered sequentially per delivery (for example {000000..000217}.tar), which identifies a shard range for that delivery but is not a semantic version number
HDF5 & zarr
Groups mirror the episode schema’s streams, annotations, and calibration structure and carry per-stream nanosecond timestamps, but no field inside the file states a dataset version

What each delivery format carries about version or provenance inside the file itself.

Only the LeRobot layout carries an explicit version string inside the delivered files. For RLDS, WebDataset, and HDF5/zarr deliveries, version tracking has to live outside the file — at the batch and data-card level — rather than being something a loader can read off the format itself.

How do you plan versioning for a fast, on-demand pretraining collection?

Versioning is easiest to plan for before the first batch ships, not after several batches have already accumulated. For a fast, on-demand custom collection, that means writing the skill spec once with explicit accept and reject criteria and naming the delivery format up front, then treating the Spec Pilot’s validated first batch as the baseline version everything else is compared against.

  • Write the skill spec with accept and reject criteria and a named delivery format before the first batch is captured, so later comparisons have a fixed reference point.
  • Treat the Spec Pilot’s validated batch as the baseline version, with its data card as the first provenance record for the program.
  • When a new task, environment, or failure case is identified, add it to the spec as a new cell rather than rewriting the existing cells a prior batch was captured against.
  • Hold every later batch to the same calibration, sync, and label review as the pilot, so a version comparison is also a QA comparison.
  • Keep each batch’s data card attached to that batch specifically, so provenance and consent can be audited batch by batch rather than for the program as a whole.
  • Before mixing batches into one training run, check the data card’s detector version and pass timestamp alongside the format field mapping, since only LeRobot carries an explicit layout version inside the delivered files.

FAQ

How to Version a Robot Pretraining Dataset, answered.

01

What does "versioning" mean for a robot pretraining dataset?

It means tracking, for every batch delivered over time, which written skill spec it was captured against, which QA pass it cleared, what its data card documents, and which delivery format fields it shipped with — so two batches can be compared rather than just assumed to be the same.

02

Does changing the skill spec create a new dataset version?

In an ongoing program, new tasks or environments are added to the spec as new cells rather than a rewrite of the whole document. A batch captured earlier stays valid against the version of the spec cells it was actually captured under, even after new cells are added later.

03

What is the smallest unit of a dataset version?

The batch. Each batch is captured against the spec, run through its own QA pass, delivered, and documented with its own data card — that is the practical unit a buyer can identify a version by.

04

Does the delivery format itself carry a dataset version number?

Only the LeRobot layout does, stating an explicit v2.1 version in its field mapping. RLDS, WebDataset, and HDF5/zarr deliveries do not carry an explicit version field inside the file, so version tracking for those has to live in the batch’s data card instead.

05

How do I know if two batches are comparable for training?

Check that both cleared the same calibration, sync, and label review, and compare their data cards’ detector version and pass timestamp before mixing them into one training run. Matching spec cells alone is not enough if the QA pass differed.

06

Does licensing need to be renegotiated for each new batch?

No. In an ongoing program, every batch ships under the same perpetual, buyer-owned commercial license established at the Spec Pilot, and every contributor across every batch signs the same consent release used in the pilot.

07

What happens to footage that fails a later batch’s QA bar?

It is rejected and recaptured, not delivered with a caveat, and the rejection is logged in that batch’s own data card. That is what keeps the acceptance gate consistent from one batch to the next.

08

Where does episode-level identity live across versions?

In the episode schema’s meta.json fields — episode_id, skill_id, site_id, and participant_id — which keep individual episodes traceable back to their batch and spec cell even after several batches are merged into one training corpus.

Sources

Where is this documented?

Check it against the sample pack.

40 episodes across 4 environments, delivered in the exact schema these guides describe.