nvidia-omniverse/ovrtx/update-0-4-to-0-5
Claude Code and agent skill by nvidia-omniverse/ovrtx
- community
Checking that the SKILL.md file is still in the repository.
Upgrade an existing Python or C/C++ application from ovrtx 0.4.x to 0.5.x. Use when porting application code, authored sensor USD, RenderVar output handling, DLPack interoperability, Windows renderer configuration, or an attached ovstage 0.1 workflow to the ovrtx 0.5 release train.
Install
npx vskill@latest install nvidia-omniverse/ovrtx/update-0-4-to-0-5SKILL.md
Update OVRTX 0.4 to 0.5
Port an existing application with the minimum changes required by the 0.5 public contract. Do not adopt unrelated 0.5 features or rewrite working code.
When to Use
Use this skill when upgrading an existing Python, C, or C++ application from OVRTX 0.4.x to 0.5.x. It also covers authored sensor USD and attached-mode applications that must upgrade from OVStage 0.1.x to the matching 0.2.x release.
Do not use it for applications starting on OVRTX 0.3.x or earlier; apply the corresponding earlier-version migration skill first.
Inputs
Resolve these before editing:
- The exact source and target OVRTX versions and package locations.
- Whether the application uses Python, C/C++, authored USD, or a combination.
- Whether it uses attached OVStage and directly consumes OVStage data.
- The source, build, deployment, and generated-asset files in migration scope.
- Whether 0.4-equivalent rendered output must be preserved.
Prerequisites
- Access to the application's current source, package pins, build configuration,
authored USD, and accepted output baselines when visual compatibility matters.
- Matching OVRTX 0.5.x and OVStage 0.2.x packages from the same release train for
attached mode.
- Read the
[0.5.0]migration notes in
`../../CHANGELOG.md` and the installed target headers and Python signatures before changing APIs or data contracts. For attached mode, also consult the release notes for the matching OVStage package.
- Runtime validation requires the GPU, driver, network, and unsandboxed execution
prerequisites documented in `../../AGENTS.md`.
Scope
- Source: OVRTX 0.4.x, including 0.4.1, with optional OVStage 0.1.x.
- Target: OVRTX 0.5.x and, when attached mode is used, the matching OVStage
0.2.x package from the same release train.
- Languages: Python, C, C++, and authored USD used by those applications.
- Preserve application behavior unless the user explicitly wants the new 0.5
defaults.
This skill includes only changes that can require user source, build, deployment, or authored-USD changes. Renderer bug fixes, performance work, tests, CI, packaging reductions, documentation-only work, and optional new features are not migration steps.
Instructions
- Establish the real baseline. Locate OVRTX and OVStage version pins,
package roots, copied headers/libraries, lock files, and generated USD. Record whether the source is 0.4.0 or 0.4.1 and whether the application is Python, C/C++, or mixed.
- Update packages together. Pin OVRTX to the requested 0.5 build. If the
app uses attached mode, pin the matching OVStage 0.2 build from the same release train. Do not mix their bundled OpenUSD runtimes.
- Run the audit searches below before editing. Apply a migration only when
its search matches application code, build/deployment logic, or authored USD. Do not turn every conditional item into a source change.
- Migrate RenderVar identity first. It affects nearly every output-reading
application and makes later tensor tests address the correct output.
- Migrate Python tensor handling. Remove
ManagedDLTensordependencies,
consume mappings through DLPack, replace raw DLTensor inputs, and fix device/lifetime assumptions.
- Migrate removed configuration and outputs. Remove Windows backend
selection and replace GenericModelOutput where used.
- Migrate sensor assets. Resolve each applied sensor schema version and
update omni:sensor:modelVersion; do not use the deprecation escape hatch as the permanent migration.
- Fix initialization order. Register OVRTX schema paths before OpenUSD is
loaded and before OVStage performs its first population.
- Apply OVStage 0.2 data-contract migrations only to code that directly
reads or writes the affected representations. Ordinary OVRTX render-output consumers do not need these edits.
- Decide whether to preserve 0.4 rendering defaults. Author explicit old
values only when image compatibility is required; otherwise accept and test the new 0.5 defaults.
- Rebuild C/C++ applications. Do not reuse a 0.4 binary with 0.5 headers or
runtime libraries. Rebuild all translation units that include OVRTX or OVX public headers.
- Validate representative workflows. Test renderer creation, scene
population, one step, every consumed RenderVar, sensor output parsing, teardown, and Windows Vulkan/CUDA interop when applicable. Compare images or tensors against the application's accepted 0.4 baseline when behavior must remain stable.
Audit Searches and Required Actions
1. RenderVar path identity
Search Python for frame.render_vars, RenderVarOutput.name, MappedRenderVar.name, and dictionaries keyed by AOV/source names such as LdrColor, HdrColor, DepthSD, or PointCloud.
- Index
frame.render_varsby the full authored RenderVar prim path, not the
prim name and not sourceName. A unique prim name is insufficient.
- Replace
RenderVarOutput.nameandMappedRenderVar.namewith
render_var_path.
- Use
source_nameonly when code needs the AOV kind; do not use it as output
identity.
Search C/C++ for render_var_name and ovrtx_render_var_output_t.
- Replace
ovrtx_render_product_render_var_output_t.render_var_namewith
render_var_path.
- Use the new
source_nameandsource_typefields only for classification. - Treat
ovrtx_render_var_output_t.name(the mapped output) as a full
RenderVar prim path, not a source name.
- Recompile because the public result structure layout changed.
Source (Python): `../../examples/python/minimal/main.py` snippetread-render-output.Source (C lookup): `../../examples/c/minimal/main.cpp` snippetfind-output-helper.
2. Python DLPack and mapping objects
Search for ManagedDLTensor, MappedRenderVar.tensor, .numpy(), .to_bytes(), .raw_dltensor, isinstance checks against the old wrapper, direct DLTensor(...) inputs, and comparisons of .device with ovrtx.Device.
- Remove public imports and direct construction of
ManagedDLTensor. - For a single-tensor RenderVar, pass the
MappedRenderVardirectly to a
DLPack consumer. For composite outputs, select a named RenderVarTensor; use params for named parameters.
- Replace
.tensor.numpy()or.numpy()with the consuming library's
from_dlpack. Take a copy through that library when independent storage is required.
- A CPU-only consumer cannot read a CUDA pointer. Map to CPU or use a
CUDA-capable DLPack consumer such as Warp, PyTorch, or CuPy.
deviceis now aDLDevice. Update comparisons to inspect its DLPack device
type and device id rather than comparing it with OVRTX's mapping-request Device enum.
- Do not inspect mapping properties after
unmap()or context exit. Capture
metadata first, or retain a tensor/param view created while mapped.
- Renderer tensor inputs must implement
__dlpack__; raw ctypesDLTensor
structures are no longer accepted by Python write, bind, map, or read- destination paths.
- Deprecated attribute reads with
dest=now return the exact destination
object. Remove assumptions that the result is a separate wrapper.
- A supplied read destination must have zero byte offset and C-contiguous
layout.
Source: `../reading-render-output/SKILL.md`.
3. Windows backend selection
Search for use_vulkan, OVRTX_CONFIG_USE_VULKAN, ovrtx_config_entry_use_vulkan, DX12 interop, and backend-dependent deployment branches.
- Remove the retired configuration field/key/helper.
- Treat Windows OVRTX 0.5 as Vulkan-only.
- Port DX12-specific graphics interop to Vulkan or disable that integration.
- Recompile C/C++; passing the retired numeric key returns
OVRTX_API_ERROR.
4. Sensor versioning and GenericModelOutput
Search USD generators and assets for OmniSensorGeneric, omni:sensor:modelVersion, dotted versions such as 0.0.0, GenericModelOutput, and imports from the bundled GMO Python extension.
- The applied
OmniSensorGeneric*API_Nsuffix selects schema versionN;
unsuffixed schemas select version 1.
- Set
omni:sensor:modelVersiontolatestor a supported integer string for
that schema. Model versions count from 0 and restart at 0 when the schema version is bumped; the acoustic, IDS, generic lidar and radar models each support only 0 for schema 1 today, so 1 is rejected. Dotted semantic versions such as 0.0.0 are invalid. The [0.5.0] changelog bullets and the modelVersion doc string in the OVRTX 0.5 sensor schema ("has to be 1 or greater") say the value is a positive integer such as 1; that is wrong for these four models, and a newer section above [0.5.0] in the same changelog restates the rule, counting from 0. Follow this bullet, not those. The one 0.5.x model that does not count from 0 is the wave-propagation (WPM) lidar, OmniSensorGenericLidarWpmAPI, which 0.4 did not ship: 0.5.x accepts only 1 for it and later versions renumber it to 0, so author latest there.
- Replace
sourceName = "GenericModelOutput"with the compositePointCloud
RenderVar and author the channels the application consumes. Update parsing to read named tensors and params rather than a packed GMO buffer.
This works for lidar and radar only: the idealized depth sensor (IDS) publishes its depth data only as GenericModelOutput and has no PointCloud output, so under OVRTX 0.5 its GenericModelOutput RenderVar is skipped and yields no depth data. Report that gap to the user instead of inventing a replacement. The acoustic model has no PointCloud output in 0.5 either: besides GenericModelOutput it publishes separate TransmitterIds, ReceiverIds, ChannelIds, Amplitudes, TimeOffsetNs, Flags, SignalWayShape and SensorFrameData RenderVars, which no OVRTX 0.5 example or test reads and which later versions remove in favor of a SignalWays composite. Do not rewrite an acoustic GenericModelOutput RenderVar to PointCloud; tell the user which acoustic output needs a replacement rather than inventing one.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/update-0-4-to-0-5/SKILL.md
Popularity
- Repository stars
- 222
- Repository forks
- 33
- 7-day trend score
- 27
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/nvidia-omniverse/ovrtx/update-0-4-to-0-5)