Extend OVRTX render sequences
When to Use
Use when adding sequence capture or Blender final-render animation support.
Boundary
Implement orchestration in a feature branch of the distributed source checkout.
Reuse the documented session lifecycle for Blender operators, queues, manifests,
and frame writers.
Code map
addon/ovrtx_blender_example/engine.py: OvrtxRenderEngine.render is
the Blender final-render entrypoint; _run_final_render_job owns one render
job's progress, cancellation, and result publication.
addon/ovrtx_blender_example/render_requests.py: RenderRequest and
snapshot_key define frame state versus session identity.
addon/ovrtx_blender_example/ovrtx_session.py: reuse_decision
determines whether adjacent frames may share a session.
addon/ovrtx_blender_example/ovrtx_session_controller.py:
OvrtxSessionController.ensure and .render serialize ensure/update/readback
on the owner thread. Extend this layer; do not call the runtime client from a
Blender UI thread.
addon/ovrtx_blender_example/runtime_scheduler.py:
RuntimeScheduler.tick_viewport is the model for ordered update/step/render
work and diagnostics.
addon/ovrtx_blender_example/ovrtx_session_controller.py: keep selected
product and render-variable forwarding centralized in raw acquisition.
- Add a small
render_sequence.py coordinator rather than embedding a
multi-frame loop inside OvrtxRenderEngine.render. Give it an injectable
frame-state adapter and writer so lifecycle tests do not require Blender/GPU.
Instructions
- Define the sequence contract: frame range, time mapping, camera, resolution,
refinement target, reset policy, output format, cancellation, and resume.
- Keep one session for compatible adjacent frames. Apply each frame's complete
scene/camera update atomically, wait for the declared completion boundary,
and perform one accepted readback.
- Make re-key, reset, dropped-frame, retry, cancellation, and resume boundaries
explicit. Never disguise independently warmed shards as one continuous take.
- Write frames atomically and record source, add-on, worker, client, GPU,
camera, frame/time, completed samples, timings, and checksums.
- Test lifecycle state transitions without a GPU, then run a short animated
camera fixture through the real runtime. Inspect first/middle/last, a contact
sheet, flicker, temporal history, and render time.
Required tests
Extend tests/test_final_render_on_rpc_thread.py,
test_offthread_session_lifecycle.py, test_ovrtx_session.py,
test_ovrtx_session_controller.py, and test_render_requests.py. Add
test_render_sequence.py for frame ordering, one ensure per compatible run,
one readback per completed frame, cancellation, failed atomic writes, resume,
and explicit re-key boundaries.
Client/server escalation gate
Probe the official API for persistent session reuse, time/camera updates,
completion signaling, readback, and cancellation. Escalate only when one of
those primitives is absent or observably incorrect in a minimal direct-client
test. Per-frame process startup caused by add-on request identity, scheduling,
or state management remains add-on work.
Handoff
Return the changed files, tests run, one representative native sequence result,
and any add-on/runtime boundary finding. Commit or build review bundles only
when the user requests them.
1---2name: extend-ovrtx-render-sequences3description: Extend the OVRTX Blender add-on with persistent-session animated rendering, atomic scene updates, bounded refinement, one readback per frame, resume records, and temporal validation. Use when adding sequence capture or Blender final-render animation support.4license: Apache-2.05---6# Extend OVRTX render sequences78## When to Use910Use when adding sequence capture or Blender final-render animation support.1112## Boundary1314Implement orchestration in a feature branch of the distributed source checkout.15Reuse the documented session lifecycle for Blender operators, queues, manifests,16and frame writers.1718## Code map1920- `addon/ovrtx_blender_example/engine.py`: `OvrtxRenderEngine.render` is21 the Blender final-render entrypoint; `_run_final_render_job` owns one render22 job's progress, cancellation, and result publication.23- `addon/ovrtx_blender_example/render_requests.py`: `RenderRequest` and24 `snapshot_key` define frame state versus session identity.25- `addon/ovrtx_blender_example/ovrtx_session.py`: `reuse_decision`26 determines whether adjacent frames may share a session.27- `addon/ovrtx_blender_example/ovrtx_session_controller.py`:28 `OvrtxSessionController.ensure` and `.render` serialize ensure/update/readback29 on the owner thread. Extend this layer; do not call the runtime client from a30 Blender UI thread.31- `addon/ovrtx_blender_example/runtime_scheduler.py`:32 `RuntimeScheduler.tick_viewport` is the model for ordered update/step/render33 work and diagnostics.34- `addon/ovrtx_blender_example/ovrtx_session_controller.py`: keep selected35 product and render-variable forwarding centralized in raw acquisition.36- Add a small `render_sequence.py` coordinator rather than embedding a37 multi-frame loop inside `OvrtxRenderEngine.render`. Give it an injectable38 frame-state adapter and writer so lifecycle tests do not require Blender/GPU.3940## Instructions41421. Define the sequence contract: frame range, time mapping, camera, resolution,43 refinement target, reset policy, output format, cancellation, and resume.442. Keep one session for compatible adjacent frames. Apply each frame's complete45 scene/camera update atomically, wait for the declared completion boundary,46 and perform one accepted readback.473. Make re-key, reset, dropped-frame, retry, cancellation, and resume boundaries48 explicit. Never disguise independently warmed shards as one continuous take.494. Write frames atomically and record source, add-on, worker, client, GPU,50 camera, frame/time, completed samples, timings, and checksums.515. Test lifecycle state transitions without a GPU, then run a short animated52 camera fixture through the real runtime. Inspect first/middle/last, a contact53 sheet, flicker, temporal history, and render time.5455## Required tests5657Extend `tests/test_final_render_on_rpc_thread.py`,58`test_offthread_session_lifecycle.py`, `test_ovrtx_session.py`,59`test_ovrtx_session_controller.py`, and `test_render_requests.py`. Add60`test_render_sequence.py` for frame ordering, one ensure per compatible run,61one readback per completed frame, cancellation, failed atomic writes, resume,62and explicit re-key boundaries.6364## Client/server escalation gate6566Probe the official API for persistent session reuse, time/camera updates,67completion signaling, readback, and cancellation. Escalate only when one of68those primitives is absent or observably incorrect in a minimal direct-client69test. Per-frame process startup caused by add-on request identity, scheduling,70or state management remains add-on work.7172## Handoff7374Return the changed files, tests run, one representative native sequence result,75and any add-on/runtime boundary finding. Commit or build review bundles only76when the user requests them.