Skip to main content
Understanding the dataset format is useful if you want to inspect your recordings, debug training issues, or build custom tooling around the training pipeline.

File structure

Each physical skill lives in a directory under ~/innate-os/workspace/custom_skills/ on the robot (skills recorded on releases before the workspace layout may still be in ~/skills/, which is also scanned):

Episode format (HDF5)

Each episode is stored as an HDF5 file with the following structure: Where T is the number of timesteps in the episode and action_dim is typically 6 (joint positions) or 10 (6 joints + 2 base velocity + 2 reserved).

Additional fields for mobile tasks

When recording with base movement enabled, the episode also includes:

Recording parameters

The recorder captures data at 30 Hz by default with these settings (from recorder.yaml):

Metadata file

Each skill directory contains a metadata.json that evolves as you progress through the pipeline: After creating the skill:
After training and activation:
The execution block tells the BehaviorServer everything it needs to load and run the policy: which checkpoint to use, the action dimensionality, the maximum execution duration, and the arm pose to move to before starting inference.

Normalization statistics

The training pipeline computes per-feature normalization statistics (mean and standard deviation) from your dataset and saves them in dataset_stats.pt. During inference, the policy uses these stats to normalize observations and unnormalize action outputs, ensuring consistency between what the model saw during training and what it sees at runtime.