Omniverse Nucleus: Collaboration and Asset Management
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:
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:
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:
- Causal ordering — changes from a single author arrive in the order they were made.
- 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.
- Merge-free on different prims — two users editing different prims in the same layer have their changes automatically merged.
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:
| Permission | Allows |
|---|---|
read | Open, stream, and subscribe to asset changes |
write | Create, modify, rename, and delete assets |
admin | Modify ACLs; manage users and groups |
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:
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
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.