Skip to Content

Determinism

One frame loop feeds every format, and frame time is exactly index / fps — never wall-clock.

That one decision produces a set of guarantees you can rely on.

What it guarantees

Two exports are identical

Render the same project twice and you get the same bytes. There is no “re-render and hope it looks the same”.

A re-render resumes identical work

If a render is interrupted — a crash, a power cut — restarting it produces exactly the frames the first attempt would have. Nothing drifts.

The preview is the export

The viewport, the secondary view panes, library card previews, the export preview dialog, the offline export loop and the pixel-comparison test harness all draw from the same snapshot builder.

They are not two renderers kept in sync. They are one renderer called from six places — which is why “the export doesn’t match the preview” is not a class of bug that can exist here.

Particles are reproducible

A deterministic emitter means the same frame always produces the same field. Scrub backwards and you see the truth, not a different roll of the dice.

The renderer can be tested against reference images

A pixel-comparison harness renders a catalogue of scenes through the real engine and compares them to committed reference PNGs. That is only possible because the same input always produces the same output.

What it means for you

SituationConsequence
A client asks for a change to one shotRe-render just that range; it will cut against the old material exactly
You render a review copy and then a masterThe master is the review copy at higher resolution, not a different take
An export failed halfwayRestart it; nothing about the first half was arbitrary
Someone else renders your projectSame file

The refusal rules

Determinism is one half of the design. The other half is refusing to produce a plausible-looking wrong result:

  • Every path asserts on a real frame count. A zero-frame encode is an error, not a silently successful black video.
  • The renderer fails loudly if the GPU backend did not initialise, rather than handing the encoder an untouched canvas.
  • The export preview reports empty frames before anything is written.

The underlying rule, stated in the codebase’s own conventions: producing a plausible-looking wrong result is considered worse than failing.

Last updated on