Guide

How to Evaluate an Egocentric Data Sample

A buyer-side, file-level walkthrough of what to check when an egocentric data sample or first batch arrives, and how the result feeds the Spec Pilot decision.
By the Firsthand capture teamLast updated October 10, 2026

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.

The review order. Where the site is silent on an item, the later tables say not stated.
StepQuestion to answerWhere this site states the claim
1. Files and formatsDo the files open in the format you asked for?Sample request page and the format pages
2. Streams and fieldsAre the streams and fields present, with the dtypes and shapes the schema states?Episode schema page and sample data outputs page
3. Calibration and syncDo 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 labelsDo hand joints, masks and action segments hold up on real frames?Sample request page and episode schema page
5. Anonymization and consentAre 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 gapsWhat 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 descriptions as the format pages state them, each paired with the first thing to confirm.
FormatWhat the site statesWhat to confirm when you open it
RLDSTFDS-compatible shards, one skill line per directory, readable converter source; shards of about 1.9 GBThe episode and step structure loads in your pipeline and the shard size suits your storage
LeRobotParquet plus mp4 per camera in the Hugging Face datasets layoutEach camera has its own mp4 and the tabular data lines up with the video
WebDatasetTar shards of 512 samples; each sample carries a key, head and wrist images, depth and an annotation fileA shard streams and each sample key resolves to the files listed
HDF5 / zarrOne group per episode, time-major chunks, per-stream nanosecond timestampsThe episode group opens and each stream has its own timestamps
Rerun .rrdOne recording per episode with every stream on a single timelineThe 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.

Groups and field names as the episode schema page states them.
GroupFields the schema statesWhat to check
meta.jsonepisode_id, skill_id, site_id, participant_id, duration_ns, license, reject_flagsEach 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 streamEvery 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_targetEvery label your task needs exists; absent ones are written down, not assumed
calibration/intrinsics, extrinsics (SE3), rms_reproj_pxPresent for the episode, with extrinsics expressed in the head-camera frame

Groups and field names as the episode schema page states them.

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.
ItemStated dtype, shape and rateNote
head_rgbuint8 [T, 2160, 3840, 3], 60 HzHead-camera frames
wrist_l/ruint8 [T, 1080, 1920, 3], 60 HzOne array per wrist camera
depth_mmuint16 [T, 480, 848], 30 HzMetric, in millimetres
imu_*float32 [N, 6], 200 HzN counts IMU samples, not frames
*_timestamp_nsint64, one per streamIn the PTP clock domain
hand_jointsfloat32 [T, 2, 21, 3]In metres, in the head frame
instance_masksuint16 [T, 480, 848]Per-frame instance masks
action_segmentslist of start_ns, end_ns, verb, nounTimestamped 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.

The per-recording files as the sample data outputs page lists them, each with a review check.
FileWhat the site states it holdsWhat to check
video.mp4Head-mounted Insta360 X5, native 4608 × 4608 at 30 fps, hands in frameHands are visible; faces are blurred or per-frame boxes are supplied
imu.csvGyroscope and accelerometer at about 1,000 samples per second, timestamped in microseconds and synced to the videoColumns loopIteration, time, gyroADC[0..2], accSmooth[0..2]; row count fits the clip length
camera_dump.txtPer-lens fisheye calibration (fx, fy, cx, cy and distortion coefficients), per-frame exposure and shutter data, camera model and settingsCalibration is present and readable for each lens
camera_summary.jsonModel, firmware, resolution, frame rate, duration, capture settingsValues match what you were told about the sample
gps.csvLatitude, longitude, altitude and speed, when a GPS source is pairedPresent only if a GPS source was paired
blur_face_frames.jsonPer-frame face bounding boxesBoxes exist for frames where faces appear
object-checklist.jsonActivity name and category, and which target objects appearMatches the task you asked for
Camera-position photoA still of how the camera was worn, when providedPresent 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.

Sync and calibration claims stated on this site, with what to compute from the sample.
ItemStated on this siteWhat to compute or look for
ClockHardware-triggered, single PTP (IEEE 1588) clock domain; int64 nanosecond timestamps per streamEvery stream carries a timestamp array in the same domain
Sync residualMedian 1.12 ms, p99 1.94 msThe distribution of offsets between head, wrist, depth and IMU streams
Sync ceiling2.0 ms reject ceiling; rejected if breached for more than three consecutive framesAny run of offsets above 2.0 ms
Calibration cadenceSolved at the start and end of each session, with the drift between the two recordedWhether drift is reported for the session
IntrinsicsSolved independently per camera and shipped with each episodeCamera matrix and distortion present for every camera
ExtrinsicsExpressed in the head-camera frame, which is the identityPresent as SE3 for each non-head sensor
ReprojectionRMS 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 fields as the site states them, with what to inspect on real frames.
LabelWhat the site statesWhat to inspect
hand_jointsfloat32 [T, 2, 21, 3], metres, head frameJoints sit on the visible hands across frames; watch for drift over a long reach
hand_visiblePer-joint visibility flagOccluded joints are flagged rather than left looking confident
action_segmentsList of start_ns, end_ns, verb and noun entriesBoundaries fall where the action visibly begins and ends
instance_masksuint16 [T, 480, 848]Mask edges follow the object through contact
body_jointsListed in the schema; the sample request page states 24 joints with 3 values eachPresent when your task needs body pose
contact_eventsListed in the schema; no record layout is stated on the schema pageAsk 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.

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.

Items the site does not state, so a review should ask for them instead of assuming.
ItemStatus on this siteHow to handle it
Delivery time for the free sample packNot statedAsk when you request it; do not plan a date around the pack
Which eight streams the sample pack carriesNot listedCheck what arrived against your own stream list
Contents, size and arrival of a custom sampleAgreed per requestPut them in the request in writing
Label accuracy figureNot statedJudge from your own overlay review
Whether the free pack carries a data card or consent recordsNot statedAsk, and ask to trace consent for one clip
Price, throughput, and time to full volume as a single figureNot statedRaise 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.

This page’s reading of the outcomes. The site does not state a numeric pass or fail threshold for a sample review.
Review outcomeWhat it meansNext step
Files open, fields present, sync and labels as statedThe schema and loader fit your stackWrite the skill spec and scope a Spec Pilot
Fit is good but questions remainThe sample cannot answer your task-specific needsTurn each open question into a spec item: labels, streams, conditions and reject rule
A stated item could not be confirmedThe sample and the site’s claims disagree, for example a format will not open or offsets sit beyond the stated ceilingSend the specific finding to the provider and ask for the document behind it before continuing
License or consent answers are unclearYou cannot plan around the data yetResolve 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.

One question per check, with the answer to expect.
QuestionWhat 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.

01

What 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.

02

Which 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.

03

How 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.

04

How 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.

05

Are 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.

06

Can 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.

07

Is 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.

08

How 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?

Check it against the sample pack.

40 episodes across 4 environments, delivered in the exact schema these guides describe.