@cueframe/kernel 0.2.52 → 0.2.54

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 (71) hide show
  1. package/dist/_members/composition/fonts/bundledFaces.d.ts +9 -15
  2. package/dist/_members/composition/fonts/captionFaces.d.ts +2 -3
  3. package/dist/_members/composition/ops/captionOps.d.ts +11 -0
  4. package/dist/_members/composition/ops/compositionOps.d.ts +20 -19
  5. package/dist/_members/composition/ops/compositionOps.shared.d.ts +1 -0
  6. package/dist/_members/composition/validators/composition.d.ts +724 -0
  7. package/dist/_members/composition/validators/registry.d.ts +1 -1
  8. package/dist/_members/composition/validators/render.d.ts +332 -0
  9. package/dist/_members/composition-ops/index.d.ts +89 -0
  10. package/dist/_members/core/render/compositionAudioAndDepth.d.ts +3 -2
  11. package/dist/_members/core/render/index.d.ts +1 -1
  12. package/dist/_members/core/render/types.d.ts +3 -1
  13. package/dist/_members/plane/contract.d.ts +1 -1
  14. package/dist/_members/primitives/captions/Captions.d.ts +18 -1
  15. package/dist/_members/primitives/captions/index.d.ts +1 -1
  16. package/dist/_members/primitives/lib/text/spec.d.ts +1 -0
  17. package/dist/animate.js +2 -2
  18. package/dist/authoring/build-tools.js +6 -6
  19. package/dist/authoring/context.js +5 -5
  20. package/dist/authoring/tools.js +5 -5
  21. package/dist/authoring.js +9 -9
  22. package/dist/{chunk-MYBK6DKF.js → chunk-2BVKNYRB.js} +1 -1
  23. package/dist/{chunk-AVTEPAWI.js → chunk-7RGDRDAR.js} +17 -13
  24. package/dist/{chunk-7XZW26U2.js → chunk-AONWKKXK.js} +1 -1
  25. package/dist/{chunk-WZ22ZYXD.js → chunk-C3ARYFN6.js} +4 -4
  26. package/dist/{chunk-4B4V3HYW.js → chunk-C6ONUJIO.js} +1 -1
  27. package/dist/{chunk-CZOVEX2D.js → chunk-CR3G2JQP.js} +1 -1
  28. package/dist/{chunk-2PU2TSUG.js → chunk-D5E5XFHK.js} +1 -1
  29. package/dist/{chunk-D2EG7J7X.js → chunk-DFB7UFZD.js} +1 -1
  30. package/dist/{chunk-FSEB4LSU.js → chunk-FYMXVYWS.js} +1 -1
  31. package/dist/{chunk-6WQHVYJD.js → chunk-G7ZSFSQG.js} +1 -1
  32. package/dist/{chunk-5ZQLMPDY.js → chunk-GAACUQAB.js} +1 -1
  33. package/dist/{chunk-3I43W7DP.js → chunk-GZMKTLO3.js} +52 -21
  34. package/dist/{chunk-QVBUYWW6.js → chunk-Q2FWFTDZ.js} +1 -1
  35. package/dist/{chunk-MBSQKRDF.js → chunk-QCGT3M7M.js} +2 -2
  36. package/dist/{chunk-KMDZDH5E.js → chunk-QCJUGKRC.js} +4 -4
  37. package/dist/{chunk-Z6NY6MCL.js → chunk-RMLGMYEJ.js} +1 -1
  38. package/dist/{chunk-IHXMBXXL.js → chunk-SIGKJOSF.js} +30 -4
  39. package/dist/{chunk-5JCLZPMV.js → chunk-T7WKIMTB.js} +63 -44
  40. package/dist/{chunk-ACURZCPN.js → chunk-UKKY7HWN.js} +1 -1
  41. package/dist/{chunk-2M65KQNG.js → chunk-V6GL37RZ.js} +394 -54
  42. package/dist/{chunk-CV3QQUMK.js → chunk-VKZTGD5Z.js} +128 -5
  43. package/dist/{chunk-JWW54N24.js → chunk-VYSBZUXZ.js} +1 -1
  44. package/dist/{chunk-3OG2674K.js → chunk-ZDE5S3DE.js} +1 -1
  45. package/dist/component-runtime/render.js +2 -2
  46. package/dist/component-runtime.js +3 -3
  47. package/dist/compose.js +5 -5
  48. package/dist/composition/fonts.js +1 -1
  49. package/dist/composition/graphics-plan.js +3 -3
  50. package/dist/composition/ops.js +4 -4
  51. package/dist/composition/projection.js +3 -3
  52. package/dist/composition/validators.js +13 -3
  53. package/dist/composition-ops.js +8 -8
  54. package/dist/composition.js +15 -5
  55. package/dist/{context-2MBCDTCZ.js → context-I7SPXR2Z.js} +5 -5
  56. package/dist/core/render.js +4 -4
  57. package/dist/core.js +4 -4
  58. package/dist/mcp/adapter.js +2 -2
  59. package/dist/mcp/core.js +1 -1
  60. package/dist/mcp/scene-shot.js +2 -2
  61. package/dist/mcp/server.js +12 -12
  62. package/dist/mcp.js +12 -12
  63. package/dist/primitives/captions.js +276 -44
  64. package/dist/primitives/effects.js +3 -3
  65. package/dist/primitives/layouts.js +3 -3
  66. package/dist/primitives/lib/text/marker.js +1 -1
  67. package/dist/primitives/scenes.js +3 -3
  68. package/dist/primitives.js +5 -5
  69. package/dist/render-harness/cardFonts.js +2 -2
  70. package/dist/render-harness.js +7 -7
  71. package/package.json +10 -10
@@ -1436,7 +1436,7 @@ var BriefCreateRequest = zod19.strictObject({
1436
1436
  "h": zod19.number().gt(briefCreateRequestSeededGraphicsItemRegionHExclusiveMin).max(briefCreateRequestSeededGraphicsItemRegionHMax)
1437
1437
  }).optional(),
1438
1438
  "fit": zod19.enum(["cover", "contain"]).optional(),
