openbot-data 0.0.1.post1__tar.gz → 0.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openbot_data-0.0.1.post1 → openbot_data-0.0.2}/.gitignore +5 -0
- openbot_data-0.0.2/CHANGELOG.md +38 -0
- openbot_data-0.0.2/PKG-INFO +245 -0
- openbot_data-0.0.2/README.md +206 -0
- openbot_data-0.0.2/VERSION +1 -0
- openbot_data-0.0.2/docs/README.md +25 -0
- openbot_data-0.0.2/docs/api-reference.md +203 -0
- openbot_data-0.0.2/docs/audit-findings.md +32 -0
- openbot_data-0.0.2/docs/examples/audit.json +11 -0
- openbot_data-0.0.2/docs/examples/manifest.json +59 -0
- openbot_data-0.0.2/docs/getting-started.md +161 -0
- openbot_data-0.0.2/docs/version-0.0.2.md +166 -0
- openbot_data-0.0.2/examples/local_preflight.py +98 -0
- openbot_data-0.0.2/openbot_data/__init__.py +51 -0
- openbot_data-0.0.2/openbot_data/catalog.py +92 -0
- openbot_data-0.0.2/openbot_data/cli.py +185 -0
- openbot_data-0.0.2/openbot_data/errors.py +13 -0
- openbot_data-0.0.2/openbot_data/extract.py +505 -0
- openbot_data-0.0.2/openbot_data/models.py +108 -0
- openbot_data-0.0.2/openbot_data/preflight.py +859 -0
- openbot_data-0.0.2/openbot_data/py.typed +1 -0
- openbot_data-0.0.2/openbot_data/schema.py +20 -0
- openbot_data-0.0.2/openbot_data/schemas/__init__.py +1 -0
- openbot_data-0.0.2/openbot_data/schemas/dataset-audit-v1.schema.json +37 -0
- openbot_data-0.0.2/openbot_data/schemas/dataset-manifest-v1.schema.json +149 -0
- openbot_data-0.0.2/openbot_data/serialization.py +18 -0
- {openbot_data-0.0.1.post1 → openbot_data-0.0.2}/openbot_data/video.py +26 -13
- {openbot_data-0.0.1.post1 → openbot_data-0.0.2}/pyproject.toml +39 -6
- openbot_data-0.0.2/scripts/check_version.py +61 -0
- openbot_data-0.0.2/scripts/test_matrix.sh +7 -0
- openbot_data-0.0.2/tests/fixtures/lerobot-v2/meta/episodes.jsonl +1 -0
- openbot_data-0.0.2/tests/fixtures/lerobot-v2/meta/info.json +9 -0
- openbot_data-0.0.2/tests/fixtures/lerobot-v3/meta/episodes/chunk-000/file-000.jsonl +1 -0
- openbot_data-0.0.2/tests/fixtures/lerobot-v3/meta/info.json +10 -0
- openbot_data-0.0.2/tests/test_acceptance_v002.py +518 -0
- openbot_data-0.0.2/tests/test_openbot_data.py +263 -0
- openbot_data-0.0.2/tests/test_preflight.py +180 -0
- openbot_data-0.0.1.post1/PKG-INFO +0 -312
- openbot_data-0.0.1.post1/README.md +0 -280
- openbot_data-0.0.1.post1/openbot_data/__init__.py +0 -17
- openbot_data-0.0.1.post1/openbot_data/cli.py +0 -85
- openbot_data-0.0.1.post1/openbot_data/extract.py +0 -214
- openbot_data-0.0.1.post1/tests/test_openbot_data.py +0 -102
- {openbot_data-0.0.1.post1 → openbot_data-0.0.2}/LICENSE +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.0.2
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Single-source package versioning with CI and release-tag validation.
|
|
9
|
+
- Versioned, reproducible `openbot.dataset_manifest.v1` output with relative paths,
|
|
10
|
+
dataset fingerprints, and optional SHA-256 checksums.
|
|
11
|
+
- Read-only local LeRobot v2.1/v3 discovery for episodes and video streams.
|
|
12
|
+
- Deterministic dataset audit findings, duplicate detection, and `audit` CLI command.
|
|
13
|
+
- Runnable local preflight demo, developer documentation, API/CLI reference, and
|
|
14
|
+
shipped LeRobot acceptance fixtures.
|
|
15
|
+
- Acceptance scenarios for every documented finding code and a local Python
|
|
16
|
+
3.9–3.12 test-matrix command.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- `inspect` now supports `--format auto|video|lerobot` and optional checksums.
|
|
20
|
+
- Unreadable media now continues through the specific FPS, duration, dimensions,
|
|
21
|
+
and preview-decode audit rules instead of stopping at the generic finding.
|
|
22
|
+
|
|
23
|
+
## 0.0.1.post2
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- `export_catalog()` Python API and `openbot-data catalog` CLI command for JSON/CSV catalog export.
|
|
27
|
+
- SEO-optimized README and `pyproject.toml` keywords (`robot data`, `ego data`, `egocentric data`, `embodied AI`, etc.).
|
|
28
|
+
- GitHub Actions CI workflow for Python 3.9–3.12.
|
|
29
|
+
- This changelog.
|
|
30
|
+
|
|
31
|
+
## 0.0.1.post1
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
- Initial preview release.
|
|
35
|
+
- Video directory scanning and metadata extraction.
|
|
36
|
+
- Preview frame extraction.
|
|
37
|
+
- Manifest and report generation.
|
|
38
|
+
- `openbot-data` CLI with `scan`, `inspect`, and `version` commands.
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: openbot-data
|
|
3
|
+
Version: 0.0.2
|
|
4
|
+
Summary: Inspect robot video datasets and generate manifests, previews, and catalogs.
|
|
5
|
+
Project-URL: Homepage, https://openbot.ai/data
|
|
6
|
+
Project-URL: Documentation, https://openbot.ai/api/docs#data-recipe
|
|
7
|
+
Project-URL: Repository, https://github.com/openbotai/openbot-data
|
|
8
|
+
Project-URL: Issues, https://github.com/openbotai/openbot-data/issues
|
|
9
|
+
Author-email: OpenBot <hello@openbot.ai>
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: data-cleaning,dataset,dataset-catalog,ego data,egocentric data,embodied AI,embodied-ai,failure-analysis,robot data,robot dataset,robot learning,robot-video,robotics,teleoperation data,wrist-camera
|
|
13
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Image Processing
|
|
24
|
+
Requires-Python: >=3.9
|
|
25
|
+
Requires-Dist: numpy>=1.24.0
|
|
26
|
+
Requires-Dist: opencv-python>=4.8.0
|
|
27
|
+
Requires-Dist: tqdm>=4.65.0
|
|
28
|
+
Requires-Dist: typer>=0.9.0
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build>=1.0.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: jsonschema>=4.18.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: mypy<1.19,>=1.11.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: ruff>=0.6.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: twine>=6.2.0; extra == 'dev'
|
|
36
|
+
Provides-Extra: lerobot
|
|
37
|
+
Requires-Dist: pyarrow>=17.0.0; extra == 'lerobot'
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
# OpenBot Data
|
|
41
|
+
|
|
42
|
+
> Inspect, catalog, and prepare robot video data for embodied AI and robot learning.
|
|
43
|
+
|
|
44
|
+
[Library documentation](docs/README.md) · [API reference](docs/api-reference.md) ·
|
|
45
|
+
[Data product](https://openbot.ai/data) · [Source repository](https://github.com/openbotai/openbot-data)
|
|
46
|
+
|
|
47
|
+
OpenBot Data is an early Python toolkit for working with **robot data** — especially
|
|
48
|
+
**egocentric video** and **teleoperation data** collected from wrist cameras,
|
|
49
|
+
head-mounted cameras, and robot demonstrators.
|
|
50
|
+
|
|
51
|
+
Use it to scan video directories, extract preview frames, build dataset manifests,
|
|
52
|
+
and export a searchable **robot dataset catalog** (JSON/CSV) before training or
|
|
53
|
+
evaluation.
|
|
54
|
+
|
|
55
|
+
## Install
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install openbot-data
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Requires Python 3.9+.
|
|
62
|
+
|
|
63
|
+
## Runnable demo
|
|
64
|
+
|
|
65
|
+
Clone the repository, install the package, and run the complete local preflight
|
|
66
|
+
against a video directory or local LeRobot repository:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install -e .
|
|
70
|
+
python examples/local_preflight.py ./robot_videos --out ./openbot-preflight --integrity sample
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The demo uses the public Python API and writes
|
|
74
|
+
`inspection/metadata/manifest.json`, `inspection/metadata/report.json`, and
|
|
75
|
+
`audit.json`. Add `--format lerobot` for a local LeRobot v2.1/v3 repository,
|
|
76
|
+
`--integrity full` to decode every frame, or `--no-checksum` to skip SHA-256
|
|
77
|
+
duplicate detection. The demo discovers and hashes the dataset once, then shares
|
|
78
|
+
one immutable `DatasetSnapshot` across both renderers.
|
|
79
|
+
|
|
80
|
+
## What it does
|
|
81
|
+
|
|
82
|
+
- **Scan robot video directories** — recursively find `.mp4`, `.mov`, `.avi`, `.mkv`, `.webm` files.
|
|
83
|
+
- **Read video metadata** — duration, fps, resolution, frame count, file size, validity.
|
|
84
|
+
- **Extract preview frames** — uniformly sample frames for quick human inspection.
|
|
85
|
+
- **Generate manifests** — `manifest.json` with per-video metadata and preview paths.
|
|
86
|
+
- **Generate quality reports** — `report.json` with aggregate duration, size, and resolutions.
|
|
87
|
+
- **Export dataset catalogs** — JSON or CSV for dataset registries, documentation, and SEO-friendly catalog pages.
|
|
88
|
+
- **Discover local LeRobot data** — read-only episode and video-stream discovery for v2.1/v3 layouts.
|
|
89
|
+
- **Audit before training or upload** — stable error/warning codes without an uncalibrated quality score.
|
|
90
|
+
|
|
91
|
+
## CLI
|
|
92
|
+
|
|
93
|
+
### Scan videos
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
openbot-data scan ./robot_videos
|
|
97
|
+
openbot-data scan ./robot_videos --output scan.json
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Inspect a dataset
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
openbot-data inspect ./robot_videos --out ./openbot_dataset
|
|
104
|
+
openbot-data inspect ./lerobot_dataset --format lerobot --out ./openbot_dataset
|
|
105
|
+
openbot-data audit ./robot_videos --out ./audit.json --fail-on error
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Output structure:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
openbot_dataset/
|
|
112
|
+
previews/
|
|
113
|
+
metadata/
|
|
114
|
+
manifest.json
|
|
115
|
+
report.json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Export a robot dataset catalog
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# JSON catalog for dataset registries and documentation
|
|
122
|
+
openbot-data catalog ./robot_videos --out ./catalog.json --format json
|
|
123
|
+
|
|
124
|
+
# CSV catalog for spreadsheets or Hugging Face dataset cards
|
|
125
|
+
openbot-data catalog ./robot_videos --out ./catalog.csv --format csv
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The catalog is designed to be checked into GitHub or linked from a dataset registry
|
|
129
|
+
page such as [OpenBot.ai Datasets](https://openbot.ai/datasets).
|
|
130
|
+
|
|
131
|
+
## Python API
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
from openbot_data import (
|
|
135
|
+
audit_dataset,
|
|
136
|
+
export_catalog,
|
|
137
|
+
inspect_dataset,
|
|
138
|
+
prepare_dataset,
|
|
139
|
+
read_lerobot,
|
|
140
|
+
scan_directory,
|
|
141
|
+
schema_path,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Scan a directory
|
|
145
|
+
scan = scan_directory("./robot_videos")
|
|
146
|
+
print(scan["valid_videos"])
|
|
147
|
+
|
|
148
|
+
# Inspect and extract previews
|
|
149
|
+
result = inspect_dataset(
|
|
150
|
+
video_dir="./robot_videos",
|
|
151
|
+
output_dir="./openbot_dataset",
|
|
152
|
+
)
|
|
153
|
+
print(result["manifest_path"])
|
|
154
|
+
print(result["report_path"])
|
|
155
|
+
|
|
156
|
+
# Export a catalog for documentation / SEO
|
|
157
|
+
export_catalog(
|
|
158
|
+
video_dir="./robot_videos",
|
|
159
|
+
output_path="./catalog.json",
|
|
160
|
+
fmt="json",
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# Discover/hash once and reuse the immutable snapshot across renderers
|
|
164
|
+
snapshot = prepare_dataset("./robot_videos", checksum="sha256", integrity="sample")
|
|
165
|
+
inspection = inspect_dataset("./robot_videos", "./inspection", snapshot=snapshot)
|
|
166
|
+
audit = audit_dataset("./robot_videos", snapshot=snapshot)
|
|
167
|
+
|
|
168
|
+
# Discover episodes and camera streams in a local LeRobot repository
|
|
169
|
+
lerobot = read_lerobot("./lerobot_dataset")
|
|
170
|
+
|
|
171
|
+
# Packaged JSON Schemas are stable independently of the package version
|
|
172
|
+
with schema_path("manifest") as manifest_schema:
|
|
173
|
+
print(manifest_schema)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Use cases
|
|
177
|
+
|
|
178
|
+
- Prepare **teleoperation data** collected from ALOHA, Mobile ALOHA, VR, or SpaceMouse setups.
|
|
179
|
+
- Inspect **egocentric video datasets** before converting to LeRobot, RLDS, or HDF5.
|
|
180
|
+
- Build a **robot dataset catalog** that links back to your project website or Hugging Face collection.
|
|
181
|
+
- Validate video integrity before running robot policy training or VLA pre-training.
|
|
182
|
+
|
|
183
|
+
## Development
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
pip install -e ".[dev]"
|
|
187
|
+
python scripts/check_version.py
|
|
188
|
+
pytest
|
|
189
|
+
scripts/test_matrix.sh
|
|
190
|
+
python -m build
|
|
191
|
+
python -m twine check dist/*
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The local matrix script requires [`uv`](https://docs.astral.sh/uv/) and tests
|
|
195
|
+
Python 3.9–3.12 without requiring a repository CI workflow.
|
|
196
|
+
|
|
197
|
+
`VERSION` is the package version source of truth. To release, update `VERSION`
|
|
198
|
+
and `CHANGELOG.md`, verify locally, then publish a GitHub Release whose tag is
|
|
199
|
+
`v<version>`. The release workflow validates the tag before publishing to PyPI.
|
|
200
|
+
|
|
201
|
+
## Status
|
|
202
|
+
|
|
203
|
+
OpenBot Data is an early local Python toolkit. Hosted upload, annotation, review,
|
|
204
|
+
export, billing, Workers, and Container infrastructure belong to the main
|
|
205
|
+
[OpenBot](https://github.com/openbotai/OpenBot) product repository. Use the
|
|
206
|
+
separate [`openbot-sdk`](https://github.com/openbotai/openbot-sdk) package to call
|
|
207
|
+
the hosted API.
|
|
208
|
+
|
|
209
|
+
## Roadmap
|
|
210
|
+
|
|
211
|
+
- [x] Video scanning and metadata extraction
|
|
212
|
+
- [x] Preview frame extraction
|
|
213
|
+
- [x] Manifest and report generation
|
|
214
|
+
- [x] JSON/CSV catalog export
|
|
215
|
+
- [x] [`0.0.2`: local dataset preflight](docs/version-0.0.2.md), including a
|
|
216
|
+
versioned manifest, deterministic audit findings, and local LeRobot discovery
|
|
217
|
+
- [ ] Later: RLDS / HDF5 ingestion helpers
|
|
218
|
+
- [ ] Later: calibrated quality evaluation after a labeled validation set exists
|
|
219
|
+
|
|
220
|
+
Audit codes are documented in [`docs/audit-findings.md`](docs/audit-findings.md).
|
|
221
|
+
Canonical manifests use explicit `path_base`/`path_bases` fields; they never
|
|
222
|
+
serialize private source paths. Symlinks are skipped by default, and even when
|
|
223
|
+
`follow_symlinks=True` a target outside the dataset root is rejected.
|
|
224
|
+
|
|
225
|
+
## License
|
|
226
|
+
|
|
227
|
+
MIT
|
|
228
|
+
|
|
229
|
+
## Citation
|
|
230
|
+
|
|
231
|
+
If you use OpenBot Data in research or production, cite the project repository:
|
|
232
|
+
|
|
233
|
+
```bibtex
|
|
234
|
+
@software{openbot_data,
|
|
235
|
+
title = {OpenBot Data},
|
|
236
|
+
author = {OpenBot},
|
|
237
|
+
year = {2026},
|
|
238
|
+
url = {https://github.com/openbotai/openbot-data}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Related
|
|
243
|
+
|
|
244
|
+
- [OpenBot.ai](https://openbot.ai) — Robot dataset catalog and policy evaluation platform.
|
|
245
|
+
- [OpenBot.ai Datasets](https://openbot.ai/datasets) — Searchable index of egocentric and robot datasets.
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# OpenBot Data
|
|
2
|
+
|
|
3
|
+
> Inspect, catalog, and prepare robot video data for embodied AI and robot learning.
|
|
4
|
+
|
|
5
|
+
[Library documentation](docs/README.md) · [API reference](docs/api-reference.md) ·
|
|
6
|
+
[Data product](https://openbot.ai/data) · [Source repository](https://github.com/openbotai/openbot-data)
|
|
7
|
+
|
|
8
|
+
OpenBot Data is an early Python toolkit for working with **robot data** — especially
|
|
9
|
+
**egocentric video** and **teleoperation data** collected from wrist cameras,
|
|
10
|
+
head-mounted cameras, and robot demonstrators.
|
|
11
|
+
|
|
12
|
+
Use it to scan video directories, extract preview frames, build dataset manifests,
|
|
13
|
+
and export a searchable **robot dataset catalog** (JSON/CSV) before training or
|
|
14
|
+
evaluation.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install openbot-data
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Requires Python 3.9+.
|
|
23
|
+
|
|
24
|
+
## Runnable demo
|
|
25
|
+
|
|
26
|
+
Clone the repository, install the package, and run the complete local preflight
|
|
27
|
+
against a video directory or local LeRobot repository:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install -e .
|
|
31
|
+
python examples/local_preflight.py ./robot_videos --out ./openbot-preflight --integrity sample
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The demo uses the public Python API and writes
|
|
35
|
+
`inspection/metadata/manifest.json`, `inspection/metadata/report.json`, and
|
|
36
|
+
`audit.json`. Add `--format lerobot` for a local LeRobot v2.1/v3 repository,
|
|
37
|
+
`--integrity full` to decode every frame, or `--no-checksum` to skip SHA-256
|
|
38
|
+
duplicate detection. The demo discovers and hashes the dataset once, then shares
|
|
39
|
+
one immutable `DatasetSnapshot` across both renderers.
|
|
40
|
+
|
|
41
|
+
## What it does
|
|
42
|
+
|
|
43
|
+
- **Scan robot video directories** — recursively find `.mp4`, `.mov`, `.avi`, `.mkv`, `.webm` files.
|
|
44
|
+
- **Read video metadata** — duration, fps, resolution, frame count, file size, validity.
|
|
45
|
+
- **Extract preview frames** — uniformly sample frames for quick human inspection.
|
|
46
|
+
- **Generate manifests** — `manifest.json` with per-video metadata and preview paths.
|
|
47
|
+
- **Generate quality reports** — `report.json` with aggregate duration, size, and resolutions.
|
|
48
|
+
- **Export dataset catalogs** — JSON or CSV for dataset registries, documentation, and SEO-friendly catalog pages.
|
|
49
|
+
- **Discover local LeRobot data** — read-only episode and video-stream discovery for v2.1/v3 layouts.
|
|
50
|
+
- **Audit before training or upload** — stable error/warning codes without an uncalibrated quality score.
|
|
51
|
+
|
|
52
|
+
## CLI
|
|
53
|
+
|
|
54
|
+
### Scan videos
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
openbot-data scan ./robot_videos
|
|
58
|
+
openbot-data scan ./robot_videos --output scan.json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Inspect a dataset
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
openbot-data inspect ./robot_videos --out ./openbot_dataset
|
|
65
|
+
openbot-data inspect ./lerobot_dataset --format lerobot --out ./openbot_dataset
|
|
66
|
+
openbot-data audit ./robot_videos --out ./audit.json --fail-on error
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Output structure:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
openbot_dataset/
|
|
73
|
+
previews/
|
|
74
|
+
metadata/
|
|
75
|
+
manifest.json
|
|
76
|
+
report.json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Export a robot dataset catalog
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# JSON catalog for dataset registries and documentation
|
|
83
|
+
openbot-data catalog ./robot_videos --out ./catalog.json --format json
|
|
84
|
+
|
|
85
|
+
# CSV catalog for spreadsheets or Hugging Face dataset cards
|
|
86
|
+
openbot-data catalog ./robot_videos --out ./catalog.csv --format csv
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The catalog is designed to be checked into GitHub or linked from a dataset registry
|
|
90
|
+
page such as [OpenBot.ai Datasets](https://openbot.ai/datasets).
|
|
91
|
+
|
|
92
|
+
## Python API
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from openbot_data import (
|
|
96
|
+
audit_dataset,
|
|
97
|
+
export_catalog,
|
|
98
|
+
inspect_dataset,
|
|
99
|
+
prepare_dataset,
|
|
100
|
+
read_lerobot,
|
|
101
|
+
scan_directory,
|
|
102
|
+
schema_path,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Scan a directory
|
|
106
|
+
scan = scan_directory("./robot_videos")
|
|
107
|
+
print(scan["valid_videos"])
|
|
108
|
+
|
|
109
|
+
# Inspect and extract previews
|
|
110
|
+
result = inspect_dataset(
|
|
111
|
+
video_dir="./robot_videos",
|
|
112
|
+
output_dir="./openbot_dataset",
|
|
113
|
+
)
|
|
114
|
+
print(result["manifest_path"])
|
|
115
|
+
print(result["report_path"])
|
|
116
|
+
|
|
117
|
+
# Export a catalog for documentation / SEO
|
|
118
|
+
export_catalog(
|
|
119
|
+
video_dir="./robot_videos",
|
|
120
|
+
output_path="./catalog.json",
|
|
121
|
+
fmt="json",
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Discover/hash once and reuse the immutable snapshot across renderers
|
|
125
|
+
snapshot = prepare_dataset("./robot_videos", checksum="sha256", integrity="sample")
|
|
126
|
+
inspection = inspect_dataset("./robot_videos", "./inspection", snapshot=snapshot)
|
|
127
|
+
audit = audit_dataset("./robot_videos", snapshot=snapshot)
|
|
128
|
+
|
|
129
|
+
# Discover episodes and camera streams in a local LeRobot repository
|
|
130
|
+
lerobot = read_lerobot("./lerobot_dataset")
|
|
131
|
+
|
|
132
|
+
# Packaged JSON Schemas are stable independently of the package version
|
|
133
|
+
with schema_path("manifest") as manifest_schema:
|
|
134
|
+
print(manifest_schema)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Use cases
|
|
138
|
+
|
|
139
|
+
- Prepare **teleoperation data** collected from ALOHA, Mobile ALOHA, VR, or SpaceMouse setups.
|
|
140
|
+
- Inspect **egocentric video datasets** before converting to LeRobot, RLDS, or HDF5.
|
|
141
|
+
- Build a **robot dataset catalog** that links back to your project website or Hugging Face collection.
|
|
142
|
+
- Validate video integrity before running robot policy training or VLA pre-training.
|
|
143
|
+
|
|
144
|
+
## Development
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
pip install -e ".[dev]"
|
|
148
|
+
python scripts/check_version.py
|
|
149
|
+
pytest
|
|
150
|
+
scripts/test_matrix.sh
|
|
151
|
+
python -m build
|
|
152
|
+
python -m twine check dist/*
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The local matrix script requires [`uv`](https://docs.astral.sh/uv/) and tests
|
|
156
|
+
Python 3.9–3.12 without requiring a repository CI workflow.
|
|
157
|
+
|
|
158
|
+
`VERSION` is the package version source of truth. To release, update `VERSION`
|
|
159
|
+
and `CHANGELOG.md`, verify locally, then publish a GitHub Release whose tag is
|
|
160
|
+
`v<version>`. The release workflow validates the tag before publishing to PyPI.
|
|
161
|
+
|
|
162
|
+
## Status
|
|
163
|
+
|
|
164
|
+
OpenBot Data is an early local Python toolkit. Hosted upload, annotation, review,
|
|
165
|
+
export, billing, Workers, and Container infrastructure belong to the main
|
|
166
|
+
[OpenBot](https://github.com/openbotai/OpenBot) product repository. Use the
|
|
167
|
+
separate [`openbot-sdk`](https://github.com/openbotai/openbot-sdk) package to call
|
|
168
|
+
the hosted API.
|
|
169
|
+
|
|
170
|
+
## Roadmap
|
|
171
|
+
|
|
172
|
+
- [x] Video scanning and metadata extraction
|
|
173
|
+
- [x] Preview frame extraction
|
|
174
|
+
- [x] Manifest and report generation
|
|
175
|
+
- [x] JSON/CSV catalog export
|
|
176
|
+
- [x] [`0.0.2`: local dataset preflight](docs/version-0.0.2.md), including a
|
|
177
|
+
versioned manifest, deterministic audit findings, and local LeRobot discovery
|
|
178
|
+
- [ ] Later: RLDS / HDF5 ingestion helpers
|
|
179
|
+
- [ ] Later: calibrated quality evaluation after a labeled validation set exists
|
|
180
|
+
|
|
181
|
+
Audit codes are documented in [`docs/audit-findings.md`](docs/audit-findings.md).
|
|
182
|
+
Canonical manifests use explicit `path_base`/`path_bases` fields; they never
|
|
183
|
+
serialize private source paths. Symlinks are skipped by default, and even when
|
|
184
|
+
`follow_symlinks=True` a target outside the dataset root is rejected.
|
|
185
|
+
|
|
186
|
+
## License
|
|
187
|
+
|
|
188
|
+
MIT
|
|
189
|
+
|
|
190
|
+
## Citation
|
|
191
|
+
|
|
192
|
+
If you use OpenBot Data in research or production, cite the project repository:
|
|
193
|
+
|
|
194
|
+
```bibtex
|
|
195
|
+
@software{openbot_data,
|
|
196
|
+
title = {OpenBot Data},
|
|
197
|
+
author = {OpenBot},
|
|
198
|
+
year = {2026},
|
|
199
|
+
url = {https://github.com/openbotai/openbot-data}
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Related
|
|
204
|
+
|
|
205
|
+
- [OpenBot.ai](https://openbot.ai) — Robot dataset catalog and policy evaluation platform.
|
|
206
|
+
- [OpenBot.ai Datasets](https://openbot.ai/datasets) — Searchable index of egocentric and robot datasets.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0.2
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# OpenBot Data documentation
|
|
2
|
+
|
|
3
|
+
OpenBot Data is a local, open-source Python library. It inspects robot-video
|
|
4
|
+
directories and local LeRobot v2.1/v3 repositories before training or upload. It
|
|
5
|
+
does not call the Hosted OpenBot API.
|
|
6
|
+
|
|
7
|
+
## Start here
|
|
8
|
+
|
|
9
|
+
- [Getting started](getting-started.md): installation, CLI, Python workflow, and
|
|
10
|
+
the runnable demo.
|
|
11
|
+
- [API reference](api-reference.md): public Python functions, CLI commands,
|
|
12
|
+
parameters, return values, and failure behavior.
|
|
13
|
+
- [Audit finding codes](audit-findings.md): stable machine-readable validation
|
|
14
|
+
codes and severities.
|
|
15
|
+
- [0.0.2 release contract](version-0.0.2.md): scope and acceptance criteria.
|
|
16
|
+
- [Canonical manifest](examples/manifest.json) and
|
|
17
|
+
[canonical audit](examples/audit.json): complete JSON examples without local
|
|
18
|
+
machine paths.
|
|
19
|
+
|
|
20
|
+
## Capability boundary
|
|
21
|
+
|
|
22
|
+
This repository owns local discovery, media inspection, preview generation,
|
|
23
|
+
deterministic manifests, audits, and catalog export. Uploads, API keys,
|
|
24
|
+
asynchronous processing, review, hosted artifacts, retention, and billing belong
|
|
25
|
+
to the main OpenBot service and are called through `openbot-sdk`.
|