Context
I rebuilt a ~56 s agency-made SaaS promo (dark navy background, blue/pink glows, kinetic typography, a tilted app mockup, floating 3D icons) with rustmotion: 25 scenes, 1920×1080, validated and rendered. Comparing the two videos side by side every 0.5 s surfaced gaps that careful scenario authoring cannot close. They are engine limitations, not authoring mistakes, so I'm grouping them here.
The main one is the first: the reference video builds up its elements over time, and rustmotion's scene model tears them down at every cut.
1. Elements cannot build up across beats (main request)
In the reference, the frame is built up:
- a sentence stays on screen while its next words arrive (
On vous a promis que → l'IA allait tout changer);
- the app mockup rises at ~19 s and stays until ~29 s while the headline, a rotating benefit line, a pointer, a close-up and then six floating model logos come and go on top of it;
- the background lighting morphs continuously: glows come from the bottom corners between ~10 and 18 s and from the top elsewhere, with no cut.
In a slide view, each scene is rendered alone, and the transition blends two finished frames (transition.rs). Nothing survives a cut. The possible workarounds are all partial:
| Workaround |
What it loses |
One long scene, with start_at/end_at on every element |
Per-beat camera keyframes, per-beat layout, and readability: a 10 s scene with 20 time-windowed children is hard to author and review |
world view |
Continuity comes from the camera travelling through space, so every beat has to live somewhere else in the world. Elements still don't stay put in the frame while others arrive |
| Duplicate the persistent element in consecutive scenes |
Its animation restarts at each cut, and the fade transition makes it flicker |
Wanted: a way to declare an element (or a layer) that spans several consecutive beats and keeps its own animation clock, while each beat adds or removes elements on top of it. Two possible shapes:
- a view-level or scenario-level
layers / persist track;
- scenes that can overlap on the v2 absolute timeline (
at) and composite on top of each other instead of replacing one another.
Background values should also interpolate between beats inside such a span (background.transition exists but only for scene-to-scene).
2. halo only draws circles
HaloZone has a single radius. The reference uses:
- a thin, wide elliptical light along the top edge;
- a dark octagonal frame (corners cut diagonally) over the glows.
Neither can be expressed. An ellipse needs radius_x/radius_y (or scale_y), plus a rotation. The chamfered frame would be possible with style.clip-path, but it is currently inert (#339).
3. No radial zoom-blur ("tunnel") transition
At ~5 s the reference exits a scene through a radial zoom blur: the content streaks outward from the centre, then the next scene appears. zoom_in scales a sharp frame buffer. The per-element motion_blur effect doesn't help either, because the effect applies to the whole frame at the cut.
Wanted: a zoom_blur (radial blur) transition with strength and an origin.
4. No chromatic fringe on a single element
The reference shows an icon card arriving with red/cyan channel separation. chromatic_wipe does this for a transition only. Wanted: an animation effect such as { "name": "chromatic_aberration", "amount": …, "duration": … } on any node.
5. pointer has no outline-only style
PointerTone is light | dark, both filled. The reference pointer is a white outline over a transparent fill. Wanted: e.g. "fill": "none" or tone: "outline".
6. No glossy 3D material for shapes and icons
The reference's 4-point sparkles and model-logo tiles look like rendered 3D: a highlight, a specular edge, a soft inner shade, and depth of field (some tiles blurred because they're out of focus). The best available approximation is a flat SVG gradient, and per-element filter: blur animated by hand. Depth of field tied to style.depth or to a camera focus distance would cover the blur part.
Priority, in my view
1 ≫ 2 > 3 > 5 > 4 > 6. Point 1 is what makes a rustmotion render read as a series of slides instead of a continuous motion design piece.
Context
I rebuilt a ~56 s agency-made SaaS promo (dark navy background, blue/pink glows, kinetic typography, a tilted app mockup, floating 3D icons) with rustmotion: 25 scenes, 1920×1080, validated and rendered. Comparing the two videos side by side every 0.5 s surfaced gaps that careful scenario authoring cannot close. They are engine limitations, not authoring mistakes, so I'm grouping them here.
The main one is the first: the reference video builds up its elements over time, and rustmotion's scene model tears them down at every cut.
1. Elements cannot build up across beats (main request)
In the reference, the frame is built up:
On vous a promis que→l'IA allait tout changer);In a
slideview, each scene is rendered alone, and thetransitionblends two finished frames (transition.rs). Nothing survives a cut. The possible workarounds are all partial:start_at/end_aton every elementcamerakeyframes, per-beatlayout, and readability: a 10 s scene with 20 time-windowed children is hard to author and reviewworldviewWanted: a way to declare an element (or a layer) that spans several consecutive beats and keeps its own animation clock, while each beat adds or removes elements on top of it. Two possible shapes:
layers/persisttrack;at) and composite on top of each other instead of replacing one another.Background values should also interpolate between beats inside such a span (
background.transitionexists but only for scene-to-scene).2.
haloonly draws circlesHaloZonehas a singleradius. The reference uses:Neither can be expressed. An ellipse needs
radius_x/radius_y(orscale_y), plus a rotation. The chamfered frame would be possible withstyle.clip-path, but it is currently inert (#339).3. No radial zoom-blur ("tunnel") transition
At ~5 s the reference exits a scene through a radial zoom blur: the content streaks outward from the centre, then the next scene appears.
zoom_inscales a sharp frame buffer. The per-elementmotion_blureffect doesn't help either, because the effect applies to the whole frame at the cut.Wanted: a
zoom_blur(radial blur) transition withstrengthand anorigin.4. No chromatic fringe on a single element
The reference shows an icon card arriving with red/cyan channel separation.
chromatic_wipedoes this for a transition only. Wanted: an animation effect such as{ "name": "chromatic_aberration", "amount": …, "duration": … }on any node.5.
pointerhas no outline-only stylePointerToneislight|dark, both filled. The reference pointer is a white outline over a transparent fill. Wanted: e.g."fill": "none"ortone: "outline".6. No glossy 3D material for shapes and icons
The reference's 4-point sparkles and model-logo tiles look like rendered 3D: a highlight, a specular edge, a soft inner shade, and depth of field (some tiles blurred because they're out of focus). The best available approximation is a flat SVG gradient, and per-element
filter: bluranimated by hand. Depth of field tied tostyle.depthor to a camera focus distance would cover the blur part.Priority, in my view
1 ≫ 2 > 3 > 5 > 4 > 6. Point 1 is what makes a rustmotion render read as a series of slides instead of a continuous motion design piece.