1439
- "captionVisibility": zod19.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
1439
+ "captionVisibility": zod19.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
1440
1440
  "effects": zod19.array(zod19.strictObject({
1441
1441
  "primitiveId": zod19.string().min(1),
1442
1442
  "params": zod19.record(zod19.string(), zod19.unknown()).optional()
@@ -1698,7 +1698,7 @@ var BriefResponse = zod21.strictObject({
1698
1698
  "h": zod21.number().gt(briefResponseSeededGraphicsItemRegionHExclusiveMin).max(briefResponseSeededGraphicsItemRegionHMax)
1699
1699
  }).optional(),
1700
1700
  "fit": zod21.enum(["cover", "contain"]).optional(),
1701
- "captionVisibility": zod21.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
1701
+ "captionVisibility": zod21.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
1702
1702
  "effects": zod21.array(zod21.strictObject({
1703
1703
  "primitiveId": zod21.string().min(1),
1704
1704
  "params": zod21.record(zod21.string(), zod21.unknown()).optional()
@@ -1949,7 +1949,7 @@ var BriefPatchRequest = zod23.strictObject({
1949
1949
  "h": zod23.number().gt(briefPatchRequestSeededGraphicsItemRegionHExclusiveMin).max(briefPatchRequestSeededGraphicsItemRegionHMax)
1950
1950
  }).optional(),
1951
1951
  "fit": zod23.enum(["cover", "contain"]).optional(),
1952
- "captionVisibility": zod23.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
1952
+ "captionVisibility": zod23.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
1953
1953
  "effects": zod23.array(zod23.strictObject({
1954
1954
  "primitiveId": zod23.string().min(1),
1955
1955
  "params": zod23.record(zod23.string(), zod23.unknown()).optional()
@@ -2595,6 +2595,12 @@ var compositionCaptionsOneStyleRegionWExclusiveMin = 0;
2595
2595
  var compositionCaptionsOneStyleRegionWMax = 1;
2596
2596
  var compositionCaptionsOneStyleRegionHExclusiveMin = 0;
2597
2597
  var compositionCaptionsOneStyleRegionHMax = 1;
2598
+ var compositionCaptionsOneStyleLetterSpacingMin = -5;
2599
+ var compositionCaptionsOneStyleLetterSpacingMax = 20;
2600
+ var compositionCaptionsOneStyleWordGapEmMin = 0;
2601
+ var compositionCaptionsOneStyleWordGapEmMax = 2;
2602
+ var compositionCaptionsOneStyleLineGapEmMin = 0;
2603
+ var compositionCaptionsOneStyleLineGapEmMax = 2;
2598
2604
  var compositionCaptionsOneStyleEmphasisScaleExclusiveMin = 0;
2599
2605
  var compositionCaptionsOneStyleEmphasisFontWeightMin = 100;
2600
2606
  var compositionCaptionsOneStyleEmphasisFontWeightMax = 900;
@@ -2602,8 +2608,51 @@ var compositionCaptionsOneStyleEntranceMsMin = 0;
2602
2608
  var compositionCaptionsOneStyleEntranceStaggerMsMin = 0;
2603
2609
  var compositionCaptionsOneStyleExitMsMin = 0;
2604
2610
  var compositionCaptionsOneStyleEmphasisPlateRadiusMin = 0;
2611
+ var compositionCaptionsOneStyleAnnotationStrokeWidthMin = 0.5;
2612
+ var compositionCaptionsOneStyleAnnotationStrokeWidthMax = 12;
2605
2613
  var compositionCaptionsOneStyleMaxWidthPercentExclusiveMin = 0;
2606
2614
  var compositionCaptionsOneStyleMaxWidthPercentMax = 100;
2615
+ var compositionCaptionsOneLayoutsItemSegmentIndexMin = 0;
2616
+ var compositionCaptionsOneLayoutsItemSegmentIndexMax = 9007199254740991;
2617
+ var compositionCaptionsOneLayoutsItemWordStartIndexMin = 0;
2618
+ var compositionCaptionsOneLayoutsItemWordStartIndexMax = 9007199254740991;
2619
+ var compositionCaptionsOneLayoutsItemWordEndIndexExclusiveMin = 0;
2620
+ var compositionCaptionsOneLayoutsItemWordEndIndexMax = 9007199254740991;
2621
+ var compositionCaptionsOneLayoutsItemRegionXMin = 0;
2622
+ var compositionCaptionsOneLayoutsItemRegionXMax = 1;
2623
+ var compositionCaptionsOneLayoutsItemRegionYMin = 0;
2624
+ var compositionCaptionsOneLayoutsItemRegionYMax = 1;
2625
+ var compositionCaptionsOneLayoutsItemRegionWExclusiveMin = 0;
2626
+ var compositionCaptionsOneLayoutsItemRegionWMax = 1;
2627
+ var compositionCaptionsOneLayoutsItemRegionHExclusiveMin = 0;
2628
+ var compositionCaptionsOneLayoutsItemRegionHMax = 1;
2629
+ var compositionCaptionsOneLayoutsItemScaleMin = 0.25;
2630
+ var compositionCaptionsOneLayoutsItemScaleMax = 4;
2631
+ var compositionCaptionsOneLayoutsItemRotationMin = -45;
2632
+ var compositionCaptionsOneLayoutsItemRotationMax = 45;
2633
+ var compositionCaptionsOneLayoutsItemStyleFontSizeMax = 15;
2634
+ var compositionCaptionsOneLayoutsItemStyleFontWeightMin = 100;
2635
+ var compositionCaptionsOneLayoutsItemStyleFontWeightMax = 900;
2636
+ var compositionCaptionsOneLayoutsItemStyleLetterSpacingMin = -5;
2637
+ var compositionCaptionsOneLayoutsItemStyleLetterSpacingMax = 20;
2638
+ var compositionCaptionsOneLayoutsItemStyleWordGapEmMin = 0;
2639
+ var compositionCaptionsOneLayoutsItemStyleWordGapEmMax = 2;
2640
+ var compositionCaptionsOneLayoutsItemStyleLineGapEmMin = 0;
2641
+ var compositionCaptionsOneLayoutsItemStyleLineGapEmMax = 2;
2642
+ var compositionCaptionsOneLayoutsItemStyleEmphasisScaleExclusiveMin = 0;
2643
+ var compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMin = 100;
2644
+ var compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMax = 900;
2645
+ var compositionCaptionsOneLayoutsItemStyleEmphasisPlateRadiusMin = 0;
2646
+ var compositionCaptionsOneLayoutsItemStyleAnnotationStrokeWidthMin = 0.5;
2647
+ var compositionCaptionsOneLayoutsItemStyleAnnotationStrokeWidthMax = 12;
2648
+ var compositionCaptionsOneLayoutsItemStyleEntranceMsMin = 0;
2649
+ var compositionCaptionsOneLayoutsItemStyleEntranceStaggerMsMin = 0;
2650
+ var compositionCaptionsOneLayoutsItemStyleExitMsMin = 0;
2651
+ var compositionCaptionsOneLayoutsItemHoldThroughWordIndexMin = 0;
2652
+ var compositionCaptionsOneLayoutsItemHoldThroughWordIndexMax = 9007199254740991;
2653
+ var compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMin = 0;
2654
+ var compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMax = 9007199254740991;
2655
+ var compositionCaptionsOneLayoutsItemWordSignatureRegExp = new RegExp("^[a-f0-9]{64}$");
2607
2656
  var compositionCaptionsTwoSegmentsItemWordsItemStartMsMin = 0;
2608
2657
  var compositionCaptionsTwoSegmentsItemWordsItemEndMsMin = 0;
2609
2658
  var compositionCaptionsTwoStyleFontSizeMax = 15;
@@ -2617,6 +2666,12 @@ var compositionCaptionsTwoStyleRegionWExclusiveMin = 0;
2617
2666
  var compositionCaptionsTwoStyleRegionWMax = 1;
2618
2667
  var compositionCaptionsTwoStyleRegionHExclusiveMin = 0;
2619
2668
  var compositionCaptionsTwoStyleRegionHMax = 1;
2669
+ var compositionCaptionsTwoStyleLetterSpacingMin = -5;
2670
+ var compositionCaptionsTwoStyleLetterSpacingMax = 20;
2671
+ var compositionCaptionsTwoStyleWordGapEmMin = 0;
2672
+ var compositionCaptionsTwoStyleWordGapEmMax = 2;
2673
+ var compositionCaptionsTwoStyleLineGapEmMin = 0;
2674
+ var compositionCaptionsTwoStyleLineGapEmMax = 2;
2620
2675
  var compositionCaptionsTwoStyleEmphasisScaleExclusiveMin = 0;
2621
2676
  var compositionCaptionsTwoStyleEmphasisFontWeightMin = 100;
2622
2677
  var compositionCaptionsTwoStyleEmphasisFontWeightMax = 900;
@@ -2624,8 +2679,51 @@ var compositionCaptionsTwoStyleEntranceMsMin = 0;
2624
2679
  var compositionCaptionsTwoStyleEntranceStaggerMsMin = 0;
2625
2680
  var compositionCaptionsTwoStyleExitMsMin = 0;
2626
2681
  var compositionCaptionsTwoStyleEmphasisPlateRadiusMin = 0;
2682
+ var compositionCaptionsTwoStyleAnnotationStrokeWidthMin = 0.5;
2683
+ var compositionCaptionsTwoStyleAnnotationStrokeWidthMax = 12;
2627
2684
  var compositionCaptionsTwoStyleMaxWidthPercentExclusiveMin = 0;
2628
2685
  var compositionCaptionsTwoStyleMaxWidthPercentMax = 100;
2686
+ var compositionCaptionsTwoLayoutsItemSegmentIndexMin = 0;
2687
+ var compositionCaptionsTwoLayoutsItemSegmentIndexMax = 9007199254740991;
2688
+ var compositionCaptionsTwoLayoutsItemWordStartIndexMin = 0;
2689
+ var compositionCaptionsTwoLayoutsItemWordStartIndexMax = 9007199254740991;
2690
+ var compositionCaptionsTwoLayoutsItemWordEndIndexExclusiveMin = 0;
2691
+ var compositionCaptionsTwoLayoutsItemWordEndIndexMax = 9007199254740991;
2692
+ var compositionCaptionsTwoLayoutsItemRegionXMin = 0;
2693
+ var compositionCaptionsTwoLayoutsItemRegionXMax = 1;
2694
+ var compositionCaptionsTwoLayoutsItemRegionYMin = 0;
2695
+ var compositionCaptionsTwoLayoutsItemRegionYMax = 1;
2696
+ var compositionCaptionsTwoLayoutsItemRegionWExclusiveMin = 0;
2697
+ var compositionCaptionsTwoLayoutsItemRegionWMax = 1;
2698
+ var compositionCaptionsTwoLayoutsItemRegionHExclusiveMin = 0;
2699
+ var compositionCaptionsTwoLayoutsItemRegionHMax = 1;
2700
+ var compositionCaptionsTwoLayoutsItemScaleMin = 0.25;
2701
+ var compositionCaptionsTwoLayoutsItemScaleMax = 4;
2702
+ var compositionCaptionsTwoLayoutsItemRotationMin = -45;
2703
+ var compositionCaptionsTwoLayoutsItemRotationMax = 45;
2704
+ var compositionCaptionsTwoLayoutsItemStyleFontSizeMax = 15;
2705
+ var compositionCaptionsTwoLayoutsItemStyleFontWeightMin = 100;
2706
+ var compositionCaptionsTwoLayoutsItemStyleFontWeightMax = 900;
2707
+ var compositionCaptionsTwoLayoutsItemStyleLetterSpacingMin = -5;
2708
+ var compositionCaptionsTwoLayoutsItemStyleLetterSpacingMax = 20;
2709
+ var compositionCaptionsTwoLayoutsItemStyleWordGapEmMin = 0;
2710
+ var compositionCaptionsTwoLayoutsItemStyleWordGapEmMax = 2;
2711
+ var compositionCaptionsTwoLayoutsItemStyleLineGapEmMin = 0;
2712
+ var compositionCaptionsTwoLayoutsItemStyleLineGapEmMax = 2;
2713
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisScaleExclusiveMin = 0;
2714
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMin = 100;
2715
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMax = 900;
2716
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisPlateRadiusMin = 0;
2717
+ var compositionCaptionsTwoLayoutsItemStyleAnnotationStrokeWidthMin = 0.5;
2718
+ var compositionCaptionsTwoLayoutsItemStyleAnnotationStrokeWidthMax = 12;
2719
+ var compositionCaptionsTwoLayoutsItemStyleEntranceMsMin = 0;
2720
+ var compositionCaptionsTwoLayoutsItemStyleEntranceStaggerMsMin = 0;
2721
+ var compositionCaptionsTwoLayoutsItemStyleExitMsMin = 0;
2722
+ var compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMin = 0;
2723
+ var compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMax = 9007199254740991;
2724
+ var compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMin = 0;
2725
+ var compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMax = 9007199254740991;
2726
+ var compositionCaptionsTwoLayoutsItemWordSignatureRegExp = new RegExp("^[a-f0-9]{64}$");
2629
2727
  var Composition = zod58.strictObject({
2630
2728
  "v": zod58.literal(1),
2631
2729
  "format": zod58.strictObject({
@@ -2758,7 +2856,7 @@ var Composition = zod58.strictObject({
2758
2856
  "h": zod58.number().gt(compositionTracksItemContentsItemOneRegionHExclusiveMin).max(compositionTracksItemContentsItemOneRegionHMax)
2759
2857
  }).optional(),
2760
2858
  "fit": zod58.enum(["cover", "contain"]).optional(),
2761
- "captionVisibility": zod58.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
2859
+ "captionVisibility": zod58.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
2762
2860
  "effects": zod58.array(zod58.strictObject({
2763
2861
  "primitiveId": zod58.string().min(1),
2764
2862
  "params": zod58.record(zod58.string(), zod58.unknown()).optional()
@@ -2824,6 +2922,9 @@ var Composition = zod58.strictObject({
2824
2922
  "h": zod58.number().gt(compositionCaptionsOneStyleRegionHExclusiveMin).max(compositionCaptionsOneStyleRegionHMax)
2825
2923
  }).optional().describe("Optional caption layout box {x,y,w,h} in normalized output-frame coordinates. Overrides position; text starts at its top edge and wraps/pages within its width and height."),
2826
2924
  "textTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
2925
+ "letterSpacing": zod58.number().min(compositionCaptionsOneStyleLetterSpacingMin).max(compositionCaptionsOneStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
2926
+ "wordGapEm": zod58.number().min(compositionCaptionsOneStyleWordGapEmMin).max(compositionCaptionsOneStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
2927
+ "lineGapEm": zod58.number().min(compositionCaptionsOneStyleLineGapEmMin).max(compositionCaptionsOneStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
2827
2928
  "emphasisColor": zod58.string().optional(),
2828
2929
  "emphasisGradient": zod58.string().optional(),
2829
2930
  "emphasisScale": zod58.number().gt(compositionCaptionsOneStyleEmphasisScaleExclusiveMin).optional(),
@@ -2844,9 +2945,66 @@ var Composition = zod58.strictObject({
2844
2945
  "emphasisPlateRadius": zod58.number().min(compositionCaptionsOneStyleEmphasisPlateRadiusMin).optional(),
2845
2946
  "emphasisPlatePadX": zod58.number().optional(),
2846
2947
  "emphasisPlatePadY": zod58.number().optional(),
2948
+ "emphasisPlateReveal": zod58.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
2847
2949
  "annotationColor": zod58.string().optional(),
2950
+ "annotationStrokeWidth": zod58.number().min(compositionCaptionsOneStyleAnnotationStrokeWidthMin).max(compositionCaptionsOneStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
2848
2951
  "maxWidthPercent": zod58.number().gt(compositionCaptionsOneStyleMaxWidthPercentExclusiveMin).max(compositionCaptionsOneStyleMaxWidthPercentMax).optional()
2849
2952
  }).optional(),
2953
+ "layouts": zod58.array(zod58.strictObject({
2954
+ "segmentIndex": zod58.int().min(compositionCaptionsOneLayoutsItemSegmentIndexMin).max(compositionCaptionsOneLayoutsItemSegmentIndexMax),
2955
+ "wordStartIndex": zod58.int().min(compositionCaptionsOneLayoutsItemWordStartIndexMin).max(compositionCaptionsOneLayoutsItemWordStartIndexMax),
2956
+ "wordEndIndex": zod58.int().gt(compositionCaptionsOneLayoutsItemWordEndIndexExclusiveMin).max(compositionCaptionsOneLayoutsItemWordEndIndexMax).describe("Exclusive word index in the saved caption segment."),
2957
+ "region": zod58.strictObject({
2958
+ "x": zod58.number().min(compositionCaptionsOneLayoutsItemRegionXMin).max(compositionCaptionsOneLayoutsItemRegionXMax),
2959
+ "y": zod58.number().min(compositionCaptionsOneLayoutsItemRegionYMin).max(compositionCaptionsOneLayoutsItemRegionYMax),
2960
+ "w": zod58.number().gt(compositionCaptionsOneLayoutsItemRegionWExclusiveMin).max(compositionCaptionsOneLayoutsItemRegionWMax),
2961
+ "h": zod58.number().gt(compositionCaptionsOneLayoutsItemRegionHExclusiveMin).max(compositionCaptionsOneLayoutsItemRegionHMax)
2962
+ }),
2963
+ "scale": zod58.number().min(compositionCaptionsOneLayoutsItemScaleMin).max(compositionCaptionsOneLayoutsItemScaleMax).optional(),
2964
+ "rotation": zod58.number().min(compositionCaptionsOneLayoutsItemRotationMin).max(compositionCaptionsOneLayoutsItemRotationMax).optional(),
2965
+ "style": zod58.strictObject({
2966
+ "fontFamily": zod58.string().min(1).optional(),
2967
+ "fontSize": zod58.number().min(1).max(compositionCaptionsOneLayoutsItemStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
2968
+ "fontWeight": zod58.int().min(compositionCaptionsOneLayoutsItemStyleFontWeightMin).max(compositionCaptionsOneLayoutsItemStyleFontWeightMax).optional(),
2969
+ "color": zod58.string().min(1).optional(),
2970
+ "highlightColor": zod58.string().min(1).optional(),
2971
+ "backgroundColor": zod58.string().optional(),
2972
+ "plate": zod58.enum(["glass", "solid", "none"]).optional(),
2973
+ "textTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
2974
+ "letterSpacing": zod58.number().min(compositionCaptionsOneLayoutsItemStyleLetterSpacingMin).max(compositionCaptionsOneLayoutsItemStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
2975
+ "wordGapEm": zod58.number().min(compositionCaptionsOneLayoutsItemStyleWordGapEmMin).max(compositionCaptionsOneLayoutsItemStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
2976
+ "lineGapEm": zod58.number().min(compositionCaptionsOneLayoutsItemStyleLineGapEmMin).max(compositionCaptionsOneLayoutsItemStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
2977
+ "emphasisColor": zod58.string().optional(),
2978
+ "emphasisScale": zod58.number().gt(compositionCaptionsOneLayoutsItemStyleEmphasisScaleExclusiveMin).optional(),
2979
+ "emphasisFontFamily": zod58.string().optional(),
2980
+ "emphasisFontWeight": zod58.int().min(compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMin).max(compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMax).optional(),
2981
+ "emphasisTextTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
2982
+ "emphasisLetterSpacing": zod58.number().optional(),
2983
+ "emphasisFontStyle": zod58.enum(["normal", "italic"]).optional(),
2984
+ "emphasisPlate": zod58.boolean().optional(),
2985
+ "emphasisPlateColor": zod58.string().optional(),
2986
+ "emphasisPlateTextColor": zod58.string().optional(),
2987
+ "emphasisPlateAltColor": zod58.string().optional(),
2988
+ "emphasisPlateAltTextColor": zod58.string().optional(),
2989
+ "emphasisPlateRadius": zod58.number().min(compositionCaptionsOneLayoutsItemStyleEmphasisPlateRadiusMin).optional(),
2990
+ "emphasisPlatePadX": zod58.number().optional(),
2991
+ "emphasisPlatePadY": zod58.number().optional(),
2992
+ "emphasisPlateReveal": zod58.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
2993
+ "annotationColor": zod58.string().optional(),
2994
+ "annotationStrokeWidth": zod58.number().min(compositionCaptionsOneLayoutsItemStyleAnnotationStrokeWidthMin).max(compositionCaptionsOneLayoutsItemStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
2995
+ "entrance": zod58.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
2996
+ "entranceMs": zod58.number().min(compositionCaptionsOneLayoutsItemStyleEntranceMsMin).optional(),
2997
+ "entranceStaggerMs": zod58.number().min(compositionCaptionsOneLayoutsItemStyleEntranceStaggerMsMin).optional(),
2998
+ "exitMs": zod58.number().min(compositionCaptionsOneLayoutsItemStyleExitMsMin).optional()
2999
+ }).optional(),
3000
+ "holdThroughWordIndex": zod58.int().min(compositionCaptionsOneLayoutsItemHoldThroughWordIndexMin).max(compositionCaptionsOneLayoutsItemHoldThroughWordIndexMax).optional().describe("Inclusive saved-word index in this segment. The layout stays visible until that word ends."),
3001
+ "wordMarks": zod58.array(zod58.strictObject({
3002
+ "wordIndex": zod58.int().min(compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMin).max(compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMax),
3003
+ "emphasis": zod58.boolean().optional(),
3004
+ "annotate": zod58.union([zod58.enum(["circle", "underline"]), zod58.null()]).optional()
3005
+ })).optional(),
3006
+ "wordSignature": zod58.string().regex(compositionCaptionsOneLayoutsItemWordSignatureRegExp)
3007
+ })).optional(),
2850
3008
  "zPlane": zod58.enum(["front", "behind-subject"]).optional()
2851
3009
  }), zod58.strictObject({
2852
3010
  "source": zod58.literal("authored"),
@@ -2875,6 +3033,9 @@ var Composition = zod58.strictObject({
2875
3033
  "h": zod58.number().gt(compositionCaptionsTwoStyleRegionHExclusiveMin).max(compositionCaptionsTwoStyleRegionHMax)
2876
3034
  }).optional().describe("Optional caption layout box {x,y,w,h} in normalized output-frame coordinates. Overrides position; text starts at its top edge and wraps/pages within its width and height."),
2877
3035
  "textTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
3036
+ "letterSpacing": zod58.number().min(compositionCaptionsTwoStyleLetterSpacingMin).max(compositionCaptionsTwoStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
3037
+ "wordGapEm": zod58.number().min(compositionCaptionsTwoStyleWordGapEmMin).max(compositionCaptionsTwoStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
3038
+ "lineGapEm": zod58.number().min(compositionCaptionsTwoStyleLineGapEmMin).max(compositionCaptionsTwoStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
2878
3039
  "emphasisColor": zod58.string().optional(),
2879
3040
  "emphasisGradient": zod58.string().optional(),
2880
3041
  "emphasisScale": zod58.number().gt(compositionCaptionsTwoStyleEmphasisScaleExclusiveMin).optional(),
@@ -2895,9 +3056,66 @@ var Composition = zod58.strictObject({
2895
3056
  "emphasisPlateRadius": zod58.number().min(compositionCaptionsTwoStyleEmphasisPlateRadiusMin).optional(),
2896
3057
  "emphasisPlatePadX": zod58.number().optional(),
2897
3058
  "emphasisPlatePadY": zod58.number().optional(),
3059
+ "emphasisPlateReveal": zod58.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
2898
3060
  "annotationColor": zod58.string().optional(),
3061
+ "annotationStrokeWidth": zod58.number().min(compositionCaptionsTwoStyleAnnotationStrokeWidthMin).max(compositionCaptionsTwoStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
2899
3062
  "maxWidthPercent": zod58.number().gt(compositionCaptionsTwoStyleMaxWidthPercentExclusiveMin).max(compositionCaptionsTwoStyleMaxWidthPercentMax).optional()
2900
3063
  }).optional(),
3064
+ "layouts": zod58.array(zod58.strictObject({
3065
+ "segmentIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemSegmentIndexMin).max(compositionCaptionsTwoLayoutsItemSegmentIndexMax),
3066
+ "wordStartIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemWordStartIndexMin).max(compositionCaptionsTwoLayoutsItemWordStartIndexMax),
3067
+ "wordEndIndex": zod58.int().gt(compositionCaptionsTwoLayoutsItemWordEndIndexExclusiveMin).max(compositionCaptionsTwoLayoutsItemWordEndIndexMax).describe("Exclusive word index in the saved caption segment."),
3068
+ "region": zod58.strictObject({
3069
+ "x": zod58.number().min(compositionCaptionsTwoLayoutsItemRegionXMin).max(compositionCaptionsTwoLayoutsItemRegionXMax),
3070
+ "y": zod58.number().min(compositionCaptionsTwoLayoutsItemRegionYMin).max(compositionCaptionsTwoLayoutsItemRegionYMax),
3071
+ "w": zod58.number().gt(compositionCaptionsTwoLayoutsItemRegionWExclusiveMin).max(compositionCaptionsTwoLayoutsItemRegionWMax),
3072
+ "h": zod58.number().gt(compositionCaptionsTwoLayoutsItemRegionHExclusiveMin).max(compositionCaptionsTwoLayoutsItemRegionHMax)
3073
+ }),
3074
+ "scale": zod58.number().min(compositionCaptionsTwoLayoutsItemScaleMin).max(compositionCaptionsTwoLayoutsItemScaleMax).optional(),
3075
+ "rotation": zod58.number().min(compositionCaptionsTwoLayoutsItemRotationMin).max(compositionCaptionsTwoLayoutsItemRotationMax).optional(),
3076
+ "style": zod58.strictObject({
3077
+ "fontFamily": zod58.string().min(1).optional(),
3078
+ "fontSize": zod58.number().min(1).max(compositionCaptionsTwoLayoutsItemStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
3079
+ "fontWeight": zod58.int().min(compositionCaptionsTwoLayoutsItemStyleFontWeightMin).max(compositionCaptionsTwoLayoutsItemStyleFontWeightMax).optional(),
3080
+ "color": zod58.string().min(1).optional(),
3081
+ "highlightColor": zod58.string().min(1).optional(),
3082
+ "backgroundColor": zod58.string().optional(),
3083
+ "plate": zod58.enum(["glass", "solid", "none"]).optional(),
3084
+ "textTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
3085
+ "letterSpacing": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleLetterSpacingMin).max(compositionCaptionsTwoLayoutsItemStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
3086
+ "wordGapEm": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleWordGapEmMin).max(compositionCaptionsTwoLayoutsItemStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
3087
+ "lineGapEm": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleLineGapEmMin).max(compositionCaptionsTwoLayoutsItemStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
3088
+ "emphasisColor": zod58.string().optional(),
3089
+ "emphasisScale": zod58.number().gt(compositionCaptionsTwoLayoutsItemStyleEmphasisScaleExclusiveMin).optional(),
3090
+ "emphasisFontFamily": zod58.string().optional(),
3091
+ "emphasisFontWeight": zod58.int().min(compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMin).max(compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMax).optional(),
3092
+ "emphasisTextTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
3093
+ "emphasisLetterSpacing": zod58.number().optional(),
3094
+ "emphasisFontStyle": zod58.enum(["normal", "italic"]).optional(),
3095
+ "emphasisPlate": zod58.boolean().optional(),
3096
+ "emphasisPlateColor": zod58.string().optional(),
3097
+ "emphasisPlateTextColor": zod58.string().optional(),
3098
+ "emphasisPlateAltColor": zod58.string().optional(),
3099
+ "emphasisPlateAltTextColor": zod58.string().optional(),
3100
+ "emphasisPlateRadius": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleEmphasisPlateRadiusMin).optional(),
3101
+ "emphasisPlatePadX": zod58.number().optional(),
3102
+ "emphasisPlatePadY": zod58.number().optional(),
3103
+ "emphasisPlateReveal": zod58.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
3104
+ "annotationColor": zod58.string().optional(),
3105
+ "annotationStrokeWidth": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleAnnotationStrokeWidthMin).max(compositionCaptionsTwoLayoutsItemStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
3106
+ "entrance": zod58.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
3107
+ "entranceMs": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleEntranceMsMin).optional(),
3108
+ "entranceStaggerMs": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleEntranceStaggerMsMin).optional(),
3109
+ "exitMs": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleExitMsMin).optional()
3110
+ }).optional(),
3111
+ "holdThroughWordIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMin).max(compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMax).optional().describe("Inclusive saved-word index in this segment. The layout stays visible until that word ends."),
3112
+ "wordMarks": zod58.array(zod58.strictObject({
3113
+ "wordIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMin).max(compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMax),
3114
+ "emphasis": zod58.boolean().optional(),
3115
+ "annotate": zod58.union([zod58.enum(["circle", "underline"]), zod58.null()]).optional()
3116
+ })).optional(),
3117
+ "wordSignature": zod58.string().regex(compositionCaptionsTwoLayoutsItemWordSignatureRegExp)
3118
+ })).optional(),
2901
3119
  "zPlane": zod58.enum(["front", "behind-subject"]).optional()
2902
3120
  })]).optional(),
2903
3121
  "license": zod58.strictObject({
@@ -6112,6 +6330,12 @@ var compositionOpOnethreeStyleRegionWExclusiveMin = 0;
6112
6330
  var compositionOpOnethreeStyleRegionWMax = 1;
6113
6331
  var compositionOpOnethreeStyleRegionHExclusiveMin = 0;
6114
6332
  var compositionOpOnethreeStyleRegionHMax = 1;
6333
+ var compositionOpOnethreeStyleLetterSpacingMin = -5;
6334
+ var compositionOpOnethreeStyleLetterSpacingMax = 20;
6335
+ var compositionOpOnethreeStyleWordGapEmMin = 0;
6336
+ var compositionOpOnethreeStyleWordGapEmMax = 2;
6337
+ var compositionOpOnethreeStyleLineGapEmMin = 0;
6338
+ var compositionOpOnethreeStyleLineGapEmMax = 2;
6115
6339
  var compositionOpOnethreeStyleEmphasisScaleExclusiveMin = 0;
6116
6340
  var compositionOpOnethreeStyleEmphasisFontWeightMin = 100;
6117
6341
  var compositionOpOnethreeStyleEmphasisFontWeightMax = 900;
@@ -6119,34 +6343,84 @@ var compositionOpOnethreeStyleEntranceMsMin = 0;
6119
6343
  var compositionOpOnethreeStyleEntranceStaggerMsMin = 0;
6120
6344
  var compositionOpOnethreeStyleExitMsMin = 0;
6121
6345
  var compositionOpOnethreeStyleEmphasisPlateRadiusMin = 0;
6346
+ var compositionOpOnethreeStyleAnnotationStrokeWidthMin = 0.5;
6347
+ var compositionOpOnethreeStyleAnnotationStrokeWidthMax = 12;
6122
6348
  var compositionOpOnethreeStyleMaxWidthPercentExclusiveMin = 0;
6123
6349
  var compositionOpOnethreeStyleMaxWidthPercentMax = 100;
6124
- var compositionOpOnefiveSegmentsItemWordsItemStartMsMin = 0;
6125
- var compositionOpOnefiveSegmentsItemWordsItemEndMsMin = 0;
6126
- var compositionOpOnefiveStyleFontSizeMax = 15;
6127
- var compositionOpOnefiveStyleFontWeightMin = 100;
6128
- var compositionOpOnefiveStyleFontWeightMax = 900;
6129
- var compositionOpOnefiveStyleRegionXMin = 0;
6130
- var compositionOpOnefiveStyleRegionXMax = 1;
6131
- var compositionOpOnefiveStyleRegionYMin = 0;
6132
- var compositionOpOnefiveStyleRegionYMax = 1;
6133
- var compositionOpOnefiveStyleRegionWExclusiveMin = 0;
6134
- var compositionOpOnefiveStyleRegionWMax = 1;
6135
- var compositionOpOnefiveStyleRegionHExclusiveMin = 0;
6136
- var compositionOpOnefiveStyleRegionHMax = 1;
6137
- var compositionOpOnefiveStyleEmphasisScaleExclusiveMin = 0;
6138
- var compositionOpOnefiveStyleEmphasisFontWeightMin = 100;
6139
- var compositionOpOnefiveStyleEmphasisFontWeightMax = 900;
6140
- var compositionOpOnefiveStyleEntranceMsMin = 0;
6141
- var compositionOpOnefiveStyleEntranceStaggerMsMin = 0;
6142
- var compositionOpOnefiveStyleExitMsMin = 0;
6143
- var compositionOpOnefiveStyleEmphasisPlateRadiusMin = 0;
6144
- var compositionOpOnefiveStyleMaxWidthPercentExclusiveMin = 0;
6145
- var compositionOpOnefiveStyleMaxWidthPercentMax = 100;
6146
- var compositionOpOnesixWindowStartSecMin = 0;
6147
- var compositionOpOnesixWindowEndSecExclusiveMin = 0;
6148
- var compositionOpOnenineMaxMarkersExclusiveMin = 0;
6149
- var compositionOpOnenineMaxMarkersMax = 2e3;
6350
+ var compositionOpOnefourLayoutsItemSegmentIndexMin = 0;
6351
+ var compositionOpOnefourLayoutsItemSegmentIndexMax = 9007199254740991;
6352
+ var compositionOpOnefourLayoutsItemWordStartIndexMin = 0;
6353
+ var compositionOpOnefourLayoutsItemWordStartIndexMax = 9007199254740991;
6354
+ var compositionOpOnefourLayoutsItemWordEndIndexExclusiveMin = 0;
6355
+ var compositionOpOnefourLayoutsItemWordEndIndexMax = 9007199254740991;
6356
+ var compositionOpOnefourLayoutsItemRegionXMin = 0;
6357
+ var compositionOpOnefourLayoutsItemRegionXMax = 1;
6358
+ var compositionOpOnefourLayoutsItemRegionYMin = 0;
6359
+ var compositionOpOnefourLayoutsItemRegionYMax = 1;
6360
+ var compositionOpOnefourLayoutsItemRegionWExclusiveMin = 0;
6361
+ var compositionOpOnefourLayoutsItemRegionWMax = 1;
6362
+ var compositionOpOnefourLayoutsItemRegionHExclusiveMin = 0;
6363
+ var compositionOpOnefourLayoutsItemRegionHMax = 1;
6364
+ var compositionOpOnefourLayoutsItemScaleMin = 0.25;
6365
+ var compositionOpOnefourLayoutsItemScaleMax = 4;
6366
+ var compositionOpOnefourLayoutsItemRotationMin = -45;
6367
+ var compositionOpOnefourLayoutsItemRotationMax = 45;
6368
+ var compositionOpOnefourLayoutsItemStyleFontSizeMax = 15;
6369
+ var compositionOpOnefourLayoutsItemStyleFontWeightMin = 100;
6370
+ var compositionOpOnefourLayoutsItemStyleFontWeightMax = 900;
6371
+ var compositionOpOnefourLayoutsItemStyleLetterSpacingMin = -5;
6372
+ var compositionOpOnefourLayoutsItemStyleLetterSpacingMax = 20;
6373
+ var compositionOpOnefourLayoutsItemStyleWordGapEmMin = 0;
6374
+ var compositionOpOnefourLayoutsItemStyleWordGapEmMax = 2;
6375
+ var compositionOpOnefourLayoutsItemStyleLineGapEmMin = 0;
6376
+ var compositionOpOnefourLayoutsItemStyleLineGapEmMax = 2;
6377
+ var compositionOpOnefourLayoutsItemStyleEmphasisScaleExclusiveMin = 0;
6378
+ var compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMin = 100;
6379
+ var compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMax = 900;
6380
+ var compositionOpOnefourLayoutsItemStyleEmphasisPlateRadiusMin = 0;
6381
+ var compositionOpOnefourLayoutsItemStyleAnnotationStrokeWidthMin = 0.5;
6382
+ var compositionOpOnefourLayoutsItemStyleAnnotationStrokeWidthMax = 12;
6383
+ var compositionOpOnefourLayoutsItemStyleEntranceMsMin = 0;
6384
+ var compositionOpOnefourLayoutsItemStyleEntranceStaggerMsMin = 0;
6385
+ var compositionOpOnefourLayoutsItemStyleExitMsMin = 0;
6386
+ var compositionOpOnefourLayoutsItemHoldThroughWordIndexMin = 0;
6387
+ var compositionOpOnefourLayoutsItemHoldThroughWordIndexMax = 9007199254740991;
6388
+ var compositionOpOnefourLayoutsItemWordMarksItemWordIndexMin = 0;
6389
+ var compositionOpOnefourLayoutsItemWordMarksItemWordIndexMax = 9007199254740991;
6390
+ var compositionOpOnesixSegmentsItemWordsItemStartMsMin = 0;
6391
+ var compositionOpOnesixSegmentsItemWordsItemEndMsMin = 0;
6392
+ var compositionOpOnesixStyleFontSizeMax = 15;
6393
+ var compositionOpOnesixStyleFontWeightMin = 100;
6394
+ var compositionOpOnesixStyleFontWeightMax = 900;
6395
+ var compositionOpOnesixStyleRegionXMin = 0;
6396
+ var compositionOpOnesixStyleRegionXMax = 1;
6397
+ var compositionOpOnesixStyleRegionYMin = 0;
6398
+ var compositionOpOnesixStyleRegionYMax = 1;
6399
+ var compositionOpOnesixStyleRegionWExclusiveMin = 0;
6400
+ var compositionOpOnesixStyleRegionWMax = 1;
6401
+ var compositionOpOnesixStyleRegionHExclusiveMin = 0;
6402
+ var compositionOpOnesixStyleRegionHMax = 1;
6403
+ var compositionOpOnesixStyleLetterSpacingMin = -5;
6404
+ var compositionOpOnesixStyleLetterSpacingMax = 20;
6405
+ var compositionOpOnesixStyleWordGapEmMin = 0;
6406
+ var compositionOpOnesixStyleWordGapEmMax = 2;
6407
+ var compositionOpOnesixStyleLineGapEmMin = 0;
6408
+ var compositionOpOnesixStyleLineGapEmMax = 2;
6409
+ var compositionOpOnesixStyleEmphasisScaleExclusiveMin = 0;
6410
+ var compositionOpOnesixStyleEmphasisFontWeightMin = 100;
6411
+ var compositionOpOnesixStyleEmphasisFontWeightMax = 900;
6412
+ var compositionOpOnesixStyleEntranceMsMin = 0;
6413
+ var compositionOpOnesixStyleEntranceStaggerMsMin = 0;
6414
+ var compositionOpOnesixStyleExitMsMin = 0;
6415
+ var compositionOpOnesixStyleEmphasisPlateRadiusMin = 0;
6416
+ var compositionOpOnesixStyleAnnotationStrokeWidthMin = 0.5;
6417
+ var compositionOpOnesixStyleAnnotationStrokeWidthMax = 12;
6418
+ var compositionOpOnesixStyleMaxWidthPercentExclusiveMin = 0;
6419
+ var compositionOpOnesixStyleMaxWidthPercentMax = 100;
6420
+ var compositionOpOnesevenWindowStartSecMin = 0;
6421
+ var compositionOpOnesevenWindowEndSecExclusiveMin = 0;
6422
+ var compositionOpTwozeroMaxMarkersExclusiveMin = 0;
6423
+ var compositionOpTwozeroMaxMarkersMax = 2e3;
6150
6424
  var CompositionOp = zod67.union([zod67.strictObject({
6151
6425
  "type": zod67.literal("scene.add"),
6152
6426
  "clipId": zod67.string(),
@@ -6286,7 +6560,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6286
6560
  "h": zod67.number().gt(compositionOpThreeClipRegionHExclusiveMin).max(compositionOpThreeClipRegionHMax)
6287
6561
  }).optional(),
6288
6562
  "fit": zod67.enum(["cover", "contain"]).optional(),
6289
- "captionVisibility": zod67.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
6563
+ "captionVisibility": zod67.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
6290
6564
  "effects": zod67.array(zod67.strictObject({
6291
6565
  "primitiveId": zod67.string().min(1),
6292
6566
  "params": zod67.record(zod67.string(), zod67.unknown()).optional()
@@ -6436,7 +6710,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6436
6710
  "h": zod67.number().gt(compositionOpFivePatchRegionHExclusiveMin).max(compositionOpFivePatchRegionHMax)
6437
6711
  }).optional(),
6438
6712
  "fit": zod67.enum(["cover", "contain"]).optional(),
6439
- "captionVisibility": zod67.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
6713
+ "captionVisibility": zod67.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
6440
6714
  "effects": zod67.array(zod67.strictObject({
6441
6715
  "primitiveId": zod67.string().min(1),
6442
6716
  "params": zod67.record(zod67.string(), zod67.unknown()).optional()
@@ -6582,7 +6856,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6582
6856
  "h": zod67.number().gt(compositionOpSevenClipsItemRegionHExclusiveMin).max(compositionOpSevenClipsItemRegionHMax)
6583
6857
  }).optional(),
6584
6858
  "fit": zod67.enum(["cover", "contain"]).optional(),
6585
- "captionVisibility": zod67.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is the visible full-frame picture; caption words and timings remain stored and resume when another visible clip takes over."),
6859
+ "captionVisibility": zod67.enum(["visible", "hidden"]).optional().describe("Video media clip only. Hide native captions while this clip is topmost and covers the lower picture, or when an opaque, effect-free clip has an explicitly full-frame region, even with fit:contain. Caption words and timings remain stored and resume when another visible clip takes over."),
6586
6860
  "effects": zod67.array(zod67.strictObject({
6587
6861
  "primitiveId": zod67.string().min(1),
6588
6862
  "params": zod67.record(zod67.string(), zod67.unknown()).optional()
@@ -6686,6 +6960,9 @@ var CompositionOp = zod67.union([zod67.strictObject({
6686
6960
  "h": zod67.number().gt(compositionOpOnethreeStyleRegionHExclusiveMin).max(compositionOpOnethreeStyleRegionHMax)
6687
6961
  }).optional().describe("Optional caption layout box {x,y,w,h} in normalized output-frame coordinates. Overrides position; text starts at its top edge and wraps/pages within its width and height."),
6688
6962
  "textTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
6963
+ "letterSpacing": zod67.number().min(compositionOpOnethreeStyleLetterSpacingMin).max(compositionOpOnethreeStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
6964
+ "wordGapEm": zod67.number().min(compositionOpOnethreeStyleWordGapEmMin).max(compositionOpOnethreeStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
6965
+ "lineGapEm": zod67.number().min(compositionOpOnethreeStyleLineGapEmMin).max(compositionOpOnethreeStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
6689
6966
  "emphasisColor": zod67.string().optional(),
6690
6967
  "emphasisGradient": zod67.string().optional(),
6691
6968
  "emphasisScale": zod67.number().gt(compositionOpOnethreeStyleEmphasisScaleExclusiveMin).optional(),
@@ -6706,10 +6983,68 @@ var CompositionOp = zod67.union([zod67.strictObject({
6706
6983
  "emphasisPlateRadius": zod67.number().min(compositionOpOnethreeStyleEmphasisPlateRadiusMin).optional(),
6707
6984
  "emphasisPlatePadX": zod67.number().optional(),
6708
6985
  "emphasisPlatePadY": zod67.number().optional(),
6986
+ "emphasisPlateReveal": zod67.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
6709
6987
  "annotationColor": zod67.string().optional(),
6988
+ "annotationStrokeWidth": zod67.number().min(compositionOpOnethreeStyleAnnotationStrokeWidthMin).max(compositionOpOnethreeStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
6710
6989
  "maxWidthPercent": zod67.number().gt(compositionOpOnethreeStyleMaxWidthPercentExclusiveMin).max(compositionOpOnethreeStyleMaxWidthPercentMax).optional()
6711
6990
  })
6712
6991
  }).describe("Merge style overrides (font/color/position/emphasis) onto the composition's caption layer. Partial \u2014 omitted fields keep their current value; creates the caption container if absent."), zod67.strictObject({
6992
+ "type": zod67.literal("setCaptionLayouts"),
6993
+ "layouts": zod67.array(zod67.strictObject({
6994
+ "segmentIndex": zod67.int().min(compositionOpOnefourLayoutsItemSegmentIndexMin).max(compositionOpOnefourLayoutsItemSegmentIndexMax),
6995
+ "wordStartIndex": zod67.int().min(compositionOpOnefourLayoutsItemWordStartIndexMin).max(compositionOpOnefourLayoutsItemWordStartIndexMax),
6996
+ "wordEndIndex": zod67.int().gt(compositionOpOnefourLayoutsItemWordEndIndexExclusiveMin).max(compositionOpOnefourLayoutsItemWordEndIndexMax).describe("Exclusive word index in the saved caption segment."),
6997
+ "region": zod67.strictObject({
6998
+ "x": zod67.number().min(compositionOpOnefourLayoutsItemRegionXMin).max(compositionOpOnefourLayoutsItemRegionXMax),
6999
+ "y": zod67.number().min(compositionOpOnefourLayoutsItemRegionYMin).max(compositionOpOnefourLayoutsItemRegionYMax),
7000
+ "w": zod67.number().gt(compositionOpOnefourLayoutsItemRegionWExclusiveMin).max(compositionOpOnefourLayoutsItemRegionWMax),
7001
+ "h": zod67.number().gt(compositionOpOnefourLayoutsItemRegionHExclusiveMin).max(compositionOpOnefourLayoutsItemRegionHMax)
7002
+ }),
7003
+ "scale": zod67.number().min(compositionOpOnefourLayoutsItemScaleMin).max(compositionOpOnefourLayoutsItemScaleMax).optional(),
7004
+ "rotation": zod67.number().min(compositionOpOnefourLayoutsItemRotationMin).max(compositionOpOnefourLayoutsItemRotationMax).optional(),
7005
+ "style": zod67.strictObject({
7006
+ "fontFamily": zod67.string().min(1).optional(),
7007
+ "fontSize": zod67.number().min(1).max(compositionOpOnefourLayoutsItemStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
7008
+ "fontWeight": zod67.int().min(compositionOpOnefourLayoutsItemStyleFontWeightMin).max(compositionOpOnefourLayoutsItemStyleFontWeightMax).optional(),
7009
+ "color": zod67.string().min(1).optional(),
7010
+ "highlightColor": zod67.string().min(1).optional(),
7011
+ "backgroundColor": zod67.string().optional(),
7012
+ "plate": zod67.enum(["glass", "solid", "none"]).optional(),
7013
+ "textTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
7014
+ "letterSpacing": zod67.number().min(compositionOpOnefourLayoutsItemStyleLetterSpacingMin).max(compositionOpOnefourLayoutsItemStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
7015
+ "wordGapEm": zod67.number().min(compositionOpOnefourLayoutsItemStyleWordGapEmMin).max(compositionOpOnefourLayoutsItemStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
7016
+ "lineGapEm": zod67.number().min(compositionOpOnefourLayoutsItemStyleLineGapEmMin).max(compositionOpOnefourLayoutsItemStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
7017
+ "emphasisColor": zod67.string().optional(),
7018
+ "emphasisScale": zod67.number().gt(compositionOpOnefourLayoutsItemStyleEmphasisScaleExclusiveMin).optional(),
7019
+ "emphasisFontFamily": zod67.string().optional(),
7020
+ "emphasisFontWeight": zod67.int().min(compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMin).max(compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMax).optional(),
7021
+ "emphasisTextTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
7022
+ "emphasisLetterSpacing": zod67.number().optional(),
7023
+ "emphasisFontStyle": zod67.enum(["normal", "italic"]).optional(),
7024
+ "emphasisPlate": zod67.boolean().optional(),
7025
+ "emphasisPlateColor": zod67.string().optional(),
7026
+ "emphasisPlateTextColor": zod67.string().optional(),
7027
+ "emphasisPlateAltColor": zod67.string().optional(),
7028
+ "emphasisPlateAltTextColor": zod67.string().optional(),
7029
+ "emphasisPlateRadius": zod67.number().min(compositionOpOnefourLayoutsItemStyleEmphasisPlateRadiusMin).optional(),
7030
+ "emphasisPlatePadX": zod67.number().optional(),
7031
+ "emphasisPlatePadY": zod67.number().optional(),
7032
+ "emphasisPlateReveal": zod67.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
7033
+ "annotationColor": zod67.string().optional(),
7034
+ "annotationStrokeWidth": zod67.number().min(compositionOpOnefourLayoutsItemStyleAnnotationStrokeWidthMin).max(compositionOpOnefourLayoutsItemStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
7035
+ "entrance": zod67.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
7036
+ "entranceMs": zod67.number().min(compositionOpOnefourLayoutsItemStyleEntranceMsMin).optional(),
7037
+ "entranceStaggerMs": zod67.number().min(compositionOpOnefourLayoutsItemStyleEntranceStaggerMsMin).optional(),
7038
+ "exitMs": zod67.number().min(compositionOpOnefourLayoutsItemStyleExitMsMin).optional()
7039
+ }).optional(),
7040
+ "holdThroughWordIndex": zod67.int().min(compositionOpOnefourLayoutsItemHoldThroughWordIndexMin).max(compositionOpOnefourLayoutsItemHoldThroughWordIndexMax).optional().describe("Inclusive saved-word index in this segment. The layout stays visible until that word ends."),
7041
+ "wordMarks": zod67.array(zod67.strictObject({
7042
+ "wordIndex": zod67.int().min(compositionOpOnefourLayoutsItemWordMarksItemWordIndexMin).max(compositionOpOnefourLayoutsItemWordMarksItemWordIndexMax),
7043
+ "emphasis": zod67.boolean().optional(),
7044
+ "annotate": zod67.union([zod67.enum(["circle", "underline"]), zod67.null()]).optional()
7045
+ })).optional()
7046
+ }))
7047
+ }).describe("Replace native caption placements without changing transcript words or timings. Each layout references a half-open word-index range in one saved segment; a one-word range is valid. region places that group independently, optional bounded scale/rotation/style changes its look, and holdThroughWordIndex keeps it visible through a later saved word in the same segment. All words in a placed range occupy one page; rendering refuses a range that cannot fit its box, so enlarge region or split the range. The box reserves horizontal space of 1.6 font sizes and vertical space of 0.8 font sizes for padding, with at most three lines. Unreferenced words keep the default caption layout. Word ranges must not overlap. Reapply after caption regeneration or timeline cuts."), zod67.strictObject({
6713
7048
  "type": zod67.literal("setCaptionDepth"),
6714
7049
  "zPlane": zod67.enum(["front", "behind-subject"])
6715
7050
  }).describe("Set the caption compositing plane. Use `behind-subject` to place captions behind the segmented foreground subject; use `front` for conventional captions above all video layers."), zod67.strictObject({
@@ -6717,57 +7052,62 @@ var CompositionOp = zod67.union([zod67.strictObject({
6717
7052
  "segments": zod67.array(zod67.strictObject({
6718
7053
  "words": zod67.array(zod67.strictObject({
6719
7054
  "text": zod67.string().min(1),
6720
- "startMs": zod67.number().min(compositionOpOnefiveSegmentsItemWordsItemStartMsMin).describe("Word start on the composition timeline, in milliseconds."),
6721
- "endMs": zod67.number().min(compositionOpOnefiveSegmentsItemWordsItemEndMsMin).describe("Word end on the composition timeline, in milliseconds."),
7055
+ "startMs": zod67.number().min(compositionOpOnesixSegmentsItemWordsItemStartMsMin).describe("Word start on the composition timeline, in milliseconds."),
7056
+ "endMs": zod67.number().min(compositionOpOnesixSegmentsItemWordsItemEndMsMin).describe("Word end on the composition timeline, in milliseconds."),
6722
7057
  "emphasis": zod67.boolean().optional(),
6723
7058
  "annotate": zod67.enum(["circle", "underline"]).optional()
6724
7059
  }))
6725
7060
  })),
6726
7061
  "style": zod67.strictObject({
6727
7062
  "fontFamily": zod67.string().min(1).optional(),
6728
- "fontSize": zod67.number().min(1).max(compositionOpOnefiveStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
6729
- "fontWeight": zod67.int().min(compositionOpOnefiveStyleFontWeightMin).max(compositionOpOnefiveStyleFontWeightMax).optional(),
7063
+ "fontSize": zod67.number().min(1).max(compositionOpOnesixStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
7064
+ "fontWeight": zod67.int().min(compositionOpOnesixStyleFontWeightMin).max(compositionOpOnesixStyleFontWeightMax).optional(),
6730
7065
  "color": zod67.string().min(1).optional(),
6731
7066
  "highlightColor": zod67.string().min(1).optional(),
6732
7067
  "backgroundColor": zod67.string().optional(),
6733
7068
  "plate": zod67.enum(["glass", "solid", "none"]).optional(),
6734
7069
  "position": zod67.enum(["top", "center", "bottom"]).optional(),
6735
7070
  "region": zod67.strictObject({
6736
- "x": zod67.number().min(compositionOpOnefiveStyleRegionXMin).max(compositionOpOnefiveStyleRegionXMax),
6737
- "y": zod67.number().min(compositionOpOnefiveStyleRegionYMin).max(compositionOpOnefiveStyleRegionYMax),
6738
- "w": zod67.number().gt(compositionOpOnefiveStyleRegionWExclusiveMin).max(compositionOpOnefiveStyleRegionWMax),
6739
- "h": zod67.number().gt(compositionOpOnefiveStyleRegionHExclusiveMin).max(compositionOpOnefiveStyleRegionHMax)
7071
+ "x": zod67.number().min(compositionOpOnesixStyleRegionXMin).max(compositionOpOnesixStyleRegionXMax),
7072
+ "y": zod67.number().min(compositionOpOnesixStyleRegionYMin).max(compositionOpOnesixStyleRegionYMax),
7073
+ "w": zod67.number().gt(compositionOpOnesixStyleRegionWExclusiveMin).max(compositionOpOnesixStyleRegionWMax),
7074
+ "h": zod67.number().gt(compositionOpOnesixStyleRegionHExclusiveMin).max(compositionOpOnesixStyleRegionHMax)
6740
7075
  }).optional().describe("Optional caption layout box {x,y,w,h} in normalized output-frame coordinates. Overrides position; text starts at its top edge and wraps/pages within its width and height."),
6741
7076
  "textTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
7077
+ "letterSpacing": zod67.number().min(compositionOpOnesixStyleLetterSpacingMin).max(compositionOpOnesixStyleLetterSpacingMax).optional().describe("Base caption glyph spacing in pixels."),
7078
+ "wordGapEm": zod67.number().min(compositionOpOnesixStyleWordGapEmMin).max(compositionOpOnesixStyleWordGapEmMax).optional().describe("Gap between caption runs as a multiple of base font size; default 0.35."),
7079
+ "lineGapEm": zod67.number().min(compositionOpOnesixStyleLineGapEmMin).max(compositionOpOnesixStyleLineGapEmMax).optional().describe("Gap between caption lines as a multiple of base font size; default 0.25."),
6742
7080
  "emphasisColor": zod67.string().optional(),
6743
7081
  "emphasisGradient": zod67.string().optional(),
6744
- "emphasisScale": zod67.number().gt(compositionOpOnefiveStyleEmphasisScaleExclusiveMin).optional(),
7082
+ "emphasisScale": zod67.number().gt(compositionOpOnesixStyleEmphasisScaleExclusiveMin).optional(),
6745
7083
  "emphasisFontFamily": zod67.string().optional(),
6746
- "emphasisFontWeight": zod67.int().min(compositionOpOnefiveStyleEmphasisFontWeightMin).max(compositionOpOnefiveStyleEmphasisFontWeightMax).optional(),
7084
+ "emphasisFontWeight": zod67.int().min(compositionOpOnesixStyleEmphasisFontWeightMin).max(compositionOpOnesixStyleEmphasisFontWeightMax).optional(),
6747
7085
  "emphasisTextTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
6748
7086
  "emphasisLetterSpacing": zod67.number().optional(),
6749
7087
  "emphasisFontStyle": zod67.enum(["normal", "italic"]).optional(),
6750
7088
  "entrance": zod67.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
6751
- "entranceMs": zod67.number().min(compositionOpOnefiveStyleEntranceMsMin).optional(),
6752
- "entranceStaggerMs": zod67.number().min(compositionOpOnefiveStyleEntranceStaggerMsMin).optional(),
6753
- "exitMs": zod67.number().min(compositionOpOnefiveStyleExitMsMin).optional(),
7089
+ "entranceMs": zod67.number().min(compositionOpOnesixStyleEntranceMsMin).optional(),
7090
+ "entranceStaggerMs": zod67.number().min(compositionOpOnesixStyleEntranceStaggerMsMin).optional(),
7091
+ "exitMs": zod67.number().min(compositionOpOnesixStyleExitMsMin).optional(),
6754
7092
  "emphasisPlate": zod67.boolean().optional(),
6755
7093
  "emphasisPlateColor": zod67.string().optional(),
6756
7094
  "emphasisPlateTextColor": zod67.string().optional(),
6757
7095
  "emphasisPlateAltColor": zod67.string().optional(),
6758
7096
  "emphasisPlateAltTextColor": zod67.string().optional(),
6759
- "emphasisPlateRadius": zod67.number().min(compositionOpOnefiveStyleEmphasisPlateRadiusMin).optional(),
7097
+ "emphasisPlateRadius": zod67.number().min(compositionOpOnesixStyleEmphasisPlateRadiusMin).optional(),
6760
7098
  "emphasisPlatePadX": zod67.number().optional(),
6761
7099
  "emphasisPlatePadY": zod67.number().optional(),
7100
+ "emphasisPlateReveal": zod67.boolean().optional().describe("Grow a shared emphasis plate as saved words appear while reserving its final layout width."),
6762
7101
  "annotationColor": zod67.string().optional(),
6763
- "maxWidthPercent": zod67.number().gt(compositionOpOnefiveStyleMaxWidthPercentExclusiveMin).max(compositionOpOnefiveStyleMaxWidthPercentMax).optional()
7102
+ "annotationStrokeWidth": zod67.number().min(compositionOpOnesixStyleAnnotationStrokeWidthMin).max(compositionOpOnesixStyleAnnotationStrokeWidthMax).optional().describe("Annotation stroke width in its 100\xD7100 SVG coordinate system; default 4."),
7103
+ "maxWidthPercent": zod67.number().gt(compositionOpOnesixStyleMaxWidthPercentExclusiveMin).max(compositionOpOnesixStyleMaxWidthPercentMax).optional()
6764
7104
  }).optional()
6765
7105
  }).describe("Replace the caption SEGMENTS wholesale \u2014 author the word-timed caption layer directly (each segment = one sentence/page of `words` with timeline-ms `startMs`/`endMs`, optional `emphasis`). This is how a client with its OWN word timings (e.g. a generated VO take) gets word-synced captions without a source transcript; the compose lane's transcript slice writes the same layer. `style`, when given, merges with setCaptionStyle semantics; an omitted style keeps the existing one. Renderer paginates within a segment and never pools words across two \u2014 keep segments sentence-bounded."), zod67.strictObject({
6766
7106
  "type": zod67.literal("captions.fromTranscript"),
6767
7107
  "mediaId": zod67.string().min(1),
6768
7108
  "window": zod67.strictObject({
6769
- "startSec": zod67.number().min(compositionOpOnesixWindowStartSecMin),
6770
- "endSec": zod67.number().gt(compositionOpOnesixWindowEndSecExclusiveMin)
7109
+ "startSec": zod67.number().min(compositionOpOnesevenWindowStartSecMin),
7110
+ "endSec": zod67.number().gt(compositionOpOnesevenWindowEndSecExclusiveMin)
6771
7111
  }).optional()
6772
7112
  }).describe("Attach caption CONTENT from the media's cached transcript \u2014 no pasting words. ROUTE-MATERIALIZED like applyMotionPreset/materializeGrid: the server slices the word-timed transcript to `window` (source seconds; absent = the whole media), rebases times, sentence-splits into segments, and applies it as `setCaptions`. 422 media_no_transcript when the media has no transcript or no words in the window. For your OWN word timings use setCaptions directly. For edited multi-clip timelines, use captions.fromComposition after saving the edits; that operation projects all selected track clips, trims, exclusions, and placements."), zod67.strictObject({
6773
7113
  "type": zod67.literal("captions.fromComposition"),
@@ -6785,7 +7125,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6785
7125
  "type": zod67.literal("materializeGrid"),
6786
7126
  "clipId": zod67.string(),
6787
7127
  "grid": zod67.enum(["beat", "word", "shot"]),
6788
- "maxMarkers": zod67.int().gt(compositionOpOnenineMaxMarkersExclusiveMin).max(compositionOpOnenineMaxMarkersMax).optional()
7128
+ "maxMarkers": zod67.int().gt(compositionOpTwozeroMaxMarkersExclusiveMin).max(compositionOpTwozeroMaxMarkersMax).optional()
6789
7129
  }).describe('Materialize a clip\'s SOURCE-media temporal GRID as timeline markers \u2014 the rhythm authority you cut to. `grid:"beat"` reads a MUSIC bed\'s beat map (get_media_context.beatGrid), `grid:"word"` the VO word onsets (wordGrid); each grid point is projected from media time to TIMELINE time through the clip\'s placement (startTime, trim, playbackRate, excludedRanges) and written as a `kind:"beat"|"word"` marker (`metadata.sourceClipId` set). Points outside the clip\'s visible window are skipped. Re-running REPLACES the prior markers from the same clip+grid (idempotent). Land cuts and transition MIDPOINTS on the markers (a 0.5s transition starts 0.25s before its marker). `maxMarkers` (default 500, ceiling 2000) \u2014 exceeding it fails loud with the count. `grid:"shot"` is not yet exposed (shot_grid_unavailable). The target must be a media clip; absent evidence fails loud (grid_unavailable) naming how to get it (declare audioRole:"music" at ingest / transcribe).'), zod67.strictObject({
6790
7130
  "type": zod67.literal("setFormat"),
6791
7131
  "format": zod67.strictObject({
@@ -7918,7 +8258,7 @@ var RenderFontsResponse = zod157.strictObject({
7918
8258
  "min": zod157.number(),
7919
8259
  "max": zod157.number()
7920
8260
  })).describe("The weights a shipped file declares. A static face has min === max; a variable face gives its declared wght axis range. Any weight inside a range renders; anything outside every range is REFUSED, never synthesised."),
7921
- "styles": zod157.array(zod157.enum(["normal"])).describe("The styles bytes exist for. Always ['normal']: no bundled or aliased family ships an italic file, so fontStyle:'italic' over one is refused rather than slanted. Real italics come only from a brand-kit font asset."),
8261
+ "styles": zod157.array(zod157.enum(["normal", "italic"])).describe("The styles bytes exist for in this family. Request italic only when this list includes 'italic'; the renderer refuses synthetic slant."),
7922
8262
  "captionDefaults": zod157.strictObject({
7923
8263
  "base": zod157.number(),
7924
8264
  "emphasis": zod157.number()
@@ -9382,7 +9722,7 @@ var GENERATED_OPERATIONS = [
9382
9722
  { operationId: "listMediaSuggestions", toolName: "cueframe_api_listMediaSuggestions", title: "List Media Suggestions", method: "GET", pathTemplate: "/v1/media/{id}/suggestions", pathParams: ["id"], queryParams: [{ "name": "limit", "required": false, "description": "Page size (1..100), default 20. Out-of-range or unparseable clamps into the range.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "after", "required": false, "description": "Opaque cursor from the previous page's `pagination.nextCursor`. Forward-only.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "platform", "required": false, "description": "Only suggestions cut for this delivery platform.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "format", "required": false, "description": "Only suggestions in this output format.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "topic", "required": false, "description": "Only suggestions matching this topic label.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List clip suggestions for a media item \u2014 Required permission: media:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "status": { "type": "string", "enum": ["idle", "generating", "completed", "failed"] }, "createdAt": { "type": ["string", "null"] }, "analyzedAt": { "type": ["string", "null"] }, "jobId": { "type": ["string", "null"] }, "topics": { "type": "array" }, "suggestions": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9383
9723
  { operationId: "listProjectRenders", toolName: "cueframe_api_listProjectRenders", title: "List Project Renders", method: "GET", pathTemplate: "/v1/projects/{id}/renders", pathParams: ["id"], queryParams: [{ "name": "limit", "required": false, "description": "Page size (1..100), default 20. Out-of-range or unparseable clamps into the range.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "after", "required": false, "description": "Opaque cursor from the previous page's `pagination.nextCursor`. Forward-only.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }, { "name": "status", "required": false, "description": "Comma-separated render statuses to include (e.g. `error,cancelled`). Omit for every status.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List renders for a project \u2014 Required permission: renders:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9384
9724
  { operationId: "listProjects", toolName: "cueframe_api_listProjects", title: "List Projects", method: "GET", pathTemplate: "/v1/projects", pathParams: [], queryParams: [{ "name": "limit", "required": false, "description": "Page size (1..100), default 20. Out-of-range or unparseable clamps into the range.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "after", "required": false, "description": "Opaque cursor from the previous page's `pagination.nextCursor`. Forward-only.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List projects \u2014 Required permission: projects:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9385
- { operationId: "listRenderFonts", toolName: "cueframe_api_listRenderFonts", title: "List Render Fonts", method: "GET", pathTemplate: "/v1/fonts", pathParams: [], queryParams: [], bodyKey: null, description: "List the font faces the renderer can actually draw \u2014 The renderer's admitted font set: per family the exact name authoring accepts, the weight ranges a shipped file declares, the styles bytes exist for, the caption default weights, and whether the bytes are bundled or an aliased metric-compatible stand-in. Choose from here and validate_composition will not refuse the face. Unlike POST /fonts/search (which searches the GOOGLE catalog) this is what the render page can rasterize. `manifestVersion` identifies the exact table and moves only when the admitted set does. Covers the BUNDLED set only \u2014 a brand kit's sealed faces are per-org and per-render, and a real italic can come only from one. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "manifestVersion": { "type": "string", "description": "Identifies this exact face table. Derived from the table's own content, so it moves when and only when the admitted set moves. Record it beside a composition to state which face table a font choice was validated against." }, "families": { "type": "array" } }, "additionalProperties": true } },
9725
+ { operationId: "listRenderFonts", toolName: "cueframe_api_listRenderFonts", title: "List Render Fonts", method: "GET", pathTemplate: "/v1/fonts", pathParams: [], queryParams: [], bodyKey: null, description: "List the font faces the renderer can actually draw \u2014 The renderer's admitted font set: per family the exact name authoring accepts, the weight ranges a shipped file declares, the styles bytes exist for, the caption default weights, and whether the bytes are bundled or an aliased metric-compatible stand-in. Choose from here and validate_composition will not refuse the face. Unlike POST /fonts/search (which searches the GOOGLE catalog) this is what the render page can rasterize. `manifestVersion` identifies the exact table and moves only when the admitted set does. Covers the BUNDLED set only \u2014 a brand kit's sealed faces are per-org and per-render. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "manifestVersion": { "type": "string", "description": "Identifies this exact face table. Derived from the table's own content, so it moves when and only when the admitted set moves. Record it beside a composition to state which face table a font choice was validated against." }, "families": { "type": "array" } }, "additionalProperties": true } },
9386
9726
  { operationId: "listSelectorCandidates", toolName: "cueframe_api_listSelectorCandidates", title: "List Selector Candidates", method: "GET", pathTemplate: "/v1/projects/{id}/selector/candidates", pathParams: ["id"], queryParams: [{ "name": "groupId", "required": true, "description": "The synced-angle group to score.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "minLength": 1 } }], bodyKey: null, description: "List switch (multicam) candidates + recommendation for a synced-angle group \u2014 Required permission: media:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "projectId": { "type": "string" }, "groupId": { "type": "string" }, "selectorVersion": { "type": "string" }, "signalVersions": { "type": "object" }, "moments": { "type": "array" }, "recommendation": { "type": "object" }, "divergesFromComposition": { "type": "boolean" } }, "additionalProperties": true } },
9387
9727
  { operationId: "listSessions", toolName: "cueframe_api_listSessions", title: "List Sessions", method: "GET", pathTemplate: "/v1/sessions", pathParams: [], queryParams: [{ "name": "limit", "required": false, "description": "Page size (1..100), default 20. Out-of-range or unparseable clamps into the range.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "after", "required": false, "description": "Opaque cursor from the previous page's `pagination.nextCursor`. Forward-only.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string" } }], bodyKey: null, description: "List sessions \u2014 Required permission: sessions:read \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "data": { "type": "array" }, "pagination": { "type": "object", "description": "Cursor pagination metadata." } }, "additionalProperties": true } },
9388
9728
  { operationId: "listSkills", toolName: "cueframe_api_listSkills", title: "List Skills", method: "GET", pathTemplate: "/v1/skills", pathParams: [], queryParams: [], bodyKey: null, description: "List available CueFrame agent skills \u2014 Returns the agent skills CueFrame publishes (e.g. `cueframe-cli`). Metadata only \u2014 fetch the markdown body from GET /skills/{name}. Unauthenticated, like /openapi.json. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "skills": { "type": "array" } }, "additionalProperties": true } },
@@ -9405,7 +9745,7 @@ var GENERATED_OPERATIONS = [
9405
9745
  { operationId: "retryRender", toolName: "cueframe_api_retryRender", title: "Retry Render", method: "POST", pathTemplate: "/v1/projects/{id}/renders/{renderId}/retry", pathParams: ["id", "renderId"], queryParams: [], bodyKey: null, description: "Re-render against an existing renderJob's snapshot \u2014 Required permission: renders:write \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "id": { "type": "string" }, "status": { "type": "string", "enum": ["queued", "pending", "rendering", "complete", "error", "cancelled"] }, "progress": { "type": "object", "description": "Non-terminal render progress; phase is one of the worker's emitted stages." }, "outputUrl": { "type": ["string", "null"] }, "outputExpiresAt": { "type": ["string", "null"] }, "error": { "type": ["string", "null"], "description": "Human-readable failure message. Pair with `errorCode` for a stable, machine-readable code an agent runner can branch on." }, "errorCode": { "type": ["string", "null"], "description": "Stable, machine-readable error code (e.g. `render_pipeline_unavailable`, `render_route_missing`, `render_pipeline_failed`). Null when status is not `error` or unavailable for an older render." }, "errorDetails": { "description": "Structured failure context \u2014 `{ targetUrl?, upstreamStatus?, upstreamCode?, attemptedAt? }`. Surfaced so agent runners can distinguish operator-config issues from upstream-down vs route-missing without parsing `error`." }, "category": { "description": "Failure taxonomy when status is `error`; null otherwise. `authoring` = deterministic defect in YOUR composition/request \u2014 fix it, retrying is futile; `transient` = temporary pipeline/infra failure \u2014 safe to retry_render; `internal` = unexpected server fault \u2014 retry once then escalate. Mirrors the render.failed webhook's `category`." }, "retryable": { "type": ["boolean", "null"], "description": "Whether re-attempting the SAME render can succeed (status `error`); null otherwise. true \u2192 call retry_render. false \u2192 deterministic (category authoring/internal); fix the composition first \u2014 retry_render alone reproduces it. Mirrors the render.failed webhook's `retryable`." }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string", "description": "ISO-8601 timestamp of the render's most recent progress update. Compute staleness = now \u2212 updatedAt to distinguish a wedged render from a slow one and decide whether to wait, cancel, or retry." }, "listUsd": { "type": "number", "description": "A2 money stamp: the metered event's LIST price (USD), stamped at the success terminal (exports for deliverable renders, compose_capture for A8 previews). A plan allowance may zero the actual invoice line \u2014 this is the list price, never a Stripe charge. Absent while running, on failure, and for x402 orgs (on-chain receipts). Mirrors the get_usage ledger." }, "warnings": { "type": "array", "description": "Non-fatal advisories surfaced at render-CREATE (omitted when none, and on GET \u2014 create-time only)." } }, "additionalProperties": true } },
9406
9746
  { operationId: "scoreComposition", toolName: "cueframe_api_scoreComposition", title: "Score Composition", method: "POST", pathTemplate: "/v1/projects/{id}/score-composition", pathParams: ["id"], queryParams: [], bodyKey: "scoreCompositionBody", description: "Score a composition (the standalone sighted judge) \u2014 Queue the server-side judge: it samples eval beats, renders them, and grades editorial/spatial/brand/caption (0\u201310 + weighted composite + worst-first critique). Your REGISTERED CRITICS run too (register_critic) \u2014 rules + rubric verdicts ride the result as clientScores, exactly like the Director's gates evaluate them (evaluator-webhook critics run in the Director lane only). Returns a jobId \u2014 wait_job(kind='verify') for the result, which ALSO carries a checkpointId: the verdicts mint a durable kind:'score' Checkpoint (the same evidence noun the Director's gates produce). Stateless \u2014 nothing to open, warm or close; the compose_verify meter fires on the job's success terminal. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "jobId": { "type": "string", "description": "Poll GET /v1/jobs/{jobId} / wait_job until terminal." }, "jobKey": { "type": "string", "description": "Deterministic identity of the work (content hash of every input the result depends on). Re-enqueueing the same key returns the same job while it runs; a failed key revives as a fresh attempt." }, "kind": { "type": "string", "description": "Job family, e.g. `verify` | `preview` | `brand_kit_extract`." }, "status": { "type": "string", "description": "running on a fresh/deduped enqueue; succeeded when an identical request already completed. Cancelled is part of the shared status vocabulary; identical cancelled work revives to running.", "enum": ["running", "succeeded", "cancelled"] } }, "additionalProperties": true } },
9407
9747
  { operationId: "scoreTrace", toolName: "cueframe_api_scoreTrace", title: "Score Trace", method: "POST", pathTemplate: "/v1/traces/{traceId}/scores", pathParams: ["traceId"], queryParams: [], bodyKey: "scoreTraceBody", description: "Attach production scores to one of your director traces \u2014 Record 1\u201310 named scores (0..1) on a trace the CueFrame gateway produced for YOUR director run \u2014 the trace id is the `trace_id` the client stamped on that run's requests. Only the trace's own user may score it; any other trace id answers 404. Scores are accepted asynchronously and acknowledged with 202. Free. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "accepted": { "type": "integer" } }, "additionalProperties": true } },
9408
- { operationId: "searchFonts", toolName: "cueframe_api_searchFonts", title: "Search Fonts", method: "POST", pathTemplate: "/v1/fonts/search", pathParams: [], queryParams: [], bodyKey: "searchFontsBody", description: "Search web font families by name/style \u2014 Search the Google Fonts web-font catalog by keyword. Returns matching font families (family name + category + available variants + a css2 stylesheet URL). DISCOVERY ONLY, and this is NOT the set the renderer can draw: a cloud render draws only the faces GET /v1/fonts lists, or a face sealed in a brand kit font asset. Naming any other family in captions/params fails validate_composition with font_not_reproducible. Read GET /v1/fonts to choose a family AND an admitted weight before authoring \u2014 it also states that no bundled family ships an italic. Read-only and free; results are cached server-side. An empty `results` array means no match (or the upstream catalog was unavailable). \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true }, outputSchema: { "type": "object", "properties": { "results": { "type": "array" } }, "additionalProperties": true } },
9748
+ { operationId: "searchFonts", toolName: "cueframe_api_searchFonts", title: "Search Fonts", method: "POST", pathTemplate: "/v1/fonts/search", pathParams: [], queryParams: [], bodyKey: "searchFontsBody", description: "Search web font families by name/style \u2014 Search the Google Fonts web-font catalog by keyword. Returns matching font families (family name + category + available variants + a css2 stylesheet URL). DISCOVERY ONLY, and this is NOT the set the renderer can draw: a cloud render draws only the faces GET /v1/fonts lists, or a face sealed in a brand kit font asset. Naming any other family in captions/params fails validate_composition with font_not_reproducible. Read GET /v1/fonts to choose a family AND an admitted weight and style before authoring. Read-only and free; results are cached server-side. An empty `results` array means no match (or the upstream catalog was unavailable). \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true }, outputSchema: { "type": "object", "properties": { "results": { "type": "array" } }, "additionalProperties": true } },
9409
9749
  { operationId: "searchLibrary", toolName: "cueframe_api_searchLibrary", title: "Search Library", method: "GET", pathTemplate: "/v1/media/search", pathParams: [], queryParams: [{ "name": "q", "required": true, "description": "What the moment should look like, in plain language. Describe the IMAGE, not the words spoken.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "string", "minLength": 1 } }, { "name": "limit", "required": false, "description": "Maximum moments to return. Default 10, maximum 25.", "style": "form", "explode": true, "allowReserved": false, "schema": { "type": "integer", "minimum": 1, "maximum": 25, "default": 10 } }], bodyKey: null, description: 'Semantic search over the org\'s own footage \u2014 Find MOMENTS in your library by describing what they look like. The query uses the same visual-semantic index as the footage, so it matches on visual content \u2014 "wide shot of a speaker at a whiteboard", "hands on a keyboard", "city skyline at dusk" \u2014 including shots nobody talks about (which is where transcript search fails). Results are time-ranged: feed `mediaId` + `startSec`/`endSec` straight into apply_composition as a clip. `q` is required; `limit` defaults to 10 and caps at 25. `indexing` is COVERAGE, not emptiness: it is true whenever some of the org\'s footage is not in the visual index yet (media that predates it, or still processing), and it can be true ALONGSIDE results \u2014 then read them as "the best moments among what we have looked at so far". Empty `results` with `indexing: true` is a state, not a failure; re-run the item through processing to index it. The first search after an idle period can take up to ~90s; subsequent searches are typically faster. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.', annotations: { "readOnlyHint": true, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "results": { "type": "array", "description": "Matching moments, best first. Empty means nothing matched (when `indexing` is false) \u2014 the library was searched and came back empty-handed." }, "indexing": { "type": "boolean", "description": 'TRUE when some of the org\'s footage is NOT in the visual index yet \u2014 media that predates it, or is still processing. This is COVERAGE, not emptiness: it can be true ALONGSIDE results, and then it means "these are the best moments among what we have looked at so far", not "these are the best moments". An empty `results` with `indexing: true` means "not looked at yet", NOT "no match" \u2014 re-run the media through processing (reprocess) to index it, then search again. FALSE with empty `results` is a real miss: the library was searched and nothing matched.' } }, "additionalProperties": true } },
9410
9750
  { operationId: "searchResources", toolName: "cueframe_api_searchResources", title: "Search Resources", method: "POST", pathTemplate: "/v1/resources/search", pathParams: [], queryParams: [], bodyKey: "searchResourcesBody", description: "Search stock media (Pexels / Pixabay / Freesound / Klipy) \u2014 Search licensed stock media by keyword. Pass `query` for one search, or `queries[]` (\u226410) to run a batch in ONE call \u2014 the batch returns `results[]`, one entry per query in order, each with its own `candidates` (and an `error` string if that single query failed; one bad query never discards the rest). `kind` selects the corpus (video/photo default to Pexels; Pixabay is explicitly selectable; sfx \u2192 Freesound CC0-only; gif \u2192 Klipy); defaults to video. Returns ranked candidates each carrying an opaque `candidateId` \u2014 pass it to import_resource to bring the asset into a project. Free + rate-limited; results are cached for 7 days, after which a candidateId must be refreshed by searching again. For sfx, bound the result by clip length with `durationSec` \u2014 impacts/ticks \u2248 0\u20132s, risers/whooshes \u2248 2\u20138s, ambients unbounded. For video, use minWidth/minHeight to exclude smaller renditions. \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": true }, outputSchema: { "type": "object", "properties": { "provider": { "type": "string", "enum": ["pexels", "pixabay", "freesound", "klipy"] }, "kind": { "type": "string", "enum": ["video", "photo", "sfx", "gif"] }, "candidates": { "type": "array" }, "results": { "type": "array" } }, "additionalProperties": true } },
9411
9751
  { operationId: "selectComposeCandidate", toolName: "cueframe_api_selectComposeCandidate", title: "Select Compose Candidate", method: "POST", pathTemplate: "/v1/projects/{id}/compose/jobs/{composeJobId}/select", pathParams: ["id", "composeJobId"], queryParams: [], bodyKey: "selectComposeCandidateBody", description: "Promote a compose candidate to the active composition \u2014 Selects one candidate from a finished compose ensemble and writes it to the project's composition. `selectStrategy` decides how the editor draft interacts with the write (per compose-api-contract.md). \u2014 Advanced (expert layer) \u2014 prefer the curated high-level tools (compose, apply_composition, create_render, wait_job, get_media_context) when they fit your task.", annotations: { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": false, "openWorldHint": false }, outputSchema: { "type": "object", "properties": { "newCompositionEtag": { "type": "string" }, "mergeResult": { "type": "object" } }, "additionalProperties": true } },