@cueframe/kernel 0.2.52 → 0.2.53

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 (67) 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/validators/composition.d.ts +644 -0
  6. package/dist/_members/composition/validators/registry.d.ts +1 -1
  7. package/dist/_members/composition/validators/render.d.ts +292 -0
  8. package/dist/_members/composition-ops/index.d.ts +74 -0
  9. package/dist/_members/core/render/compositionAudioAndDepth.d.ts +1 -1
  10. package/dist/_members/core/render/index.d.ts +1 -1
  11. package/dist/_members/core/render/types.d.ts +3 -1
  12. package/dist/_members/plane/contract.d.ts +1 -1
  13. package/dist/_members/primitives/captions/Captions.d.ts +18 -1
  14. package/dist/_members/primitives/captions/index.d.ts +1 -1
  15. package/dist/animate.js +2 -2
  16. package/dist/authoring/build-tools.js +6 -6
  17. package/dist/authoring/context.js +5 -5
  18. package/dist/authoring/tools.js +5 -5
  19. package/dist/authoring.js +9 -9
  20. package/dist/{chunk-MYBK6DKF.js → chunk-2BVKNYRB.js} +1 -1
  21. package/dist/{chunk-2M65KQNG.js → chunk-46DGDPXR.js} +296 -47
  22. package/dist/{chunk-KMDZDH5E.js → chunk-4DM63RTI.js} +4 -4
  23. package/dist/{chunk-QVBUYWW6.js → chunk-5E4YP44R.js} +1 -1
  24. package/dist/{chunk-3OG2674K.js → chunk-7AUHC2X7.js} +1 -1
  25. package/dist/{chunk-AVTEPAWI.js → chunk-7RGDRDAR.js} +17 -13
  26. package/dist/{chunk-7XZW26U2.js → chunk-AONWKKXK.js} +1 -1
  27. package/dist/{chunk-4B4V3HYW.js → chunk-C6ONUJIO.js} +1 -1
  28. package/dist/{chunk-MBSQKRDF.js → chunk-CJMUTCJW.js} +2 -2
  29. package/dist/{chunk-CZOVEX2D.js → chunk-CR3G2JQP.js} +1 -1
  30. package/dist/{chunk-2PU2TSUG.js → chunk-D5E5XFHK.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-LPUQTBKU.js} +41 -20
  34. package/dist/{chunk-WZ22ZYXD.js → chunk-P3DYA5NA.js} +4 -4
  35. package/dist/{chunk-Z6NY6MCL.js → chunk-RMLGMYEJ.js} +1 -1
  36. package/dist/{chunk-5JCLZPMV.js → chunk-TPKPU4PE.js} +56 -38
  37. package/dist/{chunk-CV3QQUMK.js → chunk-UFNIB3JL.js} +117 -4
  38. package/dist/{chunk-ACURZCPN.js → chunk-UKKY7HWN.js} +1 -1
  39. package/dist/{chunk-IHXMBXXL.js → chunk-VTM7NEJC.js} +30 -4
  40. package/dist/{chunk-JWW54N24.js → chunk-ZFW35DLG.js} +1 -1
  41. package/dist/{chunk-FSEB4LSU.js → chunk-ZIPGDGBR.js} +1 -1
  42. package/dist/component-runtime/render.js +2 -2
  43. package/dist/component-runtime.js +3 -3
  44. package/dist/compose.js +5 -5
  45. package/dist/composition/fonts.js +1 -1
  46. package/dist/composition/graphics-plan.js +3 -3
  47. package/dist/composition/ops.js +4 -4
  48. package/dist/composition/projection.js +3 -3
  49. package/dist/composition/validators.js +13 -3
  50. package/dist/composition-ops.js +8 -8
  51. package/dist/composition.js +15 -5
  52. package/dist/{context-2MBCDTCZ.js → context-UAS5WJRB.js} +5 -5
  53. package/dist/core/render.js +4 -4
  54. package/dist/core.js +4 -4
  55. package/dist/mcp/adapter.js +2 -2
  56. package/dist/mcp/core.js +1 -1
  57. package/dist/mcp/scene-shot.js +2 -2
  58. package/dist/mcp/server.js +12 -12
  59. package/dist/mcp.js +12 -12
  60. package/dist/primitives/captions.js +195 -32
  61. package/dist/primitives/effects.js +3 -3
  62. package/dist/primitives/layouts.js +3 -3
  63. package/dist/primitives/scenes.js +3 -3
  64. package/dist/primitives.js +5 -5
  65. package/dist/render-harness/cardFonts.js +2 -2
  66. package/dist/render-harness.js +7 -7
  67. package/package.json +14 -14
