Usd Optimize is a USD scene optimization library: a broad set of operations for processing and optimizing Universal Scene Description (USD) stages. A published package includes C++ headers, Python bindings, and prebuilt libraries so you can embed Usd Optimize in your own applications and pipelines — without installing Omniverse Kit.
This project is currently not accepting contributions.
Detailed docs live alongside the source:
| Component | Where |
|---|---|
| Kit extension user manual (Scene Optimizer inside Omniverse Kit) | docs.omniverse.nvidia.com |
| Operations catalog (45+ ops) | docs/operations.rst |
| Choosing operations | docs/choosing-operations.rst |
| Performance validators | docs/performance-validators.rst |
| CLI | docs/cli.rst |
| Developer guide (packman/premake, platform build notes) | docs/developer.rst |
Support: GitHub Issues · Security: SECURITY.md · Governance: Code of Conduct
After cloning this repository (see Requirements for the C++ toolchain):
./repo.sh build
./repo.sh test./repo.sh ci format checks formatting the way CI does. OpenUSD, Python, premake, and other build-time dependencies are fetched automatically via Packman during build — no manual install required.
To consume a published binary drop instead of building from source, follow the install guide for Windows or Linux (x86_64, aarch64).
Usd Optimize ships 45+ operations — mesh cleanup and decimation, geometry/material deduplication, hierarchy flattening, UV generation, remeshing, and more. Each operation declares typed arguments and can run individually or chained into a JSON stack.
See the full catalog with per-operation arguments and JSON examples in docs/operations.rst, and guidance on which to apply for a given goal in docs/choosing-operations.rst.
Note: A few operations (
Python Script,Delete Hidden Prims,Remove Untyped Prims,Move Materials) are Python-plugin operations — they run via theusd-optimizewheel/bindings but not from the standaloneusdOptimizeCLI, which does not host a Python interpreter. Seedocs/cli.rst.
Usd Optimize integrates with the usd-validation-nvidia PyPI package to expose its performance and geometry checks as validation rules under the Usd:Performance and Omni:Geometry categories (each rule wraps the analysis mode of an operation). With the usd-optimize wheel installed, the rules register themselves through a package entry point — no register_all() needed:
from usd_validation_nvidia import ValidationEngine
from pxr import Usd
engine = ValidationEngine() # rules auto-register on import of usd_validation_nvidia
results = engine.validate(Usd.Stage.Open("source/tests/data/simpleFourCubes.usda"))
for issue in results.issues():
print(issue.severity, issue.rule.__name__, issue.message)From a source checkout (no installed wheel), call register_all() yourself, importing usd_validation_nvidia first:
from usd_validation_nvidia import ValidationEngine
from usd_optimize.validators import register_all
register_all()For running the validators from a source checkout, prefer tools/validators/run.sh (see the run-validators skill) — it aligns PYTHONPATH/loader paths with the build tree and avoids the CLI footguns. Full details, including raw nvidia_usd_validate usage and the libusd/pxr alignment matrix, are in docs/performance-validators.rst and the run-validators skill.
Prefer not to build from source? Consume a published binary drop — C++ headers, prebuilt libraries, and Python bindings — via the per-OS install guide:
| Platform | Install guide |
|---|---|
| Windows | docs/install-prebuilt-windows.md |
| Linux (x86_64, aarch64) | docs/install-prebuilt-linux.md |
| Directory | Description |
|---|---|
include/ |
C++ public headers (usd_optimize/core/) |
lib/ |
Prebuilt libraries and Windows import libraries |
bin/ |
The usdOptimize command-line tool |
python/ |
Python bindings and modules |
usdpy/ |
USD Python runtime modules |
extraLibs/ |
Third-party dependency libraries (MaterialX, TBB; USD 25.x drops additionally carry Alembic and OpenSubdiv) |
config_presets/ |
Ready-made operation stacks for usdOptimize -c |
docs/ |
The documentation set, including the per-OS install guides |
.agents/ |
Task-specific skill files (.agents/skills/<name>/SKILL.md) |
PACKAGE-LICENSES/ |
License files for all included components |
| Platform | Architecture |
|---|---|
| Windows | x86_64 |
| Linux | x86_64, aarch64 |
| Component | Version |
|---|---|
| OpenUSD | Varies by drop — see the usd_<ver> token in the package name, or call Usd.GetVersion() |
| Python | Varies by drop — see the py_<ver> token in the package name |
| C++ standard | C++17 |
Source builds use the usd_ver / python_ver tokens in repo.toml; supported values are listed in deps/usd_flavors.json. Published drops are built once per USD flavor, so a drop's own package name is authoritative for both — this file ships unchanged into every flavor and cannot name a single version.
The usd-optimize wheel produced by ./repo.sh py_package declares a specific Python minor in its tags (see requires-python in tools/pyproject/pyproject.toml and the cp3xx segment in the wheel filename). It is a cp312 wheel, so set PYTHON_BIN to a python3.12 interpreter and use "$PYTHON_BIN" -m pip for install and for any python -m … invocations.
Building against other USD / Python versions
The wheel is always built against USD 26.08 — matching the usd-exchange / usd-validation-nvidia runtime it binds from PyPI — regardless of the repository default USD version. The pinned version lives in tools/pyproject/wheel_usd_versions.json, which holds exactly one version because the wheel filename carries no USD tag; ./repo.sh py_package fails fast if the build tree targets another version. Build and smoke-test it locally with:
./repo.sh --set-token usd_ver:26.08 build && ./repo.sh py_package --test--test installs the freshly built wheel into a throwaway virtualenv and runs an import + operation smoke test.
Three USD versions are supported — 25.05, 25.11 and 26.08; the default for ./repo.sh build is the usd_ver token in repo.toml. All supported flavors use Python 3.12. Flavors are defined in deps/usd_flavors.json. To build against a non-default version, pass the flavor/version tokens:
./repo.sh --set-token usd_flavor:usd --set-token usd_ver:26.08 build -rWhen changing flavors, start clean: ./repo.sh build --rebuild.
- Git and Git LFS (LFS tracks USD assets, textures, and other binary fixtures via
.gitattributes). - (Windows, C++) Visual Studio 2019/2022 (or Build Tools) with the Desktop development with C++ workload, plus the Windows SDK.
- (Linux)
build-essential(sudo apt-get install build-essential).
All other build-time dependencies (USD, Python, third-party libraries, premake) are pulled via Packman during ./repo.sh build.
Platform-specific build notes — Windows host-toolchain discovery, PYTHONUTF8 on non-English locales, and the extra patchelf/PyPI requirements of ./repo.sh py_package on Linux — are in docs/developer.rst.
Usd Optimize Core is licensed under the Apache License, Version 2.0. Prebuilt drops carry the same text at PACKAGE-LICENSES/LICENSE.
Copyright (c) 2022-2026, NVIDIA CORPORATION.
For third-party and bundled components in a published package, see PACKAGE-LICENSES/.