evaluate(scene, t) — no wall clocks, no randomness without a seed, so scrubbing and distributed rendering come for free.
How edits survive regeneration
Overlays address the scene by node id, state name, and timeline label — never by position or index. When an AI regenerates a scene it follows one contract (the regeneration contract): keep those names stable for every concept that survives the redesign. When the contract is broken anyway,composeScene skips the affected edits and reports them with a diagnosis naming the likely rename. The failure hierarchy:
- Contract followed (the measured common case) → edits survive.
- Contract broken → loud orphan report.
- Never: silent edit loss, or a render failure caused by base drift.

Address-keyed everything
The same stable-address namespace powers more than hand edits:- Batch: every data row is an overlay. Row keys are addresses (
nodes.name.content,timeline.enter.duration) — N personalized deterministic videos from one template, in parallel. - Sound:
audio.cuesanchor to timeline labels, so retime a step (or regenerate the scene) and the sound design moves with it. - Tooling:
reframe manifestdumps a scene’s editable surface;reframe verify-overlayproves an overlay still applies after a regen;reframe lintflags motion that has no stable address.
Address it before you render
Because the scene is data, structure validates before any pixels — wrong props, unknown labels, off-frame addresses surface as actionable errors, and motion is computable straight from the IR.See it survive
The regeneration contract — the exact rules an AI follows so edits reapply.