Delivery format

Egocentric Stereo Data in MCAP Format

MCAP is an open container for timestamped, multi-channel log data, and it is one of the formats Firsthand delivers egocentric data in. We collect custom first-person stereo capture on demand against your written skill spec, with a QA gate before anything ships, anonymization at ingest and a buyer-owned licence, and package it as MCAP. The topic and schema layout is agreed per order.
Container
MCAP (.mcap), open source
Stereo head rig (06)
Dual fisheye, 1080p per eye, 62 mm baseline
Also ships as
RLDS · LeRobot · WebDataset · HDF5 · zarr
First batch
Median 48 h in deep-coverage settings

Why MCAP for stereo data

One container, several timestamped streams.

01

Multiple channels in one file

MCAP stores multiple channels of timestamped, pre-serialized data, so a stereo pair, hand pose and IMU can sit in one file on one log-time axis.

02

Schemas travel with the data

MCAP stores message schemas alongside the data, so the files stay readable as your codebase evolves, and it records messages in Protobuf, ROS, JSON and other encodings.

03

A calibrated stereo rig behind it

The stereo head rig dataset lists dual fisheye cameras at 1080p per eye, a 62 mm baseline and per-unit calibration, shipped as MCAP.

04

Scoped to the reader you run

Topic names, message encoding and which streams go in the file are set in the skill spec, so the files match the tooling you already use.

Definition

What is egocentric stereo data in MCAP format?

It is first-person video from two calibrated cameras, with hand pose and sensor streams, written to .mcap files. MCAP is the container and stereo is the capture. They are separate choices, so this page treats the format and the rig separately.

The site states MCAP delivery in two places. The off-the-shelf stereo head rig, dataset 06, ships as MCAP, and a custom order is packaged in the format you name, such as MP4 with JSON or CSV, MCAP, LeRobot or a custom layout. The site does not state topic names, message schemas, encodings, rates or files per episode. Those are agreed in the skill spec.

Firsthand is not affiliated with Foxglove or the MCAP maintainers. The facts about MCAP below come from mcap.dev and the foxglove/mcap repository, linked in the sources.

The container

What is MCAP, per its own documentation?

MCAP is an open source container file format for multimodal log data, supporting multiple channels of timestamped pre-serialized data. It is serialization-agnostic, so messages can be Protobuf, DDS (CDR), ROS, JSON and more. Its design is row-oriented and append-only, it stores schemas alongside the data, and it offers an optional index plus optional LZ4 or Zstandard chunk compression. mcap.dev also describes it as the default log format in ROS 2.

Reader and writer libraries exist for C++, Go, Python, Rust, Swift and TypeScript, and the mcap CLI can inspect, merge and split files. The repository is MIT-licensed; that is the MCAP project’s licence, not the licence of a Firsthand delivery.

File structure

How is an MCAP file structured?

A file begins and ends with magic bytes. Between them sit a Header record, a data section and a Footer, with an optional summary section. The data section holds Schema, Channel and Message records, plus Chunk, Message Index, Attachment and Metadata records. A Message record carries a channel ID, a log time, a publish time and the data, and timestamps are uint64 nanoseconds since a user-understood epoch.

Attachment records hold auxiliary artifacts, and the specification names calibration data as an example. The registered media type is application/vnd.mcap with the .mcap extension. Whether a Firsthand file uses chunking, compression, CRC checksums or a summary section is not stated on the site; ask for it in the spec.

Streams

Which Firsthand streams can ship in an MCAP delivery?

For dataset 06 the site states a calibrated stereo head rig with hand-tracking output and 9-axis IMU, shipped as MCAP. Site-wide, Firsthand hand pose is 21 joints per hand with a per-joint visibility flag. Stereo collection lists stereo RGB, depth, IMU and audio, with calibration measured every session and shipped with the episode.

What is not stated is which of those streams are channels in an MCAP file, how they are named or at what rate. Depth, wrist cameras, action segments and contact events are all in that category. If a stream matters to you, name it in the skill spec and confirm it on a Spec Pilot batch rather than assuming it. The first two tables below set out what is stated and what is not.

Comparison

How does MCAP compare with the other delivery formats on this site?

The site states RLDS, LeRobot, WebDataset, HDF5/zarr and Rerun .rrd as exports of the same captured and annotated episodes. MCAP is stated as a packaging option for custom orders and for dataset 06, but the site does not say that an MCAP file is exported from the same canonical episodes, so confirm that in the spec.

