Blender add-on extension development

VerifiedSafe

Develop and modify the OVRTX Blender add-on for adding properties, UI, render settings, scene/USD conversion, interactive edits, and diagnostics.

Sby Skills Guide Bot
DevelopmentAdvanced
7/27/2026
Claude CodeCodex
#blender#omniverse#addon-development#usd#render-pipeline

Recommended for

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.
When to use it

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.

When not to use it

Skip it for general Blender add-on work or when you want standalone code examples rather than routing inside a specific repository.

Security analysis

Safe
Quality score84/100

This 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 made

Examples

New render setting
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.
New sensor product
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.
New UI panel toggle
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:

  1. Identify the Blender signal and the normalized add-on-owned value.
  2. Classify it as durable USD topology, durable USD value, same-session runtime value, session identity, worker-startup configuration, or presentation-only.
  3. Identify the typed request/result boundary. Do not pass arbitrary dictionaries across an existing dataclass boundary just to avoid modeling it.
  4. Decide whether omission means INHERIT, whether an explicit value means OVERRIDE, and how reset returns to inherited behavior.
  5. Identify the observable acceptance result: authored USD, effective setting, typed product, rendered pixels, or an explicit rejection diagnostic.

Implementation

  1. Add pure normalized types and conversion policy in a focused module. Reject unsupported input explicitly; do not silently approximate topology or units.
  2. Add Blender properties and registration in properties.py and __init__.py only when the feature is user-configurable.
  3. Carry the normalized value through RenderRequest or the appropriate edit intent/result type. Include it in identity/digests only when it changes the composed session.
  4. 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.
  5. Add UI after the typed path works. Display effective state and rejection or fallback reason, not only the requested value.
  6. 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 files

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

From 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 installation
openskills 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 sync

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

Related skills