The rendering model
For each output frame, HyperFrames:- converts the frame number to a time;
- seeks the registered animation adapter to that state;
- updates time-based media and composition state;
- captures the frame;
- sends the result to the encoder.
What your composition must control
The frame must be reproducible from its inputs and current time.- Use a paused, registered timeline instead of animation driven by
requestAnimationFrame. - Do not use
Date.now()or the current system time. - Seed random values instead of calling unseeded
Math.random(). - Keep assets local or make sure they are fully available before rendering.
- Give the composition a finite duration, dimensions, and frame rate.
- Make custom frame adapters safe to seek in any order.
What “repeatable” does not mean
Seek-driven rendering controls time. It does not make different computers identical. Chrome versions, installed fonts, GPU behavior, operating systems, and encoder versions can produce small differences even when the composition is unchanged. If exact reproduction across machines matters, render in the same controlled environment:For frame-adapter authors
A frame adapter must follow four rules:- seeking the same frame twice returns the same state;
- frames can be requested out of order;
- no unfinished asynchronous work changes the committed frame later;
destroy()leaves no state behind for the next render.
Continue
Render a composition
Choose local, Docker, batch, or cloud rendering.
Improve render performance
Understand preview speed, capture cost, and render time.