The Data Layer
for Physical AI

The primitives to log, understand and improve your data loop. Built for multi-rate, multimodal recordings — from the first frame on a laptop to a fleet's worth of drives.

Robotics

DROID

A walkthrough of the DROID dataset in the viewer.

Background

DROID is a robot-manipulation dataset recorded across a wide spread of real environments, intended for training manipulation policies. Every frame pairs joint-level sensor readings from the arm with synchronized footage from three stereo cameras — one at the wrist, one on each side — alongside the action taken: the target position and velocity issued by the teleoperator.

Because each stream carries its own rate and its own clock, it is a good stress test for the time engine: the wrist camera, the side cameras and the joint telemetry all land on one scrubber without being resampled to a common rate first.

Run the code

The example ships with the SDK. It downloads a slice of the dataset on first run and opens the layout shown above.

$ dalaran examples open droid
Robotics

URDF

Loading a robot description once, then animating its joints from changing angles.

A URDF robot arm posed in the Dalaran viewer

What it shows

A URDF describes a robot once — its links, its joints, and how they connect. The pose is not part of that description; it is whatever you log per frame. Separating the two is the whole trick, and it is why the mesh only has to be sent a single time no matter how long the run lasts.

On site, that means the phone clip on the left and the viewer on the right are the same recording: the hardware moves, the joint angles stream in, and the arm in the viewer follows without anyone re-exporting geometry.

How it works

  1. Log the URDF as a static asset — geometry has no timestamp, so it stays valid across the whole recording.
  2. Parse it into a tree you can walk, to get at the joints.
  3. Each frame, compute a transform per moving joint and log that instead.
import dalaran as dl
from dalaran.urdf import UrdfTree

# Send the robot description once. Static, because the mesh is not a
# function of time -- only the pose is.
rec.log_file_from_path(urdf_path, static=True)

# Parse the same file into a tree we can walk.
urdf_tree = UrdfTree.from_file_path(urdf_path)

# Then drive it: one transform per moving joint, per frame.
for joint in urdf_tree.joints():
    if joint.joint_type == "revolute":
        # compute_transform folds the joint origin together with the current
        # angle and returns something ready to log, frame names already set.
        transform = joint.compute_transform(angle)
        rec.log("transforms", transform)

Open source SDK.
A single toolchain to log, transform, query, view and train on multi-rate, multimodal data.

A library you import and a file you can archive — not a platform you migrate to. The core is Apache-2.0, the format is self-describing, and nothing phones home.

pip install dalaran-sdk
dalaran

Visualize everything

Point clouds, video, meshes, tensors, transforms and scalars in one scene, on one clock.

Query and transform

Pull frames as dataframes, add derived columns, and filter without copying the recording.

Log, store, and convert

Write multi-rate data as column chunks in .dlr files, or convert from what you already have.

Open source stewardship

We're an active contributor to the projects we build on.

apache/arrow-rs › feat: deterministic chunk merge
apache/arrow-rs › Add RecordBatch::schema_ref
gfx-rs/wgpu › Improve display for DataType
Dalaran Hub

Infrastructure that powers your data loop

The production backend for the Dalaran data layer. Catalog, byte-range indexing, and streaming playback over recordings you already have.

Query

Query into your recordings with SQL

Run any SQL or dataframe query across your catalog, down into the columns, time ranges and values inside your recordings — not just their metadata.

Transform

Refine your data without copies

Add derived columns and evolve schemas without breaking history. You run the transforms with the SDK; Hub keeps the derived data and your raw recordings organized together.

Train

Train without an export step

Express a dataset mix as a query and stream it to your GPUs. The dataloader is column-aware and video-codec-aware, so you train directly on your recordings.

Share

Everyone works from the same data

One viewer, the same recordings, shared across the team. Explore, annotate, and trace a failure back to the data that caused it.

News

Spotlight: 3D reconstruction is a data layer problem

Reconstruction runs on multimodal, multi-rate data, and handling that data is most of the work. This is a worked example of what the Dalaran layer removes from a real project: 5,015 indoor scans converted into recordings that the viewer, the dataframe API and the PyTorch dataloader all read directly, with no export step in between.

Read the write-up

The community loves building with Dalaran

Halcyon

An open manipulation stack that ships Dalaran recordings as its bug-report format.

Brushfire

A splat trainer that streams every densification step straight into the viewer.

PyCuSLAM

Visual-inertial SLAM with live trajectory, landmarks and covariance overlays.

Project Meridian

Egocentric capture glasses publishing multi-sensor sessions as open recordings.

Built for teams shipping perception, robotics and spatial AI
Halcyon RoboticsNorthbeam AVTessellateOrbital Foundry Kestrel DynamicsVantage SimDeepwater LabsMunin AI Halcyon RoboticsNorthbeam AVTessellateOrbital Foundry Kestrel DynamicsVantage SimDeepwater LabsMunin AI
0points/sec
0on integrated gpu
0languages
0open core
Questions

Before you install

The SDK, the file format and the viewer are Apache-2.0 and free forever, commercial use included. Hub — hosted storage, sharing and team workspaces — is the paid product, and it's optional.
Not unless you upload it. The local SDK and viewer talk over localhost and have no network dependency. Telemetry is opt-in and can be disabled permanently with one command.
The store is columnar and memory-mapped, so the viewer opens multi-gigabyte files without loading them whole. Very large sessions stream from disk; on Hub they stream over the network with the same interface.
macOS (Apple silicon and Intel), Linux x86-64 and aarch64, Windows 10+, plus a WebAssembly build for any modern browser. Jetson and Raspberry Pi ship as prebuilt wheels.

Install it in the next minute

One command, no account, no config file. The viewer opens itself the first time you log something.

$ pip install dalaran-sdk