Metadata-Version: 2.4
Name: dexdata
Version: 0.1.0
Summary: Data recording and replay utilities for Dexmate robots (MCAP + video)
Author-email: Dexmate <contact@dexmate.ai>
License: AGPL-3.0
Keywords: robot,mcap,dataset,teleoperation,dexmate
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: mcap>=1.2.0
Requires-Dist: protobuf>=5.0.0
Requires-Dist: foxglove-schemas-protobuf>=0.3.0
Requires-Dist: numpy>=2.0.0
Requires-Dist: opencv-python>=4.5.0
Requires-Dist: Pillow>=10.0.0
Requires-Dist: av>=12.0.0
Requires-Dist: loguru>=0.7.0
Requires-Dist: tenacity>=9.1.2
Requires-Dist: tyro>=0.9.0
Requires-Dist: uuid6>=2024.7.10
Requires-Dist: rerun-sdk>=0.20.0
Requires-Dist: tqdm>=4.65.0
Requires-Dist: matplotlib>=3.7.0
Requires-Dist: PyYAML>=6.0
Provides-Extra: convert
Requires-Dist: torch==2.7.1; extra == "convert"
Requires-Dist: pandas>=2.0.0; extra == "convert"
Requires-Dist: pyarrow>=14.0.0; extra == "convert"
Requires-Dist: jsonlines>=4.0.0; extra == "convert"
Dynamic: license-file

# dexdata

Data recording and replay utilities for Dexmate robots. Reads and writes MCAP episode data (robot state/action, RGB cameras, depth) with Protobuf serialization, and encodes cameras to video.

## Install

```bash
pip install -e .            # core: MCAP read/write
pip install -e ".[convert]"   # adds torch + torchcodec for video_writer
```

Requires Python 3.11.

## Layout

- `dexdata.mcap_utils` — `TeleopMcapWriter`, `TeleopMcapReader`, `Episode`, `EpisodeMetadata`. Self-contained.
- `dexdata.video_writer` — torch + torchcodec-backed parallel/serial video encoder (opt-in via `[video]` extra).

## Quick read

```python
from pathlib import Path
from dexdata.mcap_utils import TeleopMcapReader

reader = TeleopMcapReader(Path("/path/to/episode_dir"))
episode = reader.load_episode()
data = episode.to_numpy_dict()   # flat {key: np.ndarray} for training
fps = reader.metadata.record_rate_hz
```

An episode directory contains `state_action.mcap`, zero or more `camera_*.mcap` / `depth_*.mcap`, and `info.json`.

## Scripts

- `scripts/example_mcap_read.py <episode_dir>` — dump an episode to its numpy-dict form and print key shapes/dtypes.
- `scripts/mcap_to_video.py --episode_path <dir>` — render a 2×2 camera grid to `concatenated.mp4`. FPS defaults to `robot.record_rate_hz` from `info.json`.
- `scripts/mcap_viz.py` — Rerun-based episode visualization helper (`RerunViz`).

## Protobuf schemas

Schemas live in `src/dexdata/mcap_utils/proto/`. Compiled `*_pb2.py` modules are checked in; regenerate with:

```bash
cd src/dexdata/mcap_utils/proto && ./compile_proto.sh
```
