kinetograph.
Terminology

Determinism

A frame depends only on the project and its frame number, so it looks the same every time.

Kinetograph renders a frame as a pure function of the project and the frame number. Nothing reads the real clock.

To keep this true, it replaces the sources of change a project might use. Date.now() and performance.now() return a time worked out from the frame. Math.random() is seeded from the frame. Timers and requestAnimationFrame run on the frame clock.

When you want a random value that is the same in every render, use random(seed). A number or string seed always gives the same number. It matches Remotion's random bit for bit.

const wobble = random('card-1') * 10;

This is why a frame can be drawn alone, out of order, or on a worker thread, and still match a full render.

Coming from Remotion: the same rule, and the same random. Coming from HyperFrames: GSAP timelines are paused and seeked to each frame's time.

See also

On this page