Spec template

This template captures everything we need to deliver data that loads directly into your training code. Fill it out and send it back — we'll confirm we can match your schema.

What the spec covers

Robot configuration

Embodiment type, platform, joint names, action space definition, control frequency. This tells us how to structure the action and state vectors.

Observations

Camera names, resolutions, and framerates. Proprioceptive state fields. Maps directly to observation.images.* and observation.state in LeRobot format.

Episodes & tasks

What tasks to collect, success criteria for each, episode duration targets, language instruction format.

Labels

Required fields (episode_index, timestamp, done, success) plus optional annotations like step boundaries, object bounding boxes, failure reasons.

Delivery format

LeRobot (Parquet + MP4), RLDS (TFRecord), or HDF5. Delivery cadence, volume targets, storage destination.

Quality assurance

Rejection rules for frame drops, timestamp jitter, occlusions. Replacement policy for rejected episodes.

Preview

Here's what the spec looks like. Download the full version for all fields and comments.

spec.yaml
# ═══════════════════════════════════════════════════════════════════════════════
# MotionLedger Data Collection Spec
# ═══════════════════════════════════════════════════════════════════════════════

project:
  company: ""
  contact_name: ""
  contact_email: ""
  timeline: "sample_pack_first"  # sample_pack_first | urgent | YYYY-MM-DD

robot:
  embodiment: ""  # single_arm | bimanual | mobile_manipulator | humanoid
  platform: ""    # e.g., "Franka Panda", "UR5e", "ALOHA"
  joints:
    names: []     # e.g., ["shoulder", "elbow", "wrist_1", "gripper"]
    count: 7
  action_space:
    type: ""      # ee_delta_pose | joint_position | joint_velocity
    dims: 7
    hz: 10

observations:
  cameras:
    - name: "top"
      resolution: [640, 480]
      fps: 30
    - name: "wrist"
      resolution: [640, 480]
      fps: 30
  state:
    include_joint_positions: true
    include_joint_velocities: false
    include_gripper_state: true
    hz: 50

episodes:
  tasks:
    - name: "pick_and_place"
      description: "Pick object from A, place at B"
      success_criteria: "Object at target within 2cm"
  average_duration_sec: 15
  instruction:
    format: "text"
    example: "Pick up the red block"

labels:
  required:
    - episode_index
    - frame_index
    - timestamp
    - done
    - success
  optional:
    - failure_reason
    - step_boundaries
    - object_bboxes

calibration:
  camera_intrinsics: true
  camera_extrinsics: true
  extrinsics_frame: "robot_base"

delivery:
  format: "lerobot"  # lerobot | rlds | hdf5
  cadence: "weekly"
  volume_hours_per_week: 50
  destination: "client_s3"

qa:
  reject_if:
    frame_drop_rate_exceeds: 0.01
    timestamp_jitter_ms_exceeds: 20
    camera_occlusion: true
  replacement_policy: "recollect"

Compatible formats

We deliver in the format your training code expects.

LeRobot (Parquet + MP4)

HuggingFace's standard format. Used by Physical Intelligence's π₀ models. Parquet files for state/action, MP4 for video streams. Streamable from HF Hub.

RLDS (TFRecord)

Google's format for Open X-Embodiment. TFRecord files with tf.train.Example protos. Compatible with RT-X and other TensorFlow-based policies.

HDF5

Hierarchical data format. Common in research. Single file per episode with datasets for images, state, actions, and metadata.

Ready to send your spec?

Download the template, fill it out, and email it to hello@motionledger.com. We'll reply with confirmation and a sample pack timeline.