AuraOne Open / Robotics Studio / Capture schema

The review unit is a segment, not a loose video.

A robotics capture has to survive review. The media, the quality record, and the provenance all stay attached. This is the public shape of that record.

At a glance

Robotics Studio docs

Local-first
Preview
robotics-studio.auraone.ai
Source
github.com/auraoneai/robotics-studio-open
Data
User datasets remain local
Inputs
JSON and JSONL manifests

Mental model

Session, segment, quality, provenance.

A media session is the top-level recording event. A segment is the upload and review unit. A quality snapshot carries the scores and the gate. Lineage keeps the rest attached.

  • Operator and capture device tier
  • Task bounty and rubric
  • Consent receipt
  • License scope
  • Buyer review policy

Session

sessionId

One recording event. Carries the operator, dataset, and buyer policy plus links to its segments.

Segment

segmentId

The upload and review unit. Review runs per capture, per segment, or per session as the buyer policy sets.

Quality

safety · smoothness · quality

Scores, a quality gate, and the reasons behind it, recorded once per capture.

Provenance

dataset · task · consent · license

Every segment carries the dataset, task, consent receipt, and license scope it was captured under.

Large-media model

Long captures become sessions, segments, and parts.

Two hours of phone footage should not be one loose upload. AuraOne models a parent media session, its segments, and its multipart upload parts. Delivery starts from verified assets.

Media session

parent record

The parent recording event. Rolls up segment counts and upload, review, and delivery state.

Media segment

segmentIndex

The upload and review unit. Carries its own consent and quality metadata.

Media part

partNumber

One multipart upload part. The upload records each completed part number with its ETag, and each signed batch with its expiry.

Derivative

review proxy

A review proxy linked back to its source segment with its own checksum and storage proof.

Session object

The capture envelope.

A session manifest records the operator and dataset and links each segment. The server contract uses aura-robotics-large-media-session-v1. The Aura Capture app sends aura-robotics-mobile-segment-session-v1.

{
  "schemaVersion": "aura-robotics-large-media-session-v1",
  "manifestId": "msm_01J...",
  "orgId": "org_01J...",
  "sessionId": "msess_01J...",
  "operatorId": "op_01J...",
  "datasetId": "ds_01J...",
  "shiftId": "shift_01J...",
  "startedAt": "2026-06-04T18:00:00Z",
  "endedAt": "2026-06-04T20:00:00Z",
  "segmentDurationSeconds": 600,
  "buyerPolicy": {
    "policyId": "bp_01J...",
    "buyerId": "buyer_01J..."
  },
  "segments": [
    {
      "segmentId": "seg_01J...",
      "segmentIndex": 4,
      "status": "uploaded",
      "reviewStatus": "pending",
      "deliveryStatus": "not_eligible"
    }
  ],
  "rollup": {
    "totalSegments": 12,
    "acceptedSegments": 0,
    "status": "in_review"
  }
}

Segment object

The upload envelope for large media.

Segments are independently resumable and independently reviewable. A failed segment should not force a two-hour session to start over. The server contract uses aura-robotics-large-media-segment-v1; the Aura Capture app sends aura-robotics-mobile-segment-v1. Finalization rejects any other version.

{
  "schemaVersion": "aura-robotics-large-media-segment-v1",
  "manifestId": "sm_01J...",
  "sessionManifestId": "msm_01J...",
  "orgId": "org_01J...",
  "sessionId": "msess_01J...",
  "segmentId": "seg_01J...",
  "captureId": "cap_01J...",
  "operatorId": "op_01J...",
  "segmentIndex": 4,
  "totalSegments": 12,
  "segmentDurationSeconds": 600,
  "startMs": 2400000,
  "endMs": 2932000,
  "durationSeconds": 532,
  "startedAt": "2026-06-04T18:40:00Z",
  "endedAt": "2026-06-04T18:48:52Z",
  "status": "uploaded",
  "qualityStatus": "pass",
  "deliveryStatus": "not_eligible",
  "storage": {
    "raw": {
      "objectKey": "robotics/captures/org_1/op_1/msess_01J/seg_01J/raw.mov",
      "sizeBytes": 1099511628,
      "sha256": "c5f8...",
      "checksumMode": "multipart_sha256"
    }
  },
  "review": { "status": "pending", "rejectCodes": [] },
  "eventMetadata": {
    "taskSteps": [],
    "actionLabels": [],
    "qualityEvents": [],
    "privacyEvents": [],
    "lifecycleEvents": []
  },
  "lineage": {
    "datasetId": "ds_01J...",
    "taskBountyId": "tb_01J...",
    "consentReceiptId": "consent_01J...",
    "licenseScopeId": "lic_01J..."
  }
}

Quality snapshot

The scored review record.

Each finalized capture gets one quality snapshot: three scores, a gate, and the reasons behind the gate.

{
  "captureId": "cap_01J...",
  "safetyScore": 0.94,
  "smoothnessScore": 0.81,
  "qualityScore": 0.88,
  "qualityGate": "passed",
  "reasons": [],
  "preUploadBlurVerified": true,
  "policyId": "bp_01J..."
}

Segment events

Make review decisions portable.

Segments carry timed events. Finalization records their counts with the segment.

  • Task steps
  • Action labels
  • Quality events: lighting, blur, occlusion, dropped frames
  • Privacy events: redaction, privacy pause, bystander
  • Lifecycle events: upload, proxy, review decision

Provider proof

Raw media is not deliverable until storage agrees.

At finalization the backend checks the stored object itself: it exists, and its byte size and SHA-256 match the upload. Finalization marks media verified only from that check. A verified flag sent by the client is ignored. In production, finalization stops when storage cannot be checked.