NVIDIA / NVIDIA/simready-foundation
simready-validate silently produces no verdict for .usdz and .usdc assets (extension gate in validate_asset)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 88
- Forks
- 18
- PR merge metrics
- No merged PRs in 30d
Description
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.usdzcan never be evaluated, because no.usdzasset 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 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 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-validate2026.6.4usd-validation-nvidia1.20.0- Python 3.12, Windows 11
Related
Filed separately from https://github.com/NVIDIA/simready-foundation/pull/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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in simready/validate/api.py at validate_asset(), then compare its extension handling with the public validate_stage() entry point. Re-run the supplied .usd, .usdz, and .usdc CLI examples; done means supported USD formats produce verdicts and unsupported or incompatible cases are reported clearly, including the write_metadata constraint.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 38/100