@vanillaskyai/video 0.8.8 → 0.10.0

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 (173) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/PUBLIC-API.md +5 -8
  3. package/dist/{builtin-server-CUYPIDE7.js → builtin-server-W4PLJUZ5.js} +2 -2
  4. package/dist/{catalog-types-BIhSpOWK.d.ts → catalog-types-WTbLP6Jh.d.ts} +5 -1
  5. package/dist/chapter-title-YRLIQY3V.js +7 -0
  6. package/dist/check-runtime.js +5 -14
  7. package/dist/{chunk-AITKH6QT.js → chunk-2HFO22K2.js} +15 -40
  8. package/dist/chunk-4YM2M62S.js +13 -0
  9. package/dist/chunk-4ZJLPHBV.js +684 -0
  10. package/dist/chunk-77VY4O7A.js +390 -0
  11. package/dist/{chunk-MMUXVA47.js → chunk-7M56IUUX.js} +9 -8
  12. package/dist/chunk-7NZOMTAL.js +63 -0
  13. package/dist/{chunk-2DOLF4QN.js → chunk-AUPC6MDK.js} +12 -14
  14. package/dist/{chunk-352ZZCET.js → chunk-EGVQODKU.js} +2 -2
  15. package/dist/{chunk-2USVB3CY.js → chunk-ELVOT2FQ.js} +284 -177
  16. package/dist/chunk-EWWCQFTI.js +18 -0
  17. package/dist/{chunk-KT3M7KDL.js → chunk-HKUI5BTB.js} +3 -3
  18. package/dist/chunk-IIN5M5HW.js +697 -0
  19. package/dist/{chunk-LMG3GHLL.js → chunk-IQMYK5DX.js} +29 -3
  20. package/dist/{chunk-OWBT45EN.js → chunk-IR44XKBI.js} +1 -1
  21. package/dist/{chunk-MXZSDGZQ.js → chunk-NMFDC2W2.js} +4 -6
  22. package/dist/{chunk-5SLENAJW.js → chunk-PAJ44TFW.js} +1 -2
  23. package/dist/{chunk-L7QGGKJ2.js → chunk-PDQFQIQW.js} +1 -1
  24. package/dist/{chunk-WJ6FLKNC.js → chunk-R3XAOMKP.js} +14 -0
  25. package/dist/{chunk-2OKB27TG.js → chunk-RXTN2CW6.js} +2 -2
  26. package/dist/{chunk-XWWLKRNU.js → chunk-TVIU23OM.js} +38 -49
  27. package/dist/chunk-XX4GXKTX.js +35 -0
  28. package/dist/chunk-Z67Q5KUW.js +16 -0
  29. package/dist/{chunk-3VRMKFM7.js → chunk-ZDJNFA52.js} +11 -24
  30. package/dist/cinema-media-C7OUPNSH.js +12 -0
  31. package/dist/cli.js +18 -9
  32. package/dist/comparison-GNZOR7MF.js +37 -0
  33. package/dist/compose-video-TBFTONUC.js +12 -0
  34. package/dist/editorial-timeline-EMV5335S.js +43 -0
  35. package/dist/{events-BQ6z264n.d.ts → events-B4YCc4vc.d.ts} +1 -1
  36. package/dist/index.d.ts +4 -6
  37. package/dist/index.js +3 -7
  38. package/dist/key-figure-P37VK425.js +30 -0
  39. package/dist/{kit-tQnCPMOM.d.ts → kit-DrRpdn0p.d.ts} +2 -2
  40. package/dist/mobile-message-OF7T62B7.js +50 -0
  41. package/dist/quote-T6WYLN7A.js +33 -0
  42. package/dist/react.d.ts +21 -11
  43. package/dist/react.js +585 -826
  44. package/dist/scene-video-backdrop-PCTARAAJ.js +7 -0
  45. package/dist/server.d.ts +7 -8
  46. package/dist/server.js +179 -84
  47. package/dist/{system-prompt-RRXIWDDD.js → system-prompt-SYRT5DWM.js} +1 -1
  48. package/dist/template-catalog.d.ts +392 -16
  49. package/dist/template-catalog.js +1 -1
  50. package/dist/templates.d.ts +5 -5
  51. package/dist/test.d.ts +3 -3
  52. package/dist/test.js +18 -18
  53. package/dist/text-stream-LD364KBI.js +9 -0
  54. package/dist/{types-DWFO6qca.d.ts → types-CdBmNTGD.d.ts} +1 -1
  55. package/dist/{types-CEh9eUFu.d.ts → types-DdZw4GRQ.d.ts} +17 -48
  56. package/dist/validate-4OUD2CLX.js +10 -0
  57. package/docs/architecture.md +1 -1
  58. package/docs/concepts.md +1 -1
  59. package/docs/custom-templates.md +13 -28
  60. package/docs/customization.md +11 -59
  61. package/docs/getting-started.md +2 -2
  62. package/docs/immersive-interface.md +3 -4
  63. package/docs/maintainers/cinematic-migration.md +38 -0
  64. package/docs/media-and-audio.md +14 -14
  65. package/docs/motion-and-effects.md +6 -14
  66. package/docs/persistence.md +3 -3
  67. package/docs/production.md +11 -9
  68. package/docs/provider-integration.md +9 -16
  69. package/docs/reference/design-system.html +1 -1
  70. package/docs/reference/protocol.md +14 -4
  71. package/docs/testing.md +1 -1
  72. package/package.json +6 -3
  73. package/registry/items/backgrounds.json +1 -1
  74. package/registry/items/chapterTitle.json +80 -0
  75. package/registry/items/cinemaMedia.json +136 -0
  76. package/registry/items/comparison.json +168 -0
  77. package/registry/items/editorialTimeline.json +172 -0
  78. package/registry/items/keyFigure.json +162 -0
  79. package/registry/items/mobileMessage.json +153 -0
  80. package/registry/items/quote.json +161 -0
  81. package/registry/items/template-context.json +1 -1
  82. package/registry/items/theme.json +1 -1
  83. package/starters/video-chat/README.md +24 -26
  84. package/starters/video-chat/package.json +1 -1
  85. package/starters/video-chat/providers/video.ts +6 -5
  86. package/starters/video-chat/stock.ts +35 -151
  87. package/styles/fonts/OFL.txt +93 -0
  88. package/styles/fonts/manifest.json +66 -0
  89. package/styles/fonts/roboto-v51-cyrillic-ext.woff2 +0 -0
  90. package/styles/fonts/roboto-v51-cyrillic.woff2 +0 -0
  91. package/styles/fonts/roboto-v51-greek-ext.woff2 +0 -0
  92. package/styles/fonts/roboto-v51-greek.woff2 +0 -0
  93. package/styles/fonts/roboto-v51-latin-ext.woff2 +0 -0
  94. package/styles/fonts/roboto-v51-latin.woff2 +0 -0
  95. package/styles/fonts/roboto-v51-math.woff2 +0 -0
  96. package/styles/fonts/roboto-v51-symbols.woff2 +0 -0
  97. package/styles/fonts/roboto-v51-vietnamese.woff2 +0 -0
  98. package/styles/fonts/roboto.css +91 -0
  99. package/styles/video-chat.css +30 -22
  100. package/dist/bg-confetti-HITCGLGD.js +0 -89
  101. package/dist/bg-emoji-VU4UZYZN.js +0 -150
  102. package/dist/bg-media-L34PDQXJ.js +0 -106
  103. package/dist/brand-message-FUJ4STFO.js +0 -256
  104. package/dist/chart-bar-EGPHJATL.js +0 -310
  105. package/dist/chart-counter-5FFWQNZO.js +0 -306
  106. package/dist/chart-progress-ring-JMXQLMLC.js +0 -302
  107. package/dist/chunk-4UNKZEAT.js +0 -3575
  108. package/dist/chunk-5CDAM24P.js +0 -31
  109. package/dist/chunk-AOWSXU2K.js +0 -18
  110. package/dist/chunk-CJ7F2CE6.js +0 -104
  111. package/dist/chunk-FRN6WKHA.js +0 -185
  112. package/dist/chunk-G5JPHBX7.js +0 -336
  113. package/dist/chunk-L5BTTCZV.js +0 -97
  114. package/dist/chunk-P22HHFDK.js +0 -43
  115. package/dist/chunk-PP3MCPN4.js +0 -1998
  116. package/dist/chunk-QAAO7OAY.js +0 -19
  117. package/dist/chunk-S7HFLYNN.js +0 -35
  118. package/dist/chunk-W3VDIBGR.js +0 -217
  119. package/dist/chunk-XGRA2MUV.js +0 -242
  120. package/dist/chunk-XTOXFMLM.js +0 -105
  121. package/dist/chunk-YJJC4N4D.js +0 -761
  122. package/dist/compose-video-2NFH4DZY.js +0 -13
  123. package/dist/cta-logo-YR7LYUR5.js +0 -212
  124. package/dist/cta-media-DQJBKUO2.js +0 -221
  125. package/dist/incoming-call-54KQ7O5A.js +0 -323
  126. package/dist/infographic-before-after-ROS52GOW.js +0 -460
  127. package/dist/infographic-feature-list-E7MGUDAN.js +0 -272
  128. package/dist/infographic-problem-solution-3S6NGO5N.js +0 -343
  129. package/dist/infographic-stat-row-SYB7AB7H.js +0 -247
  130. package/dist/infographic-steps-KCE6JWE2.js +0 -406
  131. package/dist/prompt-input-MHX4O42G.js +0 -239
  132. package/dist/reaction-SLEGR3BE.js +0 -122
  133. package/dist/scene-video-backdrop-XFPX4O3I.js +0 -10
  134. package/dist/showcase-code-2HLAVKBM.js +0 -357
  135. package/dist/showcase-phone-Q4HEO4LH.js +0 -278
  136. package/dist/showcase-terminal-DL45LUFG.js +0 -312
  137. package/dist/showcase-web-2QZO73FZ.js +0 -396
  138. package/dist/social-conversation-75SD2637.js +0 -695
  139. package/dist/social-milestone-GEFUQSBF.js +0 -296
  140. package/dist/social-notification-FJ5VHVLK.js +0 -247
  141. package/dist/social-review-stack-KXQCKFRP.js +0 -242
  142. package/dist/social-testimonial-JZ7CHC7S.js +0 -287
  143. package/dist/social-tweet-UCDXM25F.js +0 -298
  144. package/dist/text-stream-54LXABJW.js +0 -10
  145. package/dist/validate-T7GBU2YF.js +0 -8
  146. package/registry/items/barChart.json +0 -245
  147. package/registry/items/beforeAfter.json +0 -180
  148. package/registry/items/bigNumber.json +0 -232
  149. package/registry/items/brandMessage.json +0 -164
  150. package/registry/items/cardList.json +0 -214
  151. package/registry/items/chatMessenger.json +0 -151
  152. package/registry/items/chatWhatsapp.json +0 -151
  153. package/registry/items/codeEditor.json +0 -191
  154. package/registry/items/confetti.json +0 -107
  155. package/registry/items/ctaLogo.json +0 -167
  156. package/registry/items/ctaMedia.json +0 -200
  157. package/registry/items/emojiBurst.json +0 -101
  158. package/registry/items/incomingCall.json +0 -177
  159. package/registry/items/media.json +0 -187
  160. package/registry/items/milestone.json +0 -212
  161. package/registry/items/notification.json +0 -189
  162. package/registry/items/phoneMockup.json +0 -261
  163. package/registry/items/problemSolution.json +0 -193
  164. package/registry/items/progressRing.json +0 -206
  165. package/registry/items/promptInput.json +0 -155
  166. package/registry/items/reaction.json +0 -176
  167. package/registry/items/reviewStack.json +0 -231
  168. package/registry/items/steps.json +0 -215
  169. package/registry/items/terminal.json +0 -219
  170. package/registry/items/testimonial.json +0 -171
  171. package/registry/items/tripleStats.json +0 -235
  172. package/registry/items/tweet.json +0 -210
  173. package/registry/items/webMockup.json +0 -280
