Template updates

Cosmos 3 Edge DROID

cosmos-droid · policy template by NVIDIA · 7 absolute joint positions and the gripper at 15 Hz, from three cameras · L4. Each version below is fixed once published, newest first.

seq init cosmos-droid gives the stable version, seq init cosmos-droid@beta the beta, and seq init cosmos-droid@v<N> any version below that is not withdrawn. A deployment made from this template names the version it runs in seq policy versions and on its page in the console; seq policy upgrade moves it to the newer stable one.

  1. v7beta

    A deployment of this version runs on one card type, the L4: a worker starts only on an L4, never on an A100.

    Needs sequence-ai 0.34.19 or later, on your machine and on the robot: pip install -U sequence-ai, which brings Pillow for the robot.

    • policy.py declares gpu="L4", where v6 listed ["L4", "A100-40GB"]: a deployment names one card type. To run on another card, name that one instead.
    • README.md says so where it spoke of the A100, and keeps the L4's measurements only.
    • The image, its frozen files, the weights, the contract and the serving code are v6's.
    Use v7
    cosmos-droid v7shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v7 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v7
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v7 my-policy
  2. v6

    The image runs cosmos-framework from third_party/cosmos-framework, the copy in your folder, and installs everything else only from this version's frozen files, which the platform keeps: v5's packages, the same on any day.

    Needs sequence-ai 0.34.19 or later, on your machine and on the robot: pip install -U sequence-ai, which brings Pillow for the robot.

    • policy.py copies cosmos-framework's cosmos_framework/ package from third_party/cosmos-framework into the image at /opt/cosmos-framework, which the policy runs it from as before: change it there and deploy again, and your deployment runs your version.
    • Everything else comes from /seq/frozen (.template_files("cosmos-droid", version=6)), with no index: the base nvidia/cuda:12.8.1-cudnn-runtime-ubuntu24.04 by digest, the system packages as .deb files, every Python package with its sha256 checked against requirements-policy.lock, and lerobot and Megatron-LM from their sources. frozen.toml says what is frozen.
    • The Python packages are the 402 that v5's image holds (pins-policy.txt): the versions cosmos-framework's lock file names - torch 2.10.0 for CUDA 12.8 and NVIDIA's builds of flash-attn, NATTEN and Transformer Engine among them - lerobot 0.4.4 and megatron-core 0.16.0rc0 from their sources, and typing-extensions 4.16.0, which v5 put forward over the lock's 4.15. uv is 0.11.28, the version the lock itself names, as in v5.
    • One locked package, jupyter-compare-view 0.2.4, says it needs Python below 3.13; it is installed on 3.13 as v5's image had it (pip's --ignore-requires-python, where v5's uv did not check the bound).
    • policy.py names the cosmos-framework commit in full, 245d2b934c1a0a164d55193b90f724cc99760473.
    • client.py stops when it is imported, saying pip install -U sequence-ai, if sequence-ai is older than 0.34.19 or Pillow is missing, instead of at the robot's first frame.
    • To add a package or change a version, add your own step after the template's (.uv_pip_install(...)); it installs from PyPI as any image does.
    • The weights, the contract and the serving code are as in v5.
    Use v6
    cosmos-droid v6shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v6 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v6
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v6 my-policy
  3. v5

    The source the image builds from comes with the template: cosmos-framework at the commit the image pins, in third_party/, with its license.

    Needs sequence-ai 0.34.12 or later, on your machine and on the robot, with Pillow on the robot: pip install -U sequence-ai brings both.

    • third_party/cosmos-framework/: https://github.com/NVIDIA/cosmos-framework at commit 245d2b934c1a0a164d55193b90f724cc99760473; a file kept with Git LFS is its pointer.
    • The image, its weights and what it installs are as in v4.
    Use v5
    cosmos-droid v5shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v5 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v5
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v5 my-policy
  4. v4

    The robot fits each camera frame and makes each command with the SDK's own helpers, as policy.py declares them.

    Needs sequence-ai 0.34.12 or later, on your machine and on the robot, with Pillow on the robot: pip install -U sequence-ai brings both.

    • client.py calls policy.prepare_image for each frame (resize="pad", filter="bilinear", as policy.py declares) and policy.to_command for each step, instead of its own copies of them: its resize_with_pad, encode, to_command and to_commands are gone.
    • policy.py declares how each of the three cameras' frames is fitted, 640x360 with padding and bilinear filtering as NVIDIA's client resizes, and the gripper's threshold, binarize={7: 0.5}. The same frames and steps give the same JPEGs and commands as v3.
    • preprocess takes the connected policy first: preprocess(policy, wrist=..., exterior_1=..., exterior_2=..., ...). One chunk at a time is policy.to_commands(policy.predict(...)).
    • A deployment of this version checks every frame and never resizes one: a frame that is not 640x360 is refused with a 400 that names the call that fits it.
    • Under an older sequence-ai, policy.py and client.py stop with a sentence that names 0.34.12, instead of an error about unknown fields.
    Use v4
    cosmos-droid v4shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v4 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v4
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v4 my-policy
  5. v3stable

    client.py gains to_command(step) for run(). The policy declares no action bounds, so the platform passes the joint targets as the model gave them; the served code is unchanged.

    Needs sequence-ai 0.31.0 or later; on the robot, Pillow.

    • client.py gains to_command(step): one step as run() hands it to act, the gripper made 0 or 1 at 0.5. to_commands is to_command on each step of a chunk.
    • The README's example is the run() loop: connect, wait_until_ready(), then run(observe=..., act=lambda action: robot.step(to_command(action))), which plays all 32 steps of each chunk at 15 Hz and fetches the next chunk while they play, as NVIDIA's own loop does. predict() with to_commands stays as the one-chunk form.
    • With no bounds declared, your joint-position controller and its joint limits hold the joint targets, as the README now says. policy.py and the image are v2's.
    Use v3
    cosmos-droid v3shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v3 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v3
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v3 my-policy

    In the console, Deploy deploys this version: the console deploys the stable one.

  6. v2

    The README says client.py needs Pillow on the robot, which sequence-ai does not bring: pip install sequence-ai pillow.

    Needs sequence-ai 0.31.0 or later; on the robot, Pillow.

    • client.py imports Pillow to fit the camera frames before they are sent, so on a robot with sequence-ai alone from client import preprocess failed with No module named 'PIL'. The README's "Use it" now says what to install.
    • The code and the image are v1's; only a comment in policy.py is reworded.
    Use v2
    cosmos-droid v2shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v2 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v2
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v2 my-policy
  7. v1

    The first version: NVIDIA's Cosmos 3 Edge Policy post-trained on DROID as a policy, a wrist and two exterior cameras, the joints and gripper in, 32 steps of 7 joint positions and the gripper at 15 Hz out.

    Needs sequence-ai 0.31.0 or later; on the robot, Pillow.

    • seq deploy policy.py deploys it on an L4, or an A100 40 GB when no L4 is free, as one worker (max_gpus=1: a second robot waits) with cpu=1 and memory=17. Its weights, NVIDIA's DROID checkpoint and the Wan2.2 VAE it decodes with, are copied into your deployment: nothing is downloaded from Hugging Face.
    • It runs NVIDIA's own RobolabPolicyService from cosmos-framework at a pinned commit, configured as NVIDIA's DROID server command configures this checkpoint (4 UniPC steps). An integer seed fixes the chunk.
    • client.py fits the three frames to 640x360 with padding and makes the gripper 0 or 1 at 0.5 (to_commands); the worker composes the views into the 540x640 frame the model reads, as NVIDIA's client does. All 32 steps run before the next call (OPEN_LOOP_HORIZON).
    • On an L4 the model loads in 104 s, holds 9.3 GiB of the card and answers in 1.58-1.59 s from the robot; on an A100 40 GB, 0.78-0.91 s (measured on the platform).
    • The checkpoint is under OpenMDW-1.1 (LICENSE), which allows commercial use, and the VAE under Apache-2.0; keep LICENSE and NOTICE with any copy you distribute.
    Use v1
    cosmos-droid v1shell
    # start a policy from this version, then deploy it
    seq init cosmos-droid@v1 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v1
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init cosmos-droid@v1 my-policy