The practical difference is the reader. MCAP files are read with the MCAP libraries and CLI, while RLDS, LeRobot and WebDataset are read by their own loaders. If your training loop expects one of those, name it in the spec alongside MCAP. The third table below sets them side by side.

Scale

How do off-the-shelf stereo data and custom collection combine?

Off-the-shelf covers what is already in stock: the stereo category lists four stereo datasets, and only dataset 06 is stated as MCAP. Custom collection covers the rest: custom collection at scale through a network of thousands of capture providers, for a consistent, recurring data flow to labs.

Where coverage for the requested tasks and regions is already deep, the median time from signed spec to first validated batch is a median of 48 hours. Where it is thin, turnaround runs three to four weeks. Choosing MCAP adds no separate stage that the site states.

Ordering

How do you order a custom MCAP dataset?

Write down the tasks, environments, objects and camera tier your model needs. Then name the streams you want in the file, the topic naming and message encoding your reader expects, whether calibration ships inside the file or beside it, and whether MCAP is the only delivery or sits beside a training format.

Most orders begin with a Spec Pilot, a small first batch that proves the spec and the accept criteria on real footage before you scale. Paid, consented contributors perform the real task, faces and screens are blurred at ingest, and rejected episodes go to a reject log that ships with every batch. The fourth table below shows what each spec element decides.

At a glance

What you get.

Container
MCAP (.mcap), described by its own documentation
Stereo head rig (06)
Dual fisheye, 1080p per eye, 62 mm baseline, per-unit calibration, 9-axis IMU, hand-tracking output; shipped as MCAP
Hand pose
21 joints per hand with a per-joint visibility flag
Topic names, schemas, rates
Not stated on the site; agreed in the skill spec
Also available as
RLDS, LeRobot, WebDataset, HDF5, zarr
Spec to first batch
a median of 48 hours (deep coverage)
License
Perpetual, irrevocable, buyer-owned, non-exclusive by default

Every collection runs through the same seven-stage end-to-end custom collection pipeline. End-to-end custom data collection is a managed service that takes an AI data need from problem to owned dataset in a single accountable pipeline.

MCAP at a glance

What the official MCAP documentation states

Each property with what the MCAP documentation says and where it says it. These are facts about MCAP, not about a Firsthand delivery.
PropertyWhat the MCAP documentation statesOfficial source
What it isAn open source container file format for multimodal log data, with multiple channels of timestamped pre-serialized datamcap.dev
SerializationSerialization-agnostic: Protobuf, DDS (CDR), ROS, JSON and moremcap.dev
Write designRow-oriented and append-onlymcap.dev
SchemasStored alongside the datamcap.dev
Index and compressionOptional index; optional LZ4 or Zstandard chunk compressionmcap.dev
IntegrityOptional CRC checksumsmcap.dev
File identityExtension .mcap; registered media type application/vnd.mcapMCAP specification
Timestampslog_time and publish_time per message, uint64 nanoseconds since a user-understood epochMCAP specification
AttachmentsAuxiliary artifacts such as text, core dumps or calibration dataMCAP specification
Libraries and CLIC++, Go, Python, Rust, Swift and TypeScript; CLI to inspect, merge and split filesfoxglove/mcap on GitHub
Licence of the projectMIT Licensefoxglove/mcap on GitHub

Stream map

Firsthand streams and what the site states about an MCAP file

Left to right: the stream or item, what the site states about it, and what the site states about it in MCAP. “Not stated” means the site does not say.
Stream or itemWhat the site statesIn an MCAP delivery, as the site states it
Stereo pairDual fisheye, 1080p per eye, 62 mm baseline (dataset 06)Dataset 06 is stated as shipped as MCAP; channel layout not stated
CalibrationPer-unit (dataset 06); measured every session and shipped with the episodePlacement in the file not stated
Hand pose21 joints per hand with a per-joint visibility flag; dataset 06 lists hand-tracking outputChannel layout and joint order not stated
IMU9-axis (dataset 06)Channel layout and rate not stated
DepthListed among stereo collection streamsNot stated
Wrist cameras, action segments, contact eventsListed in the site’s episode schemaNot stated
Topic names, schemas, encoding, ratesNot statedAgreed in the skill spec
SynchronizationHardware-triggered onto one clock; 2.0 ms cross-stream ceilingHow it maps to message times not stated

