.mcap recording directly to Encord to work with its cameras, point clouds, transforms, and supported numeric signals in one Scene.

Scrubbing through an .mcap file. The recording keeps the camera views and selected numeric signals in sync.
At a Glance
- One file, one Scene. An uploaded
.mcaprecording becomes a continuous MCAP Scene. You do not need a Scene builder or Scene JSON. - The file must be chunked and include a summary with chunk indexes. See Summary and Chunking.
- Only supported schemas are shown. Check each topic against Supported Streams.
- Sensors are placed by transforms, not topic names. Supply a connected transform chain; see Frames of Reference and Synchronization.
- The timeline uses MCAP
log_time, in nanoseconds. There is no frame grid. - Labels embedded in the MCAP are not imported. For example, Foxglove SceneUpdate annotations do not become editable Encord labels.
- Labels are created and exported with the SDK against timestamps. 3D objects use nanoseconds after the Scene start; point cloud segmentations use the absolute
log_timeof a message. See MCAP Scene labels.
Upload an MCAP File
Upload to Encord Cloud
In Files & Folders, open a folder, choose Add files, and upload your.mcap file. You can also upload a local recording with the Python SDK:
Upload an MCAP file to Encord
upload_scene_file returns the Scene item UUID. Add the item to a Dataset, then create a Project with an Ontology containing the annotation tools you need.
Register from Cloud Storage
To keep the MCAP in your own cloud storage, register it through a cloud integration. The storage service must support byte-range requests for Encord to load large.mcap files progressively.
Register an MCAP file from cloud storage
MCAP_URI to the URI of the recording in your storage provider.
You can also use a Cloud-synced folder to discover files in your bucket and keep the folder in Encord up to date. You can also create and sync the folder with the SDK.
File Size and Performance
There is no hard Scene limit on file size, total size, or the number of cameras, streams, or frames. This does not mean that every recording will perform equally well: camera resolution, point count, compression, and the annotator’s browser and hardware all affect playback. The Scene performance guidance recommends keeping merged views below approximately 10 million points per frame. Above approximately 20 million points, the merged point-cloud tool can freeze. Message indexes improve seeking. Large decompressed chunks and many simultaneously displayed camera streams increase memory use. Time-series plots currently load the selected signals across the recording, so very long recordings with high-rate telemetry can also be expensive. Use hardware acceleration and test a representative file on annotators’ machines. Contact support for help with large recordings or performance requirements.Cloud Storage Range Requests
Byte-range requests let Encord read the parts of a large MCAP recording it needs, instead of downloading the whole file before playback. Configure your bucket using the existing instructions for your provider:- AWS S3: allow cross-origin resource sharing.
- Google Cloud Storage: create a CORS configuration.
- Cloudflare R2: configure Cloudflare.
- Azure Blob Storage: create a CORS configuration.
- Direct Access: set up CORS.
Range request header, and exposed response headers. If a recording is stuck loading, check these settings, the integration permissions, and the signed URL expiry.
MCAP Requirements
Summary and Chunking
To load in the Scene editor, an MCAP must be chunked and contain a summary with chunk indexes. Uncompressed chunks, Zstandard (zstd), and LZ4 (lz4) compression are supported. Per-channel message indexes are optional; including them makes seeking more efficient.
Supported Streams
Support for different MCAP streams depends on the schema and encoding of each topic inside it. The following streams are available in Encord:
ROS names in the table use ROS 1 message notation. The corresponding ROS 2 message types, such as
sensor_msgs/msg/Image, are also recognized. See the ROS 1 Image definition and ROS 2 Image definition for examples of their fields.
A sequence of raw or compressed image messages acts as an image stream. Compressed video uses foxglove.CompressedVideo messages containing encoded frames, rather than an MP4 attachment inside the MCAP. Include keyframes and codec configuration in the recording so playback can start and seek correctly.
Recognition of a schema does not necessarily mean the editor will be able to annotate it. For example, embedded
Foxglove SceneUpdate annotations are not imported as editable Encord labels. See MCAP Scene
labels to learn more about MCAP labels. Contact support@encord.com for other
schemas or data types.
Supported Encodings
Supported schema/message encoding pairs include Foxglove Protobuf (protobuf / protobuf), FlatBuffers (flatbuffer / flatbuffer), and JSON (jsonschema / json); ROS 1 (ros1msg / ros1); and ROS 2 (ros2msg or ros2idl / cdr). A supported encoding alone does not make an arbitrary custom schema viewable.
Numeric Sub-channels
Use the topic followed by a dot and a supported field path:
The slash shorthand in the table expands to individual fields:
angular_velocity.x, angular_velocity.y, and angular_velocity.z. Covariance arrays are not exposed as numeric sub-channels. The TwistWithCovarianceStamped paths are normalized to angular.* and linear.*; do not include its nested twist.twist wrapper in the layout name. See Define Time Series Channels to inspect a message with the MCAP CLI and turn one field into a plot.
Frames of Reference and Synchronization
A frame of reference describes where a sensor is positioned and how it is oriented. Encord reads the sensor’sframe_id (or ROS header.frame_id) and follows the parent/child transforms in the recording to place data in the shared 3D view.
- Supply a connected transform chain from each camera or LiDAR frame to your world or robot frame. A topic name alone does not establish its position.
- Transforms are identified by their message schemas, including batched TF messages. Encord composes the transforms along the frame chain and interpolates translation and rotation between available transform samples.
- The playback timeline uses MCAP
log_time. Sensor pose lookup uses the publisher timestamp where available, falling back tolog_timewhen the timestamp is zero. These clocks should agree: large clock offsets or delayed transforms can cause misalignment. - Camera calibration is associated using topic pairing and frame IDs. Keep camera and calibration frame IDs consistent, and record calibration before the images that need it.
- MCAP world/body axes are interpreted as X forward, Y left, Z up; camera optical axes as X right, Y down, Z forward. Record data consistently with these conventions.
Layout
Default Layout
Encord builds a layout from the streams it finds:- Images or video without 3D channels: up to eight camera tiles in rows of two. Matching
left/righttopic names are paired first, with the left view first. Pairs and remaining topics are ordered alphabetically; an odd final camera gets its own row. Matching respects word boundaries, such ascamera_left/camera_rightorLeftCam/RightCam, rather than any occurrence of the letters “left”. - With 3D channels: a 3D view, with camera tiles below when camera tiles are enabled. The 3D view receives 70% of the available tile height when both are shown.
- Numeric signals: choose the sub-channels you want to plot through a configured layout; see Define Time Series Channels for a practical example.

