Animation presets and templates

Put a ready-made entrance, exit, emphasis or loop on any clip, and place lower thirds, logo animations and social layouts whose text, colours and logo you fill in, from the bin and the Inspector or by an agent with applyPreset and addTemplate.

Two ways to reuse motion: an animation preset keys a named animation onto a clip, and a template is a ready-made comp (lower third, logo animation, social layout) whose text, colours and pictures are fields you fill in.

Presets. A preset keys the clip's own channels, relative to where the clip already is: scale and opacity multiply the clip's value and everything else adds to it, so "Slide up" works wherever the clip sits and however big it is. Each has an anchor: in plays from the clip's start and settles on its values, out starts from them and ends at the clip's end, at is an emphasis at a time you pick (the playhead, or at), and loop spans the whole clip. Keys already in the window a preset covers are replaced; the rest stay, so an In, an Out and a loop on another channel live side by side.

grouppresets
Infade-in · pop-in · slide-up-in · slide-down-in · slide-left-in (from the right) · slide-right-in (from the left) · drop-in · zoom-in · spin-in · whip-in (with motion blur) · rise-blur · draw-on (shape layers)
Outfade-out · pop-out · slide-up-out · slide-down-out · slide-left-out · slide-right-out · zoom-out · spin-out · whip-out · sink-blur · draw-off
At (emphasis)pulse · shake · wobble · bounce · flash
Loopfloat · breathe · sway · spin · wiggle

Every In / Out / At preset is 0.35–1 s long; length stretches it (a clip shorter than the preset squeezes it in). A saved preset is a JSON file in library/presets/, shared by every project:

{ "id": "fly-in", "name": "Fly in", "group": "Saved", "anchor": "in", "length": 0.6,
  "keys": { "x": [ { "t": 0, "v": -500 }, { "t": 0.6, "v": 0, "ease": "ease-out" } ],
            "opacity": [ { "t": 0, "v": 0 }, { "t": 0.3, "v": 1 } ] },
  "props": { "motionBlur": 180 } }   // optional: motionBlur, motionBlurSamples

t is seconds into the preset (for a loop, 0…1 of the clip). Channels: x y scale rotation opacity blur anchorX anchorY trimStart trimEnd trimOffset brightness saturation hue grayscale shake rgbSplit glow fontSize letterSpacing pathOffset.

Templates. Placing one adds its own comp (so two lower thirds can show two names) and a comp clip showing it with fit:"contain"; a template made for another shape than the canvas sits inside it, letterboxed. The comp carries what makes it a template:

{ "id": "comp_x1", "name": "Lower third — Bar", "width": 1920, "height": 1080, "duration": 5, "clips": [ … ],
  "template": { "id": "lower-third-bar", "hold": 4.5, "fields": [
    { "key": "name", "label": "Name", "type": "text", "targets": [ "name:props.text" ], "value": "Ava Moreno" },
    { "key": "accent", "label": "Accent", "type": "color", "targets": [ "bar:props.shapes.1.fill" ], "value": "#ffd166" } ] } }
templatenamesizelengthfields
lower-third-barLower third - Bar1920×10805 sname title accent panel
lower-third-underlineLower third - Underline1920×10805 sname title accent
lower-third-boxesLower third - Boxes1920×10805 sname title accent box
logo-ringLogo - Ring reveal1920×10804 slogo brand accent
logo-slamLogo - Slam1920×10803.5 slogo accent
logo-linesLogo - Lines1920×10804 slogo tagline lines
social-storyStory - Headline (9:16)1080×19206 sheadline subline button accent background
social-quotePost - Quote (1:1)1080×10806 squote author accent background
social-end-cardEnd card - Follow (16:9)1920×10806 sheading button accent background

Field types: text (a string), color (#rgb, #rrggbb or #rrggbbaa) and media (a media id of a picture: image, svg or video; the clip's kind follows it). A target is "<clip id>:<path>" inside the comp (props.text, props.shapes.1.fill, mediaId, …) or "comp:background"; one field can set several. The logo templates start with a placeholder, /library/elements/logo-placeholder.svg, until the logo field gets a picture. hold is when the exit starts: changing a template's length keeps everything after it at the same distance from the end, so a longer lower third just holds longer (it can't get shorter than its entrance needs).

A saved template (library/templates/<id>.json) is a template object: {id, name, group, width, height, duration, hold, background?, tracks?, clips, media?, fields}; media lists the {id, name, kind, src} entries its clips use (/library/… or /media/…), matched by src when it is placed. A saved preset or template whose name a built-in already has is saved as "<name> (saved)".

In the editor: the bin's Templates tab lists them by group (Lower thirds, Logo animations, Social, then Saved); drag one onto the timeline or click +. The Inspector's Template section on its clip edits the fields, its Length, and offers Use W×H canvas when the template was made for another shape. Right-click a comp in the Project tab → Save as template keeps it (every title's text and every picture become fields). The Motion section's Presets menus (In, Out, At playhead, Loop) put a preset on the selected clips, and Save as preset keeps this clip's keyframes (In: from its start to its last key; Out: from its first key to its end; Loop: the whole clip).

Agents:

Recipes: name every speaker - addTemplate lower-third-bar once per speaker with fields:{name, title}; branded intro - addTemplate logo-ring with fields:{logo:"<your logo's media id>", brand, accent} at 0; vertical teaser - set the canvas to 1080×1920, addTemplate social-story; house style - build a comp the way you like it, saveTemplate, then place it in every project; titles that arrive and leave the same way - applyPreset an In and an Out on every title in one patch.