motionrender 0.0.0-stage → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -2
  3. package/blocks/badge.json +68 -0
  4. package/blocks/big-stat.json +240 -0
  5. package/blocks/cta-end.json +283 -0
  6. package/blocks/feature-list.json +286 -0
  7. package/blocks/footage.json +43 -0
  8. package/blocks/fx-background-swap.json +170 -0
  9. package/blocks/fx-before-after.json +212 -0
  10. package/blocks/fx-captions.json +34 -0
  11. package/blocks/fx-chat.json +368 -0
  12. package/blocks/fx-checklist.json +609 -0
  13. package/blocks/fx-clone-wall.json +181 -0
  14. package/blocks/fx-color-pop.json +92 -0
  15. package/blocks/fx-command-bridge.json +358 -0
  16. package/blocks/fx-counter-hero.json +206 -0
  17. package/blocks/fx-cta-card.json +337 -0
  18. package/blocks/fx-day-to-night.json +174 -0
  19. package/blocks/fx-duo-title.json +245 -0
  20. package/blocks/fx-duotone.json +95 -0
  21. package/blocks/fx-extruded-title.json +309 -0
  22. package/blocks/fx-gallery.json +239 -0
  23. package/blocks/fx-glass-cards.json +921 -0
  24. package/blocks/fx-glitch-title.json +373 -0
  25. package/blocks/fx-grade-look.json +91 -0
  26. package/blocks/fx-highlighter.json +53 -0
  27. package/blocks/fx-icon-orbit.json +2694 -0
  28. package/blocks/fx-lens-flare.json +325 -0
  29. package/blocks/fx-letterbox.json +105 -0
  30. package/blocks/fx-light-leak.json +140 -0
  31. package/blocks/fx-map-journey.json +443 -0
  32. package/blocks/fx-neon-outline.json +743 -0
  33. package/blocks/fx-notifications.json +456 -0
  34. package/blocks/fx-progress-ring.json +143 -0
  35. package/blocks/fx-pull-out.json +68 -0
  36. package/blocks/fx-punch-in.json +81 -0
  37. package/blocks/fx-rgb-flash.json +166 -0
  38. package/blocks/fx-shake-hit.json +120 -0
  39. package/blocks/fx-split-reveal.json +110 -0
  40. package/blocks/fx-spotlight.json +1383 -0
  41. package/blocks/fx-stats-split.json +500 -0
  42. package/blocks/fx-step-tracker.json +528 -0
  43. package/blocks/fx-sticker-freeze.json +584 -0
  44. package/blocks/fx-strike-rewrite.json +79 -0
  45. package/blocks/fx-ticker.json +179 -0
  46. package/blocks/fx-timeline.json +1287 -0
  47. package/blocks/fx-tracked-label.json +167 -0
  48. package/blocks/fx-typewriter-quote.json +164 -0
  49. package/blocks/handle.json +43 -0
  50. package/blocks/icon-row.json +404 -0
  51. package/blocks/image-caption.json +248 -0
  52. package/blocks/lower-third.json +106 -0
  53. package/blocks/phone-mockup.json +459 -0
  54. package/blocks/progress-bar.json +51 -0
  55. package/blocks/quote.json +347 -0
  56. package/blocks/section-title.json +240 -0
  57. package/blocks/split-screen.json +283 -0
  58. package/blocks/stat-grid.json +315 -0
  59. package/blocks/steps.json +266 -0
  60. package/blocks/title-hero.json +287 -0
  61. package/dist/builder.d.ts +1 -0
  62. package/dist/builder.js +169 -0
  63. package/dist/cli.js +9301 -0
  64. package/dist/fonts/LICENSE-Inter.txt +93 -0
  65. package/dist/fonts/inter-cyrillic-ext-opsz-italic.woff2 +0 -0
  66. package/dist/fonts/inter-cyrillic-ext-opsz-normal.woff2 +0 -0
  67. package/dist/fonts/inter-cyrillic-opsz-italic.woff2 +0 -0
  68. package/dist/fonts/inter-cyrillic-opsz-normal.woff2 +0 -0
  69. package/dist/fonts/inter-greek-ext-opsz-italic.woff2 +0 -0
  70. package/dist/fonts/inter-greek-ext-opsz-normal.woff2 +0 -0
  71. package/dist/fonts/inter-greek-opsz-italic.woff2 +0 -0
  72. package/dist/fonts/inter-greek-opsz-normal.woff2 +0 -0
  73. package/dist/fonts/inter-latin-ext-opsz-italic.woff2 +0 -0
  74. package/dist/fonts/inter-latin-ext-opsz-normal.woff2 +0 -0
  75. package/dist/fonts/inter-latin-opsz-italic.woff2 +0 -0
  76. package/dist/fonts/inter-latin-opsz-normal.woff2 +0 -0
  77. package/dist/fonts/inter-vietnamese-opsz-italic.woff2 +0 -0
  78. package/dist/fonts/inter-vietnamese-opsz-normal.woff2 +0 -0
  79. package/dist/index.d.ts +2 -0
  80. package/dist/index.js +2330 -0
  81. package/dist/player.d.ts +1 -0
  82. package/dist/player.js +80 -0
  83. package/dist/react.d.ts +1 -0
  84. package/dist/react.js +140 -0
  85. package/dist/runtime/canvas-runtime.js +261 -0
  86. package/dist/runtime/lottie_light_canvas.min.js +1 -0
  87. package/dist/runtime/text-layout.js +50 -0
  88. package/dist/sfx/click.wav +0 -0
  89. package/dist/sfx/ding.wav +0 -0
  90. package/dist/sfx/pop.wav +0 -0
  91. package/dist/sfx/riser.wav +0 -0
  92. package/dist/sfx/thump.wav +0 -0
  93. package/dist/sfx/tick.wav +0 -0
  94. package/dist/sfx/whoosh.wav +0 -0
  95. package/dist/types/packages/ai/src/assets.d.ts +26 -0
  96. package/dist/types/packages/ai/src/batch.d.ts +19 -0
  97. package/dist/types/packages/ai/src/compose.d.ts +34 -0
  98. package/dist/types/packages/ai/src/history.d.ts +37 -0
  99. package/dist/types/packages/ai/src/image.d.ts +19 -0
  100. package/dist/types/packages/ai/src/index.d.ts +13 -0
  101. package/dist/types/packages/ai/src/json.d.ts +2 -0
  102. package/dist/types/packages/ai/src/narrate.d.ts +63 -0
  103. package/dist/types/packages/ai/src/patch.d.ts +15 -0
  104. package/dist/types/packages/ai/src/project.d.ts +27 -0
  105. package/dist/types/packages/ai/src/prompt.d.ts +30 -0
  106. package/dist/types/packages/ai/src/providers.d.ts +109 -0
  107. package/dist/types/packages/ai/src/template.d.ts +80 -0
  108. package/dist/types/packages/ai/src/voiceover.d.ts +49 -0
  109. package/dist/types/packages/animation/src/index.d.ts +27 -0
  110. package/dist/types/packages/assets/src/cache.d.ts +26 -0
  111. package/dist/types/packages/assets/src/index.d.ts +8 -0
  112. package/dist/types/packages/builder/src/index.d.ts +270 -0
  113. package/dist/types/packages/cli/src/ai-studio-page.d.ts +1 -0
  114. package/dist/types/packages/cli/src/ai-studio.d.ts +35 -0
  115. package/dist/types/packages/cli/src/ai.d.ts +3 -0
  116. package/dist/types/packages/cli/src/args.d.ts +9 -0
  117. package/dist/types/packages/cli/src/blocks-cli.d.ts +3 -0
  118. package/dist/types/packages/cli/src/blocks.d.ts +50 -0
  119. package/dist/types/packages/cli/src/build.d.ts +1 -0
  120. package/dist/types/packages/cli/src/dev-page.d.ts +1 -0
  121. package/dist/types/packages/cli/src/dev.d.ts +13 -0
  122. package/dist/types/packages/cli/src/index.d.ts +2 -0
  123. package/dist/types/packages/cli/src/init.d.ts +10 -0
  124. package/dist/types/packages/cli/src/serve.d.ts +2 -0
  125. package/dist/types/packages/cli/src/studio.d.ts +36 -0
  126. package/dist/types/packages/cli/src/templates.d.ts +63 -0
  127. package/dist/types/packages/cli/src/thumbnail.d.ts +20 -0
  128. package/dist/types/packages/cli/src/track.d.ts +35 -0
  129. package/dist/types/packages/cli/src/worker.d.ts +13 -0
  130. package/dist/types/packages/contracts/src/index.d.ts +377 -0
  131. package/dist/types/packages/core/src/audio.d.ts +14 -0
  132. package/dist/types/packages/core/src/distributed.d.ts +50 -0
  133. package/dist/types/packages/core/src/index.d.ts +63 -0
  134. package/dist/types/packages/core/src/media.d.ts +11 -0
  135. package/dist/types/packages/core/src/review.d.ts +29 -0
  136. package/dist/types/packages/ffmpeg/src/index.d.ts +68 -0
  137. package/dist/types/packages/graphics/src/fonts.d.ts +3 -0
  138. package/dist/types/packages/graphics/src/index.d.ts +121 -0
  139. package/dist/types/packages/graphics/src/runtime.d.ts +10 -0
  140. package/dist/types/packages/jobs/src/env.d.ts +78 -0
  141. package/dist/types/packages/jobs/src/handlers.d.ts +17 -0
  142. package/dist/types/packages/jobs/src/index.d.ts +5 -0
  143. package/dist/types/packages/jobs/src/input.d.ts +18 -0
  144. package/dist/types/packages/jobs/src/queue.d.ts +70 -0
  145. package/dist/types/packages/jobs/src/redis.d.ts +42 -0
  146. package/dist/types/packages/player/src/bundle.d.ts +4 -0
  147. package/dist/types/packages/player/src/canvas-runtime.d.ts +11 -0
  148. package/dist/types/packages/player/src/index.d.ts +29 -0
  149. package/dist/types/packages/react/src/index.d.ts +76 -0
  150. package/dist/types/packages/renderer/src/index.d.ts +35 -0
  151. package/dist/types/packages/renderer/src/pool.d.ts +7 -0
  152. package/dist/types/packages/renderer/src/video.d.ts +9 -0
  153. package/dist/types/packages/schema/src/captions.d.ts +24 -0
  154. package/dist/types/packages/schema/src/expression.d.ts +1 -0
  155. package/dist/types/packages/schema/src/index.d.ts +1213 -0
  156. package/dist/types/packages/schema/src/variables.d.ts +115 -0
  157. package/dist/types/packages/storage/src/index.d.ts +78 -0
  158. package/dist/types/packages/timeline/src/index.d.ts +104 -0
  159. package/package.json +78 -4
  160. package/skills/ove/SKILL.md +356 -0
  161. package/skills/ove-ai-compose/SKILL.md +36 -0
  162. package/skills/ove-batch-videos/SKILL.md +23 -0
  163. package/skills/ove-code-video/SKILL.md +68 -0
  164. package/skills/ove-effects/SKILL.md +65 -0
  165. package/skills/ove-make-reel/SKILL.md +30 -0
  166. package/skills/ove-voiceover-captions/SKILL.md +31 -0
  167. package/studio/assets/index-CzOvWv9w.css +1 -0
  168. package/studio/assets/index-J_fvKgng.js +11 -0
  169. package/studio/index.html +16 -0
  170. package/templates/case-study/composition.json +358 -0
  171. package/templates/case-study/template.json +8 -0
  172. package/templates/event-invite/composition.json +245 -0
  173. package/templates/event-invite/template.json +8 -0
  174. package/templates/explainer-square/composition.json +1335 -0
  175. package/templates/explainer-square/template.json +13 -0
  176. package/templates/keynote-wide/composition.json +1458 -0
  177. package/templates/keynote-wide/template.json +13 -0
  178. package/templates/launch-wide/composition.json +1306 -0
  179. package/templates/launch-wide/template.json +13 -0
  180. package/templates/product-card/composition.json +196 -0
  181. package/templates/product-card/data.example.json +5 -0
  182. package/templates/product-card/template.json +8 -0
  183. package/templates/product-wide/composition.json +1609 -0
  184. package/templates/product-wide/template.json +14 -0
  185. package/templates/quote-card/composition.json +123 -0
  186. package/templates/quote-card/template.json +8 -0
  187. package/templates/sale-promo/composition.json +290 -0
  188. package/templates/sale-promo/template.json +8 -0
  189. package/templates/showcase-tall/composition.json +1646 -0
  190. package/templates/showcase-tall/template.json +14 -0
  191. package/templates/slideshow/composition.json +167 -0
  192. package/templates/slideshow/template.json +8 -0
  193. package/templates/social-reel/composition.json +252 -0
  194. package/templates/social-reel/template.json +8 -0
  195. package/templates/starter/assets/logo.svg +4 -0
  196. package/templates/starter/composition.json +84 -0
  197. package/templates/story-tall/composition.json +1379 -0
  198. package/templates/story-tall/template.json +13 -0
  199. package/themes/espresso.json +15 -0
  200. package/themes/midnight.json +15 -0
  201. package/themes/neon.json +15 -0
  202. package/themes/paper.json +15 -0
  203. package/themes/signal.json +15 -0