Spot camera arrangement with numeric signals added to the timeline.
Custom Layouts
A layout chooses the camera views, 3D view, and timeseries presented to annotators. If the default layout does not fit your use case, you can use a layout to change how the recording is displayed without rewriting the MCAP.Configure an MCAP layout
row places panes side by side; column stacks them. split_percentage is the space assigned to the first pane.
To show a time-series tile in the timeline, list its tile ID in the optional timeline argument, as shown in the commented-out line in the example. Only time-series tiles can appear in timeline. Every tile in tiles must be referenced by layout or timeline; otherwise the layout is rejected. Check the configured topic and field paths if a plot is missing or the editor reports an unavailable channel.

A configured layout for the same recording: two camera views on the left and two numeric plots on the right. Plot colors and styles can also be customized.
Define Time Series Channels
Numerical messages in MCAP files can be annotated by concatenating the topic name with the field paths. For example, inspecting the numeric message fields in your recording with the MCAP CLI to print the first two messages on the Spot velocity topic:/spot/cmd_vel with the field path linear.x to get the layout stream name /spot/cmd_vel.linear.x. Each message contributes a value at its MCAP timestamp. This is the signal rendered as blue points in the lower-right plot of the custom layout above.
Import and Export Labels
An uploaded MCAP recording is a continuous MCAP Scene, which the SDK calls event-based (LabelRowV2.is_event_based is True). Encord stores 3D objects as events, point-cloud segmentation as point-index ranges for a specific topic and message timestamp, and time-series annotations against a numeric sub-channel. Exported Encord labels are separate from the original MCAP recording.
Follow MCAP Scene labels for sample scripts covering all three label types and JSON round trips. Do not treat nanosecond offsets as sequential frame numbers or reuse point-index ranges after reordering a point cloud.

