@vanillaskyai/video 0.10.23 → 0.11.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 (127) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/PUBLIC-API.md +45 -438
  3. package/README.md +53 -97
  4. package/dist/builtin-metadata-OT6V7TB4.js +8 -0
  5. package/dist/{chapter-title-2JVDU62E.js → chapter-title-2RCXX7SN.js} +1 -2
  6. package/dist/{chunk-PDQFQIQW.js → chunk-3EQ6PVWL.js} +1 -1
  7. package/dist/chunk-4G4JBMCM.js +37 -0
  8. package/dist/{chunk-7AA2JWHZ.js → chunk-5DOQTIMD.js} +6 -6
  9. package/dist/chunk-666HGTVZ.js +41 -0
  10. package/dist/{chunk-7M56IUUX.js → chunk-6Z3ID54H.js} +0 -18
  11. package/dist/{chunk-5BSJLT6H.js → chunk-E7FHBLAC.js} +16 -29
  12. package/dist/chunk-HIQM4J3U.js +30 -0
  13. package/dist/chunk-ISWQ6T5X.js +36 -0
  14. package/dist/{chunk-224QNWRA.js → chunk-K5J7ESRO.js} +1 -10
  15. package/dist/chunk-KMVRBUL5.js +50 -0
  16. package/dist/chunk-NM4CXXZY.js +25 -0
  17. package/dist/{chunk-44WND2VP.js → chunk-V2CP7PVY.js} +19 -63
  18. package/dist/{chunk-3O7OMMMF.js → chunk-WZESNEPT.js} +0 -1
  19. package/dist/{chunk-RXTN2CW6.js → chunk-Z3DLSLAJ.js} +1 -1
  20. package/dist/cinema-media-YZ2UANJG.js +365 -0
  21. package/dist/cli.js +154 -1748
  22. package/dist/{compose-video-BH5K6XWT.js → compose-video-H2YUQDUY.js} +4 -4
  23. package/dist/{events-B4YCc4vc.d.ts → events-BZAfl0Dm.d.ts} +1 -1
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +4 -6
  26. package/dist/preload-media-23JXUFCF.js +77 -0
  27. package/dist/react.d.ts +39 -15
  28. package/dist/react.js +1350 -739
  29. package/dist/scene-validation-SGLLLFY5.js +9 -0
  30. package/dist/server.d.ts +67 -117
  31. package/dist/server.js +262 -614
  32. package/dist/test.d.ts +2 -2
  33. package/dist/test.js +21 -21
  34. package/dist/{text-stream-LD364KBI.js → text-stream-SOVLYR2L.js} +2 -2
  35. package/dist/{types-BqB8zC9u.d.ts → types-CG-kPI81.d.ts} +3 -1
  36. package/dist/{types-DdZw4GRQ.d.ts → types-ht-Zw3Wv.d.ts} +1 -1
  37. package/docs/agent-integration.md +19 -64
  38. package/docs/architecture.md +80 -106
  39. package/docs/customization.md +49 -66
  40. package/docs/development.md +18 -17
  41. package/docs/errors.md +4 -4
  42. package/docs/getting-started.md +74 -93
  43. package/docs/media-and-audio.md +9 -7
  44. package/docs/performance.md +11 -6
  45. package/docs/persistence.md +3 -7
  46. package/docs/production.md +4 -15
  47. package/docs/prompt-and-input.md +1 -2
  48. package/docs/provider-integration.md +134 -181
  49. package/docs/reference/protocol.md +5 -14
  50. package/docs/reference/provider-adapters.md +21 -13
  51. package/docs/security.md +1 -14
  52. package/docs/testing.md +56 -123
  53. package/package.json +4 -25
  54. package/starters/video-chat/.env.example +12 -4
  55. package/starters/video-chat/.env.native.example +13 -0
  56. package/starters/video-chat/README.md +72 -11
  57. package/starters/video-chat/package.json +1 -1
  58. package/starters/video-chat/providers/text-native.ts +94 -0
  59. package/starters/video-chat/providers/text.ts +19 -0
  60. package/starters/video-chat/providers/transcription.ts +32 -0
  61. package/starters/video-chat/providers/video-custom.ts +45 -0
  62. package/starters/video-chat/providers/video-delivery.ts +57 -0
  63. package/starters/video-chat/providers/video-google.ts +48 -0
  64. package/starters/video-chat/providers/video-job.ts +103 -0
  65. package/starters/video-chat/providers/video-runway.ts +45 -0
  66. package/starters/video-chat/providers/video.ts +39 -63
  67. package/starters/video-chat/server.ts +3 -29
  68. package/starters/video-chat/vite.config.ts +2 -8
  69. package/styles/video-chat.css +8 -105
  70. package/dist/builtin-server-W4PLJUZ5.js +0 -8
  71. package/dist/catalog-types-WTbLP6Jh.d.ts +0 -78
  72. package/dist/check-runtime.d.ts +0 -15
  73. package/dist/check-runtime.js +0 -96
  74. package/dist/chunk-2E6T633S.js +0 -27
  75. package/dist/chunk-4YM2M62S.js +0 -13
  76. package/dist/chunk-4ZJLPHBV.js +0 -684
  77. package/dist/chunk-5JBMYQP6.js +0 -156
  78. package/dist/chunk-73NTSFFI.js +0 -81
  79. package/dist/chunk-EGVQODKU.js +0 -83
  80. package/dist/chunk-HFVNAPHZ.js +0 -35
  81. package/dist/chunk-IIN5M5HW.js +0 -697
  82. package/dist/chunk-IQMYK5DX.js +0 -133
  83. package/dist/chunk-IR44XKBI.js +0 -46
  84. package/dist/chunk-JKVOBTRO.js +0 -145
  85. package/dist/chunk-LVM5Q2DL.js +0 -68
  86. package/dist/chunk-M4QTEJTK.js +0 -709
  87. package/dist/chunk-QSBDB4J2.js +0 -16
  88. package/dist/chunk-R3XAOMKP.js +0 -29
  89. package/dist/chunk-SPVTJH3F.js +0 -24
  90. package/dist/chunk-YAHT3LST.js +0 -663
  91. package/dist/chunk-ZD2VTUYR.js +0 -28
  92. package/dist/cinema-media-HYCDG65Z.js +0 -11
  93. package/dist/comparison-XXAP4S4J.js +0 -36
  94. package/dist/editorial-timeline-VUQC6KPA.js +0 -42
  95. package/dist/key-figure-4TJK7HLT.js +0 -29
  96. package/dist/kit-DrRpdn0p.d.ts +0 -79
  97. package/dist/mobile-message-FIHAO6XC.js +0 -49
  98. package/dist/preload-media-LJXWKTWG.js +0 -57
  99. package/dist/quote-GRPIYKQJ.js +0 -32
  100. package/dist/system-prompt-AG26KJAA.js +0 -12
  101. package/dist/template-catalog.d.ts +0 -400
  102. package/dist/template-catalog.js +0 -6
  103. package/dist/templates.d.ts +0 -25
  104. package/dist/templates.js +0 -102
  105. package/dist/validate-4OUD2CLX.js +0 -10
  106. package/docs/concepts.md +0 -107
  107. package/docs/custom-templates.md +0 -346
  108. package/docs/immersive-interface.md +0 -86
  109. package/docs/motion-and-effects.md +0 -109
  110. package/docs/reference/design-system.html +0 -125
  111. package/docs/responsive-orientation.md +0 -37
  112. package/docs/streaming-protocol.md +0 -15
  113. package/examples/custom-template/README.md +0 -19
  114. package/examples/custom-template/minimal-text.tsx +0 -82
  115. package/examples/custom-template/structured-data.tsx +0 -104
  116. package/registry/items/backgrounds.json +0 -70
  117. package/registry/items/chapterTitle.json +0 -80
  118. package/registry/items/cinemaMedia.json +0 -136
  119. package/registry/items/comparison.json +0 -168
  120. package/registry/items/editorialTimeline.json +0 -172
  121. package/registry/items/keyFigure.json +0 -162
  122. package/registry/items/mobileMessage.json +0 -153
  123. package/registry/items/motion.json +0 -45
  124. package/registry/items/quote.json +0 -161
  125. package/registry/items/template-context.json +0 -31
  126. package/registry/items/theme.json +0 -47
  127. package/registry/items/typography.json +0 -47
