Guide
How to Evaluate an Egocentric Data Sample
Short answer
To evaluate an egocentric data sample, open it in the format you asked for, confirm streams and fields match the episode schema, compute cross-stream timestamp offsets against the stated 2.0 ms ceiling, overlay hand joints on real frames, check blurring and consent records, and read the license. Put what the sample cannot answer into a Spec Pilot spec.
Last reviewed:
What should you check first when an egocentric data sample arrives?
A sample is only useful if you review it in an order that exposes problems early. Start with the cheapest checks, the ones that need no tooling beyond what you already run, and move toward the ones that need judgment. The order used on this page is files and formats, streams and fields, calibration and sync, hand pose and labels, anonymization and consent, and finally the license and what the sample cannot tell you. Each step has a question you can answer from the files you hold, and each answer is either something this site already states or something to request in writing.
Before you open anything, write down what you asked for and what you received. The site describes the free sample pack as 40 episodes across 4 environments, with 8 synchronized streams per episode at native rate, about 2.4 GB, drawn from the same production batches you would license. It also describes a per-recording view, the sample data outputs, with up to eight files for each recording. A custom sample shaped to your own task is different again: what it contains, how large it is and when it arrives are agreed per request. Know which of these you are holding, because the checks below differ slightly between them.
This page covers the hands-on review of files you already have. It is not the pilot evaluation, which judges a Spec Pilot against a written skill spec and ends in a go, adjust or stop decision, and it is not a vendor scorecard. A sample shows existing footage captured for a different purpose, so it tests the schema, loader fit and label quality. It cannot prove your spec. That is the pilot’s job, and the last sections explain how to hand the one to the other.
| Step | Question to answer | Where this site states the claim |
|---|---|---|
| 1. Files and formats | Do the files open in the format you asked for? | Sample request page and the format pages |
| 2. Streams and fields | Are the streams and fields present, with the dtypes and shapes the schema states? | Episode schema page and sample data outputs page |
| 3. Calibration and sync | Do timestamp offsets agree with the stated median, p99 and ceiling, and are intrinsics and extrinsics present? | Capture page and episode schema page |
| 4. Hand pose and labels | Do hand joints, masks and action segments hold up on real frames? | Sample request page and episode schema page |
| 5. Anonymization and consent | Are faces blurred, and can you trace consent for a clip? | Sample data outputs page and the consent claims on the capture pages |
| 6. License and gaps | What may you do with the sample, and what does it leave unanswered? | Sample terms on the sample request page |
The review order. Where the site is silent on an item, the later tables say not stated.
How do you confirm the files open in the formats you asked for?
The delivery formats stated on this site are RLDS, LeRobot, WebDataset, HDF5, zarr and Rerun .rrd. The site says the sample pack ships in every format it lists, and that each format is a projection of one episode schema with four groups: meta, streams, annotations and calibration. The first test is therefore mechanical. Point the loader your training stack already uses at the format it reads and see whether an episode loads without a bespoke parser or a reformatting pass. A sample in a format or layout beyond those listed is agreed per request, not promised.
| Format | What the site states | What to confirm when you open it |
|---|---|---|
| RLDS | TFDS-compatible shards, one skill line per directory, readable converter source; shards of about 1.9 GB | The episode and step structure loads in your pipeline and the shard size suits your storage |
| LeRobot | Parquet plus mp4 per camera in the Hugging Face datasets layout | Each camera has its own mp4 and the tabular data lines up with the video |
| WebDataset | Tar shards of 512 samples; each sample carries a key, head and wrist images, depth and an annotation file | A shard streams and each sample key resolves to the files listed |
| HDF5 / zarr | One group per episode, time-major chunks, per-stream nanosecond timestamps | The episode group opens and each stream has its own timestamps |
| Rerun .rrd | One recording per episode with every stream on a single timeline | The recording opens; the docs page states the open command as rerun EP_0117_KITCHEN_A.rrd |
Format descriptions as the format pages state them, each paired with the first thing to confirm.
The site states that converters ship as readable source rather than a binary, so if your loader differs you can retarget the schema yourself. If a format fails to open, keep the exact error and note which format page you were following. That turns a vague complaint into a specific question for the provider. The official documentation for each format is linked in the sources below, and it is the right place to check how a format is meant to be read before concluding that a file is at fault.
Two cautions apply to anything you open. First, the sample pack and the per-recording sample outputs are described separately. The outputs page shows a head-mounted Insta360 X5 recording at 4608 × 4608 and 30 fps, with an IMU at about 1,000 samples per second. The instrumented rig is stated separately as a head-mounted 4K/60 camera, two wrist cameras, an active-stereo depth sensor and 200 Hz IMUs. The site does not map one onto the other, so ask which capture setup your sample came from. Second, the web clips on the outputs page are downscaled to 1080 × 1080 for the browser, while delivered files are the full 4608 × 4608 frame at the original length. Do not judge resolution from a web preview.
Which streams and fields should be present?
Two references apply, and it helps not to mix them. For the sample pack, the site states 8 synchronized streams per episode but does not list which eight, so the exact stream list for a given sample is agreed per request. For field names, dtypes and units, the episode schema page is the reference, and the site says the sample pack ships in that schema. Check what is present against both your own stream list and the schema, and record anything missing as a finding rather than assuming it will arrive later.
| Group | Fields the schema states | What to check |
|---|---|---|
| meta.json | episode_id, skill_id, site_id, participant_id, duration_ns, license, reject_flags | Each field is present per episode, and reject_flags is readable |
| streams/ | head_rgb, wrist_l/r, depth_mm, depth_conf, imu_head, imu_wrist_l/r, plus a *_timestamp_ns array per stream | Every stream you need exists and has its own timestamp array |
| annotations/ | hand_joints, hand_visible, body_joints, contact_events, instance_masks, objects, action_segments, gaze_target | Every label your task needs exists; absent ones are written down, not assumed |
| calibration/ | intrinsics, extrinsics (SE3), rms_reproj_px | Present for the episode, with extrinsics expressed in the head-camera frame |
Groups and field names as the episode schema page states them.
| Item | Stated dtype, shape and rate | Note |
|---|---|---|
| head_rgb | uint8 [T, 2160, 3840, 3], 60 Hz | Head-camera frames |
| wrist_l/r | uint8 [T, 1080, 1920, 3], 60 Hz | One array per wrist camera |
| depth_mm | uint16 [T, 480, 848], 30 Hz | Metric, in millimetres |
| imu_* | float32 [N, 6], 200 Hz | N counts IMU samples, not frames |
| *_timestamp_ns | int64, one per stream | In the PTP clock domain |
| hand_joints | float32 [T, 2, 21, 3] | In metres, in the head frame |
| instance_masks | uint16 [T, 480, 848] | Per-frame instance masks |
| action_segments | list of start_ns, end_ns, verb, noun | Timestamped on the same clock |
The example episode layout on the episode schema page. T is head-camera frames and N is IMU samples; they differ because streams run at different rates.
The schema page also states that streams are stored at native rate and resampled by the loader, never in the delivery. So a depth array with fewer frames than the head camera is expected, not a defect. What would be a finding is a stream that has no timestamp array of its own, because the independent sync check in the next section depends on it. If the shapes in your sample differ from the example layout, ask whether that reflects a different capture setup. The site does not state a mapping between the 4608 × 4608 per-recording outputs and the rig shapes above, so a difference is a question rather than a fault.
If you received the per-recording files instead of the full pack, the checks are simpler and the contents are different. The outputs page lists eight files, and none of them is a depth or hand-pose file. The hand and body joints, masks and action segments are listed in annotations.json, which the site places in the full pack. So do not read the absence of hand pose from a per-recording folder as a gap in the data. Read it as a sign that you are looking at the video, IMU, calibration and privacy layer only.
| File | What the site states it holds | What to check |
|---|---|---|
| video.mp4 | Head-mounted Insta360 X5, native 4608 × 4608 at 30 fps, hands in frame | Hands are visible; faces are blurred or per-frame boxes are supplied |
| imu.csv | Gyroscope and accelerometer at about 1,000 samples per second, timestamped in microseconds and synced to the video | Columns loopIteration, time, gyroADC[0..2], accSmooth[0..2]; row count fits the clip length |
| camera_dump.txt | Per-lens fisheye calibration (fx, fy, cx, cy and distortion coefficients), per-frame exposure and shutter data, camera model and settings | Calibration is present and readable for each lens |
| camera_summary.json | Model, firmware, resolution, frame rate, duration, capture settings | Values match what you were told about the sample |
| gps.csv | Latitude, longitude, altitude and speed, when a GPS source is paired | Present only if a GPS source was paired |
| blur_face_frames.json | Per-frame face bounding boxes | Boxes exist for frames where faces appear |
| object-checklist.json | Activity name and category, and which target objects appear | Matches the task you asked for |
| Camera-position photo | A still of how the camera was worn, when provided | Present when the provider said it would be |
The per-recording files as the sample data outputs page lists them, each with a review check.
How do you check calibration and sync?
This is the check that most separates a stated claim from a measured one. The site states the design: all streams are hardware-triggered onto a single PTP (IEEE 1588) clock domain, with int64 nanosecond timestamps per stream in that domain so that alignment can be verified independently. The stated residual is a median of 1.12 ms and a p99 of 1.94 ms against a 2.0 ms reject ceiling. The sample request page tells you how to test it: because every stream carries nanosecond timestamps, compute the offset between the head, wrist, depth and IMU streams yourself and compare it with the stated median and ceiling.
One workable approach is to pair each frame or sample in one stream with the nearest timestamp in another, then look at the distribution of those offsets across an episode. Read the result against the stated figures rather than against a number of your own. Those figures describe production residuals, so a small sample is a spot check and will not reproduce a p99 on its own. The site’s stated reject rule is that an episode is rejected for a breach beyond the ceiling lasting more than three consecutive frames, and that an episode exceeding the ceiling is discarded at capture rather than shipped. If what you find sits outside those stated rules, treat it as a specific question for the provider, not a verdict.
| Item | Stated on this site | What to compute or look for |
|---|---|---|
| Clock | Hardware-triggered, single PTP (IEEE 1588) clock domain; int64 nanosecond timestamps per stream | Every stream carries a timestamp array in the same domain |
| Sync residual | Median 1.12 ms, p99 1.94 ms | The distribution of offsets between head, wrist, depth and IMU streams |
| Sync ceiling | 2.0 ms reject ceiling; rejected if breached for more than three consecutive frames | Any run of offsets above 2.0 ms |
| Calibration cadence | Solved at the start and end of each session, with the drift between the two recorded | Whether drift is reported for the session |
| Intrinsics | Solved independently per camera and shipped with each episode | Camera matrix and distortion present for every camera |
| Extrinsics | Expressed in the head-camera frame, which is the identity | Present as SE3 for each non-head sensor |
| Reprojection | RMS reprojection under 0.28 px (rms_reproj_px) | The recorded value for each episode |
Sync and calibration claims stated on this site, with what to compute from the sample.
For the per-recording outputs, the checks are lighter. The imu.csv file is timestamped in microseconds on the same timeline as the video, and the site states about 1,000 samples per second, so a 10-second clip should carry roughly 10,000 rows. That is a quick plausibility test on row count and time column. The camera_dump.txt file carries per-lens fisheye calibration and per-frame exposure data. The outputs page does not state a reprojection figure for it, so if you need one, ask. Do not infer one from the pack-level figure.
How do you review hand pose and labels?
The site states per-frame hand joints as 21 joints per hand in 3D, delivered as hand_joints with shape [T, 2, 21, 3] in metres in the head frame, alongside hand_visible, a per-joint visibility flag. It also lists body joints, instance masks, contact events and action segments, each timestamped and aligned to every other stream. The sample request page gives the review method: overlay hand joints, masks and action segments on the video and look at occlusion, drift and boundary placement. The full pack includes annotations.json, with hand and body joints, masks, action segments and calibration, and an episode.rrd Rerun recording with every stream on one timeline, which makes the visual pass quick.
| Label | What the site states | What to inspect |
|---|---|---|
| hand_joints | float32 [T, 2, 21, 3], metres, head frame | Joints sit on the visible hands across frames; watch for drift over a long reach |
| hand_visible | Per-joint visibility flag | Occluded joints are flagged rather than left looking confident |
| action_segments | List of start_ns, end_ns, verb and noun entries | Boundaries fall where the action visibly begins and ends |
| instance_masks | uint16 [T, 480, 848] | Mask edges follow the object through contact |
| body_joints | Listed in the schema; the sample request page states 24 joints with 3 values each | Present when your task needs body pose |
| contact_events | Listed in the schema; no record layout is stated on the schema page | Ask how contact is represented before relying on it |
Label fields as the site states them, with what to inspect on real frames.
Choose frames by situation rather than at random. Look at the moment of grasp, the moment of release, and any frame where one hand passes behind an object or the other hand. Those are the frames where hand pose is hardest and where a label error would hurt a policy most. Step through an action segment boundary frame by frame and see whether the verb and noun describe what you see. For masks, look at the edge of the object while the hand is closing on it.
Expect no accuracy figure to compare against. The site states a second-reviewer pass on labels in production QA, and states that every recording in the per-recording outputs is human-reviewed for task match, visible hands and no staged or idle footage. It does not state a label accuracy number, so your own overlay review is the evidence, and any figure a provider quotes should come with the document behind it. If your task needs a label that is not in the schema list above, that is a spec item. Name it in the written spec rather than hoping the next batch carries it.
How do you check anonymization and consent records?
The site states the anonymization design plainly. Faces, license plates and screens are detected, tracked and irreversibly blurred, spoken identifiers are scrubbed from audio, and a human reviewer confirms the result. The pass runs on every episode at ingest, there is no separate un-redacted master, and there is no step for you to run yourself. A batch data card records the detector version, pass timestamp and reviewer confirmation per episode, which is what makes the privacy claim checkable rather than asserted.
In a sample, the practical check is to look. Scrub through the video for unblurred faces, plates and screens, paying attention to the edges of the frame and to people who enter late. For the per-recording outputs, the site says faces are detected on every frame and delivered blurred or as per-frame face bounding boxes, and the clips shown on the web have faces blurred. If your sample arrives with boxes rather than blurred pixels, ask which applies and who applies the boxes. Also check that file names and metadata carry no personal identifiers: the site states a human-readable, PII-free layout of project, category, activity, slot and version.
Consent is the part a file cannot show you, so it is a question of records. The site states that every contributor signs a release before capture, that the same standard covers anyone who appears in frame incidentally, and that the consent chain is documented and warranted by the provider. For a custom collection, the site describes the consent artefacts for the batch and a data card listing jurisdictions of capture. Whether the free sample pack itself includes a data card or consent records is not stated, so ask rather than assume.
| Item | Stated on this site | What to check |
|---|---|---|
| Faces | Detected, tracked and irreversibly blurred, or delivered with per-frame bounding boxes in the per-recording outputs | Scrub for unblurred faces; ask which method applies to your sample |
| Plates and screens | Detected, tracked and irreversibly blurred | Check frames with vehicles and displays |
| Audio | Spoken identifiers scrubbed | Where audio is included, listen for names and addresses |
| Human review | A human reviewer confirms the pass on every episode | Ask where that review is recorded |
| Un-redacted master | None kept or delivered | Ask for this in writing |
| Data card | Per batch, with detector version, pass timestamp and reviewer confirmation per episode | Ask whether the sample carries one; not stated for the free pack |
| Consent chain | Signed release per contributor; same standard for people in frame incidentally | Ask to trace consent for a specific clip |
| File layout | Human-readable, PII-free: project, category, activity, slot, version | Check file names and metadata for personal identifiers |
Anonymization and consent claims as stated on this site, with the check each one invites.
What does a sample license allow, and what can a sample not tell you?
Read the license before you rely on anything. The site’s terms state that sample datasets are provided for evaluation only. Redistribution, resale or use of sample data in a production or commercially deployed model is not permitted unless a separate commercial license has been signed. Treat the sample as a test fixture, not a training corpus. A custom collection is different: the site states a perpetual, irrevocable, worldwide, buyer-owned license, non-exclusive by default, with exclusivity available when requested at the specification stage. Do not plan around one on the strength of the other.
A sample also has hard limits on what it can show. It is existing footage captured for a different purpose. It cannot show your task, your environments or your condition cells. It cannot show how many episodes would be rejected against your reject rule, how coverage would fill against your spec, or how long your environments would take. The site makes the same split: the free sample pack is enough to sanity-check the loader and label quality, and a Spec Pilot is enough to move a policy. Writing the limits down at the end of the review is what lets the sample feed the next step instead of ending in a vague impression.
| Item | Status on this site | How to handle it |
|---|---|---|
| Delivery time for the free sample pack | Not stated | Ask when you request it; do not plan a date around the pack |
| Which eight streams the sample pack carries | Not listed | Check what arrived against your own stream list |
| Contents, size and arrival of a custom sample | Agreed per request | Put them in the request in writing |
| Label accuracy figure | Not stated | Judge from your own overlay review |
| Whether the free pack carries a data card or consent records | Not stated | Ask, and ask to trace consent for one clip |
| Price, throughput, and time to full volume as a single figure | Not stated | Raise during the working call, once the spec is written |
Items the site does not state, so a review should ask for them instead of assuming.
How do you turn a sample review into a go/no-go for a pilot?
The sample is one step in a sequence the site states. In practice the order is sample, then a written skill spec, then a Spec Pilot, then a quote and scale, though a team that already trusts the schema can go straight to a quote. A Spec Pilot is a small, fast batch captured fresh against your written spec, put through the same reject log and coverage reporting as a full order, billed per validated hour and held to the same license as a full order. A quote is a scoped estimate against your written spec, stated as arriving within one business day of the intake form. The site says rejected episodes, recaptures, calibration time and travel are never billed.
| Review outcome | What it means | Next step |
|---|---|---|
| Files open, fields present, sync and labels as stated | The schema and loader fit your stack | Write the skill spec and scope a Spec Pilot |
| Fit is good but questions remain | The sample cannot answer your task-specific needs | Turn each open question into a spec item: labels, streams, conditions and reject rule |
| A stated item could not be confirmed | The sample and the site’s claims disagree, for example a format will not open or offsets sit beyond the stated ceiling | Send the specific finding to the provider and ask for the document behind it before continuing |
| License or consent answers are unclear | You cannot plan around the data yet | Resolve them in writing before any pilot |
This page’s reading of the outcomes. The site does not state a numeric pass or fail threshold for a sample review.
The stated timelines help you plan the step after the review. A spec conversation happens the same week. The timeline then runs from a signed spec: where contributor coverage is deep, such as home kitchens, retail handling and light assembly, first validated data arrives in a median of 48 hours, and where coverage is thin, such as construction, clinical, agriculture and hospitality, it is typically three to four weeks. Time to full volume is not stated as a single figure, and your own internal approvals sit outside these numbers. Once a pilot returns, the pilot evaluation guide explains how to judge it against the spec, and the scaling guide covers the move to production volume.
What should you ask the collection partner after reviewing a sample?
Send the questions in one message, with your specific findings attached. A good answer is specific, written and checkable. A vague answer is the signal to ask for the document behind it. The questions below follow the review order, so each one maps to a check you have just run.
| Question | What a complete answer looks like |
|---|---|
| Which capture setup produced this sample, and how does it map to the stated rig? | A named setup mapped to the head, wrist, depth and IMU streams in your spec |
| Which eight streams are in the sample pack? | A stream list you can check against your own |
| What offsets did you measure on these episodes? | A measured median and p99 against the stated ceiling, not a hardware claim |
| Where is calibration drift reported for a session? | Drift and reprojection error shipped with the episode |
| How would my labels be delivered, and is contact represented? | Named fields, shapes and units for each label in your spec |
| Does the sample carry a data card or consent records? | The data card fields, and a consent chain tied to the footage |
| Is any un-redacted copy retained anywhere? | No; there is no un-redacted master |
| What would a Spec Pilot report for my spec, and when? | Coverage, reject rate and a real timeline figure for your environments |
One question per check, with the answer to expect.
Ready to move past the sample? Write the spec, then request a custom dataset and describe the tasks, environments, streams and format you need. A Spec Pilot or a quote is scoped against that written spec.
FAQ
How to Evaluate an Egocentric Data Sample, answered.
01What should I check first when an egocentric data sample arrives?
Confirm that the files open in the format you asked for, using the loader your training stack already runs. Then check that the streams and fields match the episode schema and your own stream list, before moving on to sync, labels, anonymization and the license.
02Which formats can a sample come in?
The site states RLDS, LeRobot, WebDataset, HDF5, zarr and Rerun .rrd, and says the sample pack ships in every format it lists. A sample in a format or layout beyond those is agreed per request, not promised.
03How do I check sync on a sample?
Every stream carries int64 nanosecond timestamps, so compute the offset between the head, wrist, depth and IMU streams yourself. Compare it with the stated median of 1.12 ms, p99 of 1.94 ms and 2.0 ms reject ceiling.
04How do I review hand pose labels?
Overlay hand joints, masks and action segments on the video and look at occlusion, drift and boundary placement. The site states 21 joints per hand in 3D with a per-joint visibility flag, so check that occluded joints are flagged.
05Are faces and plates blurred in a sample?
The site states that faces, license plates and screens are detected, tracked and irreversibly blurred, and that the per-recording outputs deliver faces blurred or as per-frame bounding boxes. Scrub the footage yourself, and ask which method applies to your sample.
06Can I train a production model on a sample?
No. The site’s terms state that sample datasets are for evaluation only, and production or commercially deployed model use needs a separate signed commercial license. A custom collection carries a perpetual, buyer-owned license.
07Is there a score or threshold for passing a sample review?
The site states none for a sample review, so this page does not invent one. It does state production reject criteria, such as a 2.0 ms sync ceiling and reprojection under 0.28 px, which you can compare your findings against.
08How fast can I move from a sample to a pilot?
The site states a spec conversation the same week and a first validated batch in a median of 48 hours from a signed spec where coverage is deep. Thin-coverage environments typically take three to four weeks. A delivery time for the free sample pack is not stated.
Sources
Where is this documented?
- RLDS (GitHub) (opens in a new tab)Official repository for the robot-learning dataset format, one of the delivery formats offered on this site. github.com
- LeRobot (GitHub) (opens in a new tab)Official Hugging Face repository for the LeRobot dataset format, one of the delivery formats offered on this site. github.com
- WebDataset (GitHub) (opens in a new tab)Official repository for the tar-shard format, one of the delivery formats offered on this site. github.com
- HDF5 (The HDF Group) (opens in a new tab)Official HDF5 project page, the container behind the HDF5 delivery format. www.hdfgroup.org
- Zarr documentation (opens in a new tab)Official documentation for the zarr storage format listed alongside HDF5. zarr.readthedocs.io
- Rerun documentation: recordings (opens in a new tab)Official Rerun documentation describing recordings, the container behind the .rrd delivery format. rerun.io
Check it against the sample pack.
40 episodes across 4 environments, delivered in the exact schema these guides describe.