Automated summary
Routing guide for implementing changes in the OVRTX Blender add-on: for each feature type it lists the starting modules, the modules to continue through, and the tests to run.
Strengths
- Granular per-feature routing table (properties/UI, render settings, OpenPBR materials, scene topology, interactive edits, sessions/sequences, sensor-AOV results, viewport, diagnostics) with entry files and required tests.
- Encodes the repository's architectural constraints: guarded `bpy` imports so pure modules stay testable, and all worker calls kept on the existing serialized render thread.
- Forces an ownership classification step (durable USD topology versus add-on-owned value) before any coding.
- States a clear boundary: work in the distributed source checkout and probe a minimal capability before reporting a missing runtime capability.
Limitations
- Tightly bound to the OVRTX/Omniverse repository; of little use for other add-ons or engines.
- The supplied text is cut off mid-section in « Classify ownership before coding », leaving the classification procedure incomplete.
- Assumes prior knowledge of Blender, USD and the runtime architecture; no code snippets or concrete commands are included.
Use it when adding or changing a feature in the OVRTX Blender add-on and you need to know which modules to touch and which tests to run.
Skip it for general Blender add-on work or when you want standalone code examples rather than routing inside a specific repository.
Security analysis
SafeThis is a purely editorial/process guide for modifying a Blender add-on source tree. It contains no executable payloads, no shell pipelines, no network fetches, no credential or environment access, and no obfuscation. It references internal repository paths and test suites, which limits applicability, but everything it directs (editing Python modules, running pytest, launching a Blender fixture) is ordinary developer workflow with no destructive or exfiltration behavior. No prompt-injection or instruction-override attempts were present in the content.
No concerns found
How this analysis is madeExamples
Add a motion-blur exposure setting to the OVRTX add-on render panel: wire it through RTPT_RENDER_SETTINGS, RenderRequest and scene composition, then update the focused render-property and live-change tests.Add a new sensor/AOV result product in the OVRTX add-on and surface it through the typed result model and engine presentation layer, with the matching render_requests and runtime client tests.Add a toggle to an existing OVRTX Blender panel, following the property/panel route from properties.py through ui.py and engine.py, and tell me which panel tests to extend.name: blender-addon-extension-development description: Route and implement source changes in the OVRTX Blender add-on. Use when adding Blender properties or UI, render settings, scene or USD conversion, interactive edits, render sequences, sensor products, viewport presentation, diagnostics, or tests. license: "Apache-2.0" metadata: author: "Max Bickley" version: "0.1" team: "omniverse" domain: "physical-ai" tags: - blender - omniverse - ovrtx - addon-development
Blender add-on extension development
When to Use
Use when adding Blender properties or UI, render settings, scene or USD conversion, interactive edits, render sequences, sensor products, viewport presentation, diagnostics, or tests.
Boundary
Work in the distributed source checkout and use its documented add-on and runtime interfaces. Start with an add-on implementation and use a minimal capability probe before reporting a missing runtime capability.
Use paths below relative to the source root. Preserve guarded bpy imports so pure
modules and tests remain importable outside Blender. Keep all worker calls on the
existing serialized session-owner/render thread.
Instructions
Choose the narrowest route before editing:
| Feature | Start here | Continue through | Required tests |
| --- | --- | --- | --- |
| Blender property or panel | addon/ovrtx_blender_example/properties.py | ui.py, engine.py, typed request/composition module | focused property and panel tests such as tests/test_rtpt_scene_properties.py and tests/test_rtpt_render_panel.py |
| Render setting | properties.py::RTPT_RENDER_SETTINGS and RtptSettingSpec | render_requests.py::RenderRequest, ovrtx_scene_composition.py, view_update_stream.py, runtime_scheduler.py | test_rtpt_scene_properties.py, test_rtpt_render_product_authoring.py, test_rtpt_live_change.py |
| Material graph/OpenPBR | materialx_openpbr_conversion.py::scene_layer_from_materials | texture_materialization.py, blender_signal_translation.py::_material_scene_layer_from_scene | test_materialx_openpbr_conversion.py, test_texture_materialization.py, test_render_requests.py |
| Scene object/topology | scene_generation.py::SceneGenerationOwner | _stock_export, _compile_add_on_opinions, topology reconciliation, topology_edit_fallback.py | test_scene_generation.py, test_scene_generation_contract.py, test_topology_edit_fallback.py |
| Interactive value edit | blender_signals.py and blender_signal_translation.py | blender_interactive_edit_builders.py, interactive_edit_planner.py, value_edit_conversion.py, interactive_edit_workflow.py, runtime_scheduler.py | corresponding test_blender_*, test_interactive_*, test_value_edit_conversion.py |
| Session or sequence | render_requests.py::RenderRequest | ovrtx_session.py, ovrtx_session_controller.py, runtime_scheduler.py, engine.py | test_ovrtx_session.py, test_ovrtx_session_controller.py, test_runtime_scheduler.py, test_final_render_on_rpc_thread.py |
| Sensor/AOV result | render_requests.py and ovrtx_runtime_client.py | typed result model, scheduler publication, engine.py presentation | test_render_requests.py, test_ovrtx_runtime_client.py, scheduler and presentation tests |
| Viewport upload/display | viewport_handoff.py and viewport_presentation.py | viewport_render_thread.py, engine.py | test_viewport_handoff.py, test_viewport_presentation.py, test_viewport_render_thread.py |
| Preflight/diagnostics | preflight.py or the owning module's diagnostics model | user_messages.py, ui.py | test_addon_preflight.py, test_user_messages.py, focused diagnostics test |
For a specialized route, use the matching extend-ovrtx-* skill when present.
Classify ownership before coding
Write down these decisions in the implementation plan:
- Identify the Blender signal and the normalized add-on-owned value.
- Classify it as durable USD topology, durable USD value, same-session runtime value, session identity, worker-startup configuration, or presentation-only.
- Identify the typed request/result boundary. Do not pass arbitrary dictionaries across an existing dataclass boundary just to avoid modeling it.
- Decide whether omission means
INHERIT, whether an explicit value meansOVERRIDE, and how reset returns to inherited behavior. - Identify the observable acceptance result: authored USD, effective setting, typed product, rendered pixels, or an explicit rejection diagnostic.
Implementation
- Add pure normalized types and conversion policy in a focused module. Reject unsupported input explicitly; do not silently approximate topology or units.
- Add Blender properties and registration in
properties.pyand__init__.pyonly when the feature is user-configurable. - Carry the normalized value through
RenderRequestor the appropriate edit intent/result type. Include it in identity/digests only when it changes the composed session. - Author durable USD through scene generation or composition. Route supported same-session values through the established edit/update stream. Replace the generation or session for topology and unsupported live writes.
- Add UI after the typed path works. Display effective state and rejection or fallback reason, not only the requested value.
- Add unit tests at each boundary and one included fixture/probe that observes the actual product with the installed runtime when available.
Architectural invariants
- Keep Blender callbacks and UI code free of blocking runtime calls.
- Submit runtime work through
RuntimeScheduler/OvrtxSessionController; do not instantiate another worker client in a property callback or operator. - Keep current-scene generation separate from exact-stage validation. Exact-stage requests must not replace source materials, lights, or topology.
- Preserve
SceneGenerationOwner.replace/accept/reject: a failed candidate must leave the last accepted generation usable. - Keep material, lighting, color, and viewport presentation ownership singular. Do not compensate for a renderer problem by mutating source material values.
- Make cached keys depend on every input that changes output, and test both reuse and invalidation.
- Return typed results for non-image products; do not force point clouds or AOVs through an RGBA-only result model.
- Never report success from an accepted API call alone. Check the composed stage, effective state, product metadata, and visible/numeric output as applicable.
Validation
Run the focused pure-Python tests first, then the complete tests suite.
For Blender-dependent behavior, run the documented included Blender fixture.
For runtime-dependent behavior, use the documented runtime interface and record
versions, request, response, diagnostics, and a caller-selected artifact path.
Test success, inheritance/reset, invalid input, missing optional capability, cache invalidation, session replacement or reuse, cancellation/shutdown, and plain-Python import behavior where relevant.
Escalation gate
Report a runtime capability gap only when the smallest documented-interface probe shows that the typed operation cannot be expressed, is rejected by a compatible runtime, or cannot return enough metadata to distinguish success from false success. Missing add-on routing, USD authoring, threading, UI, conversion, caching, or diagnostics remains add-on work.
Handoff
Return changed paths and symbols, focused and full-suite results, fixture
or visual evidence, compatibility notes, and exactly one boundary decision:
addon-only or runtime-capability-missing with the minimal probe.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/blender-add-on-extension-development-ms2s7cy1' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/blender-add-on-extension-development-ms2s7cy1/download' --output '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md.part' && mv '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md.part' '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md' && test -s '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/blender-addon-extension-development' && cp -R '.skill-downloads/blender-add-on-extension-development-ms2s7cy1' '.claude/skills/blender-addon-extension-development'Codex
test -f '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md' && test -s '.skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/blender-addon-extension-development' && cp -R '.skill-downloads/blender-add-on-extension-development-ms2s7cy1' '.agents/skills/blender-addon-extension-development'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/blender-add-on-extension-development-ms2s7cy1'openskills read 'blender-add-on-extension-development-ms2s7cy1'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/blender-add-on-extension-development-ms2s7cy1/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.