Preview equals export, by construction
10 July 2026
Phlo Presentation plays a presentation in the browser and can render the same thing to an MP4 on the client, with nothing uploaded. The interesting part is why the two look identical.
An editor that previews with CSS and exports with a renderer is really two implementations of the same animation, and they drift. A zoom that eases slightly differently on export is not a bug you find in review; it is a bug your viewer finds. So the player carries one definition per transition, holding both renderings side by side: the pp- prefixed CSS animation the browser plays, and the mathematical curve the canvas renderer draws for that same moment in time.
push: {css: 'pp-scale', amount: 10,
vars(a, d){ return {'--pp-s0': String(1 - a / 100)} },
curve(tt, dur){ ... }},
Add a transition and you add both, or it does not work at all. Export is then just the player driven by a canvas clock instead of an audio one.
The same file answered a question that could have cost a whole subsystem. Slow, controlled movement across a shot normally means a keyframe editor. Instead there is a third slot beside in and out, called during, where the duration of the item is the duration of the animation. Progressive moves such as pan and Ken Burns run once across the shot; loops such as float and sway run on a fixed period. No keyframes, no timeline editor for curves, and it renders identically in both paths.
Phlo Presentation 1.0. See the Presentation handbook.