The asset library ships animated vector overlays in library/svg/ (sparkles, confetti burst, lower third, subscribe bell, …) that render frame-accurately in previews and exports. Adding a new one requires zero JavaScript — just an .svg file that follows the project convention.
The convention (documented in CLAUDE.md → "Authoring animated SVGs"):
- Root
<svg> needs width/height (or a viewBox)
- Animate with CSS
@keyframes in a <style> block — SMIL (<animate>) is not time-controlled
- Never write a literal
animation-delay; stagger with the --d custom property instead: style="--d:0.4s"
animation-fill-mode: both for one-shot intros, infinite for loops
- For rotation/scale around an element's own center:
transform-box: fill-box; transform-origin: center;
- Self-contained — no external hrefs
Look at library/svg/underline-swoosh.svg (draw-on via stroke-dashoffset) or confetti-burst.svg for working examples.
Ideas: countdown ring (3-2-1), animated fire/flame, wavy section divider, "swipe up" hand, laurel-wreath award badge, live-recording REC dot, arrow-circle CTA.
Checklist
If scrubbing doesn't drive your animation, the usual culprit is rule 3 (a literal animation-delay).
The asset library ships animated vector overlays in
library/svg/(sparkles, confetti burst, lower third, subscribe bell, …) that render frame-accurately in previews and exports. Adding a new one requires zero JavaScript — just an.svgfile that follows the project convention.The convention (documented in
CLAUDE.md→ "Authoring animated SVGs"):<svg>needswidth/height(or aviewBox)@keyframesin a<style>block — SMIL (<animate>) is not time-controlledanimation-delay; stagger with the--dcustom property instead:style="--d:0.4s"animation-fill-mode: bothfor one-shot intros,infinitefor loopstransform-box: fill-box; transform-origin: center;Look at
library/svg/underline-swoosh.svg(draw-on via stroke-dashoffset) orconfetti-burst.svgfor working examples.Ideas: countdown ring (3-2-1), animated fire/flame, wavy section divider, "swipe up" hand, laurel-wreath award badge, live-recording REC dot, arrow-circle CTA.
Checklist
.svginlibrary/svg/following the rules abovenode server.js→ http://localhost:7777 → SVG tab → drag it onto a video track → scrub the playhead back and forth (the animation must follow the playhead, not wall-clock time)If scrubbing doesn't drive your animation, the usual culprit is rule 3 (a literal
animation-delay).