#12938·rerun

Viewer catalog (default since 0.38) drops all but one of several .rrd files sharing a recording ID

Author: qiayuanlCreated Sep 18, 2026Updated Sep 18, 2026
Labels🪳 bug📺 re_viewer

Describe the bug

Since 0.38 local .rrd files load through the Viewer catalog by default. On that path, several files that share one recording ID no longer merge into one logical recording: each file is registered as the default layer of the same segment with an overwrite policy, so only one file survives and the others are silently dropped.

Up to 0.37.2 (and in 0.38.1 with Settings → Viewer catalog → Load files via Viewer catalog turned off) the same command merges the files, as documented.

To Reproduce

Write two recordings with the same recording ID, each holding its own entities:

python
from pathlib import Path
import rerun as rr

out = Path("two")
out.mkdir(exist_ok=True)
for name in ("one", "two"):
    with rr.RecordingStream("demo", recording_id="same") as stream:
        stream.set_sinks(rr.FileSink(out / f"{name}.rrd"))
        stream.log(f"points/{name}", rr.Points3D([[0, 0, 0], [1, 1, 1]]), static=True)
        stream.set_time("t", sequence=0)
        stream.log(f"scalar/{name}", rr.Scalars([1.0]))

Open both:

rerun two/one.rrd two/two.rrd

The viewer opens one recording same, backed by the catalog segment, which holds only points/one + scalar/one or only points/two + scalar/two, depending on which file finished registering last (both outcomes observed across runs). Querying the viewer's own catalog shows it:

python
from rerun.catalog import CatalogClient
ds = CatalogClient("rerun+http://127.0.0.1:9876").get_dataset("demo")
print(ds.segment_table().to_arrow_table().column("rerun_layer_names").to_pylist())  # [['base']]
print(sorted({c.entity_path for c in ds.segment_store("same").stream().to_chunks()}))
# ['/__properties', '/points/two', '/scalar/two']

Where it happens: crates/top/re_viewer/src/app/add_data_source.rs, register_rrd_file_url calls register_with_dataset(dataset_id, vec![data_source], IfDuplicateBehavior::Overwrite) with no layer name for every file.

Expected behavior

The docs (Concepts → Recordings, "logical vs physical recordings") state that physical recordings sharing a recording ID form one logical recording when loaded into the Viewer, and the 0.38 release notes list only blueprint limitations for the new default. The robot_data_preprocessing example README also relies on it: "Since we use consistent recording IDs, the two output RRD layers show up as a single recording."

Either the catalog loader should merge same-ID files (for example by registering each file as a distinct layer, or by appending instead of overwriting), or the change should be documented as a breaking one with a CLI way to name layers. Note that --asset turns the setting on, so opting out is not available to anyone who wants to use assets.

Rerun version

0.38.1 (Python SDK and viewer from the rerun-sdk wheel)

Desktop

macOS 15 (arm64), native viewer, also reproduced with --headless.