Animation quality and frame range
An animation is accepted only after its timing, visual continuity, and delivery
format are checked. Keep authored Blender animation and authoritative OVPhysX
pose replay distinct.
When to Use
Use for OVRTX sequences, contact sheets, flicker/framing checks, or export decisions through the installed add-on/runtime.
Instructions
- Save a copy and record scene/add-on/runtime identity, FPS, frame start/end,
subframes, active camera, resolution, color presentation, and output format.
- Set keyframes on named objects/properties. Use Bezier for organic motion,
Linear for constant-speed mechanisms, and shape keys/drivers/NLA only when
the target export/runtime supports them. Set explicit interpolation and
avoid hidden Python frame handlers for portable delivery.
- For texture states, register all images to one canvas and use per-layer
holds, masks, opacity, emission, or UV changes. Do not crossfade unrelated
full-frame crops or animate background/HUD pixels as part of an asset.
- For the supported native drop/contact control, use
ovphysx-drop-contact-acceptance and replay complete authoritative pose
samples. Other physics sequences need a probed official client or an add-on
extension; never replace simulation with hand-authored ballistic keyframes
while claiming physics output.
Use blender-community-skill-bootstrap to install upstream blender-animation
when detailed transform, constraint, shape-key, driver, or NLA recipes are
needed. Use blender-python-execution for bounded authoring calls; render first,
middle, and last smoke frames before starting a full sequence.
Read references/blender-5-animation-api.md
before authoring keyframes. It gives context-free Blender 5.x transactions for
object properties, interpolation, shape keys, drivers, and NLA-safe inspection.
Keep creation and inspection in separate MCP calls so a failed audit cannot
partially rewrite the animation.
After authoring, run the read-only scripts/audit_animation.py against explicit
object names and RNA property paths. For MCP, prepend a request and append the
complete script in the same Python execution:
ANIMATION_AUDIT_REQUEST = {
"objects": ["GEO-subject"],
"properties": ["location", "rotation_euler"],
"frames": [1, 24, 48],
"require_keyframes": True,
"require_motion": True,
}
# Append scripts/audit_animation.py here.
For a saved caller-owned scene, use:
blender --background scene.blend --python scripts/audit_animation.py -- \
--objects GEO-subject --properties location rotation_euler \
--frames 1 24 48 --require-keyframes --require-motion
Require status: pass, no missing objects or properties, finite sampled values,
and the requested keyframe/motion checks. With require_keyframes, every named
property must have a direct key in the sampled interval; NLA, drivers, parents,
and constraints can still establish sampled motion when that gate is off. The
audit restores the original frame and never saves. A changing evaluated value
proves sampled motion, not that a
particular exporter or runtime can reproduce its source mechanism.
When the camera must contain an animated subject, run
blender-camera-framing at every declared framing sample (at minimum first,
middle, last, and motion extrema) and retain each safe-UV report. A fit at one
frame does not establish sequence-wide containment; choose whether the camera
is fixed to the union of sampled bounds or deliberately animated between fits.
Render and review
- Render one smoke frame plus first, middle, and last frames. Confirm the
intended camera and subject change before a long capture.
- For contiguous OVRTX capture, use
ovrtx-render-sequence to probe and
validate the developer contract. If the capability is absent, it routes to
extend-ovrtx-render-sequences; do not emulate native output with a Blender
frame loop.
- Validate frame dimensions, alpha/orientation, nonblank structure, completed
samples, and timing. Keep native OVRTX frames separate from
Blender/Cycles/EEVEE references.
- Inspect representative frames for subject dominance, silhouette stability,
texture registration, flicker, lighting continuity, framing, settling, and
final-frame readability. Reject and repair a failed dimension before export.
Delivery gates
- A movie is encoded only after the image sequence passes review.
- State whether effects are export-compatible, image-sequence-only, or
Blender-Python runtime behavior; do not claim GLB playback for unsupported
handlers.
- Return the requested frames or movie with camera/FPS/range metadata and known
limitations. Generate contact sheets, checksums, or a frame manifest only
when the caller requests review or reproducibility.
- If the runtime or sequence capability is unavailable, report the
blocker instead of silently substituting another renderer.
1---2name: animation-quality-and-frame-range3description: Author, render, and review Blender animation over a declared frame range, including keyframes, shape keys, drivers, texture states, and camera motion. Use for OVRTX sequences, contact sheets, flicker/framing checks, or export decisions through the installed add-on/runtime.4license: Apache-2.05---6# Animation quality and frame range78An animation is accepted only after its timing, visual continuity, and delivery9format are checked. Keep authored Blender animation and authoritative OVPhysX10pose replay distinct.1112## When to Use1314Use for OVRTX sequences, contact sheets, flicker/framing checks, or export decisions through the installed add-on/runtime.1516## Instructions17181. Save a copy and record scene/add-on/runtime identity, FPS, frame start/end,19 subframes, active camera, resolution, color presentation, and output format.202. Set keyframes on named objects/properties. Use Bezier for organic motion,21 Linear for constant-speed mechanisms, and shape keys/drivers/NLA only when22 the target export/runtime supports them. Set explicit interpolation and23 avoid hidden Python frame handlers for portable delivery.243. For texture states, register all images to one canvas and use per-layer25 holds, masks, opacity, emission, or UV changes. Do not crossfade unrelated26 full-frame crops or animate background/HUD pixels as part of an asset.274. For the supported native drop/contact control, use28 `ovphysx-drop-contact-acceptance` and replay complete authoritative pose29 samples. Other physics sequences need a probed official client or an add-on30 extension; never replace simulation with hand-authored ballistic keyframes31 while claiming physics output.3233Use `blender-community-skill-bootstrap` to install upstream `blender-animation`34when detailed transform, constraint, shape-key, driver, or NLA recipes are35needed. Use `blender-python-execution` for bounded authoring calls; render first,36middle, and last smoke frames before starting a full sequence.3738Read [references/blender-5-animation-api.md](references/blender-5-animation-api.md)39before authoring keyframes. It gives context-free Blender 5.x transactions for40object properties, interpolation, shape keys, drivers, and NLA-safe inspection.41Keep creation and inspection in separate MCP calls so a failed audit cannot42partially rewrite the animation.4344After authoring, run the read-only `scripts/audit_animation.py` against explicit45object names and RNA property paths. For MCP, prepend a request and append the46complete script in the same Python execution:4748```python49ANIMATION_AUDIT_REQUEST = {50 "objects": ["GEO-subject"],51 "properties": ["location", "rotation_euler"],52 "frames": [1, 24, 48],53 "require_keyframes": True,54 "require_motion": True,55}56# Append scripts/audit_animation.py here.57```5859For a saved caller-owned scene, use:6061```text62blender --background scene.blend --python scripts/audit_animation.py -- \63 --objects GEO-subject --properties location rotation_euler \64 --frames 1 24 48 --require-keyframes --require-motion65```6667Require `status: pass`, no missing objects or properties, finite sampled values,68and the requested keyframe/motion checks. With `require_keyframes`, every named69property must have a direct key in the sampled interval; NLA, drivers, parents,70and constraints can still establish sampled motion when that gate is off. The71audit restores the original frame and never saves. A changing evaluated value72proves sampled motion, not that a73particular exporter or runtime can reproduce its source mechanism.7475When the camera must contain an animated subject, run76`blender-camera-framing` at every declared framing sample (at minimum first,77middle, last, and motion extrema) and retain each safe-UV report. A fit at one78frame does not establish sequence-wide containment; choose whether the camera79is fixed to the union of sampled bounds or deliberately animated between fits.8081## Render and review82831. Render one smoke frame plus first, middle, and last frames. Confirm the84 intended camera and subject change before a long capture.852. For contiguous OVRTX capture, use `ovrtx-render-sequence` to probe and86 validate the developer contract. If the capability is absent, it routes to87 `extend-ovrtx-render-sequences`; do not emulate native output with a Blender88 frame loop.893. Validate frame dimensions, alpha/orientation, nonblank structure, completed90 samples, and timing. Keep native OVRTX frames separate from91 Blender/Cycles/EEVEE references.924. Inspect representative frames for subject dominance, silhouette stability,93 texture registration, flicker, lighting continuity, framing, settling, and94 final-frame readability. Reject and repair a failed dimension before export.9596## Delivery gates9798- A movie is encoded only after the image sequence passes review.99- State whether effects are export-compatible, image-sequence-only, or100 Blender-Python runtime behavior; do not claim GLB playback for unsupported101 handlers.102- Return the requested frames or movie with camera/FPS/range metadata and known103 limitations. Generate contact sheets, checksums, or a frame manifest only104 when the caller requests review or reproducibility.105- If the runtime or sequence capability is unavailable, report the106 blocker instead of silently substituting another renderer.