How your dataset is delivered
A precise account of what lands in your hands: the file format and optional frame-synchronized motion data, a self-describing naming scheme, a machine-readable manifest, and the two ways we hand the dataset over. Written so your engineers can wire up ingestion before the first clip ships.
What a single delivery contains
Each delivery is a flat set of video files plus one manifest that indexes them. Every video is a complete, single task filmed from a head-mounted phone, so the hands, the tools, and the work surface stay in frame from the first action to the last.
- Video files - one MP4 per task, encoded H.264 (yuv420p) at 1080p in landscape. Audio is included whenever the contributor recorded with narration.
- One manifest - a JSON file listing every video in the batch with its task, setting, duration, size, consent state, and identifiers. This is your ingestion index.
Only footage that clears both quality gates is ever included (Section 08). Rejected material is never delivered.
One continuous recording, one file
The unit of the dataset is one continuous recording, delivered as exactly one MP4 - and it is also the unit of quality control, so the boundaries you receive are meaningful, not arbitrary. Almost always that recording is a single task from start to finish.
- No mid-task cuts. Whatever a file contains is one uninterrupted take - we never splice unrelated moments together or cut the middle out of an activity.
- Segments are an upload detail, not yours. Long recordings are auto-split into fixed-length segments in transit purely for reliability, then concatenated back into a single MP4 before delivery. You only ever see the whole.
- Usually one task; sometimes a labeled session. When a contributor records several related activities in one continuous take (within a single category - e.g. a kitchen session), the file carries every task it contains, and the manifest can include per-task time ranges so you can slice atomic clips or train on the whole sequence - your choice.
- Separate takes stay separate files. Filming three activities as three takes gives three videos, differentiated by capture number - never one merged file.
To keep the dataset diverse rather than repetitive, we cap how much footage any one contributor can submit of the same activity in the same setting (default ceiling ~5 hours). Past that, they are steered to a different task or environment. You receive breadth, not twenty near-identical clips.
The filename tells you what's inside
Filenames are generated from capture data, never typed by hand, so they are consistent and safe to parse. Six underscore-separated fields carry the identity of every clip:
(ISO-3166)
/ city
type
category
no.
no.
Contributor 007's 42nd capture: a kitchen task, filmed at home, in Ha Noi, Vietnam.
- CC - ISO 3166-1 alpha-2 country code of the setting (e.g.
VN,US). - Region - province or city; diacritics are folded to ASCII (Ha Noi
→
HaNoi). - EnvKind - the setting type:
home,commercial,outdoor, orindustrial. - Task - the task category (e.g.
kitchen,laundry,assembly). The exact sub-task is in the manifest. - NNN - a stable, pseudonymous 3-digit contributor number - never a name.
- NNNN - a 4-digit capture number, unique and durable per contributor.
Folder layout
Within the delivery location, each video lives in its own folder keyed by an opaque capture ID, and the manifest sits at the root of the batch:
The opaque per-capture folder keeps the human-readable filename free of anything that could identify a person, while still giving every file a stable, collision-proof address.
Your ingestion index
One JSON manifest accompanies every batch. It carries only structured facts and pseudonymous numbers - never personal data. Each entry maps a file to its task, setting, timing, size, and consent state, so you can load a delivery without opening a single video.
{
"export_id": "b3d1...",
"created_at": "2026-07-18T09:12:04Z",
"completed_at": "2026-07-18T09:44:51Z",
"items": [
{
"filename": "VN_HaNoi_home_kitchen_007_0042.mp4",
"uri": "<delivery-root>/dataset/a3f9c1.../VN_HaNoi_..._0042.mp4",
"duration_seconds": 512.4,
"size_bytes": 843127740,
"task_category": "kitchen",
"task_subcategory": "washing_dishes_by_hand",
"environment_kind": "home",
"province": "Ha Noi",
"narration": false,
"recorded_at": "2026-07-16T02:31:10Z",
"contributor_number": 7,
"capture_number": 42,
"consent": {
"recorder": true,
"third_party": true,
"workplace": false
}
}
// ... one object per delivered file
]
}
| Field | Meaning |
|---|---|
| filename | The delivered file name (Section 03). |
| uri | Full path to the file within the delivery location. |
| duration_seconds | Runtime of the final clip, after any approved trims. |
| size_bytes | File size on disk. |
| task_category | Top-level task type (matches the filename). |
| task_subcategory | The specific activity (e.g. washing dishes by hand). |
| environment_kind | home / commercial / outdoor / industrial. |
| province | Region where it was filmed. |
| narration | Whether the contributor narrated aloud. |
| recorded_at | When the task was captured (UTC). |
| contributor_number | Stable pseudonymous ID - not a name. |
| capture_number | Per-contributor sequence number. |
| consent | Recorder, third-party, and workplace consent flags (Section 09). |
Field set is stable across batches; we can add fields or emit a schema you specify without changing the delivery mechanism. For multi-task sessions, the manifest can also carry a per-task list with time ranges on request.
Synchronized motion data (IMU)
Captured with our native iOS app, every video ships with motion-sensor streams recorded on the same device clock as the video - so each sample lines up with an exact video frame, with no drift to reconcile. This is the difference between footage you can watch and data you can train pose and manipulation models on.
- Accelerometer - raw linear acceleration, sampled at ~100 Hz.
- Gyroscope - raw angular velocity, ~100 Hz.
- Device motion - fused orientation and attitude, gravity, and user acceleration.
- Frame timestamps - the capture time of every video frame, on that same clock.
Every frame and every sensor sample carries a timestamp from one monotonic device clock; the frame log is the bridge that maps each video frame onto it. Any IMU sample can therefore be aligned to the exact frame it belongs to. An automated sync check runs on each capture before it is eligible for delivery (Section 08).
Each stream is delivered as a CSV alongside the video, with a per-capture session.json describing the device (model, OS, app version),
sensor rates, and capture timing. A coarse GPS fix - latitude, longitude, accuracy - is included
when location is enabled for the capture. Column layouts follow a documented contract we share
with your team.
Applies to native-app captures. Browser-recorded captures deliver video only.
How you receive it
Two handoff models, both using signed, access-controlled cloud storage. Pick whichever fits your infrastructure - the file format and manifest are identical either way.
Read from our bucket
We host the dataset in a dedicated cloud bucket and grant your service account read-only access. You pull on your schedule; nothing needs to run on your side but a reader.
Setup: you send one service-account identity, we grant viewer access.
Delivered to your storage
We write each batch directly into your own bucket - Amazon S3 or Azure Blob - using credentials you provision. The dataset lands inside your environment automatically.
Setup: you provision write credentials, we deliver on completion.
Packaging is flexible: the default is one MP4 per task as described here. If your pipeline expects ordered multi-part files or a specific manifest schema, we align to it before the first batch.
Only quality-checked footage ships
Every task passes two independent review layers before it is eligible for delivery. Anything that fails is excluded from the dataset entirely.
-
Capture QC
A reviewer watches the whole task and approves or rejects it against a fixed rejection list (framing, occlusion, incomplete task, and so on). They may set head or tail trims to remove dead time; trims are applied physically at delivery.
-
Dataset QA
Automated checks raise advisory flags; a second reviewer resolves each one, then passes or rejects the capture. A confirmed problem inside the task rejects the whole clip - because we never cut the middle out of a task.
-
Diversity control
The per-task, per-setting hour ceiling (Section 02) is enforced here too, so no single activity or contributor can dominate a delivery.
Privacy and consent, by construction
Personal data never travels with the dataset. Contributors are represented only by stable numbers, and consent is captured up front and surfaced per file so you can filter on it.
- No PII in filenames or manifests. Contributors appear as numbers only; the human-readable path carries nothing identifying.
- Consent recorded per capture. Each file reports three flags - the recorder's own consent, third-party (bystander) consent, and workplace permission where a commercial or industrial setting requires it.
- Consent-gated pipeline. Captures without the required consent are held back and never enter a delivery batch.
What you receive, in one line
A clean set of one-task, 1080p egocentric MP4s - quality-checked, consent-cleared, self-describing by filename - each optionally paired with frame-synchronized motion (IMU) data, plus a JSON manifest that maps every file to its task, setting, timing, and consent state, delivered by pull or push into cloud storage.
We tailor packaging, the manifest schema, delivery cadence, and acceptance criteria to your pipeline. Tell us how your team ingests data and we'll match it before the first batch ships.