@jokerized/decksmith 0.9.3 → 0.9.4

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 (59) hide show
  1. package/README.md +449 -90
  2. package/dist/animate/LICENSE +21 -0
  3. package/dist/animate/NOTICE +32 -0
  4. package/dist/animate/core.js +530 -0
  5. package/dist/animate/cut-paper.js +206 -0
  6. package/dist/animate/morph.js +131 -0
  7. package/dist/cli.js +13368 -8864
  8. package/dist/ds-animate.js +1 -0
  9. package/dist/index.js +13182 -8678
  10. package/dist/mcp.js +9805 -7587
  11. package/dist/types/bespoke/art.d.ts +172 -6
  12. package/dist/types/bespoke/cache.d.ts +10 -0
  13. package/dist/types/bespoke/cards.d.ts +66 -0
  14. package/dist/types/bespoke/contract.d.ts +0 -8
  15. package/dist/types/bespoke/databuild.d.ts +50 -0
  16. package/dist/types/bespoke/depth.d.ts +127 -0
  17. package/dist/types/bespoke/grammar.d.ts +73 -0
  18. package/dist/types/bespoke/inspect.d.ts +40 -1
  19. package/dist/types/bespoke/pipeline.d.ts +195 -11
  20. package/dist/types/bespoke/probe.d.ts +2 -2
  21. package/dist/types/bespoke/prompt.d.ts +110 -34
  22. package/dist/types/bespoke/references.d.ts +13 -14
  23. package/dist/types/bespoke/repair.d.ts +23 -29
  24. package/dist/types/bespoke/scene.d.ts +55 -10
  25. package/dist/types/bespoke/select.d.ts +28 -21
  26. package/dist/types/bespoke/sheet.d.ts +66 -1
  27. package/dist/types/bespoke/shots.d.ts +225 -22
  28. package/dist/types/build/files.d.ts +7 -0
  29. package/dist/types/build/piece.d.ts +8 -0
  30. package/dist/types/emit/animate-runtime.d.ts +149 -0
  31. package/dist/types/emit/archetypes/claim-figure.d.ts +84 -1
  32. package/dist/types/emit/archetypes/equation-walk.d.ts +2 -2
  33. package/dist/types/emit/archetypes/hero-number.d.ts +21 -0
  34. package/dist/types/emit/archetypes/index.d.ts +2 -2
  35. package/dist/types/emit/archetypes/kinetic.d.ts +2 -0
  36. package/dist/types/emit/archetypes/pipeline.d.ts +14 -2
  37. package/dist/types/emit/archetypes/stage.d.ts +57 -0
  38. package/dist/types/emit/backdrop.d.ts +114 -0
  39. package/dist/types/emit/kit.d.ts +8 -0
  40. package/dist/types/emit/look.d.ts +14 -0
  41. package/dist/types/emit/motion.d.ts +78 -46
  42. package/dist/types/emit/type.d.ts +48 -5
  43. package/dist/types/images/providers.d.ts +6 -0
  44. package/dist/types/plan/codex.d.ts +4 -2
  45. package/dist/types/plan/direct.d.ts +1 -1
  46. package/dist/types/plan/duration.d.ts +1 -1
  47. package/dist/types/plan/prompt.d.ts +1 -1
  48. package/dist/types/plan/refs.d.ts +2 -2
  49. package/dist/types/plan/variety.d.ts +74 -0
  50. package/dist/types/prefs.d.ts +20 -1
  51. package/dist/types/render/captions.d.ts +4 -5
  52. package/dist/types/render/capture.d.ts +7 -0
  53. package/dist/types/types.d.ts +680 -4
  54. package/dist/types/verify/drift.d.ts +5 -0
  55. package/dist/types/verify/fidelity.d.ts +15 -1
  56. package/dist/types/verify/index.d.ts +17 -0
  57. package/dist/types/verify/scenes.d.ts +185 -5
  58. package/package.json +1 -1
  59. package/dist/types/bespoke/callouts.d.ts +0 -76
