@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
@@ -1,24 +1,400 @@
1
- import { S as SceneTemplateMetadata, T as TemplateFamily, a as TemplateJob, b as TemplateRegister, c as TemplateTimingMetadata } from './catalog-types-BIhSpOWK.js';
1
+ import { S as SceneTemplateMetadata, b as TemplateTimingMetadata } from './catalog-types-WTbLP6Jh.js';
2
2
 
3
- type BuiltinTemplateId = "media" | "reaction" | "confetti" | "emojiBurst" | "bigNumber" | "barChart" | "progressRing" | "phoneMockup" | "webMockup" | "codeEditor" | "terminal" | "tweet" | "notification" | "chatMessenger" | "chatWhatsapp" | "milestone" | "reviewStack" | "testimonial" | "incomingCall" | "brandMessage" | "promptInput" | "beforeAfter" | "tripleStats" | "problemSolution" | "cardList" | "steps" | "ctaLogo" | "ctaMedia";
3
+ declare const BUILTIN_TEMPLATE_SCHEMAS: {
4
+ readonly cinemaMedia: {
5
+ readonly type: "object";
6
+ readonly properties: {
7
+ readonly mediaKeyword: {
8
+ readonly type: "string";
9
+ readonly format: "stock-media-keyword";
10
+ readonly minLength: 1;
11
+ readonly maxLength: 80;
12
+ readonly description: "2–8 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.";
13
+ readonly examples: readonly ["Ocean waves breaking on a rocky shore"];
14
+ };
15
+ readonly mediaUrl: {
16
+ readonly type: "string";
17
+ readonly format: "uri";
18
+ readonly description: "Host-only approved photo or video URL.";
19
+ readonly default: "";
20
+ };
21
+ readonly mediaType: {
22
+ readonly type: "string";
23
+ readonly enum: readonly ["photo", "video"];
24
+ readonly default: "video";
25
+ readonly description: "Host-resolved asset kind.";
26
+ };
27
+ readonly mediaPoster: {
28
+ readonly type: "string";
29
+ readonly format: "uri";
30
+ readonly description: "Host-only approved poster URL for video decoding.";
31
+ readonly default: "";
32
+ };
33
+ readonly shotDirection: {
34
+ readonly type: "string";
35
+ readonly maxLength: 220;
36
+ readonly description: "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text.";
37
+ };
38
+ readonly mediaSource: {
39
+ readonly type: "string";
40
+ readonly enum: readonly ["generate", "stock"];
41
+ readonly description: "Generate distinctive illustrative shots; use approved stock for familiar observable subjects.";
42
+ };
43
+ readonly fallbackText: {
44
+ readonly type: "string";
45
+ readonly maxLength: 65;
46
+ readonly description: "Optional grounded concise chapter text if this shot cannot be resolved; not visible over footage.";
47
+ };
48
+ };
49
+ readonly required: readonly [];
50
+ readonly additionalProperties: false;
51
+ readonly "x-vanillasky": {
52
+ readonly allowsStockMedia: true;
53
+ readonly requiredAnyOf: readonly [readonly ["mediaKeyword", "mediaUrl"]];
54
+ };
55
+ };
56
+ readonly chapterTitle: {
57
+ readonly type: "object";
58
+ readonly properties: {
59
+ readonly title: {
60
+ readonly type: "string";
61
+ readonly maxLength: 65;
62
+ readonly description: "Short title. Line breaks optional.";
63
+ readonly default: "A different perspective";
64
+ };
65
+ };
66
+ readonly required: readonly ["title"];
67
+ readonly additionalProperties: false;
68
+ };
69
+ readonly editorialTimeline: {
70
+ readonly type: "object";
71
+ readonly properties: {
72
+ readonly events: {
73
+ readonly type: "array";
74
+ readonly minItems: 3;
75
+ readonly maxItems: 5;
76
+ readonly items: {
77
+ readonly type: "object";
78
+ readonly properties: {
79
+ readonly label: {
80
+ readonly type: "string";
81
+ readonly minLength: 1;
82
+ readonly maxLength: 45;
83
+ };
84
+ };
85
+ readonly required: readonly ["label"];
86
+ readonly additionalProperties: false;
87
+ };
88
+ readonly default: readonly [{
89
+ readonly label: "Observe";
90
+ }, {
91
+ readonly label: "Understand";
92
+ }, {
93
+ readonly label: "Act";
94
+ }];
95
+ readonly description: "3–5 ordered events or actions, each with one short label; no dates.";
96
+ };
97
+ readonly mediaKeyword: {
98
+ readonly type: "string";
99
+ readonly format: "stock-media-keyword";
100
+ readonly minLength: 1;
101
+ readonly maxLength: 80;
102
+ readonly description: "2–8 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.";
103
+ readonly examples: readonly ["Ocean waves breaking on a rocky shore"];
104
+ };
105
+ readonly mediaUrl: {
106
+ readonly type: "string";
107
+ readonly format: "uri";
108
+ readonly description: "Host-only approved photo or video URL.";
109
+ readonly default: "";
110
+ };
111
+ readonly mediaType: {
112
+ readonly type: "string";
113
+ readonly enum: readonly ["photo", "video"];
114
+ readonly default: "video";
115
+ readonly description: "Host-resolved asset kind.";
116
+ };
117
+ readonly mediaPoster: {
118
+ readonly type: "string";
119
+ readonly format: "uri";
120
+ readonly description: "Host-only approved poster URL for video decoding.";
121
+ readonly default: "";
122
+ };
123
+ readonly shotDirection: {
124
+ readonly type: "string";
125
+ readonly maxLength: 220;
126
+ readonly description: "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text.";
127
+ };
128
+ readonly mediaSource: {
129
+ readonly type: "string";
130
+ readonly enum: readonly ["generate", "stock"];
131
+ readonly description: "Generate distinctive illustrative shots; use approved stock for familiar observable subjects.";
132
+ };
133
+ };
134
+ readonly required: readonly ["events"];
135
+ readonly additionalProperties: false;
136
+ readonly "x-vanillasky": {
137
+ readonly allowsStockMedia: true;
138
+ };
139
+ };
140
+ readonly mobileMessage: {
141
+ readonly type: "object";
142
+ readonly properties: {
143
+ readonly mediaKeyword: {
144
+ readonly type: "string";
145
+ readonly format: "stock-media-keyword";
146
+ readonly minLength: 1;
147
+ readonly maxLength: 80;
148
+ readonly description: "2–8 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.";
149
+ readonly examples: readonly ["Ocean waves breaking on a rocky shore"];
150
+ };
151
+ readonly mediaUrl: {
152
+ readonly type: "string";
153
+ readonly format: "uri";
154
+ readonly description: "Host-only approved photo or video URL.";
155
+ readonly default: "";
156
+ };
157
+ readonly mediaType: {
158
+ readonly type: "string";
159
+ readonly enum: readonly ["photo", "video"];
160
+ readonly default: "video";
161
+ readonly description: "Host-resolved asset kind.";
162
+ };
163
+ readonly mediaPoster: {
164
+ readonly type: "string";
165
+ readonly format: "uri";
166
+ readonly description: "Host-only approved poster URL for video decoding.";
167
+ readonly default: "";
168
+ };
169
+ readonly message: {
170
+ readonly type: "string";
171
+ readonly maxLength: 120;
172
+ readonly default: "Can we talk?";
173
+ readonly description: "Exact supplied or explicitly illustrative message, preferably 6–16 words.";
174
+ };
175
+ readonly app: {
176
+ readonly type: "string";
177
+ readonly maxLength: 24;
178
+ readonly default: "Messages";
179
+ readonly description: "Optional app label; Messages is the visual default.";
180
+ };
181
+ readonly shotDirection: {
182
+ readonly type: "string";
183
+ readonly maxLength: 220;
184
+ readonly description: "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text.";
185
+ };
186
+ readonly mediaSource: {
187
+ readonly type: "string";
188
+ readonly enum: readonly ["generate", "stock"];
189
+ readonly description: "Generate distinctive illustrative shots; use approved stock for familiar observable subjects.";
190
+ };
191
+ };
192
+ readonly required: readonly ["message"];
193
+ readonly additionalProperties: false;
194
+ readonly "x-vanillasky": {
195
+ readonly allowsStockMedia: true;
196
+ };
197
+ };
198
+ readonly comparison: {
199
+ readonly type: "object";
200
+ readonly properties: {
201
+ readonly leftLabel: {
202
+ readonly type: "string";
203
+ readonly maxLength: 20;
204
+ readonly description: "Optional short identifier for the first alternative.";
205
+ };
206
+ readonly rightLabel: {
207
+ readonly type: "string";
208
+ readonly maxLength: 20;
209
+ readonly description: "Optional short identifier for the second alternative.";
210
+ };
211
+ readonly leftText: {
212
+ readonly type: "string";
213
+ readonly minLength: 1;
214
+ readonly maxLength: 60;
215
+ readonly default: "More distractions";
216
+ readonly description: "First real alternative in one short phrase.";
217
+ };
218
+ readonly rightText: {
219
+ readonly type: "string";
220
+ readonly minLength: 1;
221
+ readonly maxLength: 60;
222
+ readonly default: "More room to think";
223
+ readonly description: "Second real alternative, parallel to the first.";
224
+ };
225
+ readonly mediaKeyword: {
226
+ readonly type: "string";
227
+ readonly format: "stock-media-keyword";
228
+ readonly minLength: 1;
229
+ readonly maxLength: 80;
230
+ readonly description: "2–8 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.";
231
+ readonly examples: readonly ["Ocean waves breaking on a rocky shore"];
232
+ };
233
+ readonly mediaUrl: {
234
+ readonly type: "string";
235
+ readonly format: "uri";
236
+ readonly description: "Host-only approved photo or video URL.";
237
+ readonly default: "";
238
+ };
239
+ readonly mediaType: {
240
+ readonly type: "string";
241
+ readonly enum: readonly ["photo", "video"];
242
+ readonly default: "video";
243
+ readonly description: "Host-resolved asset kind.";
244
+ };
245
+ readonly mediaPoster: {
246
+ readonly type: "string";
247
+ readonly format: "uri";
248
+ readonly description: "Host-only approved poster URL for video decoding.";
249
+ readonly default: "";
250
+ };
251
+ readonly shotDirection: {
252
+ readonly type: "string";
253
+ readonly maxLength: 220;
254
+ readonly description: "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text.";
255
+ };
256
+ readonly mediaSource: {
257
+ readonly type: "string";
258
+ readonly enum: readonly ["generate", "stock"];
259
+ readonly description: "Generate distinctive illustrative shots; use approved stock for familiar observable subjects.";
260
+ };
261
+ };
262
+ readonly required: readonly ["leftText", "rightText"];
263
+ readonly additionalProperties: false;
264
+ readonly "x-vanillasky": {
265
+ readonly allowsStockMedia: true;
266
+ };
267
+ };
268
+ readonly quote: {
269
+ readonly type: "object";
270
+ readonly properties: {
271
+ readonly quote: {
272
+ readonly type: "string";
273
+ readonly minLength: 1;
274
+ readonly maxLength: 140;
275
+ readonly format: "grounded-quote";
276
+ readonly examples: readonly ["Look closely. There is always more to see."];
277
+ readonly description: "Exact supplied quotation; do not paraphrase or invent.";
278
+ };
279
+ readonly attribution: {
280
+ readonly type: "string";
281
+ readonly minLength: 1;
282
+ readonly maxLength: 60;
283
+ readonly examples: readonly ["Illustrative example"];
284
+ readonly description: "Grounded attribution belonging to these exact quoted words.";
285
+ };
286
+ readonly mediaKeyword: {
287
+ readonly type: "string";
288
+ readonly format: "stock-media-keyword";
289
+ readonly minLength: 1;
290
+ readonly maxLength: 80;
291
+ readonly description: "2–8 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.";
292
+ readonly examples: readonly ["Ocean waves breaking on a rocky shore"];
293
+ };
294
+ readonly mediaUrl: {
295
+ readonly type: "string";
296
+ readonly format: "uri";
297
+ readonly description: "Host-only approved photo or video URL.";
298
+ readonly default: "";
299
+ };
300
+ readonly mediaType: {
301
+ readonly type: "string";
302
+ readonly enum: readonly ["photo", "video"];
303
+ readonly default: "video";
304
+ readonly description: "Host-resolved asset kind.";
305
+ };
306
+ readonly mediaPoster: {
307
+ readonly type: "string";
308
+ readonly format: "uri";
309
+ readonly description: "Host-only approved poster URL for video decoding.";
310
+ readonly default: "";
311
+ };
312
+ readonly shotDirection: {
313
+ readonly type: "string";
314
+ readonly maxLength: 220;
315
+ readonly description: "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text.";
316
+ };
317
+ readonly mediaSource: {
318
+ readonly type: "string";
319
+ readonly enum: readonly ["generate", "stock"];
320
+ readonly description: "Generate distinctive illustrative shots; use approved stock for familiar observable subjects.";
321
+ };
322
+ };
323
+ readonly required: readonly ["quote", "attribution"];
324
+ readonly additionalProperties: false;
325
+ readonly "x-vanillasky": {
326
+ readonly allowsStockMedia: true;
327
+ };
328
+ };
329
+ readonly keyFigure: {
330
+ readonly type: "object";
331
+ readonly properties: {
332
+ readonly value: {
333
+ readonly type: "string";
334
+ readonly minLength: 1;
335
+ readonly maxLength: 14;
336
+ readonly format: "grounded-stat";
337
+ readonly examples: readonly ["42%"];
338
+ readonly description: "One supplied supported quantity, preserving its unit.";
339
+ };
340
+ readonly label: {
341
+ readonly type: "string";
342
+ readonly minLength: 1;
343
+ readonly maxLength: 50;
344
+ readonly examples: readonly ["Illustrative example"];
345
+ readonly description: "Exactly one short label identifying the quantity and its context.";
346
+ };
347
+ readonly mediaKeyword: {
348
+ readonly type: "string";
349
+ readonly format: "stock-media-keyword";
350
+ readonly minLength: 1;
351
+ readonly maxLength: 80;
352
+ readonly description: "2–8 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.";
353
+ readonly examples: readonly ["Ocean waves breaking on a rocky shore"];
354
+ };
355
+ readonly mediaUrl: {
356
+ readonly type: "string";
357
+ readonly format: "uri";
358
+ readonly description: "Host-only approved photo or video URL.";
359
+ readonly default: "";
360
+ };
361
+ readonly mediaType: {
362
+ readonly type: "string";
363
+ readonly enum: readonly ["photo", "video"];
364
+ readonly default: "video";
365
+ readonly description: "Host-resolved asset kind.";
366
+ };
367
+ readonly mediaPoster: {
368
+ readonly type: "string";
369
+ readonly format: "uri";
370
+ readonly description: "Host-only approved poster URL for video decoding.";
371
+ readonly default: "";
372
+ };
373
+ readonly shotDirection: {
374
+ readonly type: "string";
375
+ readonly maxLength: 220;
376
+ readonly description: "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text.";
377
+ };
378
+ readonly mediaSource: {
379
+ readonly type: "string";
380
+ readonly enum: readonly ["generate", "stock"];
381
+ readonly description: "Generate distinctive illustrative shots; use approved stock for familiar observable subjects.";
382
+ };
383
+ };
384
+ readonly required: readonly ["value", "label"];
385
+ readonly additionalProperties: false;
386
+ readonly "x-vanillasky": {
387
+ readonly requiresStat: true;
388
+ readonly allowsStockMedia: true;
389
+ };
390
+ };
391
+ };
392
+
393
+ type BuiltinTemplateId = keyof typeof BUILTIN_TEMPLATE_SCHEMAS;
4
394
  interface BuiltinTemplateManifestEntry extends SceneTemplateMetadata {
5
395
  id: BuiltinTemplateId;
6
- label: string;
7
- description: string;
8
- family: TemplateFamily;
9
- jobs: TemplateJob[];
10
- register: TemplateRegister;
11
- useWhen: string;
12
- avoidWhen: string;
13
- textCanvas: "tight" | "open";
14
- minDuration: number;
15
- preferredDuration: number;
16
396
  timing: TemplateTimingMetadata;
17
397
  }
