NVIDIA / NVIDIA/simready-foundation

simready-validate silently produces no verdict for .usdz and .usdc assets (extension gate in validate_asset)

Open
#25 1 comment 0 reactions 0 assignees View on GitHub

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 .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 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.