Viewer catalog (default since 0.38) drops all but one of several .rrd files sharing a recording ID
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:
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.rrdThe 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:
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.
Source: rerun-io/rerun