Platform / Data Collection
01 · Data Collection

Stream any robot signal with one line of Python.

A log_* call for every one of 14 first-class modalities, durable, synchronized, and resilient to crashes and flaky networks. One pip install neuracore and every joint angle, camera frame, and spoken instruction lands in the cloud as a typed, timestamped sample.

One unified data model

14 first-class modalities, one function each.

Every log call accepts an optional robot_name, instance, timestamp, and a dry_run validation flag, so heterogeneous sensors logged in one frame share an exact capture time.

Robot state

Proprioception & commands

Joint positions, velocities, torques, and target positions, plus visual-only joints for URDF rendering, excluded from training.

End-effector & pose

Poses and grippers

7-vector EE poses validated as unit quaternions, generic 6-DoF object poses, and normalized parallel-gripper open amounts vs. targets.

Vision, language & custom

Cameras, words, anything

RGB with optional intrinsics/extrinsics, metric depth, point clouds, free-text instructions, and arbitrary 1-D custom signals.

The recording loop

Connect, record, and it uploads itself.

The canonical loop is start_recording() → per-frame log_* → stop_recording(), once per demonstration. Stopping auto-uploads the episode to the cloud.

Omit robot_name and the last-connected robot is targeted. Pass dry_run=True to type-check a pipeline without emitting data.

collect_episode.py
import neuracore as nc, time
nc.login()
nc.connect_robot(robot_name="Mujoco VX300s", urdf_path=URDF_PATH)
nc.create_dataset(name="Cube Handover")

nc.start_recording()  # begin an episode
t = time.time()
nc.log_joint_positions(positions=obs.qpos, timestamp=t)
nc.log_rgb("wrist_cam", obs.rgb, timestamp=t)
nc.log_language(name="instruction",
                language="Pick up the cube", timestamp=t)
nc.log_custom_1d("force_torque", ft_reading, timestamp=t)
nc.stop_recording()  # auto-uploads to the cloud
Reliability

Built to never lose a demonstration.

A dropped network or a crashed training script never costs you data. Collection is engineered end to end, from the wire protocol to the on-disk spool.

Live monitoring + durable recording

Every log_* call fans out to two paths: real-time P2P WebRTC video and data channels for live dashboards, and durable recording via the local data daemon.

Resilient Rust data daemon

A native Rust binary buffers, encodes, and uploads with shared-memory transport, disk spooling, backpressure, offline mode, and a WAL SQLite state store that survives restarts.

Dual H.264 encoding

Each camera trace is encoded losslessly (libx264rgb, CRF 0) for training fidelity and lossy (QP 23) for fast playback, plus resumable, chunked GCS uploads that resume on failure.

Distributed & teleoperated collection

Fuse cameras on one machine with arms on another over WebRTC into one SynchronizedPoint, gated until all expected streaming nodes are connected.

Get Started

Start streaming from
your robots today.