Skip to main content

Nuuduu

PyPI version Python versions License: MIT

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:

  1. --dataset-dir CLI flag
  2. NUUDUU_DATASET_DIR environment variable
  3. dataset_dir in config file
  4. HF_LEROBOT_HOME/nuuduu-atlas (LeRobot ecosystem default)
  5. Project .env, training configs, or ./datasets/nuuduu-atlas
  6. 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:

  1. Verifies the downloaded zip before extracting
  2. Stores the hash in .nuuduu/manifest.json
  3. 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

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)

Source distribution for nuuduu 0.1.0
File Size Uploaded
nuuduu-0.1.0.tar.gz 17.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nuuduu 0.1.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page