Nuuduu
Python SDK and CLI for Nuuduu Atlas — search, request, and sync robotics training datasets (LeRobot, MCAP, HEVC) to your local machine for PyTorch / LeRobot workflows.
Installation
# Library only
pip install nuuduu
# Library + CLI command
pip install nuuduu[cli]
Development install:
git clone https://github.com/nuuduu/nuuduu.git
cd nuuduu
uv sync --all-extras
Quick start (CLI)
# Authenticate (saves token to ~/.config/nuuduu/config.toml, mode 0600)
nuuduu auth login
# Search episodes
nuuduu episodes search --text "pick up cup"
# Request a LeRobot bundle
nuuduu episodes download --format lerobot --uuids "<uuid-1>,<uuid-2>"
# Sync ready bundles to your local dataset directory
nuuduu sync
# Load in LeRobot (after sync)
python -c "
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset('local', root='~/.cache/huggingface/lerobot/nuuduu-atlas/<download-uuid>')
print(len(dataset))
"
Quick start (library)
from nuuduu import NuuduuAtlas
atlas = NuuduuAtlas.from_config()
episodes = atlas.search_episodes(text="fold laundry", limit=10)
job = atlas.request_download(
format="lerobot",
uuids=[ep.uuid for ep in episodes if ep.uuid],
)
result = atlas.sync(format="lerobot")
for bundle in result.synced:
print(bundle.path)
Authentication
Credentials are stored at ~/.config/nuuduu/config.toml with 0600 permissions. The CLI refuses to read config files that are group- or world-readable.
| Method | Usage |
|---|---|
| Config file | api_token = "..." in ~/.config/nuuduu/config.toml |
| Environment | export NUUDUU_API_TOKEN="..." |
| Programmatic | NuuduuAtlas(token="...") |
nuuduu auth login # email + password → saves token
nuuduu auth token set TOKEN # set token manually
nuuduu auth status # show masked token status
Tokens expire after 24 hours in production. On HTTP 401, run nuuduu auth login again.
Dataset directory
Resolved automatically via priority chain:
--dataset-dirCLI flagNUUDUU_DATASET_DIRenvironment variabledataset_dirin config fileHF_LEROBOT_HOME/nuuduu-atlas(LeRobot ecosystem default)- Project
.env, training configs, or./datasets/nuuduu-atlas - Fallback:
~/.cache/huggingface/lerobot/nuuduu-atlas
nuuduu config show # shows resolved path and source
Local layout:
{dataset_dir}/
.nuuduu/manifest.json
lerobot/{download_uuid}/ # LeRobot v2.1 dataset
mcap/{download_uuid}/ # per-episode .mcap files
hevc/{download_uuid}/ # per-episode .mp4 files
CLI reference
nuuduu --help
nuuduu --version
nuuduu auth login
nuuduu auth token set TOKEN
nuuduu auth status
nuuduu config show
nuuduu config set KEY VALUE
nuuduu sync [--dataset-dir PATH] [--format lerobot|mcap|hevc|all] [--dry-run] [--verify]
nuuduu downloads list
nuuduu downloads status [ID]
nuuduu downloads cancel ID
nuuduu episodes search [--text QUERY] [--country CODE] [--assignment UUID] [--limit N]
nuuduu episodes latest [--limit N]
nuuduu episodes download --format FORMAT --uuids UUID[,UUID...] [--wait]
nuuduu requests list
nuuduu requests create --task TEXT --episodes N
Add --json to any command for machine-readable output.
Download formats
| Format | Contents | Best for |
|---|---|---|
lerobot |
LeRobot v2.1 dataset (meta/, data/, videos/) | PyTorch / LeRobot training |
mcap |
Per-episode MCAP files | ROS 2 / MCAP tooling |
hevc |
Per-episode HEVC MP4 files | Video analysis pipelines |
Integrity verification
When the Atlas API provides a hash field (SHA256 of the bundle zip), nuuduu sync:
- Verifies the downloaded zip before extracting
- Stores the hash in
.nuuduu/manifest.json - Skips re-download when the local hash matches
nuuduu sync --verify # re-check local bundles without downloading
Library API
| Class / function | Purpose |
|---|---|
NuuduuAtlas |
High-level facade (recommended) |
AtlasClient |
Low-level HTTP API client |
SyncEngine |
Sync and verify engine |
NuuduuConfig |
Config load/save |
resolve_dataset_dir() |
Dataset path resolution |
Exceptions: AuthError, ApiError, IntegrityError, ConfigError, NotFoundError
Progress callbacks for sync:
from nuuduu.types import SyncProgressEvent
def on_progress(event: SyncProgressEvent) -> None:
print(event.phase, event.bytes_done, event.bytes_total)
atlas.sync(on_progress=on_progress)
Troubleshooting
| Problem | Solution |
|---|---|
| HTTP 401 | Run nuuduu auth login — token may have expired |
| Config permission error | Run chmod 600 ~/.config/nuuduu/config.toml |
| Payment required | Complete payment at https://nuuduu.com/atlas, then nuuduu sync |
| SHA256 mismatch | Re-run nuuduu sync to re-download the bundle |
| Request API 404 | requests create needs a future Atlas API endpoint |
Development
uv sync --all-extras
uv run pytest
uv build
See CONTRIBUTING.md for release and contribution guidelines.
Publishing
# Bump version in pyproject.toml and CHANGELOG.md
uv build
git tag v0.1.0 && git push --tags # triggers PyPI publish workflow
Legal
Copyright © 2026 Nuuduu UAB. Licensed under the MIT License.
Nuuduu® is a registered trademark of Nuuduu UAB. All rights reserved. The Nuuduu name and logo may not be used to imply endorsement or affiliation without prior written permission from Nuuduu UAB.
Metadata
Release files for nuuduu 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nuuduu-0.1.0.tar.gz | 17.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nuuduu-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.0 kB
Release files / nuuduu-0.1.0.tar.gz
| Download URL | nuuduu-0.1.0.tar.gz |
|---|---|
| Size | 17.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff5b9efa82aba2b5201abdf69efae5f66b4c6c8bc7941e0aa898816e503e8af5
|
|
BLAKE2b-256 checksum How to use checksums |
afcb0c1c71b5cc717fe3984b720be36d7dd59f2a7faa42f7aa981d5f484bc414
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / nuuduu-0.1.0-py3-none-any.whl
| Download URL | nuuduu-0.1.0-py3-none-any.whl |
|---|---|
| Size | 25.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53a3b81e7fb3bdceba750dbb902ed76807d19cf3a1e4d2cdaad541e597918848
|
|
BLAKE2b-256 checksum How to use checksums |
dd9efc95cdad950256729f6d46d8b4afe288ff7690b81fcc3a5067ac059ab674
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|