Summary
simready-validate cannot validate .usdz or .usdc assets. It does not report an error — it prints the asset header with no verdict at all and exits 1.
$ simready-validate --rules-path nv_core/sr_specs/docs/capabilities \
--features-path nv_core/sr_specs/docs/features \
--profiles-path nv_core/sr_specs/docs/profiles \
--profile Prop-Robotics-Isaac --version 1.0.0 \
0SDU0DKMY8.usdz
Asset: 0SDU0DKMY8.usdz
$ echo $?
1
Compare a .usd asset, which prints a verdict line:
Asset: sample_content/.../sm_obs_workbench_tool_a01_01.usd
[FAILED] Prop-Robotics-Isaac v1.0.0
FET005_BASE_NEUTRAL: failing requirements: ['com.nvidia.simready.GSP.001']
Because the exit code is 1 and the [PASSED]/[FAILED] line is simply absent, this is indistinguishable from a genuine validation failure. A user batch-validating a directory of .usdz assets gets a non-zero exit and an empty report, with nothing indicating the assets were never opened.
Cause
simready/validate/api.py, in validate_asset():
suffix = asset_path_p.suffix.lower()
if suffix not in [".usd", ".usda"]:
return None
None is returned with no log line. None is also the return value for "file not found", "profile not registered" and "unexpected exception", so the caller cannot tell these apart.
This excludes two standard USD formats:
.usdz — the packaged distribution format
.usdc — the binary crate format
Both open fine with Usd.Stage.Open, and both validate correctly through the public validate_stage() API. Only the extension gate in validate_asset() blocks them:
>>> sv.validate_asset(sv.AssetValidationConfig(asset_path="0SDU0DKMY8.usdz",
... profile_id="Prop-Robotics-Isaac", profile_version="1.0.0"))
None
>>> sv.validate_asset(sv.AssetValidationConfig(asset_path="probe.usdc", ...))
None
>>> sv.validate_stage(Usd.Stage.Open("0SDU0DKMY8.usdz"), "Prop-Robotics-Isaac", "1.0.0")
AssetValidationResult(...) # works
The docstring does list "The file extension is not .usd or .usda" as a None condition, so the gate looks deliberate — but it conflicts with the spec this repository publishes.
Why this looks like a bug rather than a policy
- The spec has a requirement specifically about USDZ assets:
AA.OV.001 (ov-usdz-udim-limitation), "Texture UDIMs are not supported in USDZ files in NVIDIA Omniverse". A requirement that only applies to .usdz can never be evaluated, because no .usdz asset can reach the validator through the CLI.
- NVIDIA distributes SimReady prop assets as
.usdz. We validated 100 of them; every one had to be routed around the CLI via validate_stage().
.usdc is a core OpenUSD format with no packaging semantics at all — there is no obvious rationale for excluding it.
Suggested fix
Accept every format the USD runtime can open, and make the remaining None cases observable:
suffix = asset_path_p.suffix.lower()
if suffix not in (".usd", ".usda", ".usdc", ".usdz"):
logger.warning("Unsupported file extension %r for %s; skipping.", suffix, asset_path_p)
return None
A logger.warning on each early return would separately fix the silent-None ambiguity, which is the part that makes this expensive to diagnose.
Note that write_metadata=True cannot work for .usdz (the package is not writable in place), so that combination should report a clear error rather than fail quietly.
Environment
simready-validate 2026.6.4
usd-validation-nvidia 1.20.0
- Python 3.12, Windows 11
Related
Filed separately from #24, which fixes an ISA.001 checker bug that also broke .usdz assets. That one lives in this repository; this one is in the simready-validate package, so it needs a different fix. Together they were why 100 correctly-authored .usdz assets could not be validated: the CLI never opened them, and the checker would have failed them if it had.
I'm happy to open a PR for this if the simready-validate source is accessible somewhere I can contribute to — I could not find a public repository for the package.
Summary
simready-validatecannot validate.usdzor.usdcassets. It does not report an error — it prints the asset header with no verdict at all and exits1.Compare a
.usdasset, which prints a verdict line:Because the exit code is
1and the[PASSED]/[FAILED]line is simply absent, this is indistinguishable from a genuine validation failure. A user batch-validating a directory of.usdzassets gets a non-zero exit and an empty report, with nothing indicating the assets were never opened.Cause
simready/validate/api.py, invalidate_asset():Noneis returned with no log line.Noneis also the return value for "file not found", "profile not registered" and "unexpected exception", so the caller cannot tell these apart.This excludes two standard USD formats:
.usdz— the packaged distribution format.usdc— the binary crate formatBoth open fine with
Usd.Stage.Open, and both validate correctly through the publicvalidate_stage()API. Only the extension gate invalidate_asset()blocks them:The docstring does list "The file extension is not
.usdor.usda" as aNonecondition, so the gate looks deliberate — but it conflicts with the spec this repository publishes.Why this looks like a bug rather than a policy
AA.OV.001(ov-usdz-udim-limitation), "Texture UDIMs are not supported in USDZ files in NVIDIA Omniverse". A requirement that only applies to.usdzcan never be evaluated, because no.usdzasset can reach the validator through the CLI..usdz. We validated 100 of them; every one had to be routed around the CLI viavalidate_stage()..usdcis a core OpenUSD format with no packaging semantics at all — there is no obvious rationale for excluding it.Suggested fix
Accept every format the USD runtime can open, and make the remaining
Nonecases observable:A
logger.warningon each early return would separately fix the silent-Noneambiguity, which is the part that makes this expensive to diagnose.Note that
write_metadata=Truecannot work for.usdz(the package is not writable in place), so that combination should report a clear error rather than fail quietly.Environment
simready-validate2026.6.4usd-validation-nvidia1.20.0Related
Filed separately from #24, which fixes an
ISA.001checker bug that also broke.usdzassets. That one lives in this repository; this one is in thesimready-validatepackage, so it needs a different fix. Together they were why 100 correctly-authored.usdzassets could not be validated: the CLI never opened them, and the checker would have failed them if it had.I'm happy to open a PR for this if the
simready-validatesource is accessible somewhere I can contribute to — I could not find a public repository for the package.