Omniverse Cad To Simready
NVIDIAOfficialCreated by OmniverseDistributed by NVIDIA
- Skill
- Workflow
- Software development
- Apache-2.0
- Medium risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill acts as an orchestrator for the CAD to SimReady pipeline, coordinating a series of specialized stages including asset conversion, material and physics assignment via Content Agents, validation, and final packaging. It is designed to manage the flow between discrete tools rather than replacing them, ensuring that assets meet specific simulation requirements through a structured, documentation-driven process.
What it does
- Coordinates end-to-end conversion from source CAD or mesh assets to SimReady USD.
- Manages property assignment for materials and physics using Content Agents.
- Performs multi-stage validation gates to ensure asset viability and conformance.
- Automates the assembly of deliverable packages including thumbnails and USD dependencies.
- Provides consolidated reporting on workflow status, validation findings, and stage outputs.
- Supports flexible execution modes including conversion-only and validation-only paths.
When to use it
- When you need to transform raw CAD or source assets into simulation-ready USD files.
- When you require automated material and physics assignment for 3D assets.
- When you need to validate assets against SimReady conformance profiles.
- When you are preparing assets for packaging and distribution in a simulation environment.
Advantages
- Provides a structured, repeatable pipeline for complex asset preparation.
- Integrates multiple specialized stages into a cohesive workflow.
- Ensures consistent validation and conformance across the asset lifecycle.
- Supports modular execution by allowing specific stages to be skipped or isolated.
Usage examples
- “Convert my CAD file at /path/to/model.step to a SimReady asset.”
- The agent will initiate the preflight check, convert the file to USD, apply material and physics properties, validate the result, and output a report.
- “Validate this existing USD file for SimReady conformance.”
- The agent will run the validation-only workflow, checking the provided USD against SimReady profiles and reporting any findings.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/omniverse-cad-to-simready/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip omniverse-cad-to-simready.zip -d .agents/skills
Documentation by Omniverse
CAD to SimReady
When to Use
Use this workflow skill for an end-to-end pipeline from a source asset to a SimReady asset or package. It coordinates existing conversion, authoring, validation, conformance, rendering, and packaging references directly; do not replace it with a single monolithic runner command.
This skill is documentation-driven and does not ship scripts/run.py; it must
not depend on a repository checkout. Shell is declared because this workflow
invokes installed stage reference scripts directly, from each reference's
installed directory, and it still must not grow a monolithic runner.
Prerequisites
Prefer
preflightfirst for deterministic setup: it installs/verifies local upstream checkouts, writes acad-to-simready-preflight.jsonmanifest, and exportsPHYSICAL_AI_PREFLIGHT_MANIFESTplusPHYSICAL_AI_REQUIRE_PREFLIGHT=1for downstream references.Python 3.12 and
uv(per repoREADME.md).A Content Agents model provider key when local deployment will run, or explicit endpoint variables plus usage tokens for already-running endpoints; see
references/preflight/README.mdfor the full list.Docker, NVIDIA Container Toolkit, and an NVIDIA GPU for Content Agents and OVRTX stages.
Local upstream checkouts under
${OMNIVERSE_CAD_TO_SIMREADY_UPSTREAM_ROOT:-$HOME/.omniverse-cad-to-simready/upstreams}when a stage needs upstream scripts or specs.
First Action
For any broad CAD/source-asset to SimReady request, assume
property_assignment_intent=run unless the user explicitly asks for
conversion-only, validation-only, or no material/physics assignment.
For conversion-only requests, set property_assignment_intent=skip, do not
deploy Content Agents, run convert-to-usd, then run validate-usd-minimum
on the generated USD if conversion succeeds. For validation-only requests,
set property_assignment_intent=skip and validate the USD the user
provided without rerunning conversion.
Run preflight (or verify an existing PHYSICAL_AI_PREFLIGHT_MANIFEST)
before any converter, validation, Content Agents, OVRTX, packaging, or FET
step; treat it as dependency bootstrap, not workflow routing. Use
--skip-content-agents for conversion-only/validation-only requests.
When property_assignment_intent=run, verify or deploy Content Agents
services immediately after confirming the source path and resolving intent,
before asset-context inspection, converter dependency checks, conversion,
validation, conformance, rendering, packaging, or upstream source builds.
Treat explicitly provided healthy endpoints as user-owned; otherwise run deploy-content-agents,
which deploys the shared standalone OVRTX renderer, then Material, Physics,
and optional Texture service containers in order.
Instructions
Confirm the source asset path exists, resolve
output_root, and classify the request as end-to-end, conversion-only, validation-only, or packaging.Resolve
property_assignment_intentbefore running any asset inspection, converter probe, conversion, validation, conformance, rendering, or packaging step.Run
preflightfor the selected workflow targets, unless a readyPHYSICAL_AI_PREFLIGHT_MANIFESTis already configured. Source the generated env file before running downstream scripts. Treat preflight as dependency setup only: it may use a provided--source-asset,--source-format, or--conversion-toolsvalue to scope dependency checks, butconvert-to-usdand the upstream converter references still decide actual conversion support.Verify or deploy Content Agents services first when
property_assignment_intent=run; block on missing authentication or unhealthy services instead of continuing.Read
references/workflow.mdandreferences/commands.md, then run only the stage references needed for the current request.Run
identify-asset-contexton the original source asset when web search is available or property assignment will run.Route the source through
convert-to-usd, or skip conversion for existing USD input and treat the source path as the current USD path.Run
validate-usd-minimumbefore expensive downstream work. Treat this as a viability gate only: record unit/profile issues such asmetersPerUnit != 1.0, but do not runsimready-conform-profile, FET001, or any other FET repair before Content Agents assignment when property assignment will run.Run Content Agents material, physics, and optional texture assignment on the converted/minimum-valid USD when requested or required.
Run
simready-conform-profileon the latest simulation USD path after property assignment and preserve every selected FET repair report.Run validation gates in order:
omni-asset-validate,omni-asset-validate-geometry,omni-asset-validate-physics, andsimready-validate.Rerun
simready-conform-profilewhensimready-validatereports a repairable requirement, then rerun profile validation on the newest authored USD.Run
ovrtx-render-servicewhen preview, thumbnail, or inspection images are requested. When package outputs are requested, runassemble-package-sourcenext to create the cleandeliverable/package source from the final USD and thumbnail, then runnv-core-package-sampleandnv-core-package-sample-validationon that deliverable folder only.Emit the consolidated workflow report with the final USD path, all stage reports, validation findings, rerun reasons, and next work.
Output Format
Emit a consolidated workflow report in Markdown, and include JSON when the
workflow writes structured artifacts. Report overall status as passed,
blocked, failed, or needs_rerun. See references/workflow.md for the
required Markdown and JSON report fields.
Detailed References
Read only the references needed for the current request:
references/preflight/README.md: deterministic local setup, manifest/env contract, wrappers, deployment opt-out, and guardrail behavior.references/workflow.md: inputs, source routing, detailed workflow, validation policy, output report fields, and next steps.references/commands.md: concrete portable script command patterns.references/assemble-package-source/README.md: two-zone package source assembly, root USD naming, thumbnail placement, and deliverable checks.references/troubleshooting.md: symptom/cause/fix table plus FET (GSP.001/RB.MB.001) repair-routing detail.references/publishing-layout.md: frontmatter compatibility-field notes and layout rationale for this skill's own file tree.
Publishing Layout Notes
Use skills/omniverse-cad-to-simready/ as the source of truth for this
product repo's skill. The .agents/skills symlink is a compatibility alias
for local agentskills.io-style discovery, and the nested references/ tree
is intentional. See references/publishing-layout.md for the alias list,
frontmatter field placement, and flattening rules.
Limitations
This workflow coordinates existing conversion, property assignment, conformance, validation, rendering, and packaging skills; it does not replace them with a single monolithic runner command.
Troubleshooting
Read references/troubleshooting.md only when a specific stage or validation
gate is failing; it owns the symptom/cause/fix table and FET repair routing.
Hard Rules
Prefer the preflight manifest for local upstream roots, converter executables, SimReady validation runtime, OVRTX endpoint, and Content Agents service URLs. When
PHYSICAL_AI_REQUIRE_PREFLIGHT=1is set, do not bypass the manifest with direct upstream discovery.Do not run asset inspection, converter probes, local upstream builds, conversion, validation, conformance, rendering, or packaging before Content Agents readiness when property assignment will run.
Use stage-specific installed reference scripts directly. Do not add or call a single
omniverse-cad-to-simreadyrunner command.For source conversion, delegate to the
convert-to-usdreference; do not substitute another converter for CAD or mesh formats.For property assignment, use Content Agents references as separate atomic steps: material first, then physics, then texture only when requested.
When property assignment will run, do not run
simready-conform-profileor any FET helper before Content Agents. Validate minimum USD first, then run Content Agents on that converted/minimum-valid USD, then apply FET repairs to the latest service-authored USD.When property assignment will run, do not run
simready-validateor any SimReady profile validation before Content Agents. The only validation gate allowed before service calls isvalidate-usd-minimum, which is a basic USD viability check.Stop at the first failing deployment, conversion, property-assignment, or conformance authoring gate unless the user explicitly asks for best-effort continuation.
Do not stop at validation findings after a meaningful USD artifact exists. Continue remaining diagnostic gates and mark the result
needs_rerun.Do not leave a
GSP.001profile failure as an unclassified final finding. Route it to upstreamsimready-foundation-conform-fet-005-simulate-grasp-physics; if the current agent cannot inspect renders or no explicit grasp points are available, report a blocked FET005 repair with the visual evidence path or missing input reason.Preserve every stage report and pass the concrete output USD path from each report into the next stage.
Files
- ATTRIBUTION.mdAdded by AutoGineer936 B
- BENCHMARK.md5.4 KiB
- CHANGELOG.md2.0 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md10.7 KiB
- agents/openai.yaml427 B
- config/skillspector-baseline.yaml1.6 KiB
- evals/evals.json8.9 KiB
- evals/files/minimal_mesh.stl157 B
- references/assemble-package-source/README.md3.9 KiB
- references/assemble-package-source/scripts/check_dependencies.pyScript2.3 KiB
- references/assemble-package-source/scripts/report_schema.json1.2 KiB
- references/assemble-package-source/scripts/run.pyScript19.2 KiB
- references/commands.md5.3 KiB
- references/content-agents/README.md20.2 KiB
- references/content-agents/references/material-agent-client/README.md13.8 KiB
- references/content-agents/references/material-agent-client/scripts/check_dependencies.pyScript417 B
- references/content-agents/references/material-agent-client/scripts/report_schema.json722 B
- references/content-agents/references/material-agent-client/scripts/run.pyScript405 B
- references/content-agents/references/physics-agent-client/README.md13.7 KiB
- references/content-agents/references/physics-agent-client/scripts/check_dependencies.pyScript417 B
- references/content-agents/references/physics-agent-client/scripts/report_schema.json722 B
- references/content-agents/references/physics-agent-client/scripts/run.pyScript405 B
- references/content-agents/references/texture-agent-client/README.md6.7 KiB
- references/content-agents/references/texture-agent-client/scripts/check_dependencies.pyScript417 B
- references/content-agents/references/texture-agent-client/scripts/report_schema.json722 B
- references/content-agents/references/texture-agent-client/scripts/run.pyScript405 B
- references/content-agents/scripts/check_dependencies.pyScript1.3 KiB
- references/content-agents/scripts/content_agent_check_dependencies.pyScript4.6 KiB
- references/content-agents/scripts/content_agent_client.pyScript76.1 KiB
- references/content-agents/scripts/content_agent_material_cleanup.pyScript10.7 KiB
- references/content-agents/scripts/content_agent_report_schema.json722 B
- references/content-agents/scripts/openusd_upload_prep.pyScript12.8 KiB
- references/content-agents/scripts/report_schema.json961 B
- references/content-agents/scripts/run.pyScript9.6 KiB
- references/convert-to-usd/README.md10.1 KiB
- references/convert-to-usd/references/mujoco-usd-converter/README.md4.1 KiB
- references/convert-to-usd/references/mujoco-usd-converter/scripts/check_dependencies.pyScript1.5 KiB
- references/convert-to-usd/references/mujoco-usd-converter/scripts/report_schema.json405 B
- references/convert-to-usd/references/mujoco-usd-converter/scripts/run.pyScript9.3 KiB
- references/convert-to-usd/references/openusd-exchange-sdk-usdex/README.md4.7 KiB
- references/convert-to-usd/references/urdf-usd-converter/README.md3.8 KiB
- references/convert-to-usd/references/urdf-usd-converter/scripts/check_dependencies.pyScript1.5 KiB
- references/convert-to-usd/references/urdf-usd-converter/scripts/report_schema.json403 B
- references/convert-to-usd/references/urdf-usd-converter/scripts/run.pyScript9.4 KiB
- references/convert-to-usd/references/usd-convert-cad/README.md8.0 KiB
- references/convert-to-usd/references/usd-convert-cad/scripts/check_dependencies.pyScript3.6 KiB
- references/convert-to-usd/references/usd-convert-cad/scripts/report_schema.json476 B
- references/convert-to-usd/references/usd-convert-cad/scripts/run.pyScript22.8 KiB
- references/convert-to-usd/references/usd-convert-gsplat/README.md4.4 KiB
- references/convert-to-usd/references/usd-convert-gsplat/scripts/check_dependencies.pyScript2.1 KiB
- references/convert-to-usd/references/usd-convert-gsplat/scripts/report_schema.json413 B
- references/convert-to-usd/references/usd-convert-gsplat/scripts/run.pyScript13.6 KiB
- references/convert-to-usd/scripts/check_dependencies.pyScript1.7 KiB
- references/convert-to-usd/scripts/report_schema.json1.4 KiB
- references/convert-to-usd/scripts/run.pyScript22.6 KiB
- references/deploy-content-agents/README.md10.7 KiB
- references/deploy-content-agents/references/deploy-material-agent-docker.md423 B
- references/deploy-content-agents/references/deploy-ovrtx-docker.md405 B
- references/deploy-content-agents/references/deploy-physics-agent-docker.md421 B
- references/deploy-content-agents/references/deploy-texture-agent-docker.md421 B
- references/identify-asset-context/README.md4.7 KiB
- references/identify-asset-context/scripts/check_dependencies.pyScript1.5 KiB
- references/identify-asset-context/scripts/report_schema.json751 B
- references/identify-asset-context/scripts/run.pyScript11.1 KiB
- references/nv-core-package-sample-validation/README.md5.3 KiB
- references/nv-core-package-sample-validation/scripts/check_dependencies.pyScript419 B
- references/nv-core-package-sample-validation/scripts/report_schema.json702 B
- references/nv-core-package-sample-validation/scripts/run.pyScript400 B
- references/nv-core-package-sample/README.md6.3 KiB
- references/nv-core-package-sample/scripts/check_dependencies.pyScript419 B
- references/nv-core-package-sample/scripts/report_schema.json702 B
- references/nv-core-package-sample/scripts/run.pyScript400 B
- references/omni-asset-validate-geometry/README.md3.5 KiB
- references/omni-asset-validate-geometry/scripts/check_dependencies.pyScript1.9 KiB
- references/omni-asset-validate-geometry/scripts/report_schema.json363 B
- references/omni-asset-validate-geometry/scripts/run.pyScript2.0 KiB
- references/omni-asset-validate-physics/README.md3.4 KiB
- references/omni-asset-validate-physics/scripts/check_dependencies.pyScript1.9 KiB
- references/omni-asset-validate-physics/scripts/report_schema.json362 B
- references/omni-asset-validate-physics/scripts/run.pyScript2.0 KiB
- references/omni-asset-validate/README.md3.5 KiB
- references/omni-asset-validate/scripts/check_dependencies.pyScript2.4 KiB
- references/omni-asset-validate/scripts/report_schema.json359 B
- references/omni-asset-validate/scripts/run.pyScript13.8 KiB
- references/ovrtx-render-service/README.md14.5 KiB
- references/ovrtx-render-service/scripts/check_dependencies.pyScript3.4 KiB
- references/ovrtx-render-service/scripts/report_schema.json674 B
- references/ovrtx-render-service/scripts/run.pyScript24.3 KiB
- references/ovrtx-render-service/scripts/stage_prep.pyScript19.2 KiB
- references/ovrtx-render-service/scripts/turntable.pyScript10.8 KiB
- references/preflight/README.md15.5 KiB
- references/preflight/scripts/preflight.ps1Script460 B
- references/preflight/scripts/preflight.pyScript114.8 KiB
- references/preflight/scripts/preflight.shScript278 B
- references/publishing-layout.md1.5 KiB
- references/simready-conform-profile/README.md13.9 KiB
- references/simready-conform-profile/references/FET_000_CORE/README.md1.3 KiB
- references/simready-conform-profile/references/FET_000_CORE/scripts/check_dependencies.pyScript1.4 KiB
- references/simready-conform-profile/references/FET_000_CORE/scripts/report_schema.json418 B
- references/simready-conform-profile/references/FET_000_CORE/scripts/run.py11.6 KiB
- references/simready-conform-profile/references/FET_001_MINIMAL/README.md1.5 KiB
- references/simready-conform-profile/references/FET_001_MINIMAL/scripts/check_dependencies.py1.9 KiB
- references/simready-conform-profile/references/FET_001_MINIMAL/scripts/report_schema.json668 B
- references/simready-conform-profile/references/FET_001_MINIMAL/scripts/run.py16.3 KiB
- references/simready-conform-profile/references/FET_004_SIMULATE_MULTI_BODY_PHYSICS/README.md1.4 KiB
- references/simready-conform-profile/references/FET_004_SIMULATE_MULTI_BODY_PHYSICS/scripts/check_dependencies.py1.6 KiB
- references/simready-conform-profile/references/FET_004_SIMULATE_MULTI_BODY_PHYSICS/scripts/report_schema.json1.0 KiB
- references/simready-conform-profile/references/FET_004_SIMULATE_MULTI_BODY_PHYSICS/scripts/run.py13.3 KiB
- references/simready-conform-profile/references/FET_005_SIMULATE_GRASP_PHYSICS/README.md1.9 KiB
- references/simready-conform-profile/references/FET_005_SIMULATE_GRASP_PHYSICS/scripts/author_grasp_line.py11.2 KiB
- references/simready-conform-profile/scripts/check_dependencies.py2.3 KiB
- references/simready-conform-profile/scripts/report_schema.json466 B
- references/simready-conform-profile/scripts/run.py20.1 KiB
- references/simready-validate/README.md9.1 KiB
- references/simready-validate/scripts/check_dependencies.py4.2 KiB
- references/simready-validate/scripts/report_schema.json480 B
- references/simready-validate/scripts/run.py26.9 KiB
- references/troubleshooting.md5.0 KiB
- references/validate-usd-minimum/README.md2.5 KiB
- references/validate-usd-minimum/scripts/check_dependencies.py2.1 KiB
- references/validate-usd-minimum/scripts/report_schema.json1.3 KiB
- references/validate-usd-minimum/scripts/run.py11.9 KiB
- references/workflow.md17.2 KiB
- shared/preflight_manifest.py9.7 KiB
- shared/script_utils.py13.5 KiB
- shared/simready_package.py34.3 KiB
- shared/simready_package_check_dependencies.py2.1 KiB
- shared/simready_package_report_schema.json702 B
- shared/upstream_versions.py2.4 KiB
- skill-card.md4.7 KiB
- skill.oms.sig39.4 KiB
- upstream-versions.lock.json2.2 KiB
references/ovrtx-render-service/README.md
Render USD
When to Use
Use this reference to create a visual preview of a USD asset after conversion, validation, material assignment, or SimReady packaging. The reference's scripts/run.py inspects the stage with OpenUSD mesh traversal when the local Python environment provides pxr, then sends the USD to an OVRTX renderer.
Do not use VTK or other local triangle preview renderers. This reference always sends the stage to an OVRTX rendering service. The service endpoint can be:
a preflight-managed local OVRTX service through
OVRTX_RENDER_ENDPOINT,OVRTX_RENDER_BASE_URL,RENDER_ENDPOINT, or the preflight manifesta provided OVRTX service through
--endpoint,RENDER_ENDPOINT, orCONTENT_AGENTS_RENDER_BASE_URLan NVCF invocation endpoint through
NVCF_RENDER_ENDPOINT, or a constructed invocation URL fromNVCF_RENDER_FUNCTION_ID/RENDER_FUNCTION_ID
Use --token only when environment or file-backed token injection is
impossible. The wrapper sends available renderer tokens automatically and only
requires a token before the request for known protected NVCF endpoints.
If neither renderer path is configured or the renderer cannot produce a PNG, stop with the command report. Do not silently substitute a non-OVRTX preview. Material Agent or Physics Agent HTML report images, generated service thumbnails, viewport screenshots, or earlier conversion thumbnails are useful diagnostics, but they are not valid ovrtx-render-service outputs and must not be reported as final renders from this skill.
Prefer a ready PHYSICAL_AI_PREFLIGHT_MANIFEST from the preflight
reference. The wrapper consumes a prepared OVRTX endpoint from that manifest
before falling back to renderer environment variables. When
PHYSICAL_AI_REQUIRE_PREFLIGHT=1 is set, missing renderer readiness blocks at
the preflight guardrail.
Upstream Reference
This reference follows the nvidia-omniverse/content-agents OVRTX rendering API contract at the manifest pin v0.5.2: encode local USD as a data URI in the /render request url field, pass render settings, and decode returned image bytes from the response images map. Its stage-preparation behavior computes render bounds, authors a camera from those bounds, preserves the source stage lighting state by default, and bundles local MDL/texture sidecars. The source asset is not modified.
OVRTX service deployment belongs to NVIDIA Omniverse Content Agents: https://github.com/nvidia-omniverse/content-agents at the exact ref in upstream-versions.lock.json. When a render task requires provisioning, starting, or troubleshooting a local OVRTX render endpoint, use the installed deploy-content-agents skill, which points to https://github.com/nvidia-omniverse/content-agents/blob/v0.5.2/.codex/skills/deploy-ovrtx-docker/SKILL.md. Do not copy Docker Compose or OVRTX deployment instructions into this reference.
Stage Preparation
Before calling /render, scripts/run.py prepares a render stage with OpenUSD
when pxr is available:
Preserve the composed source stage by default. This keeps renderer-visible MaterialX/OpenPBR material graphs intact; flattened render payloads can cause OVRTX to show red fallback/error materials on some Material Agent outputs.
Use
--flattenonly as an explicit diagnostic or packaging fallback when the unflattened source composition cannot be sent to the renderer.Compute a world-space bounding sphere from the default prim or first xformable root prim.
Generate a fit-to-bounds camera when
--camerais not supplied; this avoids fixed-camera misses on meter-normalized assets with root scale opinions.Do not author default lights by default; this keeps final renders on the renderer's clean black background without adding a DomeLight. Use
--default-lightsonly as an explicit debugging override.Export a temporary
main.usdaand bundle referenced local MDL/texture files into the data-URI payload, rewriting asset paths to the bundle.When a material has a valid universal
UsdPreviewSurfacefallback, removeoutputs:mdl:*andoutputs:mtlx:*from that temporary payload so OVRTX does not choose an unsupported render-context shader and show a red error material.Inspect the returned PNG for blank/uniform pixels and record the result in the JSON report. Pixel inspection requires Pillow (a pinned dependency of this repo); a blank/uniform render, or an inspection that cannot run at all (for example Pillow missing or the PNG unreadable), fails the stage by default so packaging never proceeds on an unverified render. Pass
--no-fail-on-uniformonly for diagnostic-only runs where a blank/uniform render should stay a warning instead of a failure; a missing/unreadable pixel inspection still fails the stage regardless of that flag.
Camera Handling
Use --camera when the asset already has a specific camera prim that should drive the preview. Without --camera, scripts/run.py authors /Camera in the temporary render stage using bounds-derived distance, aperture, clipping range, and elevation. The authored camera path and construction parameters are reported under stage_construction.camera.
Turntable Rendering
Use scripts/turntable.py when a single view is blank, ambiguous, or not enough
for visual inspection. It renders multiple OVRTX frames from bounds-fit
turntable stages and writes a frame-by-frame report containing camera placement,
stage bounds, local asset bundling, pixel checks, and per-frame errors. It can
also stitch a GIF when Pillow is available.
Inputs
Collect:
| Input | Requirement |
|---|---|
asset_path | Required .usd, .usda, .usdc, or .usdz asset path. |
output_image_path | Required .png output path. |
endpoint | Optional renderer base URL or /render URL. Defaults to env and preflight manifest resolution. |
token | Optional bearer token. Renderer-specific token env vars are preferred; NGC/NVCF usage tokens are used for protected remote endpoints. Pass --token "$API_KEY" explicitly only when environment/file injection is impossible. |
camera | Optional camera prim path. |
width / height | Optional pixel resolution. Default: 1024x1024. |
fit_margin | Optional camera fit margin metadata sent to the renderer. Default: 1.2. |
focal_length / elevation | Optional auto-camera controls. Defaults: 50mm and 0.34. |
default_lights | Optional debugging mode to author Dome/Sphere lights for a lightless prepared stage. Default: disabled. |
report | Optional JSON report path. |
markdown_report | Optional Markdown report path. |
Dependency Check
Require:
this reference's portable
scripts/run.pyandscripts/check_dependencies.py.OpenUSD Python APIs through
pxr.Usdandpxr.UsdGeomwhen local mesh statistics are required. Missingpxris reported as a warning; the OVRTX render request can still proceed.Pillow (
PIL) to inspect the rendered PNG for blank/uniform pixels. Pillow is a pinned dependency of this repo's environment (see the repo rootpyproject.toml). Missing or non-functional Pillow fails the render stage; it is not an optional/best-effort check.Python stdlib HTTP support for the OVRTX render service call.
For protected remote rendering, a bearer token from
OVRTX_RENDER_TOKEN,RENDER_TOKEN,CONTENT_AGENTS_RENDER_TOKEN,NGC_API_KEY,NVCF_API_KEY, matching file-backed variables such asOVRTX_RENDER_TOKEN_FILEorNGC_API_KEY_FILE, or explicit--token "$API_KEY"when environment/file injection is impossible. Do not useNVIDIA_API_KEYas the default renderer token; it is deployment auth. Avoid--tokenin long-running jobs because argv can expose secrets.
Endpoint resolution order:
--endpointOVRTX_RENDER_ENDPOINTOVRTX_RENDER_BASE_URLa ready OVRTX endpoint from
PHYSICAL_AI_PREFLIGHT_MANIFESTRENDER_ENDPOINTCONTENT_AGENTS_RENDER_BASE_URLNVCF_RENDER_ENDPOINTConstruct
https://<function-id>.invocation.api.nvcf.nvidia.com/renderfromNVCF_RENDER_FUNCTION_IDorRENDER_FUNCTION_ID.
The command appends /render when the endpoint is a base URL. Localhost OVRTX
service endpoints are allowed without a bearer token; protected NVCF endpoints
must provide a token through env/file variables or --token.
If a local OVRTX endpoint is not already running and the user wants one deployed, use deploy-content-agents with the OVRTX deployment target first, then return to this reference with OVRTX_RENDER_ENDPOINT or RENDER_ENDPOINT set.
Host-Direct OVRTX Smoke Test
Use this as a diagnostic fallback when the local OVRTX REST container is hard
to debug on a headless host. It verifies that the host Python runtime can import
and initialize OVRTX directly; it does not replace the REST renderer endpoint
required by this reference's normal scripts/run.py path.
Create an isolated Python 3.12 environment outside the workflow output directory.
Install
ovrtx==0.2.0.280040,numpy, andpillowinto that environment.Start Xvfb on an unused display and export that display for the smoke probe. On headless hosts, do not assume
:99is free; use an explicit unused value such as:100when another process already owns the default display.Run a tiny local probe that imports
ovrtx, constructsovrtx.Renderer, loads a known-simple USD package, and stepsovrtx_debug_dump_stage.Save the host-direct renderer log next to the deployment evidence and report it as diagnostic evidence only. Continue using
deploy-content-agentsfor production REST service deployment and render only after a/renderendpoint is healthy.
Instructions
Confirm the source USD exists.
Choose a dedicated output directory for render artifacts.
Confirm a remote or local OVRTX endpoint is available; if the endpoint must be deployed, use
deploy-content-agentsfor the OVRTX service before rendering.Run this reference's portable
scripts/run.pywith the asset path and PNG output path. Keep default composition-preserving stage preparation enabled unless debugging a specific source-stage camera, light setup, or packaging issue. Do not pass--flattenfor final report renders unless the unflattened render is blocked. Do not pass--default-lightsfor final report renders unless the user explicitly asks for authored lighting.Preserve the JSON and Markdown reports when requested.
Confirm the output PNG exists and is non-empty.
Check that the output PNG is not blank or a uniform background image.
scripts/run.pyfails the stage by default when pixel inspection detects a blank/uniform PNG, or when pixel inspection could not run at all (for example Pillow missing); treat that failure as blocked and troubleshoot the OVRTX request, camera, lighting, asset packaging, or endpoint. Do not pass--no-fail-on-uniformand do not replace a blank render with a Material Agent or Physics Agent report image to force a pass.If the single image is still blank or poorly framed, run
scripts/turntable.pyand inspect its frame reports before changing service endpoint assumptions.Use the preview as diagnostic context for conversion, material, physics, SimReady, or package reports.
CLI Pattern
Render using .env, shell env, or a ready preflight manifest:
python3 /path/to/skills/omniverse-cad-to-simready/references/ovrtx-render-service/scripts/run.py asset.usd output/preview.png \
--report output/ovrtx-render-service.json \
--markdown-report output/ovrtx-render-service.mdRender with an explicit endpoint:
python3 /path/to/skills/omniverse-cad-to-simready/references/ovrtx-render-service/scripts/run.py asset.usd output/preview.png \
--endpoint "$RENDER_ENDPOINT" \
--width 1600 \
--height 1200 \
--fit-margin 1.35 \
--report output/ovrtx-render-service.jsonRender with an explicit token when env/file injection is not available:
python3 /path/to/skills/omniverse-cad-to-simready/references/ovrtx-render-service/scripts/run.py asset.usd output/preview.png \
--endpoint http://127.0.0.1:8000 \
--token "$RENDER_TOKEN" \
--report output/ovrtx-render-service.jsonTurntable diagnostic render:
python3 /path/to/skills/omniverse-cad-to-simready/references/ovrtx-render-service/scripts/turntable.py asset.usd output/turntable_frames \
--frames 8 \
--gif output/turntable.gif \
--report output/ovrtx-turntable.json \
--markdown-report output/ovrtx-turntable.mdOutput Format
Reports include:
asset_pathoutput_image_pathrenderer_skill: ovrtx-render-servicerenderer_tool: OVRTX rendering servicerenderer_endpoint_kindrenderer_auth_moderenderer_endpointcamera_pathwidthandheightfit_marginstage_constructionpixel_inspectionmesh_countpoint_counttriangle_countgenerated_fileswarningserrorspassednext_step: inspect-render-output
Turntable reports include the same renderer metadata plus frame_reports, each
with angle_degrees, stage_construction, pixel_inspection,
output_image_path, and per-frame warnings/errors.
Known Caveats
The command uses OpenUSD mesh traversal for validation, statistics, bounds-fit camera authoring, optional debugging light overlays, and temporary bundle construction; final pixels come from OVRTX.
Empty stages or assets with no renderable mesh triangles produce a blocked report rather than a blank image.
The portable wrapper leaves the source asset untouched; render camera, lights, and bundle rewrites are authored only in temporary render stages.
--backgroundis accepted for backward CLI compatibility but is not used by the OVRTX request.A local OVRTX container can report unhealthy through a container-internal healthcheck while the externally mapped host
/healthendpoint is usable. Record both results and render a PNG before treating the endpoint as ready.On headless or nested hosts, Xvfb display conflicts can make the renderer exit before it serves
/render; choose an unused display and keep the renderer log with the workflow evidence.The host-direct OVRTX smoke test proves only that the host renderer runtime can initialize. It is diagnostic evidence, not a substitute final renderer service path for
ovrtx-render-service.
Next Steps
Run
validate-usd-minimumfirst when the source asset has not already passed minimum USD validation.Attach the PNG and JSON report to conversion or SimReady handoff summaries when a visual preview is requested.
If material fidelity looks wrong, inspect material bindings and authored surface outputs before rerunning the render.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Declares allowed tools, Needs Python
The author says: Orchestrator skill. Managed Content Agents deployment requires a configured model provider key matching the selected backend, such as NVIDIA_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, or GEMINI_API_KEY, Docker + NVIDIA Container Toolkit + GPU, Python 3.12, and an upstream checkout of nvidia-omniverse/content-agents at the ref pinned in upstream-versions.lock.json. Reused/provided endpoints may instead use explicit endpoint and usage-token environment variables. Linux/macOS only.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
- Instructions that use the network
- Downloads piped into a shell
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Omniverse
- Publisher
- NVIDIA (Official)
- Distributed by
- NVIDIA
- Source
- NVIDIA/skills · skills/omniverse-cad-to-simready · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Omniverse or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download omniverse-cad-to-simready.zip