@@ -0,0 +1,1609 @@
1
+ {
2
+ "$schema": "./composition.schema.json",
3
+ "version": "1.0",
4
+ "id": "product-wide",
5
+ "name": "Product showcase (16:9)",
6
+ "width": 1920,
7
+ "height": 1080,
8
+ "fps": 30,
9
+ "durationFrames": "auto",
10
+ "motionBlur": {
11
+ "samples": 4,
12
+ "shutter": 180
13
+ },
14
+ "variables": {
15
+ "bg": {
16
+ "type": "color",
17
+ "default": "#f6f1e8",
18
+ "description": "Theme: bg"
19
+ },
20
+ "surface": {
21
+ "type": "color",
22
+ "default": "#e9e1d2",
23
+ "description": "Theme: surface"
24
+ },
25
+ "text": {
26
+ "type": "color",
27
+ "default": "#1d1a16",
28
+ "description": "Theme: text"
29
+ },
30
+ "muted": {
31
+ "type": "color",
32
+ "default": "#6e665a",
33
+ "description": "Theme: muted"
34
+ },
35
+ "accent": {
36
+ "type": "color",
37
+ "default": "#d9482b",
38
+ "description": "Theme: accent"
39
+ },
40
+ "accent2": {
41
+ "type": "color",
42
+ "default": "#1f6f5c",
43
+ "description": "Theme: accent2"
44
+ },
45
+ "radius": {
46
+ "type": "number",
47
+ "default": 8,
48
+ "description": "Theme: radius"
49
+ },
50
+ "headWeight": {
51
+ "type": "number",
52
+ "default": 800,
53
+ "description": "Theme: headWeight"
54
+ },
55
+ "title": {
56
+ "type": "string",
57
+ "default": "Everything in one place",
58
+ "description": "The big line next to the phone (about 4 words)"
59
+ },
60
+ "subtitle": {
61
+ "type": "string",
62
+ "default": "See your whole day at a glance.",
63
+ "description": "One supporting sentence"
64
+ },
65
+ "image": {
66
+ "type": "string",
67
+ "default": "",
68
+ "description": "Picture id for the phone screen, or empty"
69
+ },
70
+ "benefitsTitle": {
71
+ "type": "string",
72
+ "default": "Why people switch",
73
+ "description": "Heading of the three benefits"
74
+ },
75
+ "benefits": {
76
+ "type": "list",
77
+ "items": {
78
+ "icon": {
79
+ "type": "string",
80
+ "default": "check"
81
+ },
82
+ "label": {
83
+ "type": "string",
84
+ "default": ""
85
+ },
86
+ "detail": {
87
+ "type": "string",
88
+ "default": ""
89
+ }
90
+ },
91
+ "default": [
92
+ {
93
+ "icon": "bolt",
94
+ "label": "Fast",
95
+ "detail": "Ready in minutes, not days."
96
+ },
97
+ {
98
+ "icon": "heart",
99
+ "label": "Loved",
100
+ "detail": "Rated 4.9 by our customers."
101
+ },
102
+ {
103
+ "icon": "clock",
104
+ "label": "Always on time",
105
+ "detail": "Delivered when you expect it."
106
+ }
107
+ ],
108
+ "description": "Exactly three: icon is one of check, bolt, star, heart, clock; a short label; one line of detail"
109
+ },
110
+ "image2": {
111
+ "type": "string",
112
+ "default": "",
113
+ "description": "Picture id for the story scene, or empty"
114
+ },
115
+ "storyKicker": {
116
+ "type": "string",
117
+ "default": "OUR STORY",
118
+ "description": "Small label"
119
+ },
120
+ "storyHeadline": {
121
+ "type": "string",
122
+ "default": "Built by people who care",
123
+ "description": "Headline of the story scene"
124
+ },
125
+ "storyBody": {
126
+ "type": "string",
127
+ "default": "Every detail is tested with real customers before it ships.",
128
+ "description": "Two sentences at most"
129
+ },
130
+ "ctaHeadline": {
131
+ "type": "string",
132
+ "default": "Try it today",
133
+ "description": "Closing line"
134
+ },
135
+ "ctaButton": {
136
+ "type": "string",
137
+ "default": "Get started",
138
+ "description": "Button text"
139
+ },
140
+ "url": {
141
+ "type": "string",
142
+ "default": "example.com",
143
+ "description": "Web address"
144
+ }
145
+ },
146
+ "scenes": [
147
+ {
148
+ "id": "phone-mockup",
149
+ "name": "Phone mockup",
150
+ "durationFrames": 150,
151
+ "camera": {
152
+ "animations": [
153
+ {
154
+ "property": "zoom",
155
+ "keyframes": [
156
+ {
157
+ "frame": 0,
158
+ "value": 1
159
+ },
160
+ {
161
+ "frame": 150,
162
+ "value": 1.04,
163
+ "easing": "drift"
164
+ }
165
+ ]
166
+ }
167
+ ]
168
+ },
169
+ "layers": [
170
+ {
171
+ "use": "phone_mockup",
172
+ "id": "phone-mockup-block",
173
+ "with": {
174
+ "headline": "{{title}}",
175
+ "subtitle": "{{subtitle}}",
176
+ "image": "{{image}}"
177
+ }
178
+ }
179
+ ]
180
+ },
181
+ {
182
+ "id": "icon-row",
183
+ "name": "Icon row",
184
+ "durationFrames": 150,
185
+ "camera": {
186
+ "animations": [
187
+ {
188
+ "property": "zoom",
189
+ "keyframes": [
190
+ {
191
+ "frame": 0,
192
+ "value": 1
193
+ },
194
+ {
195
+ "frame": 150,
196
+ "value": 1.04,
197
+ "easing": "drift"
198
+ }
199
+ ]
200
+ }
201
+ ]
202
+ },
203
+ "layers": [
204
+ {
205
+ "use": "icon_row",
206
+ "id": "icon-row-block",
207
+ "with": {
208
+ "title": "{{benefitsTitle}}",
209
+ "items": "{{benefits}}"
210
+ }
211
+ }
212
+ ],
213
+ "transitionIn": {
214
+ "type": "push",
215
+ "durationFrames": 16,
216
+ "direction": "left",
217
+ "easing": "glide"
218
+ }
219
+ },
220
+ {
221
+ "id": "split-screen",
222
+ "name": "Split screen",
223
+ "durationFrames": 150,
224
+ "camera": {
225
+ "animations": [
226
+ {
227
+ "property": "zoom",
228
+ "keyframes": [
229
+ {
230
+ "frame": 0,
231
+ "value": 1.02
232
+ },
233
+ {
234
+ "frame": 150,
235
+ "value": 1.07,
236
+ "easing": "drift"
237
+ }
238
+ ]
239
+ }
240
+ ]
241
+ },
242
+ "layers": [
243
+ {
244
+ "use": "split_screen",
245
+ "id": "split-screen-block",
246
+ "with": {
247
+ "image": "{{image2}}",
248
+ "kicker": "{{storyKicker}}",
249
+ "headline": "{{storyHeadline}}",
250
+ "body": "{{storyBody}}"
251
+ }
252
+ }
253
+ ],
254
+ "transitionIn": {
255
+ "type": "push",
256
+ "durationFrames": 16,
257
+ "direction": "left",
258
+ "easing": "glide"
259
+ }
260
+ },
261
+ {
262
+ "id": "cta-end",
263
+ "name": "Call to action",
264
+ "durationFrames": 120,
265
+ "camera": {
266
+ "animations": [
267
+ {
268
+ "property": "zoom",
269
+ "keyframes": [
270
+ {
271
+ "frame": 0,
272
+ "value": 1
273
+ },
274
+ {
275
+ "frame": 120,
276
+ "value": 1.06,
277
+ "easing": "drift"
278
+ }
279
+ ]
280
+ }
281
+ ]
282
+ },
283
+ "layers": [
284
+ {
285
+ "use": "cta_end",
286
+ "id": "cta-end-block",
287
+ "with": {
288
+ "headline": "{{ctaHeadline}}",
289
+ "button": "{{ctaButton}}",
290
+ "url": "{{url}}"
291
+ }
292
+ }
293
+ ],
294
+ "transitionIn": {
295
+ "type": "push",
296
+ "durationFrames": 16,
297
+ "direction": "left",
298
+ "easing": "glide"
299
+ }
300
+ }
301
+ ],
302
+ "components": {
303
+ "phone_mockup": {
304
+ "description": "A phone showing your screenshot (or a stand-in app) beside a headline. Side by side on wide video, stacked on tall.",
305
+ "params": {
306
+ "headline": {
307
+ "type": "string",
308
+ "default": "Everything in one place"
309
+ },
310
+ "subtitle": {
311
+ "type": "string",
312
+ "default": "See your whole day at a glance."
313
+ },
314
+ "image": {
315
+ "type": "string",
316
+ "default": "",
317
+ "description": "A screenshot (asset id or relative path); leave empty for a stand-in app"
318
+ }
319
+ },
320
+ "layers": [
321
+ {
322
+ "id": "bg",
323
+ "type": "rect",
324
+ "x": 0,
325
+ "y": 0,
326
+ "width": "{{canvas.width}}",
327
+ "height": "{{canvas.height}}",
328
+ "fill": "{{bg}}"
329
+ },
330
+ {
331
+ "id": "glow",
332
+ "type": "circle",
333
+ "x": "{{round(canvas.width * 0.15)}}",
334
+ "y": "{{round(canvas.height * 0.2)}}",
335
+ "width": "{{round(min(canvas.width, canvas.height) * 1.1)}}",
336
+ "fill": "{{accent}}",
337
+ "opacity": 0.14,
338
+ "blur": 120,
339
+ "animations": [
340
+ {
341
+ "property": "scale",
342
+ "keyframes": [
343
+ {
344
+ "frame": 0,
345
+ "value": 0.9
346
+ },
347
+ {
348
+ "frame": 150,
349
+ "value": 1.1,
350
+ "easing": "drift"
351
+ }
352
+ ]
353
+ },
354
+ {
355
+ "property": "x",
356
+ "keyframes": [
357
+ {
358
+ "frame": 0,
359
+ "value": "{{round(canvas.width * 0.15)}}"
360
+ },
361
+ {
362
+ "frame": 180,
363
+ "value": "{{round(canvas.width * 0.04999999999999999)}}",
364
+ "easing": "drift"
365
+ }
366
+ ]
367
+ }
368
+ ]
369
+ },
370
+ {
371
+ "id": "glow2",
372
+ "type": "circle",
373
+ "x": "{{round(canvas.width * 0.85)}}",
374
+ "y": "{{round(canvas.height * 0.8)}}",
375
+ "width": "{{round(min(canvas.width, canvas.height) * 0.8)}}",
376
+ "fill": "{{accent2}}",
377
+ "opacity": 0.084,
378
+ "blur": 140,
379
+ "animations": [
380
+ {
381
+ "property": "y",
382
+ "keyframes": [
383
+ {
384
+ "frame": 0,
385
+ "value": "{{round(canvas.height * 0.8)}}"
386
+ },
387
+ {
388
+ "frame": 180,
389
+ "value": "{{round(canvas.height * 0.7)}}",
390
+ "easing": "drift"
391
+ }
392
+ ]
393
+ }
394
+ ]
395
+ },
396
+ {
397
+ "id": "row",
398
+ "type": "group",
399
+ "x": 0,
400
+ "y": 0,
401
+ "width": "{{canvas.width}}",
402
+ "height": "{{canvas.height}}",
403
+ "layout": {
404
+ "direction": "{{canvas.width > canvas.height ? 'row' : 'column'}}",
405
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.07)}}",
406
+ "align": "center",
407
+ "justify": "center"
408
+ },
409
+ "children": [
410
+ {
411
+ "id": "copy",
412
+ "type": "group",
413
+ "width": "{{canvas.width > canvas.height ? round(canvas.width * 0.38) : round(canvas.width * 0.84)}}",
414
+ "layout": {
415
+ "direction": "column",
416
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.025)}}",
417
+ "align": "{{canvas.width > canvas.height ? 'start' : 'center'}}"
418
+ },
419
+ "children": [
420
+ {
421
+ "id": "headline",
422
+ "type": "text",
423
+ "content": "{{headline}}",
424
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.075)}}",
425
+ "color": "{{text}}",
426
+ "fontWeight": "{{headWeight}}",
427
+ "textAlign": "{{canvas.width > canvas.height ? 'left' : 'center'}}",
428
+ "maxWidth": "{{canvas.width > canvas.height ? round(canvas.width * 0.38) : round(canvas.width * 0.84)}}",
429
+ "maxLines": 4,
430
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.05)}}",
431
+ "lineHeight": 1.08,
432
+ "startFrame": 0,
433
+ "animations": [
434
+ {
435
+ "property": "opacity",
436
+ "keyframes": [
437
+ {
438
+ "frame": 0,
439
+ "value": 0
440
+ },
441
+ {
442
+ "frame": 14,
443
+ "value": 1,
444
+ "easing": "glide"
445
+ }
446
+ ]
447
+ },
448
+ {
449
+ "property": "y",
450
+ "keyframes": [
451
+ {
452
+ "frame": 0,
453
+ "value": 30,
454
+ "easing": "land"
455
+ },
456
+ {
457
+ "frame": 18,
458
+ "value": 0
459
+ }
460
+ ]
461
+ }
462
+ ]
463
+ },
464
+ {
465
+ "id": "rule",
466
+ "type": "rect",
467
+ "width": "{{round(min(canvas.width, canvas.height) * 0.12)}}",
468
+ "height": "{{round(min(canvas.width, canvas.height) * 0.008)}}",
469
+ "radius": "{{round(min(canvas.width, canvas.height) * 0.004)}}",
470
+ "fill": "{{accent}}",
471
+ "startFrame": 18,
472
+ "animations": [
473
+ {
474
+ "property": "width",
475
+ "keyframes": [
476
+ {
477
+ "frame": 0,
478
+ "value": 1
479
+ },
480
+ {
481
+ "frame": 20,
482
+ "value": "{{round(min(canvas.width, canvas.height) * 0.12)}}",
483
+ "easing": "land"
484
+ }
485
+ ]
486
+ }
487
+ ]
488
+ },
489
+ {
490
+ "id": "subtitle",
491
+ "type": "text",
492
+ "content": "{{subtitle}}",
493
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.04)}}",
494
+ "color": "{{muted}}",
495
+ "textAlign": "{{canvas.width > canvas.height ? 'left' : 'center'}}",
496
+ "maxWidth": "{{canvas.width > canvas.height ? round(canvas.width * 0.36) : round(canvas.width * 0.8)}}",
497
+ "maxLines": 3,
498
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.032)}}",
499
+ "startFrame": 24,
500
+ "animations": [
501
+ {
502
+ "property": "opacity",
503
+ "keyframes": [
504
+ {
505
+ "frame": 0,
506
+ "value": 0
507
+ },
508
+ {
509
+ "frame": 14,
510
+ "value": 1,
511
+ "easing": "glide"
512
+ }
513
+ ]
514
+ },
515
+ {
516
+ "property": "y",
517
+ "keyframes": [
518
+ {
519
+ "frame": 0,
520
+ "value": 20,
521
+ "easing": "land"
522
+ },
523
+ {
524
+ "frame": 18,
525
+ "value": 0
526
+ }
527
+ ]
528
+ }
529
+ ]
530
+ }
531
+ ]
532
+ },
533
+ {
534
+ "id": "phone",
535
+ "type": "group",
536
+ "width": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49)}}",
537
+ "height": "{{round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4)}}",
538
+ "animations": [
539
+ {
540
+ "property": "y",
541
+ "keyframes": [
542
+ {
543
+ "frame": 0,
544
+ "value": "{{round(canvas.height * 0.1)}}",
545
+ "easing": "land"
546
+ },
547
+ {
548
+ "frame": 26,
549
+ "value": 0
550
+ },
551
+ {
552
+ "frame": 100,
553
+ "value": "{{round(-canvas.height * 0.012)}}",
554
+ "easing": "drift"
555
+ },
556
+ {
557
+ "frame": 150,
558
+ "value": 0,
559
+ "easing": "drift"
560
+ }
561
+ ]
562
+ },
563
+ {
564
+ "property": "opacity",
565
+ "keyframes": [
566
+ {
567
+ "frame": 0,
568
+ "value": 0
569
+ },
570
+ {
571
+ "frame": 12,
572
+ "value": 1
573
+ }
574
+ ]
575
+ }
576
+ ],
577
+ "children": [
578
+ {
579
+ "id": "shadow",
580
+ "type": "rect",
581
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.04)}}",
582
+ "y": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.06)}}",
583
+ "width": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49)}}",
584
+ "height": "{{round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4)}}",
585
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.14)}}",
586
+ "fill": "#000000",
587
+ "opacity": 0.35,
588
+ "blur": 30
589
+ },
590
+ {
591
+ "id": "body",
592
+ "type": "rect",
593
+ "x": 0,
594
+ "y": 0,
595
+ "width": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49)}}",
596
+ "height": "{{round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4)}}",
597
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.14)}}",
598
+ "fill": "{{surface}}",
599
+ "stroke": "{{muted}}",
600
+ "strokeWidth": 2
601
+ },
602
+ {
603
+ "id": "screen",
604
+ "type": "rect",
605
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
606
+ "y": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
607
+ "width": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) - 2 * round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
608
+ "height": "{{round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) - 2 * round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
609
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.1)}}",
610
+ "fill": "{{bg}}"
611
+ },
612
+ {
613
+ "if": "{{image}}",
614
+ "id": "shot",
615
+ "type": "image",
616
+ "src": "{{image}}",
617
+ "objectFit": "cover",
618
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
619
+ "y": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
620
+ "width": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) - 2 * round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
621
+ "height": "{{round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) - 2 * round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
622
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.1)}}"
623
+ },
624
+ {
625
+ "if": "{{!image}}",
626
+ "id": "app",
627
+ "type": "group",
628
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
629
+ "y": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
630
+ "children": [
631
+ {
632
+ "id": "head",
633
+ "type": "rect",
634
+ "x": 0,
635
+ "y": 0,
636
+ "width": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) - 2 * round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.045)}}",
637
+ "height": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.16)}}",
638
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.1)}}",
639
+ "fill": "{{accent}}"
640
+ },
641
+ {
642
+ "id": "row1",
643
+ "type": "rect",
644
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.06)}}",
645
+ "y": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.22)}}",
646
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.62)}}",
647
+ "height": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.022)}}",
648
+ "radius": 8,
649
+ "fill": "{{muted}}",
650
+ "opacity": 0.8
651
+ },
652
+ {
653
+ "id": "row2",
654
+ "type": "rect",
655
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.06)}}",
656
+ "y": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.27)}}",
657
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.45)}}",
658
+ "height": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.018)}}",
659
+ "radius": 8,
660
+ "fill": "{{muted}}",
661
+ "opacity": 0.5
662
+ },
663
+ {
664
+ "id": "card1",
665
+ "type": "rect",
666
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.06)}}",
667
+ "y": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.34)}}",
668
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.82)}}",
669
+ "height": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.2)}}",
670
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.05)}}",
671
+ "fill": "{{surface}}"
672
+ },
673
+ {
674
+ "id": "card2",
675
+ "type": "rect",
676
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.06)}}",
677
+ "y": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.58)}}",
678
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.82)}}",
679
+ "height": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.2)}}",
680
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.05)}}",
681
+ "fill": "{{surface}}"
682
+ },
683
+ {
684
+ "id": "dot",
685
+ "type": "circle",
686
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.2)}}",
687
+ "y": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.44)}}",
688
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.1)}}",
689
+ "fill": "{{accent2}}"
690
+ },
691
+ {
692
+ "id": "dot2",
693
+ "type": "circle",
694
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.2)}}",
695
+ "y": "{{round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.68)}}",
696
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.1)}}",
697
+ "fill": "{{accent}}"
698
+ }
699
+ ]
700
+ },
701
+ {
702
+ "id": "notch",
703
+ "type": "rect",
704
+ "x": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.36)}}",
705
+ "y": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.065)}}",
706
+ "width": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.28)}}",
707
+ "height": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.055)}}",
708
+ "radius": "{{round(round(round(canvas.width > canvas.height ? canvas.height * 0.74 : canvas.height * 0.4) * 0.49) * 0.03)}}",
709
+ "fill": "{{surface}}"
710
+ }
711
+ ]
712
+ }
713
+ ]
714
+ },
715
+ {
716
+ "id": "sfx-in",
717
+ "type": "audio",
718
+ "src": "sfx:whoosh",
719
+ "startFrame": 2,
720
+ "volume": 0.4
721
+ },
722
+ {
723
+ "id": "sfx-land",
724
+ "type": "audio",
725
+ "src": "sfx:thump",
726
+ "startFrame": 24,
727
+ "volume": 0.3
728
+ }
729
+ ]
730
+ },
731
+ "icon_row": {
732
+ "description": "A title and three features, each with an icon (check, bolt, star, heart or clock), a label and a line of detail.",
733
+ "params": {
734
+ "title": {
735
+ "type": "string",
736
+ "default": "Why people switch"
737
+ },
738
+ "items": {
739
+ "type": "list",
740
+ "items": {
741
+ "icon": {
742
+ "type": "string",
743
+ "default": "check"
744
+ },
745
+ "label": {
746
+ "type": "string",
747
+ "default": ""
748
+ },
749
+ "detail": {
750
+ "type": "string",
751
+ "default": ""
752
+ }
753
+ },
754
+ "default": [
755
+ {
756
+ "icon": "bolt",
757
+ "label": "Fast",
758
+ "detail": "Ready in minutes, not days."
759
+ },
760
+ {
761
+ "icon": "heart",
762
+ "label": "Loved",
763
+ "detail": "Rated 4.9 by our customers."
764
+ },
765
+ {
766
+ "icon": "clock",
767
+ "label": "Always on time",
768
+ "detail": "Delivered when you expect it."
769
+ }
770
+ ]
771
+ }
772
+ },
773
+ "layers": [
774
+ {
775
+ "id": "bg",
776
+ "type": "rect",
777
+ "x": 0,
778
+ "y": 0,
779
+ "width": "{{canvas.width}}",
780
+ "height": "{{canvas.height}}",
781
+ "fill": "{{bg}}"
782
+ },
783
+ {
784
+ "id": "glow",
785
+ "type": "circle",
786
+ "x": "{{round(canvas.width * 0.7)}}",
787
+ "y": "{{round(canvas.height * 0.7)}}",
788
+ "width": "{{round(min(canvas.width, canvas.height) * 1.1)}}",
789
+ "fill": "{{accent}}",
790
+ "opacity": 0.1,
791
+ "blur": 120,
792
+ "animations": [
793
+ {
794
+ "property": "scale",
795
+ "keyframes": [
796
+ {
797
+ "frame": 0,
798
+ "value": 0.9
799
+ },
800
+ {
801
+ "frame": 150,
802
+ "value": 1.1,
803
+ "easing": "drift"
804
+ }
805
+ ]
806
+ },
807
+ {
808
+ "property": "x",
809
+ "keyframes": [
810
+ {
811
+ "frame": 0,
812
+ "value": "{{round(canvas.width * 0.7)}}"
813
+ },
814
+ {
815
+ "frame": 180,
816
+ "value": "{{round(canvas.width * 0.6)}}",
817
+ "easing": "drift"
818
+ }
819
+ ]
820
+ }
821
+ ]
822
+ },
823
+ {
824
+ "id": "glow2",
825
+ "type": "circle",
826
+ "x": "{{round(canvas.width * 0.30000000000000004)}}",
827
+ "y": "{{round(canvas.height * 0.30000000000000004)}}",
828
+ "width": "{{round(min(canvas.width, canvas.height) * 0.8)}}",
829
+ "fill": "{{accent2}}",
830
+ "opacity": 0.06,
831
+ "blur": 140,
832
+ "animations": [
833
+ {
834
+ "property": "y",
835
+ "keyframes": [
836
+ {
837
+ "frame": 0,
838
+ "value": "{{round(canvas.height * 0.30000000000000004)}}"
839
+ },
840
+ {
841
+ "frame": 180,
842
+ "value": "{{round(canvas.height * 0.20000000000000007)}}",
843
+ "easing": "drift"
844
+ }
845
+ ]
846
+ }
847
+ ]
848
+ },
849
+ {
850
+ "id": "stack",
851
+ "type": "group",
852
+ "x": "{{round(canvas.width * 0.08)}}",
853
+ "y": 0,
854
+ "width": "{{round(canvas.width * 0.84)}}",
855
+ "height": "{{canvas.height}}",
856
+ "layout": {
857
+ "direction": "column",
858
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.07)}}",
859
+ "align": "start",
860
+ "justify": "center"
861
+ },
862
+ "children": [
863
+ {
864
+ "id": "title",
865
+ "type": "text",
866
+ "content": "{{title}}",
867
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.06)}}",
868
+ "color": "{{text}}",
869
+ "fontWeight": "{{headWeight}}",
870
+ "maxWidth": "{{round(canvas.width * 0.84)}}",
871
+ "maxLines": 2,
872
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.04)}}",
873
+ "startFrame": 0,
874
+ "animations": [
875
+ {
876
+ "property": "opacity",
877
+ "keyframes": [
878
+ {
879
+ "frame": 0,
880
+ "value": 0
881
+ },
882
+ {
883
+ "frame": 14,
884
+ "value": 1,
885
+ "easing": "glide"
886
+ }
887
+ ]
888
+ },
889
+ {
890
+ "property": "y",
891
+ "keyframes": [
892
+ {
893
+ "frame": 0,
894
+ "value": 24,
895
+ "easing": "land"
896
+ },
897
+ {
898
+ "frame": 18,
899
+ "value": 0
900
+ }
901
+ ]
902
+ }
903
+ ]
904
+ },
905
+ {
906
+ "id": "cells",
907
+ "type": "group",
908
+ "width": "{{round(canvas.width * 0.84)}}",
909
+ "layout": {
910
+ "direction": "{{canvas.width > canvas.height ? 'row' : 'column'}}",
911
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.05)}}",
912
+ "align": "start",
913
+ "justify": "{{canvas.width > canvas.height ? 'space-between' : 'start'}}"
914
+ },
915
+ "children": [
916
+ {
917
+ "repeat": "{{items}}",
918
+ "as": "it",
919
+ "each": [
920
+ {
921
+ "id": "cell-{{index}}",
922
+ "type": "group",
923
+ "startFrame": "{{14 + index * 12}}",
924
+ "layout": {
925
+ "direction": "{{canvas.width > canvas.height ? 'column' : 'row'}}",
926
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.025)}}",
927
+ "align": "start"
928
+ },
929
+ "animations": [
930
+ {
931
+ "property": "opacity",
932
+ "keyframes": [
933
+ {
934
+ "frame": 0,
935
+ "value": 0
936
+ },
937
+ {
938
+ "frame": 12,
939
+ "value": 1
940
+ }
941
+ ]
942
+ },
943
+ {
944
+ "property": "y",
945
+ "keyframes": [
946
+ {
947
+ "frame": 0,
948
+ "value": 30,
949
+ "easing": "land"
950
+ },
951
+ {
952
+ "frame": 18,
953
+ "value": 0
954
+ }
955
+ ]
956
+ }
957
+ ],
958
+ "children": [
959
+ {
960
+ "id": "icon-{{index}}",
961
+ "type": "group",
962
+ "width": "{{round(min(canvas.width, canvas.height) * 0.11)}}",
963
+ "height": "{{round(min(canvas.width, canvas.height) * 0.11)}}",
964
+ "children": [
965
+ {
966
+ "id": "disc",
967
+ "type": "circle",
968
+ "x": "{{round(min(canvas.width, canvas.height) * 0.055)}}",
969
+ "y": "{{round(min(canvas.width, canvas.height) * 0.055)}}",
970
+ "width": "{{round(min(canvas.width, canvas.height) * 0.11)}}",
971
+ "fill": "{{accent}}"
972
+ },
973
+ {
974
+ "if": "{{it.icon == 'check'}}",
975
+ "id": "glyph-check",
976
+ "type": "path",
977
+ "d": "M5 12.5 L10 17.5 L19 7",
978
+ "x": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
979
+ "y": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
980
+ "width": 24,
981
+ "height": 24,
982
+ "scale": "{{min(canvas.width, canvas.height) * 0.055 / 24}}",
983
+ "stroke": "{{bg}}",
984
+ "strokeWidth": 2,
985
+ "lineCap": "round",
986
+ "lineJoin": "round"
987
+ },
988
+ {
989
+ "if": "{{it.icon == 'bolt'}}",
990
+ "id": "glyph-bolt",
991
+ "type": "path",
992
+ "d": "M13 2 L4 14 H11 L10 22 L20 9 H13 Z",
993
+ "x": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
994
+ "y": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
995
+ "width": 24,
996
+ "height": 24,
997
+ "scale": "{{min(canvas.width, canvas.height) * 0.055 / 24}}",
998
+ "stroke": "{{bg}}",
999
+ "strokeWidth": 2,
1000
+ "lineCap": "round",
1001
+ "lineJoin": "round"
1002
+ },
1003
+ {
1004
+ "if": "{{it.icon == 'star'}}",
1005
+ "id": "glyph-star",
1006
+ "type": "path",
1007
+ "d": "M12 2.5 L14.9 8.9 L22 9.7 L16.8 14.5 L18.2 21.5 L12 18 L5.8 21.5 L7.2 14.5 L2 9.7 L9.1 8.9 Z",
1008
+ "x": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
1009
+ "y": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
1010
+ "width": 24,
1011
+ "height": 24,
1012
+ "scale": "{{min(canvas.width, canvas.height) * 0.055 / 24}}",
1013
+ "stroke": "{{bg}}",
1014
+ "strokeWidth": 2,
1015
+ "lineCap": "round",
1016
+ "lineJoin": "round"
1017
+ },
1018
+ {
1019
+ "if": "{{it.icon == 'heart'}}",
1020
+ "id": "glyph-heart",
1021
+ "type": "path",
1022
+ "d": "M12 21 C5 15.5 2.5 12 2.5 8.5 C2.5 5.7 4.7 3.5 7.5 3.5 C9.4 3.5 11 4.5 12 6 C13 4.5 14.6 3.5 16.5 3.5 C19.3 3.5 21.5 5.7 21.5 8.5 C21.5 12 19 15.5 12 21 Z",
1023
+ "x": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
1024
+ "y": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
1025
+ "width": 24,
1026
+ "height": 24,
1027
+ "scale": "{{min(canvas.width, canvas.height) * 0.055 / 24}}",
1028
+ "stroke": "{{bg}}",
1029
+ "strokeWidth": 2,
1030
+ "lineCap": "round",
1031
+ "lineJoin": "round"
1032
+ },
1033
+ {
1034
+ "if": "{{it.icon == 'clock'}}",
1035
+ "id": "glyph-clock",
1036
+ "type": "path",
1037
+ "d": "M12 3 A9 9 0 1 0 12 21 A9 9 0 1 0 12 3 Z M12 7 V12 L15.5 14",
1038
+ "x": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
1039
+ "y": "{{round(min(canvas.width, canvas.height) * 0.055 - min(canvas.width, canvas.height) * 0.0275)}}",
1040
+ "width": 24,
1041
+ "height": 24,
1042
+ "scale": "{{min(canvas.width, canvas.height) * 0.055 / 24}}",
1043
+ "stroke": "{{bg}}",
1044
+ "strokeWidth": 2,
1045
+ "lineCap": "round",
1046
+ "lineJoin": "round"
1047
+ }
1048
+ ]
1049
+ },
1050
+ {
1051
+ "id": "copy-{{index}}",
1052
+ "type": "group",
1053
+ "layout": {
1054
+ "direction": "column",
1055
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.01)}}"
1056
+ },
1057
+ "children": [
1058
+ {
1059
+ "id": "label-{{index}}",
1060
+ "type": "text",
1061
+ "content": "{{it.label}}",
1062
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.046)}}",
1063
+ "color": "{{text}}",
1064
+ "fontWeight": 700,
1065
+ "maxWidth": "{{canvas.width > canvas.height ? round(canvas.width * 0.24) : round(canvas.width * 0.6)}}",
1066
+ "maxLines": 2,
1067
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.034)}}"
1068
+ },
1069
+ {
1070
+ "id": "detail-{{index}}",
1071
+ "type": "text",
1072
+ "content": "{{it.detail}}",
1073
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.034)}}",
1074
+ "color": "{{muted}}",
1075
+ "maxWidth": "{{canvas.width > canvas.height ? round(canvas.width * 0.24) : round(canvas.width * 0.6)}}",
1076
+ "maxLines": 3,
1077
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.028)}}"
1078
+ }
1079
+ ]
1080
+ }
1081
+ ]
1082
+ }
1083
+ ]
1084
+ }
1085
+ ]
1086
+ }
1087
+ ]
1088
+ },
1089
+ {
1090
+ "repeat": "{{items}}",
1091
+ "as": "x",
1092
+ "each": [
1093
+ {
1094
+ "id": "sfx-icon-{{index}}",
1095
+ "type": "audio",
1096
+ "src": "sfx:pop",
1097
+ "startFrame": "{{14 + index * 12}}",
1098
+ "volume": 0.35
1099
+ }
1100
+ ]
1101
+ }
1102
+ ]
1103
+ },
1104
+ "split_screen": {
1105
+ "description": "A picture on one half and the message on the other (left and right on wide video, top and bottom on tall).",
1106
+ "params": {
1107
+ "image": {
1108
+ "type": "string",
1109
+ "default": "",
1110
+ "description": "A picture (asset id or relative path); a colour panel appears without one"
1111
+ },
1112
+ "kicker": {
1113
+ "type": "string",
1114
+ "default": "FROM THE ROASTERY"
1115
+ },
1116
+ "headline": {
1117
+ "type": "string",
1118
+ "default": "Small batches, big flavour"
1119
+ },
1120
+ "body": {
1121
+ "type": "string",
1122
+ "default": "Every bag is roasted to order and shipped within two days."
1123
+ }
1124
+ },
1125
+ "layers": [
1126
+ {
1127
+ "id": "bg",
1128
+ "type": "rect",
1129
+ "x": 0,
1130
+ "y": 0,
1131
+ "width": "{{canvas.width}}",
1132
+ "height": "{{canvas.height}}",
1133
+ "fill": "{{bg}}"
1134
+ },
1135
+ {
1136
+ "id": "panel",
1137
+ "type": "rect",
1138
+ "x": 0,
1139
+ "y": 0,
1140
+ "width": "{{canvas.width > canvas.height ? round(canvas.width * 0.5) : canvas.width}}",
1141
+ "height": "{{canvas.width > canvas.height ? canvas.height : round(canvas.height * 0.5)}}",
1142
+ "fill": "{{accent}}",
1143
+ "opacity": 0.9
1144
+ },
1145
+ {
1146
+ "id": "orb",
1147
+ "type": "circle",
1148
+ "x": "{{canvas.width > canvas.height ? round(canvas.width * 0.25) : round(canvas.width * 0.5)}}",
1149
+ "y": "{{canvas.width > canvas.height ? round(canvas.height * 0.5) : round(canvas.height * 0.25)}}",
1150
+ "width": "{{round(min(canvas.width, canvas.height) * 0.5)}}",
1151
+ "fill": "{{accent2}}",
1152
+ "opacity": 0.6,
1153
+ "blur": 60,
1154
+ "animations": [
1155
+ {
1156
+ "property": "scale",
1157
+ "keyframes": [
1158
+ {
1159
+ "frame": 0,
1160
+ "value": 0.8
1161
+ },
1162
+ {
1163
+ "frame": 150,
1164
+ "value": 1.2,
1165
+ "easing": "drift"
1166
+ }
1167
+ ]
1168
+ }
1169
+ ]
1170
+ },
1171
+ {
1172
+ "if": "{{image}}",
1173
+ "id": "photo",
1174
+ "type": "image",
1175
+ "src": "{{image}}",
1176
+ "objectFit": "cover",
1177
+ "x": 0,
1178
+ "y": 0,
1179
+ "width": "{{canvas.width > canvas.height ? round(canvas.width * 0.5) : canvas.width}}",
1180
+ "height": "{{canvas.width > canvas.height ? canvas.height : round(canvas.height * 0.5)}}"
1181
+ },
1182
+ {
1183
+ "id": "copy",
1184
+ "type": "group",
1185
+ "x": "{{canvas.width > canvas.height ? round(canvas.width * 0.54) : round(canvas.width * 0.08)}}",
1186
+ "y": "{{canvas.width > canvas.height ? 0 : round(canvas.height * 0.5)}}",
1187
+ "width": "{{canvas.width > canvas.height ? round(canvas.width * 0.4) : round(canvas.width * 0.84)}}",
1188
+ "height": "{{canvas.width > canvas.height ? canvas.height : round(canvas.height * 0.5)}}",
1189
+ "layout": {
1190
+ "direction": "column",
1191
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.025)}}",
1192
+ "align": "start",
1193
+ "justify": "center"
1194
+ },
1195
+ "children": [
1196
+ {
1197
+ "id": "kicker",
1198
+ "type": "text",
1199
+ "content": "{{kicker}}",
1200
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.03)}}",
1201
+ "color": "{{accent}}",
1202
+ "fontWeight": 700,
1203
+ "letterSpacing": "{{round(min(canvas.width, canvas.height) * 0.006)}}",
1204
+ "startFrame": 0,
1205
+ "animations": [
1206
+ {
1207
+ "property": "opacity",
1208
+ "keyframes": [
1209
+ {
1210
+ "frame": 0,
1211
+ "value": 0
1212
+ },
1213
+ {
1214
+ "frame": 14,
1215
+ "value": 1,
1216
+ "easing": "glide"
1217
+ }
1218
+ ]
1219
+ },
1220
+ {
1221
+ "property": "y",
1222
+ "keyframes": [
1223
+ {
1224
+ "frame": 0,
1225
+ "value": 20,
1226
+ "easing": "land"
1227
+ },
1228
+ {
1229
+ "frame": 18,
1230
+ "value": 0
1231
+ }
1232
+ ]
1233
+ }
1234
+ ]
1235
+ },
1236
+ {
1237
+ "id": "headline",
1238
+ "type": "text",
1239
+ "content": "{{headline}}",
1240
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.075)}}",
1241
+ "color": "{{text}}",
1242
+ "fontWeight": "{{headWeight}}",
1243
+ "lineHeight": 1.06,
1244
+ "maxWidth": "{{canvas.width > canvas.height ? round(canvas.width * 0.4) : round(canvas.width * 0.84)}}",
1245
+ "maxLines": 3,
1246
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.05)}}",
1247
+ "startFrame": 8,
1248
+ "animations": [
1249
+ {
1250
+ "property": "opacity",
1251
+ "keyframes": [
1252
+ {
1253
+ "frame": 0,
1254
+ "value": 0
1255
+ },
1256
+ {
1257
+ "frame": 14,
1258
+ "value": 1,
1259
+ "easing": "glide"
1260
+ }
1261
+ ]
1262
+ },
1263
+ {
1264
+ "property": "y",
1265
+ "keyframes": [
1266
+ {
1267
+ "frame": 0,
1268
+ "value": 28,
1269
+ "easing": "land"
1270
+ },
1271
+ {
1272
+ "frame": 18,
1273
+ "value": 0
1274
+ }
1275
+ ]
1276
+ }
1277
+ ]
1278
+ },
1279
+ {
1280
+ "id": "rule",
1281
+ "type": "rect",
1282
+ "width": "{{round(min(canvas.width, canvas.height) * 0.12)}}",
1283
+ "height": "{{round(min(canvas.width, canvas.height) * 0.008)}}",
1284
+ "radius": "{{round(min(canvas.width, canvas.height) * 0.004)}}",
1285
+ "fill": "{{accent}}",
1286
+ "startFrame": 24,
1287
+ "animations": [
1288
+ {
1289
+ "property": "width",
1290
+ "keyframes": [
1291
+ {
1292
+ "frame": 0,
1293
+ "value": 1
1294
+ },
1295
+ {
1296
+ "frame": 20,
1297
+ "value": "{{round(min(canvas.width, canvas.height) * 0.12)}}",
1298
+ "easing": "land"
1299
+ }
1300
+ ]
1301
+ }
1302
+ ]
1303
+ },
1304
+ {
1305
+ "id": "body",
1306
+ "type": "text",
1307
+ "content": "{{body}}",
1308
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.04)}}",
1309
+ "color": "{{muted}}",
1310
+ "maxWidth": "{{canvas.width > canvas.height ? round(canvas.width * 0.38) : round(canvas.width * 0.8)}}",
1311
+ "maxLines": 4,
1312
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.03)}}",
1313
+ "startFrame": 30,
1314
+ "animations": [
1315
+ {
1316
+ "property": "opacity",
1317
+ "keyframes": [
1318
+ {
1319
+ "frame": 0,
1320
+ "value": 0
1321
+ },
1322
+ {
1323
+ "frame": 14,
1324
+ "value": 1,
1325
+ "easing": "glide"
1326
+ }
1327
+ ]
1328
+ },
1329
+ {
1330
+ "property": "y",
1331
+ "keyframes": [
1332
+ {
1333
+ "frame": 0,
1334
+ "value": 20,
1335
+ "easing": "land"
1336
+ },
1337
+ {
1338
+ "frame": 18,
1339
+ "value": 0
1340
+ }
1341
+ ]
1342
+ }
1343
+ ]
1344
+ }
1345
+ ]
1346
+ },
1347
+ {
1348
+ "id": "sfx-in",
1349
+ "type": "audio",
1350
+ "src": "sfx:whoosh",
1351
+ "startFrame": 3,
1352
+ "volume": 0.4
1353
+ }
1354
+ ]
1355
+ },
1356
+ "cta_end": {
1357
+ "description": "Closing scene: a headline, a button and a web address.",
1358
+ "params": {
1359
+ "headline": {
1360
+ "type": "string",
1361
+ "default": "Ready to start?"
1362
+ },
1363
+ "button": {
1364
+ "type": "string",
1365
+ "default": "Get started"
1366
+ },
1367
+ "url": {
1368
+ "type": "string",
1369
+ "default": "example.com"
1370
+ }
1371
+ },
1372
+ "layers": [
1373
+ {
1374
+ "id": "bg",
1375
+ "type": "rect",
1376
+ "x": 0,
1377
+ "y": 0,
1378
+ "width": "{{canvas.width}}",
1379
+ "height": "{{canvas.height}}",
1380
+ "fill": "{{bg}}"
1381
+ },
1382
+ {
1383
+ "id": "glow",
1384
+ "type": "circle",
1385
+ "x": "{{round(canvas.width * 0.5)}}",
1386
+ "y": "{{round(canvas.height * 0.4)}}",
1387
+ "width": "{{round(min(canvas.width, canvas.height) * 1.1)}}",
1388
+ "fill": "{{accent}}",
1389
+ "opacity": 0.16,
1390
+ "blur": 120,
1391
+ "animations": [
1392
+ {
1393
+ "property": "scale",
1394
+ "keyframes": [
1395
+ {
1396
+ "frame": 0,
1397
+ "value": 0.9
1398
+ },
1399
+ {
1400
+ "frame": 150,
1401
+ "value": 1.1,
1402
+ "easing": "drift"
1403
+ }
1404
+ ]
1405
+ },
1406
+ {
1407
+ "property": "x",
1408
+ "keyframes": [
1409
+ {
1410
+ "frame": 0,
1411
+ "value": "{{round(canvas.width * 0.5)}}"
1412
+ },
1413
+ {
1414
+ "frame": 180,
1415
+ "value": "{{round(canvas.width * 0.4)}}",
1416
+ "easing": "drift"
1417
+ }
1418
+ ]
1419
+ }
1420
+ ]
1421
+ },
1422
+ {
1423
+ "id": "glow2",
1424
+ "type": "circle",
1425
+ "x": "{{round(canvas.width * 0.5)}}",
1426
+ "y": "{{round(canvas.height * 0.6)}}",
1427
+ "width": "{{round(min(canvas.width, canvas.height) * 0.8)}}",
1428
+ "fill": "{{accent2}}",
1429
+ "opacity": 0.096,
1430
+ "blur": 140,
1431
+ "animations": [
1432
+ {
1433
+ "property": "y",
1434
+ "keyframes": [
1435
+ {
1436
+ "frame": 0,
1437
+ "value": "{{round(canvas.height * 0.6)}}"
1438
+ },
1439
+ {
1440
+ "frame": 180,
1441
+ "value": "{{round(canvas.height * 0.5)}}",
1442
+ "easing": "drift"
1443
+ }
1444
+ ]
1445
+ },
1446
+ {
1447
+ "property": "scale",
1448
+ "keyframes": [
1449
+ {
1450
+ "frame": 0,
1451
+ "value": 1.1
1452
+ },
1453
+ {
1454
+ "frame": 150,
1455
+ "value": 0.9,
1456
+ "easing": "drift"
1457
+ }
1458
+ ]
1459
+ }
1460
+ ]
1461
+ },
1462
+ {
1463
+ "id": "stack",
1464
+ "type": "group",
1465
+ "x": 0,
1466
+ "y": 0,
1467
+ "width": "{{canvas.width}}",
1468
+ "height": "{{canvas.height}}",
1469
+ "layout": {
1470
+ "direction": "column",
1471
+ "gap": "{{round(min(canvas.width, canvas.height) * 0.05)}}",
1472
+ "align": "center",
1473
+ "justify": "center"
1474
+ },
1475
+ "children": [
1476
+ {
1477
+ "id": "headline",
1478
+ "type": "text",
1479
+ "content": "{{headline}}",
1480
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.1)}}",
1481
+ "color": "{{text}}",
1482
+ "fontWeight": "{{headWeight}}",
1483
+ "textAlign": "center",
1484
+ "maxWidth": "{{round(canvas.width * 0.84)}}",
1485
+ "maxLines": 3,
1486
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.06)}}",
1487
+ "lineHeight": 1.05,
1488
+ "split": {
1489
+ "by": "words",
1490
+ "stagger": 4,
1491
+ "preset": "rise",
1492
+ "duration": 18
1493
+ }
1494
+ },
1495
+ {
1496
+ "id": "btn",
1497
+ "type": "group",
1498
+ "width": "{{round(canvas.width * 0.42)}}",
1499
+ "height": "{{round(min(canvas.width, canvas.height) * 0.13)}}",
1500
+ "startFrame": 24,
1501
+ "animations": [
1502
+ {
1503
+ "property": "scale",
1504
+ "keyframes": [
1505
+ {
1506
+ "frame": 0,
1507
+ "value": 0.85,
1508
+ "easing": "pop"
1509
+ },
1510
+ {
1511
+ "frame": 16,
1512
+ "value": 1
1513
+ }
1514
+ ]
1515
+ },
1516
+ {
1517
+ "property": "opacity",
1518
+ "keyframes": [
1519
+ {
1520
+ "frame": 0,
1521
+ "value": 0
1522
+ },
1523
+ {
1524
+ "frame": 8,
1525
+ "value": 1
1526
+ }
1527
+ ]
1528
+ }
1529
+ ],
1530
+ "children": [
1531
+ {
1532
+ "id": "pill",
1533
+ "type": "rect",
1534
+ "x": 0,
1535
+ "y": 0,
1536
+ "width": "{{round(canvas.width * 0.42)}}",
1537
+ "height": "{{round(min(canvas.width, canvas.height) * 0.13)}}",
1538
+ "radius": "{{round(min(canvas.width, canvas.height) * 0.065)}}",
1539
+ "fill": "{{accent}}"
1540
+ },
1541
+ {
1542
+ "id": "label",
1543
+ "type": "text",
1544
+ "content": "{{button}}",
1545
+ "x": "{{round(canvas.width * 0.21)}}",
1546
+ "y": "{{round(min(canvas.width, canvas.height) * 0.065 - min(canvas.width, canvas.height) * 0.03)}}",
1547
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.05)}}",
1548
+ "fontWeight": 800,
1549
+ "color": "{{bg}}",
1550
+ "textAlign": "center",
1551
+ "maxWidth": "{{round(canvas.width * 0.38)}}",
1552
+ "maxLines": 1,
1553
+ "minFontSize": "{{round(min(canvas.width, canvas.height) * 0.032)}}"
1554
+ }
1555
+ ]
1556
+ },
1557
+ {
1558
+ "id": "url",
1559
+ "type": "text",
1560
+ "content": "{{url}}",
1561
+ "fontSize": "{{round(min(canvas.width, canvas.height) * 0.04)}}",
1562
+ "color": "{{muted}}",
1563
+ "textAlign": "center",
1564
+ "maxWidth": "{{round(canvas.width * 0.8)}}",
1565
+ "startFrame": 34,
1566
+ "animations": [
1567
+ {
1568
+ "property": "opacity",
1569
+ "keyframes": [
1570
+ {
1571
+ "frame": 0,
1572
+ "value": 0
1573
+ },
1574
+ {
1575
+ "frame": 14,
1576
+ "value": 1,
1577
+ "easing": "glide"
1578
+ }
1579
+ ]
1580
+ },
1581
+ {
1582
+ "property": "y",
1583
+ "keyframes": [
1584
+ {
1585
+ "frame": 0,
1586
+ "value": 16,
1587
+ "easing": "land"
1588
+ },
1589
+ {
1590
+ "frame": 18,
1591
+ "value": 0
1592
+ }
1593
+ ]
1594
+ }
1595
+ ]
1596
+ }
1597
+ ]
1598
+ },
1599
+ {
1600
+ "id": "sfx-btn",
1601
+ "type": "audio",
1602
+ "src": "sfx:ding",
1603
+ "startFrame": 24,
1604
+ "volume": 0.45
1605
+ }
1606
+ ]
1607
+ }
1608
+ }
1609
+ }