Skip to main content
Upload an .mcap recording directly to Encord to work with its cameras, point clouds, transforms, and supported numeric signals in one Scene.
Animation showing synchronized MCAP camera views and numeric signals while scrubbing the timeline

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 .mcap recording 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_time of 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
Set 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: These sections cover the allowed methods, 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’s frame_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 to log_time when 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.
Camera streams can begin at different times. If a camera tile is blank at the very start, advance to a timestamp where that camera has published an image. Open a representative recording before starting a labeling run. Check orientation, scale, and camera projection, then scrub through time to check that the transform chain remains valid. Missing transforms can leave sensors misplaced even when their individual streams load successfully.

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/right topic 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 as camera_left/camera_right or LeftCam/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 MCAP recording showing eight camera tiles above velocity plots

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
Use the exact topics from your recording for image tiles and the numeric sub-channel paths described above for time-series tiles. 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.
Configured MCAP layout with cameras on the left and angular and linear velocity plots on the right

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:
Outputs (the timestamps and sequence number are omitted here):
Combine the 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.

Need Another Stream or Workflow?

Contact Encord support if you need another schema, codec, layout, label workflow, or help with a large recording.