18
- /**
19
- * Canonical, serializable metadata for every bundled template.
20
- * Schemas own defaults; this manifest owns discovery, selection, and timing hints.
21
- */
22
398
  declare const BUILTIN_TEMPLATE_MANIFEST: readonly BuiltinTemplateManifestEntry[];
23
399
 
24
400
  export { type BuiltinTemplateId, type BuiltinTemplateManifestEntry as BuiltinTemplateMetadata, BUILTIN_TEMPLATE_MANIFEST as builtinTemplates };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  BUILTIN_TEMPLATE_MANIFEST
3
- } from "./chunk-PP3MCPN4.js";
3
+ } from "./chunk-4ZJLPHBV.js";
4
4
  export {
5
5
  BUILTIN_TEMPLATE_MANIFEST as builtinTemplates
6
6
  };
@@ -1,9 +1,9 @@
1
- import { I as InferTemplateJsonSchema, S as SceneTemplateProps, a as SceneTemplate } from './kit-tQnCPMOM.js';
2
- export { T as TemplateRegistry, c as createTemplateRegistry } from './kit-tQnCPMOM.js';
1
+ import { I as InferTemplateJsonSchema, S as SceneTemplateProps, a as SceneTemplate } from './kit-DrRpdn0p.js';
2
+ export { T as TemplateRegistry, c as createTemplateRegistry } from './kit-DrRpdn0p.js';
3
3
  import { ComponentType } from 'react';
