Skip to main content

Nuuduu

PyPI version Python versions Build status 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.

URL
Atlas web app https://nuuduu.ai/atlas
Atlas API (default) https://nuuduu.com

The CLI talks to the API at nuuduu.com. Browse episodes and manage downloads in the Atlas web app. v1 may still send you to the web app for some payments; the destination is fully in-CLI purchase via nuuduu request (see Roadmap).

Source repository: bitbucket.org/nuuduu/nuuduu

Installation

# Library only
pip install nuuduu

# Library + CLI command (quote brackets so the shell does not treat them as globs)
pip install 'nuuduu[cli]'

Development install:

git clone git@bitbucket.org: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>"

# Request new training data (quote + confirm — API coming soon)
nuuduu request "pick and place red blocks" --episodes 1000

# 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

Use the same email and password as your Atlas web app account. The CLI authenticates against the API at https://nuuduu.com.

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 request "TASK DESCRIPTION" --episodes N [--yes]
nuuduu request list

Add --json to any command for machine-readable output.

Roadmap

v1 (today): Search episodes, request download bundles, sync locally. Some paid downloads still require completing payment in the Atlas web app before nuuduu sync.

Destination UX — order new data entirely from the terminal:

nuuduu request "pick and place red blocks" --episodes 1000
Estimated price: €742
Available immediately: 681 episodes
To collect: 319 episodes

Purchase using Acme Robotics account? [Y/n]

After confirmation, Atlas fulfills the order and nuuduu sync materializes bundles locally. No browser step.

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 (v1) Complete payment at https://nuuduu.ai/atlas, then nuuduu sync. Future: in-CLI via nuuduu request
SHA256 mismatch Re-run nuuduu sync to re-download the bundle
Request API 404 nuuduu request API not live yet — CLI shows the destination UX preview

Development

uv sync --all-extras
uv run pytest
uv build

See CONTRIBUTING.md for release and contribution guidelines.

CI runs on Bitbucket Pipelines for every push and pull request.

Publishing

# Bump version in pyproject.toml and CHANGELOG.md
uv build
git tag v0.1.0 && git push origin v0.1.0   # triggers Bitbucket Pipeline PyPI publish

One-time setup: add a secured PYPI_TOKEN repository variable in Bitbucket → Repository settings → Pipelines → Repository variables.

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.2.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.2.0
File Size Uploaded
nuuduu-0.2.0.tar.gz 19.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nuuduu 0.2.0
File Interpreter ABI Platform
nuuduu-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.4 kB

Release files / nuuduu-0.2.0.tar.gz

Download URL nuuduu-0.2.0.tar.gz
Size 19.4 kB
Tags Source
SHA-256 checksum
How to use checksums
fcb8e74709baa61ce65eb87879ec4f1687f858fa926869532e79c7013c9d1e6b
BLAKE2b-256 checksum
How to use checksums
f76cd095d25df1c726423dcf96e53fefa6181cc5be3b61ff92f6af1c39d29f16
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.2.0-py3-none-any.whl

Download URL nuuduu-0.2.0-py3-none-any.whl
Size 28.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
10ff234e38c269b66ec6f10b08bb2df12304d9f4e51f069e28876e8e917550d4
BLAKE2b-256 checksum
How to use checksums
8ddc8d0c35c8725ff1c311373776c865a1e4c673f0dfdb9ffb101c673deb0913
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

This release

0.2.0 This release

2 release files

0.1.0

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