@@ -1,697 +0,0 @@
1
- // src/visual-system/catalog/catalog.generated.ts
2
- var GENERATED_BUILTIN_TEMPLATE_CATALOG = [
3
- {
4
- "label": "Full-bleed",
5
- "description": "Immersive photo or video without a headline.",
6
- "usesGlobalTextEffect": false,
7
- "usesGlobalTransition": false,
8
- "usesGlobalBackgroundEffect": false,
9
- "textCanvas": "tight",
10
- "id": "cinemaMedia",
11
- "family": "Media & motion",
12
- "jobs": [
13
- "setup",
14
- "atmosphere",
15
- "payoff"
16
- ],
17
- "register": "motion-led",
18
- "useWhen": "Show a relevant place, activity or subject. The asset is resolved separately from a shot description. ",
19
- "avoidWhen": "No relevant asset can be resolved or the scene needs structured explanation.",
20
- "minDuration": 3,
21
- "preferredDuration": 6,
22
- "timing": {
23
- "contentFields": [],
24
- "contentUnit": "words",
25
- "revealSeconds": 0,
26
- "holdSeconds": 3,
27
- "exitSeconds": 0
28
- },
29
- "schema": {
30
- "type": "object",
31
- "properties": {
32
- "mediaKeyword": {
33
- "type": "string",
34
- "format": "stock-media-keyword",
35
- "minLength": 1,
36
- "maxLength": 80,
37
- "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
38
- "examples": [
39
- "Ocean waves breaking on a rocky shore"
40
- ]
41
- },
42
- "mediaUrl": {
43
- "type": "string",
44
- "format": "uri",
45
- "description": "Host-only approved photo or video URL.",
46
- "default": ""
47
- },
48
- "mediaType": {
49
- "type": "string",
50
- "enum": [
51
- "photo",
52
- "video"
53
- ],
54
- "default": "video",
55
- "description": "Host-resolved asset kind."
56
- },
57
- "mediaPoster": {
58
- "type": "string",
59
- "format": "uri",
60
- "description": "Host-only approved poster URL for video decoding.",
61
- "default": ""
62
- },
63
- "shotDirection": {
64
- "type": "string",
65
- "maxLength": 220,
66
- "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
67
- },
68
- "mediaSource": {
69
- "type": "string",
70
- "enum": [
71
- "generate",
72
- "stock"
73
- ],
74
- "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
75
- },
76
- "fallbackText": {
77
- "type": "string",
78
- "maxLength": 65,
79
- "description": "Optional grounded concise chapter text if this shot cannot be resolved; not visible over footage."
80
- }
81
- },
82
- "required": [],
83
- "additionalProperties": false,
84
- "x-vanillasky": {
85
- "allowsStockMedia": true,
86
- "requiredAnyOf": [
87
- [
88
- "mediaKeyword",
89
- "mediaUrl"
90
- ]
91
- ]
92
- }
93
- }
94
- },
95
- {
96
- "label": "Chapter",
97
- "description": "Centered white typography fades in, holds, and fades out on black.",
98
- "usesGlobalTextEffect": false,
99
- "usesGlobalTransition": false,
100
- "usesGlobalBackgroundEffect": false,
101
- "textCanvas": "tight",
102
- "id": "chapterTitle",
103
- "family": "Explainers",
104
- "jobs": [
105
- "setup",
106
- "payoff"
107
- ],
108
- "register": "motion-led",
109
- "useWhen": "An opening, new chapter or deliberate short takeaway needs its own visual beat. ",
110
- "avoidWhen": "A headline would merely repeat subtitles over an ordinary footage scene.",
111
- "minDuration": 3,
112
- "preferredDuration": 4,
113
- "timing": {
114
- "contentFields": [
115
- "title"
116
- ],
117
- "contentUnit": "words",
118
- "revealSeconds": 0.8,
119
- "holdSeconds": 1.5,
120
- "exitSeconds": 0.8
121
- },
122
- "schema": {
123
- "type": "object",
124
- "properties": {
125
- "title": {
126
- "type": "string",
127
- "maxLength": 65,
128
- "description": "Short title. Line breaks optional.",
129
- "default": "A different perspective"
130
- }
131
- },
132
- "required": [
133
- "title"
134
- ],
135
- "additionalProperties": false
136
- }
137
- },
138
- {
139
- "label": "Timeline",
140
- "description": "Three to five events on a fine continuous line over relevant media or black; without dates.",
141
- "usesGlobalTextEffect": false,
142
- "usesGlobalTransition": false,
143
- "usesGlobalBackgroundEffect": false,
144
- "textCanvas": "tight",
145
- "id": "editorialTimeline",
146
- "family": "Explainers",
147
- "jobs": [
148
- "setup",
149
- "proof"
150
- ],
151
- "register": "card-led",
152
- "useWhen": "Events unfold in an order, or actions form a process. No dates or heading. ",
153
- "avoidWhen": "The points are unordered or the story needs branching relationships.",
154
- "minDuration": 5,
155
- "preferredDuration": 6,
156
- "timing": {
157
- "contentFields": [
158
- "events"
159
- ],
160
- "contentUnit": "items",
161
- "revealSeconds": 3.2,
162
- "holdSeconds": 1.8,
163
- "exitSeconds": 0
164
- },
165
- "schema": {
166
- "type": "object",
167
- "properties": {
168
- "events": {
169
- "type": "array",
170
- "minItems": 3,
171
- "maxItems": 5,
172
- "items": {
173
- "type": "object",
174
- "properties": {
175
- "label": {
176
- "type": "string",
177
- "minLength": 1,
178
- "maxLength": 45
179
- }
180
- },
181
- "required": [
182
- "label"
183
- ],
184
- "additionalProperties": false
185
- },
186
- "default": [
187
- {
188
- "label": "Observe"
189
- },
190
- {
191
- "label": "Understand"
192
- },
193
- {
194
- "label": "Act"
195
- }
196
- ],
197
- "description": "3\u20135 ordered events or actions, each with one short label; no dates."
198
- },
199
- "mediaKeyword": {
200
- "type": "string",
201
- "format": "stock-media-keyword",
202
- "minLength": 1,
203
- "maxLength": 80,
204
- "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
205
- "examples": [
206
- "Ocean waves breaking on a rocky shore"
207
- ]
208
- },
209
- "mediaUrl": {
210
- "type": "string",
211
- "format": "uri",
212
- "description": "Host-only approved photo or video URL.",
213
- "default": ""
214
- },
215
- "mediaType": {
216
- "type": "string",
217
- "enum": [
218
- "photo",
219
- "video"
220
- ],
221
- "default": "video",
222
- "description": "Host-resolved asset kind."
223
- },
224
- "mediaPoster": {
225
- "type": "string",
226
- "format": "uri",
227
- "description": "Host-only approved poster URL for video decoding.",
228
- "default": ""
229
- },
230
- "shotDirection": {
231
- "type": "string",
232
- "maxLength": 220,
233
- "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
234
- },
235
- "mediaSource": {
236
- "type": "string",
237
- "enum": [
238
- "generate",
239
- "stock"
240
- ],
241
- "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
242
- }
243
- },
244
- "required": [
245
- "events"
246
- ],
247
- "additionalProperties": false,
248
- "x-vanillasky": {
249
- "allowsStockMedia": true
250
- }
251
- }
252
- },
253
- {
254
- "label": "Reach out",
255
- "description": "A frosted glass message over resolved media, without sender or timestamp.",
256
- "usesGlobalTextEffect": false,
257
- "usesGlobalTransition": false,
258
- "usesGlobalBackgroundEffect": false,
259
- "textCanvas": "tight",
260
- "id": "mobileMessage",
261
- "family": "Social & messaging",
262
- "jobs": [
263
- "setup"
264
- ],
265
- "register": "card-led",
266
- "useWhen": "A person or organization reaches out with a short message, alert or invitation. Message must be supplied or explicitly illustrative.",
267
- "avoidWhen": "The scene is a generic fact, a long exchange, or a message that would fabricate evidence.",
268
- "minDuration": 4,
269
- "preferredDuration": 6,
270
- "timing": {
271
- "contentFields": [
272
- "message",
273
- "app"
274
- ],
275
- "contentUnit": "words",
276
- "revealSeconds": 1,
277
- "holdSeconds": 2.2,
278
- "exitSeconds": 0
279
- },
280
- "schema": {
281
- "type": "object",
282
- "properties": {
283
- "mediaKeyword": {
284
- "type": "string",
285
- "format": "stock-media-keyword",
286
- "minLength": 1,
287
- "maxLength": 80,
288
- "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
289
- "examples": [
290
- "Ocean waves breaking on a rocky shore"
291
- ]
292
- },
293
- "mediaUrl": {
294
- "type": "string",
295
- "format": "uri",
296
- "description": "Host-only approved photo or video URL.",
297
- "default": ""
298
- },
299
- "mediaType": {
300
- "type": "string",
301
- "enum": [
302
- "photo",
303
- "video"
304
- ],
305
- "default": "video",
306
- "description": "Host-resolved asset kind."
307
- },
308
- "mediaPoster": {
309
- "type": "string",
310
- "format": "uri",
311
- "description": "Host-only approved poster URL for video decoding.",
312
- "default": ""
313
- },
314
- "message": {
315
- "type": "string",
316
- "maxLength": 120,
317
- "default": "Can we talk?",
318
- "description": "Exact supplied or explicitly illustrative message, preferably 6\u201316 words."
319
- },
320
- "app": {
321
- "type": "string",
322
- "maxLength": 24,
323
- "default": "Messages",
324
- "description": "Optional app label; Messages is the visual default."
325
- },
326
- "shotDirection": {
327
- "type": "string",
328
- "maxLength": 220,
329
- "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
330
- },
331
- "mediaSource": {
332
- "type": "string",
333
- "enum": [
334
- "generate",
335
- "stock"
336
- ],
337
- "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
338
- }
339
- },
340
- "required": [
341
- "message"
342
- ],
343
- "additionalProperties": false,
344
- "x-vanillasky": {
345
- "allowsStockMedia": true
346
- }
347
- }
348
- },
349
- {
350
- "label": "Comparison",
351
- "description": "Two short statements with equal weight over relevant media or black, side by side or stacked in portrait.",
352
- "usesGlobalTextEffect": false,
353
- "usesGlobalTransition": false,
354
- "usesGlobalBackgroundEffect": false,
355
- "textCanvas": "tight",
356
- "id": "comparison",
357
- "family": "Explainers",
358
- "jobs": [
359
- "proof"
360
- ],
361
- "register": "motion-led",
362
- "useWhen": "Explain a before/after change or two alternatives with short parallel statements. ",
363
- "avoidWhen": "There are more than two alternatives or a numerical chart is needed.",
364
- "minDuration": 4,
365
- "preferredDuration": 6,
366
- "timing": {
367
- "contentFields": [
368
- "leftText",
369
- "rightText",
370
- "leftLabel",
371
- "rightLabel"
372
- ],
373
- "contentUnit": "words",
374
- "revealSeconds": 1.2,
375
- "holdSeconds": 2.5,
376
- "exitSeconds": 0
377
- },
378
- "schema": {
379
- "type": "object",
380
- "properties": {
381
- "leftLabel": {
382
- "type": "string",
383
- "maxLength": 20,
384
- "description": "Optional short identifier for the first alternative."
385
- },
386
- "rightLabel": {
387
- "type": "string",
388
- "maxLength": 20,
389
- "description": "Optional short identifier for the second alternative."
390
- },
391
- "leftText": {
392
- "type": "string",
393
- "minLength": 1,
394
- "maxLength": 60,
395
- "default": "More distractions",
396
- "description": "First real alternative in one short phrase."
397
- },
398
- "rightText": {
399
- "type": "string",
400
- "minLength": 1,
401
- "maxLength": 60,
402
- "default": "More room to think",
403
- "description": "Second real alternative, parallel to the first."
404
- },
405
- "mediaKeyword": {
406
- "type": "string",
407
- "format": "stock-media-keyword",
408
- "minLength": 1,
409
- "maxLength": 80,
410
- "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
411
- "examples": [
412
- "Ocean waves breaking on a rocky shore"
413
- ]
414
- },
415
- "mediaUrl": {
416
- "type": "string",
417
- "format": "uri",
418
- "description": "Host-only approved photo or video URL.",
419
- "default": ""
420
- },
421
- "mediaType": {
422
- "type": "string",
423
- "enum": [
424
- "photo",
425
- "video"
426
- ],
427
- "default": "video",
428
- "description": "Host-resolved asset kind."
429
- },
430
- "mediaPoster": {
431
- "type": "string",
432
- "format": "uri",
433
- "description": "Host-only approved poster URL for video decoding.",
434
- "default": ""
435
- },
436
- "shotDirection": {
437
- "type": "string",
438
- "maxLength": 220,
439
- "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
440
- },
441
- "mediaSource": {
442
- "type": "string",
443
- "enum": [
444
- "generate",
445
- "stock"
446
- ],
447
- "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
448
- }
449
- },
450
- "required": [
451
- "leftText",
452
- "rightText"
453
- ],
454
- "additionalProperties": false,
455
- "x-vanillasky": {
456
- "allowsStockMedia": true
457
- }
458
- }
459
- },
460
- {
461
- "label": "Quote",
462
- "description": "A short exact quotation with a legible attribution over relevant media or black.",
463
- "usesGlobalTextEffect": false,
464
- "usesGlobalTransition": false,
465
- "usesGlobalBackgroundEffect": false,
466
- "textCanvas": "tight",
467
- "id": "quote",
468
- "family": "Explainers",
469
- "jobs": [
470
- "proof"
471
- ],
472
- "register": "motion-led",
473
- "useWhen": "A supplied quotation deserves its own moment. Use exact source words and attribution only.",
474
- "avoidWhen": "No exact quotation or reliable attribution is supplied; never invent testimony.",
475
- "minDuration": 5,
476
- "preferredDuration": 7,
477
- "timing": {
478
- "contentFields": [
479
- "quote",
480
- "attribution"
481
- ],
482
- "contentUnit": "words",
483
- "revealSeconds": 1.2,
484
- "holdSeconds": 3,
485
- "exitSeconds": 0
486
- },
487
- "schema": {
488
- "type": "object",
489
- "properties": {
490
- "quote": {
491
- "type": "string",
492
- "minLength": 1,
493
- "maxLength": 140,
494
- "format": "grounded-quote",
495
- "examples": [
496
- "Look closely. There is always more to see."
497
- ],
498
- "description": "Exact supplied quotation; do not paraphrase or invent."
499
- },
500
- "attribution": {
501
- "type": "string",
502
- "minLength": 1,
503
- "maxLength": 60,
504
- "examples": [
505
- "Illustrative example"
506
- ],
507
- "description": "Grounded attribution belonging to these exact quoted words."
508
- },
509
- "mediaKeyword": {
510
- "type": "string",
511
- "format": "stock-media-keyword",
512
- "minLength": 1,
513
- "maxLength": 80,
514
- "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
515
- "examples": [
516
- "Ocean waves breaking on a rocky shore"
517
- ]
518
- },
519
- "mediaUrl": {
520
- "type": "string",
521
- "format": "uri",
522
- "description": "Host-only approved photo or video URL.",
523
- "default": ""
524
- },
525
- "mediaType": {
526
- "type": "string",
527
- "enum": [
528
- "photo",
529
- "video"
530
- ],
531
- "default": "video",
532
- "description": "Host-resolved asset kind."
533
- },
534
- "mediaPoster": {
535
- "type": "string",
536
- "format": "uri",
537
- "description": "Host-only approved poster URL for video decoding.",
538
- "default": ""
539
- },
540
- "shotDirection": {
541
- "type": "string",
542
- "maxLength": 220,
543
- "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
544
- },
545
- "mediaSource": {
546
- "type": "string",
547
- "enum": [
548
- "generate",
549
- "stock"
550
- ],
551
- "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
552
- }
553
- },
554
- "required": [
555
- "quote",
556
- "attribution"
557
- ],
558
- "additionalProperties": false,
559
- "x-vanillasky": {
560
- "allowsStockMedia": true
561
- }
562
- }
563
- },
564
- {
565
- "label": "Key figure",
566
- "description": "One supplied figure with one short label over relevant media or black.",
567
- "usesGlobalTextEffect": false,
568
- "usesGlobalTransition": false,
569
- "usesGlobalBackgroundEffect": false,
570
- "textCanvas": "tight",
571
- "id": "keyFigure",
572
- "family": "Explainers",
573
- "jobs": [
574
- "proof"
575
- ],
576
- "register": "motion-led",
577
- "useWhen": "One verified quantity or supplied target anchors the explanation. Value, unit and context must match supplied evidence.",
578
- "avoidWhen": "No reliable figure is supplied or multiple values require a chart.",
579
- "minDuration": 4,
580
- "preferredDuration": 5,
581
- "timing": {
582
- "contentFields": [
583
- "value",
584
- "label"
585
- ],
586
- "contentUnit": "words",
587
- "revealSeconds": 0.8,
588
- "holdSeconds": 2.5,
589
- "exitSeconds": 0
590
- },
591
- "schema": {
592
- "type": "object",
593
- "properties": {
594
- "value": {
595
- "type": "string",
596
- "minLength": 1,
597
- "maxLength": 14,
598
- "format": "grounded-stat",
599
- "examples": [
600
- "42%"
601
- ],
602
- "description": "One supplied supported quantity, preserving its unit."
603
- },
604
- "label": {
605
- "type": "string",
606
- "minLength": 1,
607
- "maxLength": 50,
608
- "examples": [
609
- "Illustrative example"
610
- ],
611
- "description": "Exactly one short label identifying the quantity and its context."
612
- },
613
- "mediaKeyword": {
614
- "type": "string",
615
- "format": "stock-media-keyword",
616
- "minLength": 1,
617
- "maxLength": 80,
618
- "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
619
- "examples": [
620
- "Ocean waves breaking on a rocky shore"
621
- ]
622
- },
623
- "mediaUrl": {
624
- "type": "string",
625
- "format": "uri",
626
- "description": "Host-only approved photo or video URL.",
627
- "default": ""
628
- },
629
- "mediaType": {
630
- "type": "string",
631
- "enum": [
632
- "photo",
633
- "video"
634
- ],
635
- "default": "video",
636
- "description": "Host-resolved asset kind."
637
- },
638
- "mediaPoster": {
639
- "type": "string",
640
- "format": "uri",
641
- "description": "Host-only approved poster URL for video decoding.",
642
- "default": ""
643
- },
644
- "shotDirection": {
645
- "type": "string",
646
- "maxLength": 220,
647
- "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
648
- },
649
- "mediaSource": {
650
- "type": "string",
651
- "enum": [
652
- "generate",
653
- "stock"
654
- ],
655
- "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
656
- }
657
- },
658
- "required": [
659
- "value",
660
- "label"
661
- ],
662
- "additionalProperties": false,
663
- "x-vanillasky": {
664
- "requiresStat": true,
665
- "allowsStockMedia": true
666
- }
667
- }
668
- }
669
- ];
670
-
671
- // src/visual-system/catalog/builtin-metadata.ts
672
- function freezeValue(value) {
673
- if (value && typeof value === "object" && !Object.isFrozen(value)) {
674
- for (const nested of Object.values(value)) freezeValue(nested);
675
- Object.freeze(value);
676
- }
677
- return value;
678
- }
679
- var BUILTIN_TEMPLATE_CATALOG = freezeValue(
680
- [...GENERATED_BUILTIN_TEMPLATE_CATALOG]
681
- );
682
- var metadataById = new Map(BUILTIN_TEMPLATE_CATALOG.map((template) => [template.id, template]));
683
- var BUILTIN_TEMPLATE_CAPABILITIES = freezeValue({
684
- templates: BUILTIN_TEMPLATE_CATALOG.map(({ id }) => id).sort()
685
- });
686
- function listBuiltinTemplateMetadata() {
687
- return BUILTIN_TEMPLATE_CATALOG;
688
- }
689
- function getBuiltinTemplateMetadata(id) {
690
- return metadataById.get(id);
691
- }
692
-
693
- export {
694
- BUILTIN_TEMPLATE_CATALOG,
695
- listBuiltinTemplateMetadata,
696
- getBuiltinTemplateMetadata
697
- };