AIMaks

Omniverse Nucleus: Collaboration and Asset Management

20 min readreadingOmniverse Platform Fundamentals
3 of 50NVIDIA Omniverse & Robot Learning

Omniverse Nucleus: Collaboration and Asset Management

Omniverse Nucleus is the database server at the heart of every Omniverse deployment. It stores USD layers, textures, and other assets; tracks change history; manages access control; and broadcasts live-edit deltas to every connected client in real time. Think of it as Git + Dropbox + a real-time pub/sub message bus, purpose-built for large 3D assets.

Nucleus URL Scheme

Every asset on a Nucleus server is addressed by a URL of the form:

bash
omniverse://<server>/<path/to/asset.usda>

# Examples
omniverse://localhost/Projects/MyRobot/world.usda
omniverse://nucleus.mycompany.com/shared/environments/warehouse.usdz

Clients use the Omniverse Client Library (omni.client) to read, write, list, and subscribe to changes:

python
import omni.client
import asyncio

async def list_assets():
    result, entries = await omni.client.list_async(
        "omniverse://localhost/Projects/"
    )
    if result == omni.client.Result.OK:
        for entry in entries:
            size_mb = entry.size / (1024 * 1024)
            print(f"  {entry.relative_path:40s}  {size_mb:6.1f} MB  "
                  f"modified: {entry.modified_time}")
    else:
        print("Error:", result)

asyncio.run(list_assets())

Live Sessions: Real-Time Collaboration

A Live Session is a named collaboration context attached to a USD file. When multiple clients join the same session, each edit is propagated as a USD change block via Nucleus within milliseconds. The protocol guarantees:

  1. Causal ordering — changes from a single author arrive in the order they were made.
  2. Last-writer-wins at the attribute level — if two users simultaneously move the same prim, the final position is the one received last by Nucleus.
  3. Merge-free on different prims — two users editing different prims in the same layer have their changes automatically merged.
python
import omni.usd
import omni.client

# Join an existing live session (from inside a Kit app)
stage = omni.usd.get_context().get_stage()
url = "omniverse://localhost/Projects/MyRobot/world.usda"

# omni.usd.UsdContext manages live-sync automatically when
# a stage is opened from a Nucleus URL.
async def open_live():
    result = await omni.usd.get_context().open_stage_async(url)
    print("Stage opened:", result)

Access Control Lists (ACLs)

Nucleus enforces per-path ACLs with three permission levels:

PermissionAllows
readOpen, stream, and subscribe to asset changes
writeCreate, modify, rename, and delete assets
adminModify ACLs; manage users and groups
python
async def set_acl():
    # Grant write access to a robot-team group
    result = await omni.client.set_acls_async(
        "omniverse://localhost/Projects/MyRobot/",
        [
            omni.client.AclEntry("robot_team", omni.client.AccessFlags.WRITE),
            omni.client.AclEntry("everyone",   omni.client.AccessFlags.READ),
        ]
    )
    print("ACL set:", result)

Omniverse Cache: Local Proxy for Performance

Large USD scenes can contain thousands of texture files totalling gigabytes. Omniverse Cache is a local caching proxy service that intercepts omniverse:// requests and serves previously-fetched assets from a local NVMe drive, dramatically reducing load times in subsequent sessions.

Checkpoints: Versioned Asset History

Nucleus automatically records a checkpoint (snapshot) every time an asset is saved. Checkpoints are lightweight — they store only the delta relative to the previous checkpoint — and can be browsed or restored from the Nucleus Web UI or via the client library:

python
async def list_checkpoints():
    result, checkpoints = await omni.client.list_checkpoints_async(
        "omniverse://localhost/Projects/MyRobot/world.usda"
    )
    for cp in checkpoints:
        print(f"  [{cp.sequence}] {cp.comment}  ({cp.created_time})")

async def restore_checkpoint(sequence: int):
    result = await omni.client.restore_checkpoint_async(
        "omniverse://localhost/Projects/MyRobot/world.usda",
        sequence
    )
    print("Restore result:", result)

Nucleus Performance Model

Client A Client B Nucleus USD delta broadcast < 100 ms latency write notify notify write Nucleus pub/sub collaboration model

The bandwidth consumed by a live session depends on the rate of USD change blocks and the average delta size :

A typical interactive session generates of changes with , so simultaneous clients require only upstream bandwidth — well within a standard LAN.

Key Takeaways

  • Nucleus is a USD-aware asset server, not a generic file share — it understands USD change blocks and broadcasts them at sub-100 ms latency.
  • ACLs operate at the path level; combine user groups with fine-grained paths to implement a secure, multi-team collaboration workflow.
  • Checkpoints provide automatic version history; Omniverse Cache provides low-latency local access to frequently-used assets.
Up next · Omniverse Kit: Extensions, Apps, and the Python API