@@ -26,6 +26,7 @@ export declare const figureSchema: z.ZodObject<{
26
26
  kind: z.ZodDefault<z.ZodEnum<{
27
27
  image: "image";
28
28
  clip: "clip";
29
+ piece: "piece";
29
30
  }>>;
30
31
  src: z.ZodString;
31
32
  caption: z.ZodString;
@@ -69,6 +70,7 @@ export declare const sourceSchema: z.ZodObject<{
69
70
  kind: z.ZodDefault<z.ZodEnum<{
70
71
  image: "image";
71
72
  clip: "clip";
73
+ piece: "piece";
72
74
  }>>;
73
75
  src: z.ZodString;
74
76
  caption: z.ZodString;
@@ -129,6 +131,57 @@ export declare const illustrationSchema: z.ZodObject<{
129
131
  prompt: z.ZodString;
130
132
  caption: z.ZodString;
131
133
  }, z.core.$strip>;
134
+ /**
135
+ * A picture BEHIND a diagram: the frame-filling scene a pipeline, a comparison
136
+ * or a callout is drawn over, so a deck reads as a sequence of scenes rather
137
+ * than as cards on one pale ground (the founder's bar, 2026-10-09).
138
+ *
139
+ * The same two fields stage takes, for the same reasons: `figureId` first, so
140
+ * a real figure is looked for before a brief is written; `illustration` when
141
+ * none fits, which `illustrate` turns into a `gen-<beat>-bd` figure. A backdrop
142
+ * with a brief and no figure is PENDING exactly as a stage is.
143
+ *
144
+ * Optional on every archetype that takes it, and absent means the archetype's
145
+ * own ground: every storyboard written before this parses and emits the bytes
146
+ * it did. The emitter draws the panels as dark glass over a scrim when it is
147
+ * present (`src/emit/backdrop.ts`), so the words' contrast never depends on the
148
+ * picture.
149
+ */
150
+ export declare const backdropSchema: z.ZodObject<{
151
+ figureId: z.ZodOptional<z.ZodString>;
152
+ illustration: z.ZodOptional<z.ZodObject<{
153
+ prompt: z.ZodString;
154
+ caption: z.ZodString;
155
+ }, z.core.$strip>>;
156
+ }, z.core.$strip>;
157
+ /**
158
+ * The archetypes that take a `backdrop`: the diagrams and comparisons, drawn
159
+ * over a scene, and the two full-bleed ones that are otherwise drawn over a
160
+ * field of colour (`FIELD_ARCHETYPES`).
161
+ */
162
+ export declare const BACKDROP_ARCHETYPES: readonly ["pipeline", "split-compare", "callout", "bar-compare", "hero-number", "kinetic"];
163
+ /**
164
+ * The archetypes that never sit on the pack's pale ground: with no `backdrop`
165
+ * they are drawn over a deep field of one of the pack's colours instead
166
+ * (src/emit/backdrop.ts, `overField`).
167
+ */
168
+ export declare const FIELD_ARCHETYPES: readonly ["hero-number", "kinetic"];
169
+ /**
170
+ * Archetypes that stand on the field in v2 only. A bar-compare with no backdrop
171
+ * was the one chart left on the pale ground in round 2 of the 2026-10-09 ko
172
+ * e2e (b10, a plain bar chart between two panels); classic is v0.8.0 exactly
173
+ * and keeps drawing it on its ground.
174
+ */
175
+ export declare const V2_FIELD_ARCHETYPES: readonly ["bar-compare"];
176
+ /**
177
+ * The id prefix `illustrate` gives every figure it draws (`gen-b03`,
178
+ * `gen-b04-left`). Such a figure is the DECK's, not the document's: it was
179
+ * drawn from a brief the planner wrote, so nothing that sizes a deck to what
180
+ * the document contains may count it (`sourcePoints`).
181
+ */
182
+ export declare const GENERATED_FIGURE_PREFIX = "gen-";
183
+ /** Whether `illustrate` drew this figure, rather than the document carrying it. */
184
+ export declare function isGeneratedFigure(id: string): boolean;
132
185
  export declare const claimFigureParamsSchema: z.ZodObject<{
133
186
  eyebrow: z.ZodOptional<z.ZodString>;
134
187
  headline: z.ZodString;
@@ -221,6 +274,13 @@ export declare const calloutParamsSchema: z.ZodObject<{
221
274
  lines: z.ZodArray<z.ZodString>;
222
275
  }, z.core.$strip>>;
223
276
  note: z.ZodOptional<z.ZodString>;
277
+ backdrop: z.ZodOptional<z.ZodObject<{
278
+ figureId: z.ZodOptional<z.ZodString>;
279
+ illustration: z.ZodOptional<z.ZodObject<{
280
+ prompt: z.ZodString;
281
+ caption: z.ZodString;
282
+ }, z.core.$strip>>;
283
+ }, z.core.$strip>>;
224
284
  }, z.core.$strip>;
225
285
  /** A labelled stage in a flow. */
226
286
  export declare const stageSchema: z.ZodObject<{
@@ -252,6 +312,13 @@ export declare const pipelineParamsSchema: z.ZodObject<{
252
312
  label: z.ZodString;
253
313
  }, z.core.$strip>>;
254
314
  note: z.ZodOptional<z.ZodString>;
315
+ backdrop: z.ZodOptional<z.ZodObject<{
316
+ figureId: z.ZodOptional<z.ZodString>;
317
+ illustration: z.ZodOptional<z.ZodObject<{
318
+ prompt: z.ZodString;
319
+ caption: z.ZodString;
320
+ }, z.core.$strip>>;
321
+ }, z.core.$strip>>;
255
322
  }, z.core.$strip>;
256
323
  export declare const annotatedFigureParamsSchema: z.ZodObject<{
257
324
  eyebrow: z.ZodOptional<z.ZodString>;
@@ -310,6 +377,13 @@ export declare const barCompareParamsSchema: z.ZodObject<{
310
377
  }>>;
311
378
  }, z.core.$strip>>;
312
379
  note: z.ZodOptional<z.ZodString>;
380
+ backdrop: z.ZodOptional<z.ZodObject<{
381
+ figureId: z.ZodOptional<z.ZodString>;
382
+ illustration: z.ZodOptional<z.ZodObject<{
383
+ prompt: z.ZodString;
384
+ caption: z.ZodString;
385
+ }, z.core.$strip>>;
386
+ }, z.core.$strip>>;
313
387
  }, z.core.$strip>;
314
388
  export declare const stackParamsSchema: z.ZodObject<{
315
389
  eyebrow: z.ZodOptional<z.ZodString>;
@@ -343,6 +417,104 @@ export declare const splitCompareParamsSchema: z.ZodObject<{
343
417
  lines: z.ZodOptional<z.ZodArray<z.ZodString>>;
344
418
  }, z.core.$strip>;
345
419
  note: z.ZodOptional<z.ZodString>;
420
+ backdrop: z.ZodOptional<z.ZodObject<{
421
+ figureId: z.ZodOptional<z.ZodString>;
422
+ illustration: z.ZodOptional<z.ZodObject<{
423
+ prompt: z.ZodString;
424
+ caption: z.ZodString;
425
+ }, z.core.$strip>>;
426
+ }, z.core.$strip>>;
427
+ }, z.core.$strip>;
428
+ /**
429
+ * Where a stage beat sets its words over the picture, or `none` for no words.
430
+ *
431
+ * A SMALL FIXED SET rather than coordinates: each one is a layout the emitter
432
+ * has a scrim for, so the contrast under the text is decided once per entry
433
+ * and never by the planner. An enum, so the model sees exactly these values.
434
+ */
435
+ export declare const STAGE_PLACEMENTS: readonly ["none", "bottom-left", "center", "top-left", "right"];
436
+ /**
437
+ * One figure that owns the whole frame — a product UI, a scene, a photo, an
438
+ * animate piece — edge to edge, with no plate, border or side column.
439
+ *
440
+ * `headline` is required even under `placement: "none"`: it is the scene's
441
+ * label (the composition's title attribute, the deck's notes fallback), and a
442
+ * beat with nothing to say about its picture has no business being a beat.
443
+ *
444
+ * `illustration` is claim-figure's alternative to `figureId`, for the same
445
+ * reason: without it a source whose only figures are plots — a typical paper —
446
+ * had no legal way to a full-bleed slide at all, and every slide kept the
447
+ * headline-over-body layout.
448
+ */
449
+ export declare const stageParamsSchema: z.ZodObject<{
450
+ headline: z.ZodString;
451
+ figureId: z.ZodOptional<z.ZodString>;
452
+ illustration: z.ZodOptional<z.ZodObject<{
453
+ prompt: z.ZodString;
454
+ caption: z.ZodString;
455
+ }, z.core.$strip>>;
456
+ placement: z.ZodEnum<{
457
+ right: "right";
458
+ none: "none";
459
+ "bottom-left": "bottom-left";
460
+ center: "center";
461
+ "top-left": "top-left";
462
+ }>;
463
+ line: z.ZodOptional<z.ZodString>;
464
+ }, z.core.$strip>;
465
+ /**
466
+ * ONE NUMBER THAT OWNS THE FRAME — the result an explainer video stops on.
467
+ *
468
+ * `value` is the figure as the source prints it ("43.63", "1/4", "75.1%"); its
469
+ * digits are drawn as odometer reels that roll into place, every other
470
+ * character standing still. `compare` is the number it is read against — the
471
+ * baseline, the before — drawn as a second figure, and as a pair of bars when
472
+ * both parse as plain numbers in one unit (`unit`). `label` names what `value`
473
+ * measures; `headline` is the sentence the number says, set under it.
474
+ *
475
+ * Full-bleed like `stage`: over a `backdrop` picture when it has one, else over
476
+ * a deep field of one of the pack's colours (src/emit/backdrop.ts), never on the pale
477
+ * ground a deck of cards sits on.
478
+ */
479
+ export declare const heroNumberParamsSchema: z.ZodObject<{
480
+ eyebrow: z.ZodOptional<z.ZodString>;
481
+ headline: z.ZodString;
482
+ value: z.ZodString;
483
+ unit: z.ZodOptional<z.ZodString>;
484
+ label: z.ZodString;
485
+ compare: z.ZodOptional<z.ZodObject<{
486
+ value: z.ZodString;
487
+ label: z.ZodString;
488
+ }, z.core.$strip>>;
489
+ backdrop: z.ZodOptional<z.ZodObject<{
490
+ figureId: z.ZodOptional<z.ZodString>;
491
+ illustration: z.ZodOptional<z.ZodObject<{
492
+ prompt: z.ZodString;
493
+ caption: z.ZodString;
494
+ }, z.core.$strip>>;
495
+ }, z.core.$strip>>;
496
+ }, z.core.$strip>;
497
+ /**
498
+ * A CLAIM SET AS MOVING TYPE. Two to four phrases, each arriving with its own
499
+ * move and stopped on, with one `key` word in it struck through by a highlight.
500
+ *
501
+ * `headline` labels the slide — the composition's title, the notes fallback —
502
+ * and is not drawn, as under a stage's `placement: "none"`: the phrases are
503
+ * what the audience reads. `key` must appear verbatim in its phrase.
504
+ */
505
+ export declare const kineticParamsSchema: z.ZodObject<{
506
+ headline: z.ZodString;
507
+ phrases: z.ZodArray<z.ZodObject<{
508
+ text: z.ZodString;
509
+ key: z.ZodOptional<z.ZodString>;
510
+ }, z.core.$strip>>;
511
+ backdrop: z.ZodOptional<z.ZodObject<{
512
+ figureId: z.ZodOptional<z.ZodString>;
513
+ illustration: z.ZodOptional<z.ZodObject<{
514
+ prompt: z.ZodString;
515
+ caption: z.ZodString;
516
+ }, z.core.$strip>>;
517
+ }, z.core.$strip>>;
346
518
  }, z.core.$strip>;
347
519
  /**
348
520
  * "This beat happens inside that part of the beat before it."
@@ -666,6 +838,13 @@ export declare const beatSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
666
838
  lines: z.ZodArray<z.ZodString>;
667
839
  }, z.core.$strip>>;
668
840
  note: z.ZodOptional<z.ZodString>;
841
+ backdrop: z.ZodOptional<z.ZodObject<{
842
+ figureId: z.ZodOptional<z.ZodString>;
843
+ illustration: z.ZodOptional<z.ZodObject<{
844
+ prompt: z.ZodString;
845
+ caption: z.ZodString;
846
+ }, z.core.$strip>>;
847
+ }, z.core.$strip>>;
669
848
  }, z.core.$strip>;
670
849
  id: z.ZodString;
671
850
  intent: z.ZodString;
@@ -715,6 +894,13 @@ export declare const beatSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
715
894
  label: z.ZodString;
716
895
  }, z.core.$strip>>;
717
896
  note: z.ZodOptional<z.ZodString>;
897
+ backdrop: z.ZodOptional<z.ZodObject<{
898
+ figureId: z.ZodOptional<z.ZodString>;
899
+ illustration: z.ZodOptional<z.ZodObject<{
900
+ prompt: z.ZodString;
901
+ caption: z.ZodString;
902
+ }, z.core.$strip>>;
903
+ }, z.core.$strip>>;
718
904
  }, z.core.$strip>;
719
905
  id: z.ZodString;
720
906
  intent: z.ZodString;
@@ -860,6 +1046,13 @@ export declare const beatSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
860
1046
  }>>;
861
1047
  }, z.core.$strip>>;
862
1048
  note: z.ZodOptional<z.ZodString>;
1049
+ backdrop: z.ZodOptional<z.ZodObject<{
1050
+ figureId: z.ZodOptional<z.ZodString>;
1051
+ illustration: z.ZodOptional<z.ZodObject<{
1052
+ prompt: z.ZodString;
1053
+ caption: z.ZodString;
1054
+ }, z.core.$strip>>;
1055
+ }, z.core.$strip>>;
863
1056
  }, z.core.$strip>;
864
1057
  id: z.ZodString;
865
1058
  intent: z.ZodString;
@@ -951,6 +1144,148 @@ export declare const beatSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
951
1144
  lines: z.ZodOptional<z.ZodArray<z.ZodString>>;
952
1145
  }, z.core.$strip>;
953
1146
  note: z.ZodOptional<z.ZodString>;
1147
+ backdrop: z.ZodOptional<z.ZodObject<{
1148
+ figureId: z.ZodOptional<z.ZodString>;
1149
+ illustration: z.ZodOptional<z.ZodObject<{
1150
+ prompt: z.ZodString;
1151
+ caption: z.ZodString;
1152
+ }, z.core.$strip>>;
1153
+ }, z.core.$strip>>;
1154
+ }, z.core.$strip>;
1155
+ id: z.ZodString;
1156
+ intent: z.ZodString;
1157
+ role: z.ZodOptional<z.ZodEnum<{
1158
+ intro: "intro";
1159
+ background: "background";
1160
+ limitations: "limitations";
1161
+ conclusion: "conclusion";
1162
+ }>>;
1163
+ inside: z.ZodOptional<z.ZodObject<{
1164
+ beat: z.ZodString;
1165
+ element: z.ZodString;
1166
+ label: z.ZodOptional<z.ZodString>;
1167
+ }, z.core.$strip>>;
1168
+ claim: z.ZodOptional<z.ZodString>;
1169
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
1170
+ kind: z.ZodEnum<{
1171
+ figure: "figure";
1172
+ equation: "equation";
1173
+ table: "table";
1174
+ section: "section";
1175
+ }>;
1176
+ id: z.ZodString;
1177
+ }, z.core.$strip>>>;
1178
+ weight: z.ZodDefault<z.ZodNumber>;
1179
+ seconds: z.ZodDefault<z.ZodNumber>;
1180
+ bespoke: z.ZodOptional<z.ZodBoolean>;
1181
+ }, z.core.$strip>, z.ZodObject<{
1182
+ narration: z.ZodOptional<z.ZodString>;
1183
+ archetype: z.ZodLiteral<"stage">;
1184
+ params: z.ZodObject<{
1185
+ headline: z.ZodString;
1186
+ figureId: z.ZodOptional<z.ZodString>;
1187
+ illustration: z.ZodOptional<z.ZodObject<{
1188
+ prompt: z.ZodString;
1189
+ caption: z.ZodString;
1190
+ }, z.core.$strip>>;
1191
+ placement: z.ZodEnum<{
1192
+ right: "right";
1193
+ none: "none";
1194
+ "bottom-left": "bottom-left";
1195
+ center: "center";
1196
+ "top-left": "top-left";
1197
+ }>;
1198
+ line: z.ZodOptional<z.ZodString>;
1199
+ }, z.core.$strip>;
1200
+ id: z.ZodString;
1201
+ intent: z.ZodString;
1202
+ role: z.ZodOptional<z.ZodEnum<{
1203
+ intro: "intro";
1204
+ background: "background";
1205
+ limitations: "limitations";
1206
+ conclusion: "conclusion";
1207
+ }>>;
1208
+ inside: z.ZodOptional<z.ZodObject<{
1209
+ beat: z.ZodString;
1210
+ element: z.ZodString;
1211
+ label: z.ZodOptional<z.ZodString>;
1212
+ }, z.core.$strip>>;
1213
+ claim: z.ZodOptional<z.ZodString>;
1214
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
1215
+ kind: z.ZodEnum<{
1216
+ figure: "figure";
1217
+ equation: "equation";
1218
+ table: "table";
1219
+ section: "section";
1220
+ }>;
1221
+ id: z.ZodString;
1222
+ }, z.core.$strip>>>;
1223
+ weight: z.ZodDefault<z.ZodNumber>;
1224
+ seconds: z.ZodDefault<z.ZodNumber>;
1225
+ bespoke: z.ZodOptional<z.ZodBoolean>;
1226
+ }, z.core.$strip>, z.ZodObject<{
1227
+ narration: z.ZodOptional<z.ZodString>;
1228
+ archetype: z.ZodLiteral<"hero-number">;
1229
+ params: z.ZodObject<{
1230
+ eyebrow: z.ZodOptional<z.ZodString>;
1231
+ headline: z.ZodString;
1232
+ value: z.ZodString;
1233
+ unit: z.ZodOptional<z.ZodString>;
1234
+ label: z.ZodString;
1235
+ compare: z.ZodOptional<z.ZodObject<{
1236
+ value: z.ZodString;
1237
+ label: z.ZodString;
1238
+ }, z.core.$strip>>;
1239
+ backdrop: z.ZodOptional<z.ZodObject<{
1240
+ figureId: z.ZodOptional<z.ZodString>;
1241
+ illustration: z.ZodOptional<z.ZodObject<{
1242
+ prompt: z.ZodString;
1243
+ caption: z.ZodString;
1244
+ }, z.core.$strip>>;
1245
+ }, z.core.$strip>>;
1246
+ }, z.core.$strip>;
1247
+ id: z.ZodString;
1248
+ intent: z.ZodString;
1249
+ role: z.ZodOptional<z.ZodEnum<{
1250
+ intro: "intro";
1251
+ background: "background";
1252
+ limitations: "limitations";
1253
+ conclusion: "conclusion";
1254
+ }>>;
1255
+ inside: z.ZodOptional<z.ZodObject<{
1256
+ beat: z.ZodString;
1257
+ element: z.ZodString;
1258
+ label: z.ZodOptional<z.ZodString>;
1259
+ }, z.core.$strip>>;
1260
+ claim: z.ZodOptional<z.ZodString>;
1261
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
1262
+ kind: z.ZodEnum<{
1263
+ figure: "figure";
1264
+ equation: "equation";
1265
+ table: "table";
1266
+ section: "section";
1267
+ }>;
1268
+ id: z.ZodString;
1269
+ }, z.core.$strip>>>;
1270
+ weight: z.ZodDefault<z.ZodNumber>;
1271
+ seconds: z.ZodDefault<z.ZodNumber>;
1272
+ bespoke: z.ZodOptional<z.ZodBoolean>;
1273
+ }, z.core.$strip>, z.ZodObject<{
1274
+ narration: z.ZodOptional<z.ZodString>;
1275
+ archetype: z.ZodLiteral<"kinetic">;
1276
+ params: z.ZodObject<{
1277
+ headline: z.ZodString;
1278
+ phrases: z.ZodArray<z.ZodObject<{
1279
+ text: z.ZodString;
1280
+ key: z.ZodOptional<z.ZodString>;
1281
+ }, z.core.$strip>>;
1282
+ backdrop: z.ZodOptional<z.ZodObject<{
1283
+ figureId: z.ZodOptional<z.ZodString>;
1284
+ illustration: z.ZodOptional<z.ZodObject<{
1285
+ prompt: z.ZodString;
1286
+ caption: z.ZodString;
1287
+ }, z.core.$strip>>;
1288
+ }, z.core.$strip>>;
954
1289
  }, z.core.$strip>;
955
1290
  id: z.ZodString;
956
1291
  intent: z.ZodString;
@@ -1309,6 +1644,13 @@ export declare const storyboardSchema: z.ZodObject<{
1309
1644
  lines: z.ZodArray<z.ZodString>;
1310
1645
  }, z.core.$strip>>;
1311
1646
  note: z.ZodOptional<z.ZodString>;
1647
+ backdrop: z.ZodOptional<z.ZodObject<{
1648
+ figureId: z.ZodOptional<z.ZodString>;
1649
+ illustration: z.ZodOptional<z.ZodObject<{
1650
+ prompt: z.ZodString;
1651
+ caption: z.ZodString;
1652
+ }, z.core.$strip>>;
1653
+ }, z.core.$strip>>;
1312
1654
  }, z.core.$strip>;
1313
1655
  id: z.ZodString;
1314
1656
  intent: z.ZodString;
@@ -1358,6 +1700,13 @@ export declare const storyboardSchema: z.ZodObject<{
1358
1700
  label: z.ZodString;
1359
1701
  }, z.core.$strip>>;
1360
1702
  note: z.ZodOptional<z.ZodString>;
1703
+ backdrop: z.ZodOptional<z.ZodObject<{
1704
+ figureId: z.ZodOptional<z.ZodString>;
1705
+ illustration: z.ZodOptional<z.ZodObject<{
1706
+ prompt: z.ZodString;
1707
+ caption: z.ZodString;
1708
+ }, z.core.$strip>>;
1709
+ }, z.core.$strip>>;
1361
1710
  }, z.core.$strip>;
1362
1711
  id: z.ZodString;
1363
1712
  intent: z.ZodString;
@@ -1503,6 +1852,13 @@ export declare const storyboardSchema: z.ZodObject<{
1503
1852
  }>>;
1504
1853
  }, z.core.$strip>>;
1505
1854
  note: z.ZodOptional<z.ZodString>;
1855
+ backdrop: z.ZodOptional<z.ZodObject<{
1856
+ figureId: z.ZodOptional<z.ZodString>;
1857
+ illustration: z.ZodOptional<z.ZodObject<{
1858
+ prompt: z.ZodString;
1859
+ caption: z.ZodString;
1860
+ }, z.core.$strip>>;
1861
+ }, z.core.$strip>>;
1506
1862
  }, z.core.$strip>;
1507
1863
  id: z.ZodString;
1508
1864
  intent: z.ZodString;
@@ -1594,6 +1950,13 @@ export declare const storyboardSchema: z.ZodObject<{
1594
1950
  lines: z.ZodOptional<z.ZodArray<z.ZodString>>;
1595
1951
  }, z.core.$strip>;
1596
1952
  note: z.ZodOptional<z.ZodString>;
1953
+ backdrop: z.ZodOptional<z.ZodObject<{
1954
+ figureId: z.ZodOptional<z.ZodString>;
1955
+ illustration: z.ZodOptional<z.ZodObject<{
1956
+ prompt: z.ZodString;
1957
+ caption: z.ZodString;
1958
+ }, z.core.$strip>>;
1959
+ }, z.core.$strip>>;
1597
1960
  }, z.core.$strip>;
1598
1961
  id: z.ZodString;
1599
1962
  intent: z.ZodString;
@@ -1621,7 +1984,142 @@ export declare const storyboardSchema: z.ZodObject<{
1621
1984
  weight: z.ZodDefault<z.ZodNumber>;
1622
1985
  seconds: z.ZodDefault<z.ZodNumber>;
1623
1986
  bespoke: z.ZodOptional<z.ZodBoolean>;
1624
- }, z.core.$strip>], "archetype">>;
1987
+ }, z.core.$strip>, z.ZodObject<{
1988
+ narration: z.ZodOptional<z.ZodString>;
1989
+ archetype: z.ZodLiteral<"stage">;
1990
+ params: z.ZodObject<{
1991
+ headline: z.ZodString;
1992
+ figureId: z.ZodOptional<z.ZodString>;
1993
+ illustration: z.ZodOptional<z.ZodObject<{
1994
+ prompt: z.ZodString;
1995
+ caption: z.ZodString;
1996
+ }, z.core.$strip>>;
1997
+ placement: z.ZodEnum<{
1998
+ right: "right";
1999
+ none: "none";
2000
+ "bottom-left": "bottom-left";
2001
+ center: "center";
2002
+ "top-left": "top-left";
2003
+ }>;
2004
+ line: z.ZodOptional<z.ZodString>;
2005
+ }, z.core.$strip>;
2006
+ id: z.ZodString;
2007
+ intent: z.ZodString;
2008
+ role: z.ZodOptional<z.ZodEnum<{
2009
+ intro: "intro";
2010
+ background: "background";
2011
+ limitations: "limitations";
2012
+ conclusion: "conclusion";
2013
+ }>>;
2014
+ inside: z.ZodOptional<z.ZodObject<{
2015
+ beat: z.ZodString;
2016
+ element: z.ZodString;
2017
+ label: z.ZodOptional<z.ZodString>;
2018
+ }, z.core.$strip>>;
2019
+ claim: z.ZodOptional<z.ZodString>;
2020
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
2021
+ kind: z.ZodEnum<{
2022
+ figure: "figure";
2023
+ equation: "equation";
2024
+ table: "table";
2025
+ section: "section";
2026
+ }>;
2027
+ id: z.ZodString;
2028
+ }, z.core.$strip>>>;
2029
+ weight: z.ZodDefault<z.ZodNumber>;
2030
+ seconds: z.ZodDefault<z.ZodNumber>;
2031
+ bespoke: z.ZodOptional<z.ZodBoolean>;
2032
+ }, z.core.$strip>, z.ZodObject<{
2033
+ narration: z.ZodOptional<z.ZodString>;
2034
+ archetype: z.ZodLiteral<"hero-number">;
2035
+ params: z.ZodObject<{
2036
+ eyebrow: z.ZodOptional<z.ZodString>;
2037
+ headline: z.ZodString;
2038
+ value: z.ZodString;
2039
+ unit: z.ZodOptional<z.ZodString>;
2040
+ label: z.ZodString;
2041
+ compare: z.ZodOptional<z.ZodObject<{
2042
+ value: z.ZodString;
2043
+ label: z.ZodString;
2044
+ }, z.core.$strip>>;
2045
+ backdrop: z.ZodOptional<z.ZodObject<{
2046
+ figureId: z.ZodOptional<z.ZodString>;
2047
+ illustration: z.ZodOptional<z.ZodObject<{
2048
+ prompt: z.ZodString;
2049
+ caption: z.ZodString;
2050
+ }, z.core.$strip>>;
2051
+ }, z.core.$strip>>;
2052
+ }, z.core.$strip>;
2053
+ id: z.ZodString;
2054
+ intent: z.ZodString;
2055
+ role: z.ZodOptional<z.ZodEnum<{
2056
+ intro: "intro";
2057
+ background: "background";
2058
+ limitations: "limitations";
2059
+ conclusion: "conclusion";
2060
+ }>>;
2061
+ inside: z.ZodOptional<z.ZodObject<{
2062
+ beat: z.ZodString;
2063
+ element: z.ZodString;
2064
+ label: z.ZodOptional<z.ZodString>;
2065
+ }, z.core.$strip>>;
2066
+ claim: z.ZodOptional<z.ZodString>;
2067
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
2068
+ kind: z.ZodEnum<{
2069
+ figure: "figure";
2070
+ equation: "equation";
2071
+ table: "table";
2072
+ section: "section";
2073
+ }>;
2074
+ id: z.ZodString;
2075
+ }, z.core.$strip>>>;
2076
+ weight: z.ZodDefault<z.ZodNumber>;
2077
+ seconds: z.ZodDefault<z.ZodNumber>;
2078
+ bespoke: z.ZodOptional<z.ZodBoolean>;
2079
+ }, z.core.$strip>, z.ZodObject<{
2080
+ narration: z.ZodOptional<z.ZodString>;
2081
+ archetype: z.ZodLiteral<"kinetic">;
2082
+ params: z.ZodObject<{
2083
+ headline: z.ZodString;
2084
+ phrases: z.ZodArray<z.ZodObject<{
2085
+ text: z.ZodString;
2086
+ key: z.ZodOptional<z.ZodString>;
2087
+ }, z.core.$strip>>;
2088
+ backdrop: z.ZodOptional<z.ZodObject<{
2089
+ figureId: z.ZodOptional<z.ZodString>;
2090
+ illustration: z.ZodOptional<z.ZodObject<{
2091
+ prompt: z.ZodString;
2092
+ caption: z.ZodString;
2093
+ }, z.core.$strip>>;
2094
+ }, z.core.$strip>>;
2095
+ }, z.core.$strip>;
2096
+ id: z.ZodString;
2097
+ intent: z.ZodString;
2098
+ role: z.ZodOptional<z.ZodEnum<{
2099
+ intro: "intro";
2100
+ background: "background";
2101
+ limitations: "limitations";
2102
+ conclusion: "conclusion";
2103
+ }>>;
2104
+ inside: z.ZodOptional<z.ZodObject<{
2105
+ beat: z.ZodString;
2106
+ element: z.ZodString;
2107
+ label: z.ZodOptional<z.ZodString>;
2108
+ }, z.core.$strip>>;
2109
+ claim: z.ZodOptional<z.ZodString>;
2110
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
2111
+ kind: z.ZodEnum<{
2112
+ figure: "figure";
2113
+ equation: "equation";
2114
+ table: "table";
2115
+ section: "section";
2116
+ }>;
2117
+ id: z.ZodString;
2118
+ }, z.core.$strip>>>;
2119
+ weight: z.ZodDefault<z.ZodNumber>;
2120
+ seconds: z.ZodDefault<z.ZodNumber>;
2121
+ bespoke: z.ZodOptional<z.ZodBoolean>;
2122
+ }, z.core.$strip>], "archetype">>;
1625
2123
  }, z.core.$strip>;
1626
2124
  /**
1627
2125
  * What the person asking for the deck gets to decide.
@@ -1680,9 +2178,10 @@ export declare const prefsSchema: z.ZodObject<{
1680
2178
  max: z.ZodDefault<z.ZodInt>;
1681
2179
  }, z.core.$strip>>;
1682
2180
  bespoke: z.ZodOptional<z.ZodObject<{
1683
- enabled: z.ZodDefault<z.ZodBoolean>;
2181
+ enabled: z.ZodOptional<z.ZodBoolean>;
1684
2182
  maxCalls: z.ZodDefault<z.ZodInt>;
1685
2183
  maxSeconds: z.ZodDefault<z.ZodInt>;
2184
+ callSeconds: z.ZodDefault<z.ZodInt>;
1686
2185
  model: z.ZodOptional<z.ZodString>;
1687
2186
  cli: z.ZodOptional<z.ZodString>;
1688
2187
  cache: z.ZodOptional<z.ZodString>;
@@ -1840,9 +2339,10 @@ export declare const packSchema: z.ZodObject<{
1840
2339
  max: z.ZodDefault<z.ZodInt>;
1841
2340
  }, z.core.$strip>>;
1842
2341
  bespoke: z.ZodOptional<z.ZodObject<{
1843
- enabled: z.ZodDefault<z.ZodBoolean>;
2342
+ enabled: z.ZodOptional<z.ZodBoolean>;
1844
2343
  maxCalls: z.ZodDefault<z.ZodInt>;
1845
2344
  maxSeconds: z.ZodDefault<z.ZodInt>;
2345
+ callSeconds: z.ZodDefault<z.ZodInt>;
1846
2346
  model: z.ZodOptional<z.ZodString>;
1847
2347
  cli: z.ZodOptional<z.ZodString>;
1848
2348
  cache: z.ZodOptional<z.ZodString>;
@@ -1871,6 +2371,7 @@ export declare const packSchema: z.ZodObject<{
1871
2371
  kind: z.ZodDefault<z.ZodEnum<{
1872
2372
  image: "image";
1873
2373
  clip: "clip";
2374
+ piece: "piece";
1874
2375
  }>>;
1875
2376
  src: z.ZodString;
1876
2377
  caption: z.ZodString;
@@ -2169,6 +2670,13 @@ export declare const packSchema: z.ZodObject<{
2169
2670
  lines: z.ZodArray<z.ZodString>;
2170
2671
  }, z.core.$strip>>;
2171
2672
  note: z.ZodOptional<z.ZodString>;
2673
+ backdrop: z.ZodOptional<z.ZodObject<{
2674
+ figureId: z.ZodOptional<z.ZodString>;
2675
+ illustration: z.ZodOptional<z.ZodObject<{
2676
+ prompt: z.ZodString;
2677
+ caption: z.ZodString;
2678
+ }, z.core.$strip>>;
2679
+ }, z.core.$strip>>;
2172
2680
  }, z.core.$strip>;
2173
2681
  id: z.ZodString;
2174
2682
  intent: z.ZodString;
@@ -2218,6 +2726,13 @@ export declare const packSchema: z.ZodObject<{
2218
2726
  label: z.ZodString;
2219
2727
  }, z.core.$strip>>;
2220
2728
  note: z.ZodOptional<z.ZodString>;
2729
+ backdrop: z.ZodOptional<z.ZodObject<{
2730
+ figureId: z.ZodOptional<z.ZodString>;
2731
+ illustration: z.ZodOptional<z.ZodObject<{
2732
+ prompt: z.ZodString;
2733
+ caption: z.ZodString;
2734
+ }, z.core.$strip>>;
2735
+ }, z.core.$strip>>;
2221
2736
  }, z.core.$strip>;
2222
2737
  id: z.ZodString;
2223
2738
  intent: z.ZodString;
@@ -2363,6 +2878,13 @@ export declare const packSchema: z.ZodObject<{
2363
2878
  }>>;
2364
2879
  }, z.core.$strip>>;
2365
2880
  note: z.ZodOptional<z.ZodString>;
2881
+ backdrop: z.ZodOptional<z.ZodObject<{
2882
+ figureId: z.ZodOptional<z.ZodString>;
2883
+ illustration: z.ZodOptional<z.ZodObject<{
2884
+ prompt: z.ZodString;
2885
+ caption: z.ZodString;
2886
+ }, z.core.$strip>>;
2887
+ }, z.core.$strip>>;
2366
2888
  }, z.core.$strip>;
2367
2889
  id: z.ZodString;
2368
2890
  intent: z.ZodString;
@@ -2454,6 +2976,148 @@ export declare const packSchema: z.ZodObject<{
2454
2976
  lines: z.ZodOptional<z.ZodArray<z.ZodString>>;
2455
2977
  }, z.core.$strip>;
2456
2978
  note: z.ZodOptional<z.ZodString>;
2979
+ backdrop: z.ZodOptional<z.ZodObject<{
2980
+ figureId: z.ZodOptional<z.ZodString>;
2981
+ illustration: z.ZodOptional<z.ZodObject<{
2982
+ prompt: z.ZodString;
2983
+ caption: z.ZodString;
2984
+ }, z.core.$strip>>;
2985
+ }, z.core.$strip>>;
2986
+ }, z.core.$strip>;
2987
+ id: z.ZodString;
2988
+ intent: z.ZodString;
2989
+ role: z.ZodOptional<z.ZodEnum<{
2990
+ intro: "intro";
2991
+ background: "background";
2992
+ limitations: "limitations";
2993
+ conclusion: "conclusion";
2994
+ }>>;
2995
+ inside: z.ZodOptional<z.ZodObject<{
2996
+ beat: z.ZodString;
2997
+ element: z.ZodString;
2998
+ label: z.ZodOptional<z.ZodString>;
2999
+ }, z.core.$strip>>;
3000
+ claim: z.ZodOptional<z.ZodString>;
3001
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
3002
+ kind: z.ZodEnum<{
3003
+ figure: "figure";
3004
+ equation: "equation";
3005
+ table: "table";
3006
+ section: "section";
3007
+ }>;
3008
+ id: z.ZodString;
3009
+ }, z.core.$strip>>>;
3010
+ weight: z.ZodDefault<z.ZodNumber>;
3011
+ seconds: z.ZodDefault<z.ZodNumber>;
3012
+ bespoke: z.ZodOptional<z.ZodBoolean>;
3013
+ }, z.core.$strip>, z.ZodObject<{
3014
+ narration: z.ZodOptional<z.ZodString>;
3015
+ archetype: z.ZodLiteral<"stage">;
3016
+ params: z.ZodObject<{
3017
+ headline: z.ZodString;
3018
+ figureId: z.ZodOptional<z.ZodString>;
3019
+ illustration: z.ZodOptional<z.ZodObject<{
3020
+ prompt: z.ZodString;
3021
+ caption: z.ZodString;
3022
+ }, z.core.$strip>>;
3023
+ placement: z.ZodEnum<{
3024
+ right: "right";
3025
+ none: "none";
3026
+ "bottom-left": "bottom-left";
3027
+ center: "center";
3028
+ "top-left": "top-left";
3029
+ }>;
3030
+ line: z.ZodOptional<z.ZodString>;
3031
+ }, z.core.$strip>;
3032
+ id: z.ZodString;
3033
+ intent: z.ZodString;
3034
+ role: z.ZodOptional<z.ZodEnum<{
3035
+ intro: "intro";
3036
+ background: "background";
3037
+ limitations: "limitations";
3038
+ conclusion: "conclusion";
3039
+ }>>;
3040
+ inside: z.ZodOptional<z.ZodObject<{
3041
+ beat: z.ZodString;
3042
+ element: z.ZodString;
3043
+ label: z.ZodOptional<z.ZodString>;
3044
+ }, z.core.$strip>>;
3045
+ claim: z.ZodOptional<z.ZodString>;
3046
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
3047
+ kind: z.ZodEnum<{
3048
+ figure: "figure";
3049
+ equation: "equation";
3050
+ table: "table";
3051
+ section: "section";
3052
+ }>;
3053
+ id: z.ZodString;
3054
+ }, z.core.$strip>>>;
3055
+ weight: z.ZodDefault<z.ZodNumber>;
3056
+ seconds: z.ZodDefault<z.ZodNumber>;
3057
+ bespoke: z.ZodOptional<z.ZodBoolean>;
3058
+ }, z.core.$strip>, z.ZodObject<{
3059
+ narration: z.ZodOptional<z.ZodString>;
3060
+ archetype: z.ZodLiteral<"hero-number">;
3061
+ params: z.ZodObject<{
3062
+ eyebrow: z.ZodOptional<z.ZodString>;
3063
+ headline: z.ZodString;
3064
+ value: z.ZodString;
3065
+ unit: z.ZodOptional<z.ZodString>;
3066
+ label: z.ZodString;
3067
+ compare: z.ZodOptional<z.ZodObject<{
3068
+ value: z.ZodString;
3069
+ label: z.ZodString;
3070
+ }, z.core.$strip>>;
3071
+ backdrop: z.ZodOptional<z.ZodObject<{
3072
+ figureId: z.ZodOptional<z.ZodString>;
3073
+ illustration: z.ZodOptional<z.ZodObject<{
3074
+ prompt: z.ZodString;
3075
+ caption: z.ZodString;
3076
+ }, z.core.$strip>>;
3077
+ }, z.core.$strip>>;
3078
+ }, z.core.$strip>;
3079
+ id: z.ZodString;
3080
+ intent: z.ZodString;
3081
+ role: z.ZodOptional<z.ZodEnum<{
3082
+ intro: "intro";
3083
+ background: "background";
3084
+ limitations: "limitations";
3085
+ conclusion: "conclusion";
3086
+ }>>;
3087
+ inside: z.ZodOptional<z.ZodObject<{
3088
+ beat: z.ZodString;
3089
+ element: z.ZodString;
3090
+ label: z.ZodOptional<z.ZodString>;
3091
+ }, z.core.$strip>>;
3092
+ claim: z.ZodOptional<z.ZodString>;
3093
+ evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
3094
+ kind: z.ZodEnum<{
3095
+ figure: "figure";
3096
+ equation: "equation";
3097
+ table: "table";
3098
+ section: "section";
3099
+ }>;
3100
+ id: z.ZodString;
3101
+ }, z.core.$strip>>>;
3102
+ weight: z.ZodDefault<z.ZodNumber>;
3103
+ seconds: z.ZodDefault<z.ZodNumber>;
3104
+ bespoke: z.ZodOptional<z.ZodBoolean>;
3105
+ }, z.core.$strip>, z.ZodObject<{
3106
+ narration: z.ZodOptional<z.ZodString>;
3107
+ archetype: z.ZodLiteral<"kinetic">;
3108
+ params: z.ZodObject<{
3109
+ headline: z.ZodString;
3110
+ phrases: z.ZodArray<z.ZodObject<{
3111
+ text: z.ZodString;
3112
+ key: z.ZodOptional<z.ZodString>;
3113
+ }, z.core.$strip>>;
3114
+ backdrop: z.ZodOptional<z.ZodObject<{
3115
+ figureId: z.ZodOptional<z.ZodString>;
3116
+ illustration: z.ZodOptional<z.ZodObject<{
3117
+ prompt: z.ZodString;
3118
+ caption: z.ZodString;
3119
+ }, z.core.$strip>>;
3120
+ }, z.core.$strip>>;
2457
3121
  }, z.core.$strip>;
2458
3122
  id: z.ZodString;
2459
3123
  intent: z.ZodString;
@@ -2623,7 +3287,18 @@ export declare const CAPTION_LINE_RATIO = 1.6;
2623
3287
  * reserving for the worst case that can actually occur.
2624
3288
  */
2625
3289
  export declare const CAPTION_MAX_LINES = 2;
2626
- /** The burned band's font size at this canvas width. */
3290
+ /**
3291
+ * The burned caption's size, reference px: `TYPE_SCALE.caption` in
3292
+ * src/emit/type.ts, restated here because this file may import nothing from
3293
+ * `src/emit`. A quiet lower third, the founder's ask on 2026-10-10: 4% of a
3294
+ * 1920 canvas was a 71px caption, larger than the slide's own headline.
3295
+ */
3296
+ export declare const CAPTION_FONT_PX = 40;
3297
+ /**
3298
+ * The burned band's font size at this canvas width: `CAPTION_FONT_RATIO` of it,
3299
+ * never more than `CAPTION_FONT_PX` — which is what every format's ratio
3300
+ * already gave at its 1080px side, and now also holds at 1920.
3301
+ */
2627
3302
  export declare function captionFontSize(width: number): number;
2628
3303
  /**
2629
3304
  * The bottom strip the burned caption may occupy, `marginV` included, in CANVAS
@@ -2813,6 +3488,7 @@ export type Section = z.infer<typeof sectionSchema>;
2813
3488
  export type Source = z.infer<typeof sourceSchema>;
2814
3489
  export type Term = z.infer<typeof termSchema>;
2815
3490
  export type Illustration = z.infer<typeof illustrationSchema>;
3491
+ export type Backdrop = z.infer<typeof backdropSchema>;
2816
3492
  /** The `images` block of the preferences, resolved. What `illustrate` reads. */
2817
3493
  export type ImagesPrefs = z.infer<typeof prefsSchema>["images"];
2818
3494
  export type Beat = z.infer<typeof beatSchema>;