@@ -0,0 +1,684 @@
1
+ // src/visual-system/scene-templates/schemas.ts
2
+ var BUILTIN_TEMPLATE_SCHEMAS = {
3
+ "cinemaMedia": {
4
+ "type": "object",
5
+ "properties": {
6
+ "mediaKeyword": {
7
+ "type": "string",
8
+ "format": "stock-media-keyword",
9
+ "minLength": 1,
10
+ "maxLength": 80,
11
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
12
+ "examples": [
13
+ "Ocean waves breaking on a rocky shore"
14
+ ]
15
+ },
16
+ "mediaUrl": {
17
+ "type": "string",
18
+ "format": "uri",
19
+ "description": "Host-only approved photo or video URL.",
20
+ "default": ""
21
+ },
22
+ "mediaType": {
23
+ "type": "string",
24
+ "enum": [
25
+ "photo",
26
+ "video"
27
+ ],
28
+ "default": "video",
29
+ "description": "Host-resolved asset kind."
30
+ },
31
+ "mediaPoster": {
32
+ "type": "string",
33
+ "format": "uri",
34
+ "description": "Host-only approved poster URL for video decoding.",
35
+ "default": ""
36
+ },
37
+ "shotDirection": {
38
+ "type": "string",
39
+ "maxLength": 220,
40
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
41
+ },
42
+ "mediaSource": {
43
+ "type": "string",
44
+ "enum": [
45
+ "generate",
46
+ "stock"
47
+ ],
48
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
49
+ },
50
+ "fallbackText": {
51
+ "type": "string",
52
+ "maxLength": 65,
53
+ "description": "Optional grounded concise chapter text if this shot cannot be resolved; not visible over footage."
54
+ }
55
+ },
56
+ "required": [],
57
+ "additionalProperties": false,
58
+ "x-vanillasky": {
59
+ "allowsStockMedia": true,
60
+ "requiredAnyOf": [
61
+ [
62
+ "mediaKeyword",
63
+ "mediaUrl"
64
+ ]
65
+ ]
66
+ }
67
+ },
68
+ "chapterTitle": {
69
+ "type": "object",
70
+ "properties": {
71
+ "title": {
72
+ "type": "string",
73
+ "maxLength": 65,
74
+ "description": "Short title. Line breaks optional.",
75
+ "default": "A different perspective"
76
+ }
77
+ },
78
+ "required": [
79
+ "title"
80
+ ],
81
+ "additionalProperties": false
82
+ },
83
+ "editorialTimeline": {
84
+ "type": "object",
85
+ "properties": {
86
+ "events": {
87
+ "type": "array",
88
+ "minItems": 3,
89
+ "maxItems": 5,
90
+ "items": {
91
+ "type": "object",
92
+ "properties": {
93
+ "label": {
94
+ "type": "string",
95
+ "minLength": 1,
96
+ "maxLength": 45
97
+ }
98
+ },
99
+ "required": [
100
+ "label"
101
+ ],
102
+ "additionalProperties": false
103
+ },
104
+ "default": [
105
+ {
106
+ "label": "Observe"
107
+ },
108
+ {
109
+ "label": "Understand"
110
+ },
111
+ {
112
+ "label": "Act"
113
+ }
114
+ ],
115
+ "description": "3\u20135 ordered events or actions, each with one short label; no dates."
116
+ },
117
+ "mediaKeyword": {
118
+ "type": "string",
119
+ "format": "stock-media-keyword",
120
+ "minLength": 1,
121
+ "maxLength": 80,
122
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
123
+ "examples": [
124
+ "Ocean waves breaking on a rocky shore"
125
+ ]
126
+ },
127
+ "mediaUrl": {
128
+ "type": "string",
129
+ "format": "uri",
130
+ "description": "Host-only approved photo or video URL.",
131
+ "default": ""
132
+ },
133
+ "mediaType": {
134
+ "type": "string",
135
+ "enum": [
136
+ "photo",
137
+ "video"
138
+ ],
139
+ "default": "video",
140
+ "description": "Host-resolved asset kind."
141
+ },
142
+ "mediaPoster": {
143
+ "type": "string",
144
+ "format": "uri",
145
+ "description": "Host-only approved poster URL for video decoding.",
146
+ "default": ""
147
+ },
148
+ "shotDirection": {
149
+ "type": "string",
150
+ "maxLength": 220,
151
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
152
+ },
153
+ "mediaSource": {
154
+ "type": "string",
155
+ "enum": [
156
+ "generate",
157
+ "stock"
158
+ ],
159
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
160
+ }
161
+ },
162
+ "required": [
163
+ "events"
164
+ ],
165
+ "additionalProperties": false,
166
+ "x-vanillasky": {
167
+ "allowsStockMedia": true
168
+ }
169
+ },
170
+ "mobileMessage": {
171
+ "type": "object",
172
+ "properties": {
173
+ "mediaKeyword": {
174
+ "type": "string",
175
+ "format": "stock-media-keyword",
176
+ "minLength": 1,
177
+ "maxLength": 80,
178
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
179
+ "examples": [
180
+ "Ocean waves breaking on a rocky shore"
181
+ ]
182
+ },
183
+ "mediaUrl": {
184
+ "type": "string",
185
+ "format": "uri",
186
+ "description": "Host-only approved photo or video URL.",
187
+ "default": ""
188
+ },
189
+ "mediaType": {
190
+ "type": "string",
191
+ "enum": [
192
+ "photo",
193
+ "video"
194
+ ],
195
+ "default": "video",
196
+ "description": "Host-resolved asset kind."
197
+ },
198
+ "mediaPoster": {
199
+ "type": "string",
200
+ "format": "uri",
201
+ "description": "Host-only approved poster URL for video decoding.",
202
+ "default": ""
203
+ },
204
+ "message": {
205
+ "type": "string",
206
+ "maxLength": 120,
207
+ "default": "Can we talk?",
208
+ "description": "Exact supplied or explicitly illustrative message, preferably 6\u201316 words."
209
+ },
210
+ "app": {
211
+ "type": "string",
212
+ "maxLength": 24,
213
+ "default": "Messages",
214
+ "description": "Optional app label; Messages is the visual default."
215
+ },
216
+ "shotDirection": {
217
+ "type": "string",
218
+ "maxLength": 220,
219
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
220
+ },
221
+ "mediaSource": {
222
+ "type": "string",
223
+ "enum": [
224
+ "generate",
225
+ "stock"
226
+ ],
227
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
228
+ }
229
+ },
230
+ "required": [
231
+ "message"
232
+ ],
233
+ "additionalProperties": false,
234
+ "x-vanillasky": {
235
+ "allowsStockMedia": true
236
+ }
237
+ },
238
+ "comparison": {
239
+ "type": "object",
240
+ "properties": {
241
+ "leftLabel": {
242
+ "type": "string",
243
+ "maxLength": 20,
244
+ "description": "Optional short identifier for the first alternative."
245
+ },
246
+ "rightLabel": {
247
+ "type": "string",
248
+ "maxLength": 20,
249
+ "description": "Optional short identifier for the second alternative."
250
+ },
251
+ "leftText": {
252
+ "type": "string",
253
+ "minLength": 1,
254
+ "maxLength": 60,
255
+ "default": "More distractions",
256
+ "description": "First real alternative in one short phrase."
257
+ },
258
+ "rightText": {
259
+ "type": "string",
260
+ "minLength": 1,
261
+ "maxLength": 60,
262
+ "default": "More room to think",
263
+ "description": "Second real alternative, parallel to the first."
264
+ },
265
+ "mediaKeyword": {
266
+ "type": "string",
267
+ "format": "stock-media-keyword",
268
+ "minLength": 1,
269
+ "maxLength": 80,
270
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
271
+ "examples": [
272
+ "Ocean waves breaking on a rocky shore"
273
+ ]
274
+ },
275
+ "mediaUrl": {
276
+ "type": "string",
277
+ "format": "uri",
278
+ "description": "Host-only approved photo or video URL.",
279
+ "default": ""
280
+ },
281
+ "mediaType": {
282
+ "type": "string",
283
+ "enum": [
284
+ "photo",
285
+ "video"
286
+ ],
287
+ "default": "video",
288
+ "description": "Host-resolved asset kind."
289
+ },
290
+ "mediaPoster": {
291
+ "type": "string",
292
+ "format": "uri",
293
+ "description": "Host-only approved poster URL for video decoding.",
294
+ "default": ""
295
+ },
296
+ "shotDirection": {
297
+ "type": "string",
298
+ "maxLength": 220,
299
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
300
+ },
301
+ "mediaSource": {
302
+ "type": "string",
303
+ "enum": [
304
+ "generate",
305
+ "stock"
306
+ ],
307
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
308
+ }
309
+ },
310
+ "required": [
311
+ "leftText",
312
+ "rightText"
313
+ ],
314
+ "additionalProperties": false,
315
+ "x-vanillasky": {
316
+ "allowsStockMedia": true
317
+ }
318
+ },
319
+ "quote": {
320
+ "type": "object",
321
+ "properties": {
322
+ "quote": {
323
+ "type": "string",
324
+ "minLength": 1,
325
+ "maxLength": 140,
326
+ "format": "grounded-quote",
327
+ "examples": [
328
+ "Look closely. There is always more to see."
329
+ ],
330
+ "description": "Exact supplied quotation; do not paraphrase or invent."
331
+ },
332
+ "attribution": {
333
+ "type": "string",
334
+ "minLength": 1,
335
+ "maxLength": 60,
336
+ "examples": [
337
+ "Illustrative example"
338
+ ],
339
+ "description": "Grounded attribution belonging to these exact quoted words."
340
+ },
341
+ "mediaKeyword": {
342
+ "type": "string",
343
+ "format": "stock-media-keyword",
344
+ "minLength": 1,
345
+ "maxLength": 80,
346
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
347
+ "examples": [
348
+ "Ocean waves breaking on a rocky shore"
349
+ ]
350
+ },
351
+ "mediaUrl": {
352
+ "type": "string",
353
+ "format": "uri",
354
+ "description": "Host-only approved photo or video URL.",
355
+ "default": ""
356
+ },
357
+ "mediaType": {
358
+ "type": "string",
359
+ "enum": [
360
+ "photo",
361
+ "video"
362
+ ],
363
+ "default": "video",
364
+ "description": "Host-resolved asset kind."
365
+ },
366
+ "mediaPoster": {
367
+ "type": "string",
368
+ "format": "uri",
369
+ "description": "Host-only approved poster URL for video decoding.",
370
+ "default": ""
371
+ },
372
+ "shotDirection": {
373
+ "type": "string",
374
+ "maxLength": 220,
375
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
376
+ },
377
+ "mediaSource": {
378
+ "type": "string",
379
+ "enum": [
380
+ "generate",
381
+ "stock"
382
+ ],
383
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
384
+ }
385
+ },
386
+ "required": [
387
+ "quote",
388
+ "attribution"
389
+ ],
390
+ "additionalProperties": false,
391
+ "x-vanillasky": {
392
+ "allowsStockMedia": true
393
+ }
394
+ },
395
+ "keyFigure": {
396
+ "type": "object",
397
+ "properties": {
398
+ "value": {
399
+ "type": "string",
400
+ "minLength": 1,
401
+ "maxLength": 14,
402
+ "format": "grounded-stat",
403
+ "examples": [
404
+ "42%"
405
+ ],
406
+ "description": "One supplied supported quantity, preserving its unit."
407
+ },
408
+ "label": {
409
+ "type": "string",
410
+ "minLength": 1,
411
+ "maxLength": 50,
412
+ "examples": [
413
+ "Illustrative example"
414
+ ],
415
+ "description": "Exactly one short label identifying the quantity and its context."
416
+ },
417
+ "mediaKeyword": {
418
+ "type": "string",
419
+ "format": "stock-media-keyword",
420
+ "minLength": 1,
421
+ "maxLength": 80,
422
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
423
+ "examples": [
424
+ "Ocean waves breaking on a rocky shore"
425
+ ]
426
+ },
427
+ "mediaUrl": {
428
+ "type": "string",
429
+ "format": "uri",
430
+ "description": "Host-only approved photo or video URL.",
431
+ "default": ""
432
+ },
433
+ "mediaType": {
434
+ "type": "string",
435
+ "enum": [
436
+ "photo",
437
+ "video"
438
+ ],
439
+ "default": "video",
440
+ "description": "Host-resolved asset kind."
441
+ },
442
+ "mediaPoster": {
443
+ "type": "string",
444
+ "format": "uri",
445
+ "description": "Host-only approved poster URL for video decoding.",
446
+ "default": ""
447
+ },
448
+ "shotDirection": {
449
+ "type": "string",
450
+ "maxLength": 220,
451
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
452
+ },
453
+ "mediaSource": {
454
+ "type": "string",
455
+ "enum": [
456
+ "generate",
457
+ "stock"
458
+ ],
459
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
460
+ }
461
+ },
462
+ "required": [
463
+ "value",
464
+ "label"
465
+ ],
466
+ "additionalProperties": false,
467
+ "x-vanillasky": {
468
+ "requiresStat": true,
469
+ "allowsStockMedia": true
470
+ }
471
+ }
472
+ };
473
+
474
+ // src/visual-system/catalog/builtin-manifest.ts
475
+ var BUILTIN_TEMPLATE_MANIFEST = [
476
+ {
477
+ "label": "Full-bleed",
478
+ "description": "Immersive photo or video without a headline.",
479
+ "usesGlobalTextEffect": false,
480
+ "usesGlobalTransition": false,
481
+ "usesGlobalBackgroundEffect": false,
482
+ "textCanvas": "tight",
483
+ "id": "cinemaMedia",
484
+ "family": "Media & motion",
485
+ "jobs": [
486
+ "setup",
487
+ "atmosphere",
488
+ "payoff"
489
+ ],
490
+ "register": "motion-led",
491
+ "useWhen": "Show a relevant place, activity or subject. The asset is resolved separately from a shot description. ",
492
+ "avoidWhen": "No relevant asset can be resolved or the scene needs structured explanation.",
493
+ "minDuration": 3,
494
+ "preferredDuration": 6,
495
+ "timing": {
496
+ "contentFields": [],
497
+ "contentUnit": "words",
498
+ "revealSeconds": 0,
499
+ "holdSeconds": 3,
500
+ "exitSeconds": 0
501
+ },
502
+ schema: BUILTIN_TEMPLATE_SCHEMAS.cinemaMedia
503
+ },
504
+ {
505
+ "label": "Chapter",
506
+ "description": "Centered white typography fades in, holds, and fades out on black.",
507
+ "usesGlobalTextEffect": false,
508
+ "usesGlobalTransition": false,
509
+ "usesGlobalBackgroundEffect": false,
510
+ "textCanvas": "tight",
511
+ "id": "chapterTitle",
512
+ "family": "Explainers",
513
+ "jobs": [
514
+ "setup",
515
+ "payoff"
516
+ ],
517
+ "register": "motion-led",
518
+ "useWhen": "An opening, new chapter or deliberate short takeaway needs its own visual beat. ",
519
+ "avoidWhen": "A headline would merely repeat subtitles over an ordinary footage scene.",
520
+ "minDuration": 3,
521
+ "preferredDuration": 4,
522
+ "timing": {
523
+ "contentFields": [
524
+ "title"
525
+ ],
526
+ "contentUnit": "words",
527
+ "revealSeconds": 0.8,
528
+ "holdSeconds": 1.5,
529
+ "exitSeconds": 0.8
530
+ },
531
+ schema: BUILTIN_TEMPLATE_SCHEMAS.chapterTitle
532
+ },
533
+ {
534
+ "label": "Timeline",
535
+ "description": "Three to five events on a fine continuous line over relevant media or black; without dates.",
536
+ "usesGlobalTextEffect": false,
537
+ "usesGlobalTransition": false,
538
+ "usesGlobalBackgroundEffect": false,
539
+ "textCanvas": "tight",
540
+ "id": "editorialTimeline",
541
+ "family": "Explainers",
542
+ "jobs": [
543
+ "setup",
544
+ "proof"
545
+ ],
546
+ "register": "card-led",
547
+ "useWhen": "Events unfold in an order, or actions form a process. No dates or heading. ",
548
+ "avoidWhen": "The points are unordered or the story needs branching relationships.",
549
+ "minDuration": 5,
550
+ "preferredDuration": 6,
551
+ "timing": {
552
+ "contentFields": [
553
+ "events"
554
+ ],
555
+ "contentUnit": "items",
556
+ "revealSeconds": 3.2,
557
+ "holdSeconds": 1.8,
558
+ "exitSeconds": 0
559
+ },
560
+ schema: BUILTIN_TEMPLATE_SCHEMAS.editorialTimeline
561
+ },
562
+ {
563
+ "label": "Reach out",
564
+ "description": "A frosted glass message over resolved media, without sender or timestamp.",
565
+ "usesGlobalTextEffect": false,
566
+ "usesGlobalTransition": false,
567
+ "usesGlobalBackgroundEffect": false,
568
+ "textCanvas": "tight",
569
+ "id": "mobileMessage",
570
+ "family": "Social & messaging",
571
+ "jobs": [
572
+ "setup"
573
+ ],
574
+ "register": "card-led",
575
+ "useWhen": "A person or organization reaches out with a short message, alert or invitation. Message must be supplied or explicitly illustrative.",
576
+ "avoidWhen": "The scene is a generic fact, a long exchange, or a message that would fabricate evidence.",
577
+ "minDuration": 4,
578
+ "preferredDuration": 6,
579
+ "timing": {
580
+ "contentFields": [
581
+ "message",
582
+ "app"
583
+ ],
584
+ "contentUnit": "words",
585
+ "revealSeconds": 1,
586
+ "holdSeconds": 2.2,
587
+ "exitSeconds": 0
588
+ },
589
+ schema: BUILTIN_TEMPLATE_SCHEMAS.mobileMessage
590
+ },
591
+ {
592
+ "label": "Comparison",
593
+ "description": "Two short statements with equal weight over relevant media or black, side by side or stacked in portrait.",
594
+ "usesGlobalTextEffect": false,
595
+ "usesGlobalTransition": false,
596
+ "usesGlobalBackgroundEffect": false,
597
+ "textCanvas": "tight",
598
+ "id": "comparison",
599
+ "family": "Explainers",
600
+ "jobs": [
601
+ "proof"
602
+ ],
603
+ "register": "motion-led",
604
+ "useWhen": "Explain a before/after change or two alternatives with short parallel statements. ",
605
+ "avoidWhen": "There are more than two alternatives or a numerical chart is needed.",
606
+ "minDuration": 4,
607
+ "preferredDuration": 6,
608
+ "timing": {
609
+ "contentFields": [
610
+ "leftText",
611
+ "rightText",
612
+ "leftLabel",
613
+ "rightLabel"
614
+ ],
615
+ "contentUnit": "words",
616
+ "revealSeconds": 1.2,
617
+ "holdSeconds": 2.5,
618
+ "exitSeconds": 0
619
+ },
620
+ schema: BUILTIN_TEMPLATE_SCHEMAS.comparison
621
+ },
622
+ {
623
+ "label": "Quote",
624
+ "description": "A short exact quotation with a legible attribution over relevant media or black.",
625
+ "usesGlobalTextEffect": false,
626
+ "usesGlobalTransition": false,
627
+ "usesGlobalBackgroundEffect": false,
628
+ "textCanvas": "tight",
629
+ "id": "quote",
630
+ "family": "Explainers",
631
+ "jobs": [
632
+ "proof"
633
+ ],
634
+ "register": "motion-led",
635
+ "useWhen": "A supplied quotation deserves its own moment. Use exact source words and attribution only.",
636
+ "avoidWhen": "No exact quotation or reliable attribution is supplied; never invent testimony.",
637
+ "minDuration": 5,
638
+ "preferredDuration": 7,
639
+ "timing": {
640
+ "contentFields": [
641
+ "quote",
642
+ "attribution"
643
+ ],
644
+ "contentUnit": "words",
645
+ "revealSeconds": 1.2,
646
+ "holdSeconds": 3,
647
+ "exitSeconds": 0
648
+ },
649
+ schema: BUILTIN_TEMPLATE_SCHEMAS.quote
650
+ },
651
+ {
652
+ "label": "Key figure",
653
+ "description": "One supplied figure with one short label over relevant media or black.",
654
+ "usesGlobalTextEffect": false,
655
+ "usesGlobalTransition": false,
656
+ "usesGlobalBackgroundEffect": false,
657
+ "textCanvas": "tight",
658
+ "id": "keyFigure",
659
+ "family": "Explainers",
660
+ "jobs": [
661
+ "proof"
662
+ ],
663
+ "register": "motion-led",
664
+ "useWhen": "One verified quantity or supplied target anchors the explanation. Value, unit and context must match supplied evidence.",
665
+ "avoidWhen": "No reliable figure is supplied or multiple values require a chart.",
666
+ "minDuration": 4,
667
+ "preferredDuration": 5,
668
+ "timing": {
669
+ "contentFields": [
670
+ "value",
671
+ "label"
672
+ ],
673
+ "contentUnit": "words",
674
+ "revealSeconds": 0.8,
675
+ "holdSeconds": 2.5,
676
+ "exitSeconds": 0
677
+ },
678
+ schema: BUILTIN_TEMPLATE_SCHEMAS.keyFigure
679
+ }
680
+ ];
681
+
682
+ export {
683
+ BUILTIN_TEMPLATE_MANIFEST
684
+ };