MCAP vs the rest

MCAP, HDF5, RLDS, LeRobot and WebDataset, as the site and each format’s documentation state them

Container and reader for each format. The MCAP column is from the MCAP documentation and the site’s own format table.
MCAPHDF5 / zarrRLDSLeRobotWebDataset
ContainerTimestamped multi-channel .mcap fileOne .h5 or .zarr group per episodeTFDS-compatible tfrecord shardsParquet + mp4 per camera, Hugging Face datasets layout.tar shards of 512 samples, streamed from signed URLs
Open or read withMCAP libraries (C++, Go, Python, Rust, Swift, TypeScript) and the mcap CLIh5py (HDF5); zarrtensorflow_datasetslerobot.common.datasets.lerobot_datasetThe webdataset library
Timestampslog_time and publish_time per message; Firsthand’s use not statedint64 nanoseconds per stream, PTP domainint64 nanoseconds, PTP domain, per streamPer-frame, aligned to the head-camera clockSet per program in the skill spec
Site states it asMulti-stream timestamped data and calibration filesRandom access, sync verification, the most complete exportTensorFlow-based pipelines, RL-style step sequencesImitation-learning pipelines; the smaller on-disk optionStreaming training beyond local disk

Skill spec

What the skill spec fixes for an MCAP order

Spec element and where a buyer can see it in the delivery. “Set per program” means the site states no fixed value.
Spec elementWhat it decidesWhere it shows up
Task and skillWhat one attempt is and how it is namedEpisode boundaries; how episodes map to files is set per program
Streams in the fileStereo pair, hand pose, IMU and any othersThe channels you can read; confirm on the Spec Pilot
Topic names and encodingWhat your reader expectsSet per program
Calibration deliveryInside the file or beside itSet per program
Compression, index, CRCThe MCAP options the files useSet per program
Accept criteriaWhat passes QAReject log per batch
Delivery formatHow the data is packagedMCAP alone, or beside RLDS, LeRobot, WebDataset, HDF5 or zarr
LicenseWho owns the datasetPerpetual, irrevocable, buyer-owned, non-exclusive by default

Example footage

What does egocentric stereo footage look like?

One real clip already published on this site. It is a format and rig example: a head-mounted stereo capture with hands in frame. It is not an MCAP file and does not show a specific task from this page.

egocentric_stereo_sample.mp4 · head-mounted stereo · hands in frame · 1920 × 1080 web preview · rig example

No MCAP-delivered clip is published on the site, so this is the nearest stereo clip. Request a sample to see the delivered files. See stereo sample page, stereo + wrist-cam example videos, request an egocentric data sample.

FAQ

Egocentric stereo data in MCAP, answered.

What is egocentric stereo data in MCAP format?
First-person video from two calibrated cameras, with hand pose and sensor streams, delivered as .mcap files, an open container for timestamped messages.
Does Firsthand deliver MCAP?
Yes. The stereo head rig dataset (06) ships as MCAP, and a custom order is packaged in the format you name, such as MP4 with JSON or CSV, MCAP, LeRobot or a custom layout.
Which topics and message schemas are in the files?
Not stated on the site. Topic names, message encoding and rates are agreed in the skill spec and confirmed on a Spec Pilot batch.
Can MCAP hold stereo calibration?
The MCAP specification names calibration data as an example attachment. The site states calibration ships with each stereo recording, but where it sits in an MCAP file is not stated.
Is MCAP a training format?
MCAP is a container for timestamped log data. If your training loop expects RLDS, LeRobot or WebDataset, name that format in the spec alongside MCAP.
What licence does it ship under, and how fast is it?
A perpetual, irrevocable, worldwide commercial licence that is non-exclusive by default, with the buyer owning the resulting dataset and exclusivity available. Where coverage is deep, the median time from signed spec to first validated batch is a median of 48 hours; thin coverage runs three to four weeks.

Sources

Where is MCAP documented?

Request a custom dataset delivered as MCAP.

Tell us the tasks, environments and camera tier your model needs, name the streams and topic layout your reader expects, and specify MCAP as the delivery format. The same episodes can also ship as RLDS, LeRobot, WebDataset or HDF5, with a first validated batch in a median of 48 hours where coverage is deep.