02 Explainer figures
Reveal a diagram in the order you would explain it out loud.
- Floor
- 02 of 09
- Demos
- Narrated figure
- Skills
- HyperFramesRemotion
One idea per beat
An explainer figure is a diagram that builds while someone talks. Each beat adds one new element. When two things appear at once, the viewer reads neither, and the voice-over runs ahead of the eye.
The order of the reveal is the order of the explanation. If you would say “first the brief, then the brand kit”, the brief appears first, and the arrow between them draws in the direction the idea flows.
Narrated figure
A diagram that builds in the order you would say it. Step through it, then try the reveal styles and the bad one: everything at once.
1/5Every video starts as a brief: who it is for and what it has to do.
Keep context, but quieter
Once something has been explained it should stay on screen, so the viewer always knows where they are in the story. Dim it rather than removing it. The active element gets full contrast; everything else steps back.
Pick one reveal style per figure and use it for every element of the same kind. Consistency is what lets the viewer stop watching the motion and start reading the content.
Rules of thumb
- Reveals take 400 to 600 ms; the beat holds for as long as the caption takes to read aloud.
- Speech runs at about 150 words a minute, so a 12-word caption needs roughly 5 seconds.
- Connectors draw in the direction of flow, after the element they start from.
- Labels arrive with their shape, never after a long gap.
- Loops and feedback (like the critique arrow) get the accent color; the main path stays neutral.
In code
Both engines express beats as start times. In Remotion a <Sequence> mounts its children from a given frame. In HyperFrames each clip carries data-start and data-duration attributes.
Remotion
// One <Sequence> per beat. 72 frames is 2.4 s at 30 fps.
const BEAT = 72;
export const HowItWorks = () => (
<AbsoluteFill>
{nodes.map((node, i) => (
<Sequence key={node.label} from={i * BEAT} layout="none">
<Node label={node.label} />
</Sequence>
))}
</AbsoluteFill>
);HyperFrames
<!-- Each element is a clip with its own start time, in seconds. -->
<div class="clip node" data-start="0" data-duration="12" data-track-index="0">Brief</div>
<div class="clip node" data-start="2.4" data-duration="9.6" data-track-index="1">Brand kit</div>
<div class="clip node" data-start="4.8" data-duration="7.2" data-track-index="2">Scenes</div>