4
- import { d as TemplateJsonSchema, S as SceneTemplateMetadata } from './catalog-types-BIhSpOWK.js';
5
- export { T as TemplateFamily, c as TemplateTimingMetadata, e as TemplateTransitionTiming } from './catalog-types-BIhSpOWK.js';
6
- import './types-CEh9eUFu.js';
4
+ import { T as TemplateJsonSchema, S as SceneTemplateMetadata } from './catalog-types-WTbLP6Jh.js';
5
+ export { a as TemplateFamily, b as TemplateTimingMetadata, c as TemplateTransitionTiming } from './catalog-types-WTbLP6Jh.js';
6
+ import './types-DdZw4GRQ.js';
7
7
 
8
8
  interface TemplateExample<Variables extends Record<string, unknown> = Record<string, unknown>> {
9
9
  name: string;
package/dist/test.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { e as VideoScene, b as VideoOrientation, V as VideoStyle, c as Video, d as VideoAudio, g as VideoInput } from './types-CEh9eUFu.js';
2
- import { V as VideoWarning, a as VideoFinishReason } from './events-BQ6z264n.js';
1
+ import { e as VideoScene, f as VIDEO_PROTOCOL_VERSION, b as VideoOrientation, V as VideoStyle, c as Video, d as VideoAudio, j as VideoInput } from './types-DdZw4GRQ.js';
2
+ import { V as VideoWarning, a as VideoFinishReason } from './events-B4YCc4vc.js';
3
3
 
4
4
  type MockVideoStreamPart = {
5
5
  type: "scene.add";
@@ -35,7 +35,7 @@ interface MockProviderTextStream {
35
35
  finishReason: Promise<"stop" | "length" | "content-filter">;
36
36
  }
37
37
  type SimulatedEventEnvelope<TType extends string, TData> = {
38
- protocolVersion: "0.5";
38
+ protocolVersion: typeof VIDEO_PROTOCOL_VERSION;
39
39
  runId: string;
40
40
  sequence: number;
41
41
  eventId: string;
package/dist/test.js CHANGED
@@ -25,8 +25,8 @@ var portrait = {
25
25
  type: "scene.add",
26
26
  scene: {
27
27
  id: "portrait-summary",
28
- templateId: "notification",
29
- variables: { appName: "VanillaSky", message: "Grounded product update" },
28
+ templateId: "mobileMessage",
29
+ variables: { app: "VanillaSky", message: "Grounded product update" },
30
30
  timing: { fixedDuration: 4 }
31
31
  }
32
32
  },
@@ -43,8 +43,8 @@ var landscape = {
43
43
  type: "scene.add",
44
44
  scene: {
45
45
  id: "landscape-metric",
46
- templateId: "bigNumber",
47
- variables: { texts: "Revenue", value: 42, label: "million" },
46
+ templateId: "keyFigure",
47
+ variables: { value: "42 million", label: "Revenue" },
48
48
  timing: { fixedDuration: 4 }
49
49
  }
50
50
  },
@@ -60,8 +60,8 @@ var truncated = [
60
60
  type: "scene.add",
61
61
  scene: {
62
62
  id: "truncated-partial",
63
- templateId: "notification",
64
- variables: { appName: "VanillaSky", message: "Playable partial result" },
63
+ templateId: "mobileMessage",
64
+ variables: { app: "VanillaSky", message: "Playable partial result" },
65
65
  timing: { fixedDuration: 4 }
66
66
  }
67
67
  },
@@ -81,8 +81,8 @@ var invalidScene = [
81
81
  type: "scene.add",
82
82
  scene: {
83
83
  id: "valid-after-invalid",
84
- templateId: "notification",
85
- variables: { appName: "VanillaSky", message: "Recovered after invalid content" },
84
+ templateId: "mobileMessage",
85
+ variables: { app: "VanillaSky", message: "Recovered after invalid content" },
86
86
  timing: { fixedDuration: 4 }
87
87
  }
88
88
  },
@@ -99,8 +99,8 @@ var contentFilter = [
99
99
  type: "scene.add",
100
100
  scene: {
101
101
  id: "content-filter-partial",
102
- templateId: "notification",
103
- variables: { appName: "VanillaSky", message: "Safe partial result" },
102
+ templateId: "mobileMessage",
103
+ variables: { app: "VanillaSky", message: "Safe partial result" },
104
104
  timing: { fixedDuration: 4 }
105
105
  }
106
106
  },
@@ -111,8 +111,8 @@ var abort = [
111
111
  type: "scene.add",
112
112
  scene: {
113
113
  id: "abort-partial",
114
- templateId: "notification",
115
- variables: { appName: "VanillaSky", message: "Partial result before cancellation" },
114
+ templateId: "mobileMessage",
115
+ variables: { app: "VanillaSky", message: "Partial result before cancellation" },
116
116
  timing: { fixedDuration: 4 }
117
117
  }
118
118
  },
@@ -123,8 +123,8 @@ var timeout = [
123
123
  type: "scene.add",
124
124
  scene: {
125
125
  id: "timeout-partial",
126
- templateId: "notification",
127
- variables: { appName: "VanillaSky", message: "Partial result before timeout" },
126
+ templateId: "mobileMessage",
127
+ variables: { app: "VanillaSky", message: "Partial result before timeout" },
128
128
  timing: { fixedDuration: 4 }
129
129
  }
130
130
  },
@@ -233,10 +233,10 @@ async function* simulateVideoStream(parts, options = {}) {
233
233
  if (timeoutMs != null && (!Number.isFinite(timeoutMs) || timeoutMs < 0)) {
234
234
  throw new Error("Simulation timeoutMs must be a non-negative finite number");
235
235
  }
236
- const { createVideo } = await import("./compose-video-2NFH4DZY.js");
237
- const { createTextDeltaVideoPlanner } = await import("./text-stream-54LXABJW.js");
238
- const { BUILTIN_SERVER_TEMPLATE_KIT } = await import("./builtin-server-CUYPIDE7.js");
239
- const { createTemplateSceneValidator } = await import("./validate-T7GBU2YF.js");
236
+ const { createVideo } = await import("./compose-video-TBFTONUC.js");
237
+ const { createTextDeltaVideoPlanner } = await import("./text-stream-LD364KBI.js");
238
+ const { BUILTIN_SERVER_TEMPLATE_KIT } = await import("./builtin-server-W4PLJUZ5.js");
239
+ const { createTemplateSceneValidator } = await import("./validate-4OUD2CLX.js");
240
240
  const controller = new AbortController();
241
241
  const forwardAbort = () => controller.abort(options.signal?.reason);
242
242
  if (options.signal?.aborted) forwardAbort();
@@ -0,0 +1,9 @@
1
+ import {
2
+ createTextDeltaVideoPlanner
3
+ } from "./chunk-PDQFQIQW.js";
4
+ import "./chunk-E7CL7UPB.js";
5
+ import "./chunk-7M56IUUX.js";
6
+ import "./chunk-7NZOMTAL.js";
7
+ export {
8
+ createTextDeltaVideoPlanner
9
+ };
@@ -1,4 +1,4 @@
1
- type VideoChatMode = "templates" | "full";
1
+ type VideoChatMode = "cinematic";
2
2
  interface VideoChatConversationTurn {
3
3
  prompt: string;
4
4
  response?: string;
@@ -1,46 +1,17 @@
1
- declare const VIDEO_PROTOCOL_VERSION: "0.5";
2
- declare const VIDEO_SCHEMA_VERSION: "0.1";
1
+ /** Host-authored timing, derived from prepared speech rather than model guesses. */
2
+ interface VideoNarrationGroup {
3
+ id: string;
4
+ text: string;
5
+ offsetSeconds: number;
6
+ durationSeconds: number;
7
+ totalSeconds: number;
8
+ }
9
+
10
+ declare const VIDEO_PROTOCOL_VERSION: "0.6";
11
+ declare const VIDEO_SCHEMA_VERSION: "0.2";
3
12
  type VideoOrientation = "portrait" | "landscape";
4
13
  type VideoKnowledgeMode = "input-only" | "general";
5
- interface VideoBrandColors {
6
- primary: string;
7
- secondary: string;
8
- foreground: string;
9
- surface: string;
10
- surfaceElevated: string;
11
- muted: string;
12
- }
13
- type VideoBackgroundPreset = "cosmic" | "horizon" | "twilight" | "meadow" | "velvet" | "flamingo" | "peach" | "saffron" | "black" | "midnight" | "aubergine" | "coal" | "navy";
14
- type VideoBackgroundInput = VideoBackgroundPreset | {
15
- color: string;
16
- } | {
17
- colors: [string, string];
18
- };
19
- type VideoBackground = {
20
- type: "solid";
21
- color: string;
22
- } | {
23
- type: "gradient";
24
- colors: [string, string];
25
- };
26
- interface VideoBrandInput {
27
- name?: string;
28
- logoUrl?: string;
29
- font?: string;
30
- scriptFont?: string;
31
- background?: VideoBackgroundInput;
32
- colors?: Partial<VideoBrandColors>;
33
- }
34
- interface VideoBrand {
35
- name?: string;
36
- logoUrl?: string;
37
- font: string;
38
- scriptFont: string;
39
- background: VideoBackground;
40
- colors: VideoBrandColors;
41
- }
42
14
  interface VideoStyle {
43
- brand: VideoBrand;
44
15
  preset?: string;
45
16
  defaultBackgroundEffect?: string;
46
17
  defaultTextArchetype?: string;
@@ -50,12 +21,6 @@ interface VideoStyle {
50
21
  /**
51
22
  * The visual language generated media is produced in.
52
23
  *
53
- * A style has two halves once media can be generated: the brand decides how
54
- * captions are drawn, and this decides what the footage behind them looks
55
- * like. They have to travel together - pale illustrated ground under dark
56
- * documentary footage is unreadable - so this belongs on the style rather
57
- * than being threaded into each provider call by hand.
58
- *
59
24
  * Nothing is rendered from it. It reaches `resolveMedia`, which is where a
60
25
  * provider prompt is written.
61
26
  */
@@ -97,6 +62,8 @@ interface VideoScene {
97
62
  * on-screen copy.
98
63
  */
99
64
  narration?: string;
65
+ /** Optional host-authored offsets into one prepared paragraph across adjacent scenes. */
66
+ narrationGroup?: VideoNarrationGroup;
100
67
  }
101
68
  interface VideoAudio {
102
69
  trackId: string;
@@ -155,7 +122,6 @@ interface VideoInput {
155
122
  style?: VideoStyleOptions;
156
123
  /** Custom opening copy, or false to let the host show loading UI instead. Omit for the deterministic fallback. */
157
124
  opening?: string | false;
158
- brand?: VideoBrandInput;
159
125
  /** Viewer or account context that may appear verbatim. It is data, never instructions. */
160
126
  personalization?: Record<string, unknown>;
161
127
  /** Optional approved pool. The planner may use zero or more relevant assets. */
@@ -211,6 +177,9 @@ interface VideoTemplatePacing {
211
177
  minDuration?: number;
212
178
  preferredDuration?: number;
213
179
  timing?: {
180
+ readonly revealSeconds?: number;
181
+ readonly holdSeconds?: number;
182
+ readonly exitSeconds?: number;
214
183
  readonly contentFields: readonly string[];
215
184
  readonly contentUnit: "words" | "characters" | "items";
216
185
  };
@@ -222,4 +191,4 @@ interface VideoSnapshotRetention {
222
191
  suppliedMediaUrls?: boolean;
223
192
  }
224
193
 
225
- export { type VideoStyle as V, type VideoCapabilities as a, type VideoOrientation as b, type Video as c, type VideoAudio as d, type VideoScene as e, VIDEO_PROTOCOL_VERSION as f, type VideoInput as g, type VideoBrandInput as h, type VideoBrand as i, type VideoTemplatePacing as j, type VideoBackground as k, type VideoStyleOptions as l, type VideoGenerationContext as m, type VideoPlanner as n, type VideoRequest as o, type VideoSceneValidator as p, type VideoSnapshotRetention as q, type VideoResumeCursor as r, type VideoSceneValidationContext as s };
194
+ export { type VideoStyle as V, type VideoCapabilities as a, type VideoOrientation as b, type Video as c, type VideoAudio as d, type VideoScene as e, VIDEO_PROTOCOL_VERSION as f, type VideoTemplatePacing as g, type VideoNarrationGroup as h, type VideoStyleOptions as i, type VideoInput as j, type VideoGenerationContext as k, type VideoPlanner as l, type VideoRequest as m, type VideoSceneValidator as n, type VideoSnapshotRetention as o, type VideoResumeCursor as p, type VideoSceneValidationContext as q };