@@ -3,7 +3,7 @@ import {
3
3
  assertSceneShotParamsAdmitted,
4
4
  materializeComponentSource,
5
5
  renderComponentAlpha
6
- } from "./chunk-7XZW26U2.js";
6
+ } from "./chunk-AONWKKXK.js";
7
7
  import {
8
8
  componentArtifactId,
9
9
  componentBundleId,
@@ -2604,6 +2604,39 @@ var compositionCaptionsOneStyleExitMsMin = 0;
2604
2604
  var compositionCaptionsOneStyleEmphasisPlateRadiusMin = 0;
2605
2605
  var compositionCaptionsOneStyleMaxWidthPercentExclusiveMin = 0;
2606
2606
  var compositionCaptionsOneStyleMaxWidthPercentMax = 100;
2607
+ var compositionCaptionsOneLayoutsItemSegmentIndexMin = 0;
2608
+ var compositionCaptionsOneLayoutsItemSegmentIndexMax = 9007199254740991;
2609
+ var compositionCaptionsOneLayoutsItemWordStartIndexMin = 0;
2610
+ var compositionCaptionsOneLayoutsItemWordStartIndexMax = 9007199254740991;
2611
+ var compositionCaptionsOneLayoutsItemWordEndIndexExclusiveMin = 0;
2612
+ var compositionCaptionsOneLayoutsItemWordEndIndexMax = 9007199254740991;
2613
+ var compositionCaptionsOneLayoutsItemRegionXMin = 0;
2614
+ var compositionCaptionsOneLayoutsItemRegionXMax = 1;
2615
+ var compositionCaptionsOneLayoutsItemRegionYMin = 0;
2616
+ var compositionCaptionsOneLayoutsItemRegionYMax = 1;
2617
+ var compositionCaptionsOneLayoutsItemRegionWExclusiveMin = 0;
2618
+ var compositionCaptionsOneLayoutsItemRegionWMax = 1;
2619
+ var compositionCaptionsOneLayoutsItemRegionHExclusiveMin = 0;
2620
+ var compositionCaptionsOneLayoutsItemRegionHMax = 1;
2621
+ var compositionCaptionsOneLayoutsItemScaleMin = 0.25;
2622
+ var compositionCaptionsOneLayoutsItemScaleMax = 4;
2623
+ var compositionCaptionsOneLayoutsItemRotationMin = -45;
2624
+ var compositionCaptionsOneLayoutsItemRotationMax = 45;
2625
+ var compositionCaptionsOneLayoutsItemStyleFontSizeMax = 15;
2626
+ var compositionCaptionsOneLayoutsItemStyleFontWeightMin = 100;
2627
+ var compositionCaptionsOneLayoutsItemStyleFontWeightMax = 900;
2628
+ var compositionCaptionsOneLayoutsItemStyleEmphasisScaleExclusiveMin = 0;
2629
+ var compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMin = 100;
2630
+ var compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMax = 900;
2631
+ var compositionCaptionsOneLayoutsItemStyleEmphasisPlateRadiusMin = 0;
2632
+ var compositionCaptionsOneLayoutsItemStyleEntranceMsMin = 0;
2633
+ var compositionCaptionsOneLayoutsItemStyleEntranceStaggerMsMin = 0;
2634
+ var compositionCaptionsOneLayoutsItemStyleExitMsMin = 0;
2635
+ var compositionCaptionsOneLayoutsItemHoldThroughWordIndexMin = 0;
2636
+ var compositionCaptionsOneLayoutsItemHoldThroughWordIndexMax = 9007199254740991;
2637
+ var compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMin = 0;
2638
+ var compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMax = 9007199254740991;
2639
+ var compositionCaptionsOneLayoutsItemWordSignatureRegExp = new RegExp("^[a-f0-9]{64}$");
2607
2640
  var compositionCaptionsTwoSegmentsItemWordsItemStartMsMin = 0;
2608
2641
  var compositionCaptionsTwoSegmentsItemWordsItemEndMsMin = 0;
2609
2642
  var compositionCaptionsTwoStyleFontSizeMax = 15;
@@ -2626,6 +2659,39 @@ var compositionCaptionsTwoStyleExitMsMin = 0;
2626
2659
  var compositionCaptionsTwoStyleEmphasisPlateRadiusMin = 0;
2627
2660
  var compositionCaptionsTwoStyleMaxWidthPercentExclusiveMin = 0;
2628
2661
  var compositionCaptionsTwoStyleMaxWidthPercentMax = 100;
2662
+ var compositionCaptionsTwoLayoutsItemSegmentIndexMin = 0;
2663
+ var compositionCaptionsTwoLayoutsItemSegmentIndexMax = 9007199254740991;
2664
+ var compositionCaptionsTwoLayoutsItemWordStartIndexMin = 0;
2665
+ var compositionCaptionsTwoLayoutsItemWordStartIndexMax = 9007199254740991;
2666
+ var compositionCaptionsTwoLayoutsItemWordEndIndexExclusiveMin = 0;
2667
+ var compositionCaptionsTwoLayoutsItemWordEndIndexMax = 9007199254740991;
2668
+ var compositionCaptionsTwoLayoutsItemRegionXMin = 0;
2669
+ var compositionCaptionsTwoLayoutsItemRegionXMax = 1;
2670
+ var compositionCaptionsTwoLayoutsItemRegionYMin = 0;
2671
+ var compositionCaptionsTwoLayoutsItemRegionYMax = 1;
2672
+ var compositionCaptionsTwoLayoutsItemRegionWExclusiveMin = 0;
2673
+ var compositionCaptionsTwoLayoutsItemRegionWMax = 1;
2674
+ var compositionCaptionsTwoLayoutsItemRegionHExclusiveMin = 0;
2675
+ var compositionCaptionsTwoLayoutsItemRegionHMax = 1;
2676
+ var compositionCaptionsTwoLayoutsItemScaleMin = 0.25;
2677
+ var compositionCaptionsTwoLayoutsItemScaleMax = 4;
2678
+ var compositionCaptionsTwoLayoutsItemRotationMin = -45;
2679
+ var compositionCaptionsTwoLayoutsItemRotationMax = 45;
2680
+ var compositionCaptionsTwoLayoutsItemStyleFontSizeMax = 15;
2681
+ var compositionCaptionsTwoLayoutsItemStyleFontWeightMin = 100;
2682
+ var compositionCaptionsTwoLayoutsItemStyleFontWeightMax = 900;
2683
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisScaleExclusiveMin = 0;
2684
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMin = 100;
2685
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMax = 900;
2686
+ var compositionCaptionsTwoLayoutsItemStyleEmphasisPlateRadiusMin = 0;
2687
+ var compositionCaptionsTwoLayoutsItemStyleEntranceMsMin = 0;
2688
+ var compositionCaptionsTwoLayoutsItemStyleEntranceStaggerMsMin = 0;
2689
+ var compositionCaptionsTwoLayoutsItemStyleExitMsMin = 0;
2690
+ var compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMin = 0;
2691
+ var compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMax = 9007199254740991;
2692
+ var compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMin = 0;
2693
+ var compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMax = 9007199254740991;
2694
+ var compositionCaptionsTwoLayoutsItemWordSignatureRegExp = new RegExp("^[a-f0-9]{64}$");
2629
2695
  var Composition = zod58.strictObject({
2630
2696
  "v": zod58.literal(1),
2631
2697
  "format": zod58.strictObject({
@@ -2847,6 +2913,56 @@ var Composition = zod58.strictObject({
2847
2913
  "annotationColor": zod58.string().optional(),
2848
2914
  "maxWidthPercent": zod58.number().gt(compositionCaptionsOneStyleMaxWidthPercentExclusiveMin).max(compositionCaptionsOneStyleMaxWidthPercentMax).optional()
2849
2915
  }).optional(),
2916
+ "layouts": zod58.array(zod58.strictObject({
2917
+ "segmentIndex": zod58.int().min(compositionCaptionsOneLayoutsItemSegmentIndexMin).max(compositionCaptionsOneLayoutsItemSegmentIndexMax),
2918
+ "wordStartIndex": zod58.int().min(compositionCaptionsOneLayoutsItemWordStartIndexMin).max(compositionCaptionsOneLayoutsItemWordStartIndexMax),
2919
+ "wordEndIndex": zod58.int().gt(compositionCaptionsOneLayoutsItemWordEndIndexExclusiveMin).max(compositionCaptionsOneLayoutsItemWordEndIndexMax).describe("Exclusive word index in the saved caption segment."),
2920
+ "region": zod58.strictObject({
2921
+ "x": zod58.number().min(compositionCaptionsOneLayoutsItemRegionXMin).max(compositionCaptionsOneLayoutsItemRegionXMax),
2922
+ "y": zod58.number().min(compositionCaptionsOneLayoutsItemRegionYMin).max(compositionCaptionsOneLayoutsItemRegionYMax),
2923
+ "w": zod58.number().gt(compositionCaptionsOneLayoutsItemRegionWExclusiveMin).max(compositionCaptionsOneLayoutsItemRegionWMax),
2924
+ "h": zod58.number().gt(compositionCaptionsOneLayoutsItemRegionHExclusiveMin).max(compositionCaptionsOneLayoutsItemRegionHMax)
2925
+ }),
2926
+ "scale": zod58.number().min(compositionCaptionsOneLayoutsItemScaleMin).max(compositionCaptionsOneLayoutsItemScaleMax).optional(),
2927
+ "rotation": zod58.number().min(compositionCaptionsOneLayoutsItemRotationMin).max(compositionCaptionsOneLayoutsItemRotationMax).optional(),
2928
+ "style": zod58.strictObject({
2929
+ "fontFamily": zod58.string().min(1).optional(),
2930
+ "fontSize": zod58.number().min(1).max(compositionCaptionsOneLayoutsItemStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
2931
+ "fontWeight": zod58.int().min(compositionCaptionsOneLayoutsItemStyleFontWeightMin).max(compositionCaptionsOneLayoutsItemStyleFontWeightMax).optional(),
2932
+ "color": zod58.string().min(1).optional(),
2933
+ "highlightColor": zod58.string().min(1).optional(),
2934
+ "backgroundColor": zod58.string().optional(),
2935
+ "plate": zod58.enum(["glass", "solid", "none"]).optional(),
2936
+ "textTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
2937
+ "emphasisColor": zod58.string().optional(),
2938
+ "emphasisScale": zod58.number().gt(compositionCaptionsOneLayoutsItemStyleEmphasisScaleExclusiveMin).optional(),
2939
+ "emphasisFontFamily": zod58.string().optional(),
2940
+ "emphasisFontWeight": zod58.int().min(compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMin).max(compositionCaptionsOneLayoutsItemStyleEmphasisFontWeightMax).optional(),
2941
+ "emphasisTextTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
2942
+ "emphasisLetterSpacing": zod58.number().optional(),
2943
+ "emphasisFontStyle": zod58.enum(["normal", "italic"]).optional(),
2944
+ "emphasisPlate": zod58.boolean().optional(),
2945
+ "emphasisPlateColor": zod58.string().optional(),
2946
+ "emphasisPlateTextColor": zod58.string().optional(),
2947
+ "emphasisPlateAltColor": zod58.string().optional(),
2948
+ "emphasisPlateAltTextColor": zod58.string().optional(),
2949
+ "emphasisPlateRadius": zod58.number().min(compositionCaptionsOneLayoutsItemStyleEmphasisPlateRadiusMin).optional(),
2950
+ "emphasisPlatePadX": zod58.number().optional(),
2951
+ "emphasisPlatePadY": zod58.number().optional(),
2952
+ "annotationColor": zod58.string().optional(),
2953
+ "entrance": zod58.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
2954
+ "entranceMs": zod58.number().min(compositionCaptionsOneLayoutsItemStyleEntranceMsMin).optional(),
2955
+ "entranceStaggerMs": zod58.number().min(compositionCaptionsOneLayoutsItemStyleEntranceStaggerMsMin).optional(),
2956
+ "exitMs": zod58.number().min(compositionCaptionsOneLayoutsItemStyleExitMsMin).optional()
2957
+ }).optional(),
2958
+ "holdThroughWordIndex": zod58.int().min(compositionCaptionsOneLayoutsItemHoldThroughWordIndexMin).max(compositionCaptionsOneLayoutsItemHoldThroughWordIndexMax).optional().describe("Inclusive saved-word index in this segment. The layout stays visible until that word ends."),
2959
+ "wordMarks": zod58.array(zod58.strictObject({
2960
+ "wordIndex": zod58.int().min(compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMin).max(compositionCaptionsOneLayoutsItemWordMarksItemWordIndexMax),
2961
+ "emphasis": zod58.boolean().optional(),
2962
+ "annotate": zod58.union([zod58.enum(["circle", "underline"]), zod58.null()]).optional()
2963
+ })).optional(),
2964
+ "wordSignature": zod58.string().regex(compositionCaptionsOneLayoutsItemWordSignatureRegExp)
2965
+ })).optional(),
2850
2966
  "zPlane": zod58.enum(["front", "behind-subject"]).optional()
2851
2967
  }), zod58.strictObject({
2852
2968
  "source": zod58.literal("authored"),
@@ -2898,6 +3014,56 @@ var Composition = zod58.strictObject({
2898
3014
  "annotationColor": zod58.string().optional(),
2899
3015
  "maxWidthPercent": zod58.number().gt(compositionCaptionsTwoStyleMaxWidthPercentExclusiveMin).max(compositionCaptionsTwoStyleMaxWidthPercentMax).optional()
2900
3016
  }).optional(),
3017
+ "layouts": zod58.array(zod58.strictObject({
3018
+ "segmentIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemSegmentIndexMin).max(compositionCaptionsTwoLayoutsItemSegmentIndexMax),
3019
+ "wordStartIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemWordStartIndexMin).max(compositionCaptionsTwoLayoutsItemWordStartIndexMax),
3020
+ "wordEndIndex": zod58.int().gt(compositionCaptionsTwoLayoutsItemWordEndIndexExclusiveMin).max(compositionCaptionsTwoLayoutsItemWordEndIndexMax).describe("Exclusive word index in the saved caption segment."),
3021
+ "region": zod58.strictObject({
3022
+ "x": zod58.number().min(compositionCaptionsTwoLayoutsItemRegionXMin).max(compositionCaptionsTwoLayoutsItemRegionXMax),
3023
+ "y": zod58.number().min(compositionCaptionsTwoLayoutsItemRegionYMin).max(compositionCaptionsTwoLayoutsItemRegionYMax),
3024
+ "w": zod58.number().gt(compositionCaptionsTwoLayoutsItemRegionWExclusiveMin).max(compositionCaptionsTwoLayoutsItemRegionWMax),
3025
+ "h": zod58.number().gt(compositionCaptionsTwoLayoutsItemRegionHExclusiveMin).max(compositionCaptionsTwoLayoutsItemRegionHMax)
3026
+ }),
3027
+ "scale": zod58.number().min(compositionCaptionsTwoLayoutsItemScaleMin).max(compositionCaptionsTwoLayoutsItemScaleMax).optional(),
3028
+ "rotation": zod58.number().min(compositionCaptionsTwoLayoutsItemRotationMin).max(compositionCaptionsTwoLayoutsItemRotationMax).optional(),
3029
+ "style": zod58.strictObject({
3030
+ "fontFamily": zod58.string().min(1).optional(),
3031
+ "fontSize": zod58.number().min(1).max(compositionCaptionsTwoLayoutsItemStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
3032
+ "fontWeight": zod58.int().min(compositionCaptionsTwoLayoutsItemStyleFontWeightMin).max(compositionCaptionsTwoLayoutsItemStyleFontWeightMax).optional(),
3033
+ "color": zod58.string().min(1).optional(),
3034
+ "highlightColor": zod58.string().min(1).optional(),
3035
+ "backgroundColor": zod58.string().optional(),
3036
+ "plate": zod58.enum(["glass", "solid", "none"]).optional(),
3037
+ "textTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
3038
+ "emphasisColor": zod58.string().optional(),
3039
+ "emphasisScale": zod58.number().gt(compositionCaptionsTwoLayoutsItemStyleEmphasisScaleExclusiveMin).optional(),
3040
+ "emphasisFontFamily": zod58.string().optional(),
3041
+ "emphasisFontWeight": zod58.int().min(compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMin).max(compositionCaptionsTwoLayoutsItemStyleEmphasisFontWeightMax).optional(),
3042
+ "emphasisTextTransform": zod58.enum(["none", "uppercase", "capitalize"]).optional(),
3043
+ "emphasisLetterSpacing": zod58.number().optional(),
3044
+ "emphasisFontStyle": zod58.enum(["normal", "italic"]).optional(),
3045
+ "emphasisPlate": zod58.boolean().optional(),
3046
+ "emphasisPlateColor": zod58.string().optional(),
3047
+ "emphasisPlateTextColor": zod58.string().optional(),
3048
+ "emphasisPlateAltColor": zod58.string().optional(),
3049
+ "emphasisPlateAltTextColor": zod58.string().optional(),
3050
+ "emphasisPlateRadius": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleEmphasisPlateRadiusMin).optional(),
3051
+ "emphasisPlatePadX": zod58.number().optional(),
3052
+ "emphasisPlatePadY": zod58.number().optional(),
3053
+ "annotationColor": zod58.string().optional(),
3054
+ "entrance": zod58.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
3055
+ "entranceMs": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleEntranceMsMin).optional(),
3056
+ "entranceStaggerMs": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleEntranceStaggerMsMin).optional(),
3057
+ "exitMs": zod58.number().min(compositionCaptionsTwoLayoutsItemStyleExitMsMin).optional()
3058
+ }).optional(),
3059
+ "holdThroughWordIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMin).max(compositionCaptionsTwoLayoutsItemHoldThroughWordIndexMax).optional().describe("Inclusive saved-word index in this segment. The layout stays visible until that word ends."),
3060
+ "wordMarks": zod58.array(zod58.strictObject({
3061
+ "wordIndex": zod58.int().min(compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMin).max(compositionCaptionsTwoLayoutsItemWordMarksItemWordIndexMax),
3062
+ "emphasis": zod58.boolean().optional(),
3063
+ "annotate": zod58.union([zod58.enum(["circle", "underline"]), zod58.null()]).optional()
3064
+ })).optional(),
3065
+ "wordSignature": zod58.string().regex(compositionCaptionsTwoLayoutsItemWordSignatureRegExp)
3066
+ })).optional(),
2901
3067
  "zPlane": zod58.enum(["front", "behind-subject"]).optional()
2902
3068
  })]).optional(),
