Convert a multi-modal robotics dataset (MCAP, HDF5, LeRobot, parquet, raw video) into layered Rerun recordings (.rrd) and a catalog-ready dataset. Use whenever the user wants a dataset converted or ingested into Rerun, a conversion pipeline reviewed or extended, or a layer added to an existing conversion — even when they only say 'convert X to rrd' or 'ingest this dataset'. Routes to the rerun-* skills for Rerun mechanics.
This skill guides the conversion of a multi-modal robotics dataset into layered Rerun recordings (.rrd).
It covers the high-level workflow guidelines: surveying the source, building layers, designing the default blueprint, registering a catalog, and validating the result.
It also provides DOs and DON'Ts for each stage of the conversion process.
The skill and its references use these terms throughout:
| Term | Meaning |
|---|---|
| episode | The source's natural unit of recording. |
| recording id | The string that identifies one episode's recordings. All of the episode's layers share it. |
| layer | One .rrd file per episode. The viewer and the catalog stack an episode's layers into one recording. |
| base layer | The layer that reflects the source. It is the one record, sufficient without the source. |
| segment | One episode as the catalog sees it: its layers stacked under one recording id. |
| property | A per-episode value stored as a recording property. The catalog shows it as a column. |
| census | A count of decoded rows against the source's own counts, so a silent drop surfaces. |
| survey | The phase that measures sample diversity before any conversion code exists. |
This skill adds how a conversion is shaped, decided, and validated, and which judgment calls recur from one dataset to the next.
The rerun-* skills cover the Rerun mechanics, and this skill routes to them instead of repeating them.
Read each one at the stage that needs it:
| Skill | When to read it |
|---|---|
rerun-data-model | Before modeling any source item. It settles entity versus component, static versus temporal, and property versus layer. |
rerun-chunk-processing | Before writing any conversion code. It mandates reader + lens pipelines and carries the anti-pattern list. |
rerun-mcap / rerun-parquet / rerun-lerobot / rerun-urdf / rerun-mp4 | When the source has that format. |
rerun-blueprint | When designing the default view. |
rerun-catalog-queries | When registering or querying a catalog. |
A conversion project's conventions belong in that project's own docs. The skill only carries principles and decision points.
Every dataset is unique, which makes it hard to set universal guidelines. The principles below aim to provide a foundation that you can revisit when encountering decision challenges during dataset conversion.
The conversion process should preserve all information from the source dataset. Dropping data is a failure, and the byte-level information must survive a round-trip test and be sufficient to reconstruct the source data. After the conversion, no looking back at the original source.
The primary purpose of conversion is to use the data, not to archive it. The data should be organized so that it is easy to inspect, query, or access for further consumption. How the data is processed and organized may also evolve over time. So making the conversion code maintainable matters, too.
Without the correct tools, data may drop silently, and it may become hard to maintain. (Failure of the first two items) Also, efficiency matters at large scale. Stick to the rerun skills listed above.
Obtain any information available even before touching any data. For example:
DO NOT assume these information to be correct until you have thoroughly examined actual samples.
DO NOT assume that one sample is representative, and avoid overfitting to a few samples.
rerun-mcap / rerun-parquet / rerun-lerobot / rerun-urdf / rerun-mp4.DO NOT force unsupported data into an unrelated archetype. Preserve the original meaning and structure as much as possible. Rerun can store arbitrary Arrow-compatible data even when the Viewer has no first-class understanding of it.
Pause for user to sign-off on the conversion mapping, properties record, and layer splits before writing any conversion code.
DO NOT call
to_chunks()in conversion code. The call materialises the whole stream before the first iteration. Do not explode a struct into per-field lenses, and give everycollect()a stated reason.
DO remind the user to investigate if the viewer performance drops.
DO check the viewer performance and the correctness of labels with the user for every major blueprint update.
Write scripts or provide instructions to help the user to view, register, and query the converted data.
references/registering.md carries the view commands, the registration template, and where querying is covered.
Reflect the reader's output, and convert to a built-in Rerun archetype only when the semantics perfectly match or particular visualization is critical. Do not distort the stored schema just to make it easy to visualize, and preserve useful source semantics that may be useful later. Prefer duplicate data in a different format over dropping it if needed. Image or video data can be an exception because duplicated copies can be costly. Let the user decide when the conversion is not straightforward.
As long as your data can be serialized with Apache Arrow, Rerun can log it. Use raw blobs mainly when preserving the original bytes is important or parsing is impractical. For example, a JSON file with a simple schema can be kept as a structured component rather than a raw blob. For another example, a set of strings joined by commas can be kept as a list component rather than a single string. This allows individual elements to be queried and visualized.
In general, reshaping is fine as far as the byte-level information is preserved — a stamp becoming a timeline value, an image frame flipped upright. Keep names, units, frames, and source type names, because they are the context that makes values interpretable. Ensure round-trip conversion tests are done.
Run census undecodable channels and keep their bytes. A decoder that skips a message must not skip silently: compare decoded rows against the source's own counts, flag the episode in a property, and store the raw bytes.
Properties are first and foremost segment-level metadata, which can be quickly searched in a catalog.
Write static values that a user would filter, sort, or group as properties so they can be efficiently queried and displayed in the catalog.
Properties can be, for example, episode duration, task name, scene type, split, is_<validity>, has_<attribute>and the
census.
A value that changes within the episode cannot be a property.
Build them with Chunk.from_property; rerun-chunk-processing has the call and
the trap in the hand-built form.
Keep a property's type identical across every episode. A field that is empty in one episode and populated in another must still land the same Arrow type, or the layer stops having one schema across segments and the catalog column splits.
See Why Use Layers to get a sense first.
There is no universal rule for when to create a separate layer; make suggestions based on the guidelines above and let the user make the final decision.
3efde05
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.