Rayform

Guides

Exporting to training formats

Write a slice as LeRobot, RLDS, WebDataset, MCAP, OpenUSD or MJCF, to your bucket or to signed URLs.

Rayform is in private preview. APIs, formats and the SDK described here may change before general availability.

An export writes a slice in one format. Exports are cached by slice, format and options, so requesting the same export twice returns the existing files.

Formats

FormatformatBest forContains
LeRobotlerobotImitation learning, VLA fine-tuningEpisodes as Parquet plus MP4 video, meta/ info
RLDSrldsTensorFlow and Open X-Embodiment toolingTFRecord episodes with RLDS step structure
WebDatasetwebdatasetLarge-scale PyTorch trainingTar shards of 256 MB to 1 GB
MCAPmcapDebugging, Foxglove, Rerun, ROS 2Aligned channels plus derived topics
OpenUSDusdIsaac Sim, Isaac LabScene with Gaussian splats and collision meshes
MJCFmjcfMuJoCoCollision meshes and a scene file

Options

OptionTypeDefaultDescription
cameraslist of stringsallCamera channels to include
fpsnumbersource rateResample every stream to this rate
resample"nearest" or "linear""nearest"Method for resampling non-image streams
actionstringnoneChannel used as the action, for example joints/position_delta
framestring"rayform"Output convention: rayform, ros, opencv, opengl, isaac, mujoco
quat_order"wxyz" or "xyzw""wxyz"Quaternion order in the output
image_size[width, height]sourceResize images

Exporting with Python

Python
export = client.exports.create(
    slice_,
    format="lerobot",
    options={"cameras": ["cam0/rgb", "wrist/rgb"], "fps": 15, "action": "joints/position_delta"},
    destination="s3://my-bucket/rayform/mug-grasps/",
)
export.wait()
print(export.status, export.files[:2])

To write to your own bucket, grant Rayform's export role write access to the prefix (see Exports). Without a destination, files are kept in Rayform storage and listed with signed URLs that expire after 15 minutes.

Loading a LeRobot export

Python
from lerobot.datasets.lerobot_dataset import LeRobotDataset

ds = LeRobotDataset("rayform/mug-grasps", root="/data/rayform/mug-grasps")
print(ds.num_episodes, ds.features.keys())

Every episode's metadata carries rayform.slice, rayform.segment and rayform.segment_version, so you can trace any training sample back to its recording.

Large exports

Exports run next to your data and write in parallel. For training clusters, export to a bucket in the same region as the cluster, so each epoch reads locally.

Last updated October 18, 2026