2903
3069
  "license": zod58.strictObject({
@@ -6121,32 +6287,64 @@ var compositionOpOnethreeStyleExitMsMin = 0;
6121
6287
  var compositionOpOnethreeStyleEmphasisPlateRadiusMin = 0;
6122
6288
  var compositionOpOnethreeStyleMaxWidthPercentExclusiveMin = 0;
6123
6289
  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;
6290
+ var compositionOpOnefourLayoutsItemSegmentIndexMin = 0;
6291
+ var compositionOpOnefourLayoutsItemSegmentIndexMax = 9007199254740991;
6292
+ var compositionOpOnefourLayoutsItemWordStartIndexMin = 0;
6293
+ var compositionOpOnefourLayoutsItemWordStartIndexMax = 9007199254740991;
6294
+ var compositionOpOnefourLayoutsItemWordEndIndexExclusiveMin = 0;
6295
+ var compositionOpOnefourLayoutsItemWordEndIndexMax = 9007199254740991;
6296
+ var compositionOpOnefourLayoutsItemRegionXMin = 0;
6297
+ var compositionOpOnefourLayoutsItemRegionXMax = 1;
6298
+ var compositionOpOnefourLayoutsItemRegionYMin = 0;
6299
+ var compositionOpOnefourLayoutsItemRegionYMax = 1;
6300
+ var compositionOpOnefourLayoutsItemRegionWExclusiveMin = 0;
6301
+ var compositionOpOnefourLayoutsItemRegionWMax = 1;
6302
+ var compositionOpOnefourLayoutsItemRegionHExclusiveMin = 0;
6303
+ var compositionOpOnefourLayoutsItemRegionHMax = 1;
6304
+ var compositionOpOnefourLayoutsItemScaleMin = 0.25;
6305
+ var compositionOpOnefourLayoutsItemScaleMax = 4;
6306
+ var compositionOpOnefourLayoutsItemRotationMin = -45;
6307
+ var compositionOpOnefourLayoutsItemRotationMax = 45;
6308
+ var compositionOpOnefourLayoutsItemStyleFontSizeMax = 15;
6309
+ var compositionOpOnefourLayoutsItemStyleFontWeightMin = 100;
6310
+ var compositionOpOnefourLayoutsItemStyleFontWeightMax = 900;
6311
+ var compositionOpOnefourLayoutsItemStyleEmphasisScaleExclusiveMin = 0;
6312
+ var compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMin = 100;
6313
+ var compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMax = 900;
6314
+ var compositionOpOnefourLayoutsItemStyleEmphasisPlateRadiusMin = 0;
6315
+ var compositionOpOnefourLayoutsItemStyleEntranceMsMin = 0;
6316
+ var compositionOpOnefourLayoutsItemStyleEntranceStaggerMsMin = 0;
6317
+ var compositionOpOnefourLayoutsItemStyleExitMsMin = 0;
6318
+ var compositionOpOnefourLayoutsItemHoldThroughWordIndexMin = 0;
6319
+ var compositionOpOnefourLayoutsItemHoldThroughWordIndexMax = 9007199254740991;
6320
+ var compositionOpOnefourLayoutsItemWordMarksItemWordIndexMin = 0;
6321
+ var compositionOpOnefourLayoutsItemWordMarksItemWordIndexMax = 9007199254740991;
6322
+ var compositionOpOnesixSegmentsItemWordsItemStartMsMin = 0;
6323
+ var compositionOpOnesixSegmentsItemWordsItemEndMsMin = 0;
6324
+ var compositionOpOnesixStyleFontSizeMax = 15;
6325
+ var compositionOpOnesixStyleFontWeightMin = 100;
6326
+ var compositionOpOnesixStyleFontWeightMax = 900;
6327
+ var compositionOpOnesixStyleRegionXMin = 0;
6328
+ var compositionOpOnesixStyleRegionXMax = 1;
6329
+ var compositionOpOnesixStyleRegionYMin = 0;
6330
+ var compositionOpOnesixStyleRegionYMax = 1;
6331
+ var compositionOpOnesixStyleRegionWExclusiveMin = 0;
6332
+ var compositionOpOnesixStyleRegionWMax = 1;
6333
+ var compositionOpOnesixStyleRegionHExclusiveMin = 0;
6334
+ var compositionOpOnesixStyleRegionHMax = 1;
6335
+ var compositionOpOnesixStyleEmphasisScaleExclusiveMin = 0;
6336
+ var compositionOpOnesixStyleEmphasisFontWeightMin = 100;
6337
+ var compositionOpOnesixStyleEmphasisFontWeightMax = 900;
6338
+ var compositionOpOnesixStyleEntranceMsMin = 0;
6339
+ var compositionOpOnesixStyleEntranceStaggerMsMin = 0;
6340
+ var compositionOpOnesixStyleExitMsMin = 0;
6341
+ var compositionOpOnesixStyleEmphasisPlateRadiusMin = 0;
6342
+ var compositionOpOnesixStyleMaxWidthPercentExclusiveMin = 0;
6343
+ var compositionOpOnesixStyleMaxWidthPercentMax = 100;
6344
+ var compositionOpOnesevenWindowStartSecMin = 0;
6345
+ var compositionOpOnesevenWindowEndSecExclusiveMin = 0;
6346
+ var compositionOpTwozeroMaxMarkersExclusiveMin = 0;
6347
+ var compositionOpTwozeroMaxMarkersMax = 2e3;
6150
6348
  var CompositionOp = zod67.union([zod67.strictObject({
6151
6349
  "type": zod67.literal("scene.add"),
6152
6350
  "clipId": zod67.string(),
@@ -6710,6 +6908,57 @@ var CompositionOp = zod67.union([zod67.strictObject({
6710
6908
  "maxWidthPercent": zod67.number().gt(compositionOpOnethreeStyleMaxWidthPercentExclusiveMin).max(compositionOpOnethreeStyleMaxWidthPercentMax).optional()
6711
6909
  })
6712
6910
  }).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({
6911
+ "type": zod67.literal("setCaptionLayouts"),
6912
+ "layouts": zod67.array(zod67.strictObject({
6913
+ "segmentIndex": zod67.int().min(compositionOpOnefourLayoutsItemSegmentIndexMin).max(compositionOpOnefourLayoutsItemSegmentIndexMax),
6914
+ "wordStartIndex": zod67.int().min(compositionOpOnefourLayoutsItemWordStartIndexMin).max(compositionOpOnefourLayoutsItemWordStartIndexMax),
6915
+ "wordEndIndex": zod67.int().gt(compositionOpOnefourLayoutsItemWordEndIndexExclusiveMin).max(compositionOpOnefourLayoutsItemWordEndIndexMax).describe("Exclusive word index in the saved caption segment."),
6916
+ "region": zod67.strictObject({
6917
+ "x": zod67.number().min(compositionOpOnefourLayoutsItemRegionXMin).max(compositionOpOnefourLayoutsItemRegionXMax),
6918
+ "y": zod67.number().min(compositionOpOnefourLayoutsItemRegionYMin).max(compositionOpOnefourLayoutsItemRegionYMax),
6919
+ "w": zod67.number().gt(compositionOpOnefourLayoutsItemRegionWExclusiveMin).max(compositionOpOnefourLayoutsItemRegionWMax),
6920
+ "h": zod67.number().gt(compositionOpOnefourLayoutsItemRegionHExclusiveMin).max(compositionOpOnefourLayoutsItemRegionHMax)
6921
+ }),
6922
+ "scale": zod67.number().min(compositionOpOnefourLayoutsItemScaleMin).max(compositionOpOnefourLayoutsItemScaleMax).optional(),
6923
+ "rotation": zod67.number().min(compositionOpOnefourLayoutsItemRotationMin).max(compositionOpOnefourLayoutsItemRotationMax).optional(),
6924
+ "style": zod67.strictObject({
6925
+ "fontFamily": zod67.string().min(1).optional(),
6926
+ "fontSize": zod67.number().min(1).max(compositionOpOnefourLayoutsItemStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
6927
+ "fontWeight": zod67.int().min(compositionOpOnefourLayoutsItemStyleFontWeightMin).max(compositionOpOnefourLayoutsItemStyleFontWeightMax).optional(),
6928
+ "color": zod67.string().min(1).optional(),
6929
+ "highlightColor": zod67.string().min(1).optional(),
6930
+ "backgroundColor": zod67.string().optional(),
6931
+ "plate": zod67.enum(["glass", "solid", "none"]).optional(),
6932
+ "textTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
6933
+ "emphasisColor": zod67.string().optional(),
6934
+ "emphasisScale": zod67.number().gt(compositionOpOnefourLayoutsItemStyleEmphasisScaleExclusiveMin).optional(),
6935
+ "emphasisFontFamily": zod67.string().optional(),
6936
+ "emphasisFontWeight": zod67.int().min(compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMin).max(compositionOpOnefourLayoutsItemStyleEmphasisFontWeightMax).optional(),
6937
+ "emphasisTextTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
6938
+ "emphasisLetterSpacing": zod67.number().optional(),
6939
+ "emphasisFontStyle": zod67.enum(["normal", "italic"]).optional(),
6940
+ "emphasisPlate": zod67.boolean().optional(),
6941
+ "emphasisPlateColor": zod67.string().optional(),
6942
+ "emphasisPlateTextColor": zod67.string().optional(),
6943
+ "emphasisPlateAltColor": zod67.string().optional(),
6944
+ "emphasisPlateAltTextColor": zod67.string().optional(),
6945
+ "emphasisPlateRadius": zod67.number().min(compositionOpOnefourLayoutsItemStyleEmphasisPlateRadiusMin).optional(),
6946
+ "emphasisPlatePadX": zod67.number().optional(),
6947
+ "emphasisPlatePadY": zod67.number().optional(),
6948
+ "annotationColor": zod67.string().optional(),
6949
+ "entrance": zod67.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
6950
+ "entranceMs": zod67.number().min(compositionOpOnefourLayoutsItemStyleEntranceMsMin).optional(),
6951
+ "entranceStaggerMs": zod67.number().min(compositionOpOnefourLayoutsItemStyleEntranceStaggerMsMin).optional(),
6952
+ "exitMs": zod67.number().min(compositionOpOnefourLayoutsItemStyleExitMsMin).optional()
6953
+ }).optional(),
6954
+ "holdThroughWordIndex": zod67.int().min(compositionOpOnefourLayoutsItemHoldThroughWordIndexMin).max(compositionOpOnefourLayoutsItemHoldThroughWordIndexMax).optional().describe("Inclusive saved-word index in this segment. The layout stays visible until that word ends."),
6955
+ "wordMarks": zod67.array(zod67.strictObject({
6956
+ "wordIndex": zod67.int().min(compositionOpOnefourLayoutsItemWordMarksItemWordIndexMin).max(compositionOpOnefourLayoutsItemWordMarksItemWordIndexMax),
6957
+ "emphasis": zod67.boolean().optional(),
6958
+ "annotate": zod67.union([zod67.enum(["circle", "underline"]), zod67.null()]).optional()
6959
+ })).optional()
6960
+ }))
6961
+ }).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
6962
  "type": zod67.literal("setCaptionDepth"),
6714
6963
  "zPlane": zod67.enum(["front", "behind-subject"])
6715
6964
  }).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 +6966,57 @@ var CompositionOp = zod67.union([zod67.strictObject({
6717
6966
  "segments": zod67.array(zod67.strictObject({
6718
6967
  "words": zod67.array(zod67.strictObject({
6719
6968
  "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."),
6969
+ "startMs": zod67.number().min(compositionOpOnesixSegmentsItemWordsItemStartMsMin).describe("Word start on the composition timeline, in milliseconds."),
6970
+ "endMs": zod67.number().min(compositionOpOnesixSegmentsItemWordsItemEndMsMin).describe("Word end on the composition timeline, in milliseconds."),
6722
6971
  "emphasis": zod67.boolean().optional(),
6723
6972
  "annotate": zod67.enum(["circle", "underline"]).optional()
6724
6973
  }))
6725
6974
  })),
6726
6975
  "style": zod67.strictObject({
6727
6976
  "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(),
6977
+ "fontSize": zod67.number().min(1).max(compositionOpOnesixStyleFontSizeMax).optional().describe("Font size as % of composition height (1-15, default 5). NOT px."),
6978
+ "fontWeight": zod67.int().min(compositionOpOnesixStyleFontWeightMin).max(compositionOpOnesixStyleFontWeightMax).optional(),
6730
6979
  "color": zod67.string().min(1).optional(),
6731
6980
  "highlightColor": zod67.string().min(1).optional(),
6732
6981
  "backgroundColor": zod67.string().optional(),
6733
6982
  "plate": zod67.enum(["glass", "solid", "none"]).optional(),
6734
6983
  "position": zod67.enum(["top", "center", "bottom"]).optional(),
6735
6984
  "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)
6985
+ "x": zod67.number().min(compositionOpOnesixStyleRegionXMin).max(compositionOpOnesixStyleRegionXMax),
6986
+ "y": zod67.number().min(compositionOpOnesixStyleRegionYMin).max(compositionOpOnesixStyleRegionYMax),
6987
+ "w": zod67.number().gt(compositionOpOnesixStyleRegionWExclusiveMin).max(compositionOpOnesixStyleRegionWMax),
6988
+ "h": zod67.number().gt(compositionOpOnesixStyleRegionHExclusiveMin).max(compositionOpOnesixStyleRegionHMax)
6740
6989
  }).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
6990
  "textTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
6742
6991
  "emphasisColor": zod67.string().optional(),
6743
6992
  "emphasisGradient": zod67.string().optional(),
6744
- "emphasisScale": zod67.number().gt(compositionOpOnefiveStyleEmphasisScaleExclusiveMin).optional(),
6993
+ "emphasisScale": zod67.number().gt(compositionOpOnesixStyleEmphasisScaleExclusiveMin).optional(),
6745
6994
  "emphasisFontFamily": zod67.string().optional(),
6746
- "emphasisFontWeight": zod67.int().min(compositionOpOnefiveStyleEmphasisFontWeightMin).max(compositionOpOnefiveStyleEmphasisFontWeightMax).optional(),
6995
+ "emphasisFontWeight": zod67.int().min(compositionOpOnesixStyleEmphasisFontWeightMin).max(compositionOpOnesixStyleEmphasisFontWeightMax).optional(),
6747
6996
  "emphasisTextTransform": zod67.enum(["none", "uppercase", "capitalize"]).optional(),
6748
6997
  "emphasisLetterSpacing": zod67.number().optional(),
6749
6998
  "emphasisFontStyle": zod67.enum(["normal", "italic"]).optional(),
6750
6999
  "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(),
7000
+ "entranceMs": zod67.number().min(compositionOpOnesixStyleEntranceMsMin).optional(),
7001
+ "entranceStaggerMs": zod67.number().min(compositionOpOnesixStyleEntranceStaggerMsMin).optional(),
7002
+ "exitMs": zod67.number().min(compositionOpOnesixStyleExitMsMin).optional(),
6754
7003
  "emphasisPlate": zod67.boolean().optional(),
6755
7004
  "emphasisPlateColor": zod67.string().optional(),
6756
7005
  "emphasisPlateTextColor": zod67.string().optional(),
6757
7006
  "emphasisPlateAltColor": zod67.string().optional(),
6758
7007
  "emphasisPlateAltTextColor": zod67.string().optional(),
6759
- "emphasisPlateRadius": zod67.number().min(compositionOpOnefiveStyleEmphasisPlateRadiusMin).optional(),
7008
+ "emphasisPlateRadius": zod67.number().min(compositionOpOnesixStyleEmphasisPlateRadiusMin).optional(),
6760
7009
  "emphasisPlatePadX": zod67.number().optional(),
6761
7010
  "emphasisPlatePadY": zod67.number().optional(),
6762
7011
  "annotationColor": zod67.string().optional(),
6763
- "maxWidthPercent": zod67.number().gt(compositionOpOnefiveStyleMaxWidthPercentExclusiveMin).max(compositionOpOnefiveStyleMaxWidthPercentMax).optional()
7012
+ "maxWidthPercent": zod67.number().gt(compositionOpOnesixStyleMaxWidthPercentExclusiveMin).max(compositionOpOnesixStyleMaxWidthPercentMax).optional()
6764
7013
  }).optional()
6765
7014
  }).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
7015
  "type": zod67.literal("captions.fromTranscript"),
6767
7016
  "mediaId": zod67.string().min(1),
6768
7017
  "window": zod67.strictObject({
6769
- "startSec": zod67.number().min(compositionOpOnesixWindowStartSecMin),
6770
- "endSec": zod67.number().gt(compositionOpOnesixWindowEndSecExclusiveMin)
7018
+ "startSec": zod67.number().min(compositionOpOnesevenWindowStartSecMin),
7019
+ "endSec": zod67.number().gt(compositionOpOnesevenWindowEndSecExclusiveMin)
6771
7020
  }).optional()
6772
7021
  }).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
7022
  "type": zod67.literal("captions.fromComposition"),
@@ -6785,7 +7034,7 @@ var CompositionOp = zod67.union([zod67.strictObject({
6785
7034
  "type": zod67.literal("materializeGrid"),
6786
7035
  "clipId": zod67.string(),
6787
7036
  "grid": zod67.enum(["beat", "word", "shot"]),
6788
- "maxMarkers": zod67.int().gt(compositionOpOnenineMaxMarkersExclusiveMin).max(compositionOpOnenineMaxMarkersMax).optional()
7037
+ "maxMarkers": zod67.int().gt(compositionOpTwozeroMaxMarkersExclusiveMin).max(compositionOpTwozeroMaxMarkersMax).optional()
6789
7038
  }).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
7039
  "type": zod67.literal("setFormat"),
6791
7040
  "format": zod67.strictObject({
@@ -7918,7 +8167,7 @@ var RenderFontsResponse = zod157.strictObject({
7918
8167
  "min": zod157.number(),
7919
8168
  "max": zod157.number()
7920
8169
  })).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."),
8170
+ "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
8171
  "captionDefaults": zod157.strictObject({
7923
8172
  "base": zod157.number(),
7924
8173
  "emphasis": zod157.number()
@@ -9382,7 +9631,7 @@ var GENERATED_OPERATIONS = [
9382
9631
  { 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
9632
  { 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
9633
  { 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 } },
9634
+ { 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
9635
  { 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
9636
  { 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
9637
  { 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 +9654,7 @@ var GENERATED_OPERATIONS = [
9405
9654
  { 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
9655
  { 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
9656
  { 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 } },
9657
+ { 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
9658
  { 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
9659
  { 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
9660
  { 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 } },
@@ -7,13 +7,13 @@ import {
7
7
  } from "./chunk-7AZLFN26.js";
8
8
  import {
9
9
  selectAllOverlays
10
- } from "./chunk-5JCLZPMV.js";
10
+ } from "./chunk-TPKPU4PE.js";
11
11
  import {
12
12
  ComposePlan
13
- } from "./chunk-MBSQKRDF.js";
13
+ } from "./chunk-CJMUTCJW.js";
14
14
  import {
15
15
  OverlayClipSource
16
- } from "./chunk-CV3QQUMK.js";
16
+ } from "./chunk-UFNIB3JL.js";
17
17
 
18
18
  // ../authoring/src/tools/toolSets.ts
19
19
  var COMPOSE_PLANNER_TOOLS = [
@@ -63,7 +63,7 @@ var COMPOSE_ROLE_TOOLS = Object.freeze({
63
63
  schema: z.object({}),
64
64
  metadata: { label: "Get Context" },
65
65
  handler: async (_args, capabilities) => {
66
- const { buildDirectorContext } = await import("./context-2MBCDTCZ.js");
66
+ const { buildDirectorContext } = await import("./context-UAS5WJRB.js");
67
67
  return buildDirectorContext(capabilities);
68
68
  }
69
69
  },
@@ -2,7 +2,7 @@ import {
2
2
  COMPOSE_PLANNER_TOOLS,
3
3
  COMPOSE_ROLE_TOOLS,
4
4
  dispatchComposeRoleTool
5
- } from "./chunk-KMDZDH5E.js";
5
+ } from "./chunk-4DM63RTI.js";
6
6
 
7
7
  // ../authoring/src/agent/buildTools.ts
8
8
  import { tool } from "ai";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  bodySchemaFor,
3
3
  opById
4
- } from "./chunk-2M65KQNG.js";
4
+ } from "./chunk-46DGDPXR.js";
5
5
 
6
6
  // ../mcp/src/generated/sceneContract.ts
7
7
  function deepFreeze(value) {