Guide
VLA Dataset Format: What Does a Training Episode Contain?
Short answer
A VLA training episode is a timestamped sequence of observations (camera images, and often proprioceptive state), an action at each step, and a language task instruction, stored in a format such as RLDS or LeRobot. Firsthand delivers the observation and action side as continuous fields such as head and wrist camera streams, 3D hand pose, action segments and one task instruction per episode, in several of these containers.
Last reviewed:
What does a VLA training episode contain?
Across the sources read for this guide, a VLA training episode is one demonstration trajectory: a sequence of timesteps, each pairing an observation with the action taken at that moment, plus a language instruction describing the task. OpenVLA’s own description states the setup directly: "an input observation image and a natural language task instruction are mapped to a string of predicted robot actions" (https://arxiv.org/abs/2406.09246). The Octo paper describes "a transformer architecture that maps arbitrary input tokens (created from observations and tasks) to output tokens (then decoded into actions)" (https://arxiv.org/abs/2405.12213). Octo is described by its own paper as a generalist robot policy, so this guide does not label it a VLA.
What differs between papers is how much structure sits inside each of those three parts, and whether the action is a discrete token or a continuous vector. The sections below take observations, actions and language in turn, each attributed to the source that states it, then show how Firsthand’s own episode fields, as named on this site, map onto that structure.
What observation streams does a VLA dataset include?
OpenVLA’s GitHub repository documents its data loading as natively supporting "arbitrary datasets in RLDS format, including arbitrary mixtures of data from the Open X-Embodiment Dataset" (https://github.com/openvla/openvla), and its fine-tuning instructions say to add "a new configuration specifying your fine-tuning dataset’s observation and action spaces" (https://github.com/openvla/openvla). Not stated in the sources read: the full list of observation keys the OpenVLA loader requires.
Octo’s paper describes its training mixture as heterogeneous "in the sensors (e.g., including or not including wrist cameras)" and says it will "zero-pad any missing camera channels" (https://arxiv.org/abs/2405.12213), so wrist-camera observations are optional per source dataset rather than a fixed requirement. The paper reports that "only 27% of the data contains wrist camera information." The π0 paper describes a richer observation for its own data: "multiple RGB images, a language command, and the robot’s proprioceptive state," written as o_t = [I¹_t, ..., Iⁿ_t, ℓ_t, q_t] where q_t is "a vector of joint angles" (https://arxiv.org/abs/2410.24164). Not stated in the sources read: a single universal observation schema that every VLA dataset format enforces; each paper describes what its own training mixture happened to include.
| Observation element | What it holds (per source) | Source |
|---|---|---|
| Camera image(s) | OpenVLA declares each dataset’s observation space in a per-dataset configuration; the exact camera keys are Not stated in the sources read | https://github.com/openvla/openvla |
| Wrist camera | Optional per dataset; Octo zero-pads missing camera channels and reports 27% of its data has wrist camera information | https://arxiv.org/abs/2405.12213 |
| Proprioceptive state | A joint-angle vector q_t, present in π0’s own observation o_t | https://arxiv.org/abs/2410.24164 |
| Goal image | An alternative to a language instruction for specifying the task, supported by Octo | https://arxiv.org/abs/2405.12213 |
How are actions stored in a VLA dataset?
RT-2 represents each action dimension as a discrete token. Its paper states the recipe plainly: "The continuous dimensions ... are discretized into 256 bins uniformly," producing an action string such as "1 128 91 241 5 101 127" that is inserted into the model’s text output alongside language tokens (https://arxiv.org/abs/2307.15818). OpenVLA follows the same approach with one refinement: it discretizes "each dimension of the robot actions separately into one of 256 bins," but sets bin edges from "the 1st and 99th quantile of the actions in the training data" rather than the min and max, "to ignore outlier actions" (https://arxiv.org/abs/2406.09246).
π0 does the opposite: it states explicitly that prior VLAs "employ autoregressive discretization to represent actions," and that its own model instead "produce[s] actions via flow matching," a continuous diffusion-style method, specifically to "handle high-frequency action chunks (up to 50 Hz) and highly dexterous tasks" that the paper says "pose a major challenge for prior autoregressive VLAs" (https://arxiv.org/abs/2410.24164). Octo also uses a continuous head: the π0 paper states that "While Octo is not a VLA, it does use a diffusion process to generate actions" (https://arxiv.org/abs/2410.24164), and Octo’s own paper describes output tokens "then decoded into actions" (https://arxiv.org/abs/2405.12213).
| Model | Discrete tokens or continuous head | How actions are represented | Source |
|---|---|---|---|
| RT-2 | Discrete | 256 uniform bins per dimension, encoded as text tokens | https://arxiv.org/abs/2307.15818 |
| OpenVLA | Discrete | 256 bins per dimension, bin width dividing the 1st to 99th quantile of training actions, mapped to discrete tokens of the language model’s tokenizer | https://arxiv.org/abs/2406.09246 |
| π0 | Continuous | Flow matching over an action chunk, explicitly contrasted with autoregressive discretization | https://arxiv.org/abs/2410.24164 |
| Octo | Continuous (diffusion process) | Diffusion-based action generation, per the π0 paper; described by its own paper as a generalist robot policy, not called a VLA here | https://arxiv.org/abs/2410.24164 and https://arxiv.org/abs/2405.12213 |
| GR00T N1 | Not stated in the sources read for this table | Action-less human egocentric video gets latent actions from a VQ-VAE trained on consecutive frames; the action head type is covered in the GR00T N1 guide on this site | https://arxiv.org/abs/2503.14734 |
Where does the language instruction live?
RT-2’s paper states that each demonstration in its training data "is annotated with a natural language instruction that describes the task performed, consisting of a verb describing the skill ... and one or more nouns describing the objects manipulated" (https://arxiv.org/abs/2307.15818). Octo "can be guided via either language commands or goal images," and describes its mixture as heterogeneous in labels "(e.g., including or not including language instructions)" (https://arxiv.org/abs/2405.12213) — so language is a per-dataset optional field in Octo’s own mixture, not a universal requirement. The paper reports that "only 56% of the pretraining data contains language annotations."
None of the sources read for this guide describe a VLA dataset format that requires more than one instruction string per episode or per labeled segment. π0’s paper does describe "segment annotations (fine-grained labels for sub-trajectories, typically about 2 seconds in length)" as part of its own pre-training mixture (https://arxiv.org/abs/2410.24164), which is a finer-grained language structure than a single whole-episode instruction, but it is specific to π0’s own data and not stated as a format requirement shared across RLDS, LeRobot or OpenVLA.
Firsthand’s own language field for delivered episodes is one task instruction per episode. The sources above describe richer language structures some VLA papers use in their own training data — that is a fact about those papers’ datasets, not a claim about what Firsthand captures.
What formats do VLA datasets use (RLDS, LeRobot, HDF5)?
OpenVLA’s repository names RLDS as its native training format and documents the fallback path for a dataset that is not already in Open X-Embodiment: "convert the dataset to the RLDS format which is compatible with our fine-tuning script" (https://github.com/openvla/openvla). GR00T N1’s paper names a different format as its foundation: "Our training corpora build upon the LeRobot dataset format (Cadene et al., 2024)," developed by Hugging Face, and it extends the format so that state and action vectors are split into "semantically meaningful fields" (https://arxiv.org/abs/2503.14734). Octo trains on "a mixture of 25 datasets from the Open X-Embodiment Dataset" (https://arxiv.org/abs/2405.12213); which storage format Octo’s loader reads is Not stated in the sources read.
Firsthand delivers the same underlying episode in five containers: RLDS, LeRobot v2.1, WebDataset, HDF5/zarr, and a Rerun .rrd recording for inspection rather than training. The table below lists each Firsthand field as this site names it, alongside the VLA episode role it fills and the format page where it is documented.
| Firsthand field | Format / file | VLA episode role |
|---|---|---|
| streams/head_rgb (RLDS: observation.head_rgb; LeRobot: observation.images.head) | tfrecord shard (RLDS) or mp4 (LeRobot) | Primary camera observation |
| streams/depth_mm (RLDS: observation.depth_mm; WebDataset: depth.png) | 16-bit depth array or PNG | Depth observation, not used by every VLA format read here |
| annotations/hand_joints (LeRobot: packed into observation.state) | float32 [T, 2, 21, 3] array | Proprioceptive-style observation input, analogous to π0’s joint-angle vector q_t |
| annotations/action_segments (start_ns, end_ns, verb, noun) | list of structs | Sub-step action/task structure, not a per-timestep action vector |
| action (RLDS and LeRobot step key) | per-step field listed on the RLDS and LeRobot format pages | Not stated: what the action field contains, its dimensionality or its action space |
| meta.json: skill_id, site_id (RLDS: episode_metadata.skill_id) | episode-level metadata | Episode-level task/scene identifier, not the per-step language instruction |
The episode schema page documents the full field list this table draws from (/formats/episode-schema), and the RLDS and LeRobot format pages document the step and feature keys exactly as delivered (/formats/rlds, /formats/lerobot).
How do Firsthand episode fields map to a VLA dataset?
Firsthand’s delivered episode carries continuous, not pre-tokenized, fields for the observation and action side of a VLA episode: 3D hand pose (annotations/hand_joints, a [T, 2, 21, 3] array in metres) with a per-joint visibility flag (hand_visible), wrist trajectories, timestamped action segments (start_ns, end_ns, verb, noun), contact events, 200 Hz IMU, and calibrated stereo depth. One task instruction per episode is the language field. None of these fields arrive as RT-2 or OpenVLA-style discrete action-bin tokens; a buyer’s own pipeline performs any tokenization, chunking, or retargeting to a specific robot’s action space after delivery.
| Firsthand field | Format support stated on this site | Not stated |
|---|---|---|
| hand_joints / hand_visible | annotations/hand_joints and hand_visible in the episode schema; RLDS (observation.hand_joints), LeRobot (packed into observation.state), WebDataset (ann.json hand_joints) | A fixed mapping to any specific robot joint space; whether hand_visible is exported in every container |
| action_segments | annotations/action_segments (start_ns, end_ns, verb, noun) in the episode schema and HDF5/zarr groups | Whether RLDS, LeRobot or WebDataset carry action_segments; a per-timestep discretized action-token encoding |
| 200 Hz IMU (streams/imu_head, streams/imu_wrist_l, streams/imu_wrist_r) | Episode schema and HDF5/zarr streams; RLDS (observation.imu_*) and WebDataset (imu.parquet) per the custom-collection spec tables | IMU as a modeled input in the papers read for this guide |
| Stereo depth (depth_mm) | RLDS (observation.depth_mm), WebDataset (depth.png, 16-bit), HDF5/zarr native arrays | LeRobot export of depth; the site states depth is pulled from the HDF5 export instead |
| One task instruction per episode | Present in every delivered episode’s metadata | Narration, captions, dense language annotation, or multi-turn dialogue |
What does a VLA dataset format not include from human egocentric capture?
Every format described above was designed around robot demonstration data: a robot’s own proprioceptive state and the action it executed. Firsthand captures first-person human video, not robot or teleoperation data, so an episode has no robot joint state, no gripper action, and no robot-executed action vector to drop directly into the action field a format like RLDS or LeRobot expects from a robot dataset. Bridging that gap, deciding how a measured human hand motion maps to a given robot’s joints and action space, is a step the buyer’s own pipeline performs; it is not part of what any format conversion alone does.
This is a narrower and more literal point than the embodiment-gap discussion in the sources themselves. GR00T N1’s paper describes training on human video that has no ground-truth actions at all, and compensates with a learned latent-action codebook: "For human egocentric videos ... we do not have any actions that we can directly use to train GR00T N1. For these data, we instead generate latent actions by training a VQ-VAE model" (https://arxiv.org/abs/2503.14734). EgoScale’s paper takes a different approach for its own human data: it supervises the model with human manipulation behaviours "represented as relative wrist motion and retargeted high-DoF hand joint actions," and after pretraining introduces "a small amount of aligned human-robot mid-training data" (https://arxiv.org/abs/2602.16710). Both are solutions a model-training pipeline applies to action-less human video; neither claims that a delivered human-video format on its own already contains a robot action field.
How do you get custom VLA data in the format you need?
- Name the format your training stack already reads, RLDS, LeRobot, WebDataset, HDF5/zarr, or a Rerun .rrd for inspection first.
- Confirm which fields your action head needs as continuous inputs, since Firsthand delivers hand pose, wrist trajectories, action segments and contact events as continuous fields, not pre-discretized tokens.
- Keep the language request exact: one task instruction per episode is the field this site states for delivered capture.
- Decide where embodiment bridging happens. Firsthand captures first-person human video, not robot or teleoperation data, so retargeting to a specific robot’s action space is a step your own pipeline performs after delivery.
- Request a sample in your target format and load it with your existing data loader before committing to a full custom collection, on demand and fast to turn around.
That written spec, naming the format and the fields, is what a custom collection batch starts from.
FAQ
VLA Dataset Format: What Does a Training Episode Contain?, answered.
01What does a VLA training episode contain?
Per the sources read for this guide, a sequence of per-timestep observations (at least a camera image, often proprioceptive state), an action at each step, and a language task instruction, stored in a format such as RLDS or LeRobot.
02Does every VLA dataset include a wrist camera and proprioceptive state?
No. Octo’s own data loader masks out missing modalities per dataset, and only some Open X-Embodiment source datasets OpenVLA trains on include a wrist camera. π0’s own observation includes a joint-angle state vector; this is not stated as universal across every format.
03Are VLA dataset actions always discrete tokens?
No. RT-2 and OpenVLA discretize actions into 256 bins per dimension and encode them as text tokens. π0 and Octo instead use continuous action heads, flow matching and diffusion decoding respectively, and π0’s paper explicitly contrasts its approach with "autoregressive discretization."
04Does a VLA dataset need one language instruction per episode, or more?
The sources read describe both. RT-2’s and Octo’s training data use one instruction per demonstration (and Octo reports only 56% of its mixture even has that). π0’s own pre-training mixture adds finer-grained sub-trajectory segment labels on top. Not stated in the sources read: a single schema that every VLA format requires.
05What language field does Firsthand capture, exactly?
One task instruction per episode, and nothing more is stated on this site. Narration, captions, dense language annotation, multi-turn dialogue, subtask language and reasoning traces are not stated as Firsthand deliverables.
06Does Firsthand ship pre-tokenized or pre-discretized actions?
No. Firsthand’s delivered action-relevant fields, hand pose, wrist trajectories, action segments and contact events, are continuous. Any tokenization into RT-2 or OpenVLA-style discrete bins happens in the buyer’s own training pipeline after delivery.
07Has Firsthand data trained or evaluated RT-2, OpenVLA, π0, Octo or GR00T N1?
This guide makes no such claim. Where a paper is cited, the fact comes from that paper about its own architecture and data; none of it describes Firsthand data being used to train, fine-tune or evaluate any of these models.
08Which delivery format should I request for a VLA training pipeline?
Whichever your existing loader already reads. RLDS and LeRobot are documented as OpenVLA’s and GR00T N1’s own respective training formats; Firsthand also ships WebDataset and HDF5/zarr, and a Rerun .rrd recording for inspecting an episode before writing a loader.
Sources
Where is this documented?
- RT-2 (arXiv 2307.15818) (opens in a new tab)Source for the 256-bin uniform action discretization and the per-demonstration verb/noun language instruction. arxiv.org
- OpenVLA (arXiv 2406.09246) (opens in a new tab)Source for the vision-language-instruction-to-action framing and the quantile-based 256-bin action discretization. arxiv.org
- OpenVLA (GitHub) (opens in a new tab)Official repository: native RLDS / Open X-Embodiment data loading and the RLDS conversion path for custom datasets. github.com
- π0 (arXiv 2410.24164) (opens in a new tab)Source for the continuous flow-matching action representation, the proprioceptive state vector, and the segment-level language annotation in its own pre-training mixture. arxiv.org
- Octo (arXiv 2405.12213) (opens in a new tab)Source for the diffusion action head, the optional wrist-camera and language-instruction masking, and the 56%-language-coverage figure for its training mixture. arxiv.org
- GR00T N1 (arXiv 2503.14734) (opens in a new tab)Source for building on the LeRobot dataset format and the latent-action VQ-VAE labeling of action-less human video. arxiv.org
- EgoScale (arXiv 2602.16710) (opens in a new tab)Source for deriving wrist motion and retargeted hand actions directly from egocentric video, and the aligned human-robot mid-training stage. arxiv.org
Check it against the sample pack.
40 episodes across 4 environments, delivered in the exact schema these guides describe.