What the engine decides.
Three of them, and none is a setting you pass. They are the reason the output is reproducible, shaped, and not generic.
The clock refuses wall time.
A frame is seeked, not played. Date, requestAnimationFrame and Math.random are coerced to frame time at boot, so there is no wall clock to read and nothing un-seeded to draw from. Anything that reaches for real time is refused by name before a pixel is drawn.
So renderFrame(n) is pure in n, and frame 412 comes out the same whether it renders first or last. That is what lets one film shard across parallel browser tabs and what makes two renders of a scene diff-able. make probe renders sampled frames in scrambled order and diffs the DOM, which tests the property rather than restating it.
renderFrame(n) // pure in n → same bytes, any order → make probe // verifies it
A director picks every cut.
You do not choose a transition per beat. A motion director reads the brand's motion personality and picks one per junction: it covers a hard background jump with a sting, and whips only where the background does not change. One cut family per film, so a film reads as a grammar and not as a sampler.
Type obeys the same director. A headline splits by word or by character and each unit enters in reading order, left to right and top to bottom, rising from its own baseline and settling before it exits. Every cut the director places is also a sound cue: a mixer puts a whoosh under each cut and a reveal under each sting, at times derived from the same JSON.
cuts → whoosh · stings → revealThe clips on this site are exported without an audio track, so the score is the one thing here you have to render to hear.
Correct is not good enough.
Any static engine makes technically correct video. Making it worth watching is the hard half, so a film climbs a ladder before it ships: the schema and the copy rules, then a critique of whether each beat earns its seconds, then a lock on the theme's palette and fonts, then contrast, overlap and safe zones, and last a vision gate that looks at the rendered frames and scores composition and fidelity.
A rung can be waived, and a waiver has to state its reason in the scene file or the build stops. That one sentence is the whole mechanism: it turns a reflex back into a decision.
validate → judgemake validate // schema, no em-dash make critique // value of each beat make designspec-check // palette + font lock make audit // contrast · overlap make judge // vision gate
Everything else is yours.
The engine decides how a film holds together. What goes into it comes out of the arsenal, and you compose that part yourself.