@cueframe/kernel 0.1.0 → 0.1.1
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.
- package/LICENSE +661 -0
- package/dist/_members/composition/ops/compositionOps.d.ts +1 -0
- package/dist/_members/composition/projection/behind-readiness.d.ts +127 -0
- package/dist/_members/composition/projection/index.d.ts +2 -0
- package/dist/_members/composition/projection/reframe-readiness.d.ts +156 -0
- package/dist/_members/composition/validators/composition.d.ts +42 -25
- package/dist/_members/composition/validators/render.d.ts +32 -0
- package/dist/_members/core/render/compositionRender.d.ts +17 -1
- package/dist/_members/core/render/types.d.ts +31 -0
- package/dist/authoring/build-tools.js +6 -6
- package/dist/authoring/context.js +4 -4
- package/dist/authoring/tools.js +5 -5
- package/dist/authoring.js +11 -9
- package/dist/{chunk-ZB3C3HM7.js → chunk-7FO3ZJ43.js} +3 -0
- package/dist/{chunk-ODL7GQJG.js → chunk-AP6ZIVAV.js} +2 -2
- package/dist/{chunk-IBYQG46O.js → chunk-AQBREB5O.js} +1 -1
- package/dist/{chunk-YIOY2XEO.js → chunk-DK2ODBNT.js} +15 -5
- package/dist/{chunk-JRQVPFLF.js → chunk-HY3RIEZW.js} +1 -1
- package/dist/{chunk-GEA7E2FL.js → chunk-JJ6XD7NG.js} +151 -1
- package/dist/{chunk-COYMZ76S.js → chunk-MBCXCJOE.js} +1 -1
- package/dist/{chunk-37NJ27UU.js → chunk-OCFDUCF4.js} +3 -0
- package/dist/{chunk-VOO5FQSS.js → chunk-PDYO3DOJ.js} +5 -5
- package/dist/{chunk-MXFAADCQ.js → chunk-PODIYN2K.js} +9 -2
- package/dist/{chunk-NFEGPWGS.js → chunk-TOJEXFXL.js} +1 -1
- package/dist/{chunk-LM4WDUQJ.js → chunk-UHGSZZDI.js} +1 -1
- package/dist/{chunk-XWKZB5U5.js → chunk-ZWMV6DD2.js} +24 -1
- package/dist/compose/renderer.js +3 -3
- package/dist/compose.js +6 -6
- package/dist/composition/graphics-plan.js +1 -1
- package/dist/composition/ops.js +3 -3
- package/dist/composition/primitive-catalog.js +1 -1
- package/dist/composition/projection.js +19 -3
- package/dist/composition/validators.js +6 -4
- package/dist/composition-ops.js +8 -6
- package/dist/composition.js +24 -6
- package/dist/{context-OKX3HHFS.js → context-YWUZDG5X.js} +4 -4
- package/dist/core/render.js +3 -3
- package/dist/core/select.js +2 -2
- package/dist/core.js +3 -3
- package/dist/errors.js +1 -1
- package/dist/mcp/adapter.js +1 -0
- package/dist/media-model/testing.js +1071 -718
- package/dist/nle-export/server.js +328 -130
- package/dist/nle-export.js +7 -6
- package/package.json +13 -14
- package/dist/_members/account-model/index.js +0 -4
- package/dist/_members/account-model/testing/conversationStoreContract.js +0 -168
- package/dist/_members/account-model/testing/index.js +0 -7
- package/dist/_members/account-model/testing/restorePointStoreContract.js +0 -69
- package/dist/_members/account-model/types/index.js +0 -1
- package/dist/_members/account-model/validators/contextFile.js +0 -18
- package/dist/_members/account-model/validators/conversation.js +0 -95
- package/dist/_members/account-model/validators/dashboardInsight.js +0 -16
- package/dist/_members/account-model/validators/index.js +0 -7
- package/dist/_members/account-model/validators/sessionToken.js +0 -49
- package/dist/_members/account-model/validators/uploadToken.js +0 -16
- package/dist/_members/account-model/validators/userSettings.js +0 -12
- package/dist/_members/account-model/validators/workingComposition.js +0 -20
- package/dist/_members/brand-derivation/constants.js +0 -20
- package/dist/_members/brand-derivation/contrastSafe.js +0 -114
- package/dist/_members/brand-derivation/index.js +0 -1
- package/dist/_members/cloud-import/chunk-XKO6ZSWI.js +0 -162
- package/dist/_members/cloud-import/chunk-XKO6ZSWI.js.map +0 -1
- package/dist/_members/cloud-import/index.js +0 -241
- package/dist/_members/cloud-import/index.js.map +0 -1
- package/dist/_members/cloud-import/multipartUpload.js +0 -7
- package/dist/_members/cloud-import/multipartUpload.js.map +0 -1
- package/dist/_members/composition/audio/audioMix.js +0 -61
- package/dist/_members/composition/audio/index.js +0 -5
- package/dist/_members/composition/audio/mixStaging.js +0 -195
- package/dist/_members/composition/audio/musicPack.generated.js +0 -136
- package/dist/_members/composition/audio/musicPack.js +0 -36
- package/dist/_members/composition/audio/pack.generated.js +0 -603
- package/dist/_members/composition/audio/pack.js +0 -48
- package/dist/_members/composition/audio/palette.js +0 -134
- package/dist/_members/composition/autozoom/index.js +0 -83
- package/dist/_members/composition/brand-kit.js +0 -45
- package/dist/_members/composition/brief/contract.js +0 -209
- package/dist/_members/composition/color-grade.js +0 -80
- package/dist/_members/composition/depth.js +0 -8
- package/dist/_members/composition/fixtures/index.js +0 -143
- package/dist/_members/composition/fixtures/vaayaErrored.d.ts +0 -25
- package/dist/_members/composition/fixtures/vaayaErrored.js +0 -203
- package/dist/_members/composition/fonts.js +0 -162
- package/dist/_members/composition/graphics-plan/compile.js +0 -221
- package/dist/_members/composition/graphics-plan/index.js +0 -10
- package/dist/_members/composition/graphics-plan/instantiateMotif.js +0 -44
- package/dist/_members/composition/graphics-plan/motion.js +0 -66
- package/dist/_members/composition/graphics-plan/schemas.js +0 -261
- package/dist/_members/composition/graphics-plan/solve.js +0 -145
- package/dist/_members/composition/index.js +0 -5
- package/dist/_members/composition/invariants/clipPlacement.js +0 -69
- package/dist/_members/composition/invariants/composition.js +0 -28
- package/dist/_members/composition/invariants/errors.js +0 -10
- package/dist/_members/composition/invariants/etag.js +0 -38
- package/dist/_members/composition/invariants/ids.js +0 -33
- package/dist/_members/composition/invariants/index.js +0 -9
- package/dist/_members/composition/invariants/keyframes.js +0 -45
- package/dist/_members/composition/invariants/markers.js +0 -29
- package/dist/_members/composition/invariants/time.js +0 -20
- package/dist/_members/composition/invariants/tracks.js +0 -304
- package/dist/_members/composition/ops/compositionOps.js +0 -1056
- package/dist/_members/composition/ops/headlessStore.js +0 -94
- package/dist/_members/composition/ops/index.js +0 -4
- package/dist/_members/composition/ops/selectors.js +0 -118
- package/dist/_members/composition/ops/timeline-word.js +0 -1
- package/dist/_members/composition/ops/transcript.js +0 -77
- package/dist/_members/composition/ops/types.js +0 -16
- package/dist/_members/composition/primitive-catalog/catalogQuery.js +0 -150
- package/dist/_members/composition/primitive-catalog/disabled.js +0 -32
- package/dist/_members/composition/primitive-catalog/generated/meta.js +0 -15161
- package/dist/_members/composition/primitive-catalog/index.js +0 -46
- package/dist/_members/composition/primitive-catalog/paramValidation.js +0 -231
- package/dist/_members/composition/primitive-catalog/projection.js +0 -164
- package/dist/_members/composition/primitive-catalog/types.js +0 -14
- package/dist/_members/composition/projection/behind-placement.js +0 -62
- package/dist/_members/composition/projection/brandKit.js +0 -482
- package/dist/_members/composition/projection/cardTokens.js +0 -209
- package/dist/_members/composition/projection/composition-floor.js +0 -582
- package/dist/_members/composition/projection/cropProjection.js +0 -257
- package/dist/_members/composition/projection/index.js +0 -7
- package/dist/_members/composition/projection/occlusion-budget.js +0 -104
- package/dist/_members/composition/projection/safe-zones.js +0 -99
- package/dist/_members/composition/reframe/aspectLoss.js +0 -115
- package/dist/_members/composition/reframe/coverage.js +0 -62
- package/dist/_members/composition/reframe/derive.js +0 -73
- package/dist/_members/composition/reframe/index.js +0 -109
- package/dist/_members/composition/reframe/kenBurns.js +0 -64
- package/dist/_members/composition/reframe/shotScale.js +0 -176
- package/dist/_members/composition/reframe/trajectory.js +0 -124
- package/dist/_members/composition/timeline/compound.js +0 -134
- package/dist/_members/composition/timeline/index.js +0 -9
- package/dist/_members/composition/timeline/intent.js +0 -228
- package/dist/_members/composition/timeline/keyframes.js +0 -121
- package/dist/_members/composition/timeline/link.js +0 -59
- package/dist/_members/composition/timeline/occupancy.js +0 -36
- package/dist/_members/composition/timeline/placement.js +0 -74
- package/dist/_members/composition/timeline/plan.js +0 -31
- package/dist/_members/composition/timeline/resolve.js +0 -170
- package/dist/_members/composition/timeline/trims.js +0 -278
- package/dist/_members/composition/types/index.js +0 -1
- package/dist/_members/composition/validators/brandKit.js +0 -295
- package/dist/_members/composition/validators/composePlan.js +0 -113
- package/dist/_members/composition/validators/composition.js +0 -703
- package/dist/_members/composition/validators/font.js +0 -34
- package/dist/_members/composition/validators/graphicKinds.js +0 -30
- package/dist/_members/composition/validators/index.js +0 -9
- package/dist/_members/composition/validators/project.js +0 -29
- package/dist/_members/composition/validators/registry.js +0 -41
- package/dist/_members/composition/validators/render.js +0 -139
- package/dist/_members/composition/validators/session.js +0 -37
- package/dist/_members/composition/validators/webhook.js +0 -72
- package/dist/_members/composition-ops/alphaLayers.js +0 -141
- package/dist/_members/composition-ops/index.js +0 -637
- package/dist/_members/composition-ops/materializeGrid.js +0 -99
- package/dist/_members/composition-ops/opRecorder.js +0 -196
- package/dist/_members/composition-ops/recordingStore.js +0 -14
- package/dist/_members/composition-ops/replaceRegion.js +0 -102
- package/dist/_members/composition-ops/testFixtures.js +0 -19
- package/dist/_members/core/index.js +0 -5
- package/dist/_members/core/render/bookends.js +0 -53
- package/dist/_members/core/render/captions.js +0 -127
- package/dist/_members/core/render/compositionRender.js +0 -1249
- package/dist/_members/core/render/deriveTrajectory.js +0 -889
- package/dist/_members/core/render/emphasis.js +0 -16
- package/dist/_members/core/render/eval/cropBox.js +0 -139
- package/dist/_members/core/render/eval/inclusion.js +0 -96
- package/dist/_members/core/render/eval/index.js +0 -146
- package/dist/_members/core/render/eval/metrics.js +0 -94
- package/dist/_members/core/render/exportSettings.js +0 -65
- package/dist/_members/core/render/index.js +0 -20
- package/dist/_members/core/render/mapFaceToPerson.js +0 -73
- package/dist/_members/core/render/types.js +0 -8
- package/dist/_members/core/render/vcam/cameraPath.js +0 -248
- package/dist/_members/core/render/vcam/constants.js +0 -115
- package/dist/_members/core/render/vcam/errorCodes.js +0 -39
- package/dist/_members/core/render/vcam/framing.js +0 -136
- package/dist/_members/core/render/vcam/requiredRegion.js +0 -137
- package/dist/_members/core/render/vcam/shots.js +0 -53
- package/dist/_members/core/render/vcam/subjectSet.js +0 -388
- package/dist/_members/core/select/errorCodes.js +0 -38
- package/dist/_members/core/select/index.js +0 -26
- package/dist/_members/core/select/model.js +0 -18
- package/dist/_members/core/select/select.js +0 -244
- package/dist/_members/core/select/stabilize.js +0 -242
- package/dist/_members/core/types.js +0 -7
- package/dist/_members/errors/index.js +0 -1
- package/dist/_members/errors/registry.js +0 -560
- package/dist/_members/foundation/codes/index.js +0 -31
- package/dist/_members/foundation/index.js +0 -2
- package/dist/_members/foundation/primitives/index.js +0 -5
- package/dist/_members/mcp/adapter.js +0 -771
- package/dist/_members/mcp/burnedNames.js +0 -73
- package/dist/_members/mcp/core.js +0 -390
- package/dist/_members/mcp/curation.js +0 -792
- package/dist/_members/mcp/executor.js +0 -142
- package/dist/_members/mcp/format.js +0 -9
- package/dist/_members/mcp/generated/catalogPreviews.js +0 -95
- package/dist/_members/mcp/generated/harness.js +0 -81
- package/dist/_members/mcp/generated/operations.js +0 -131
- package/dist/_members/mcp/index.js +0 -50
- package/dist/_members/mcp/internalLoopTools.js +0 -109
- package/dist/_members/mcp/prompts.js +0 -45
- package/dist/_members/mcp/resources.js +0 -166
- package/dist/_members/mcp/server.js +0 -340
- package/dist/_members/mcp/wait.js +0 -378
- package/dist/_members/mcp/x402Meta.js +0 -66
- package/dist/_members/media-model/api.js +0 -175
- package/dist/_members/media-model/index.js +0 -1
- package/dist/_members/media-model/media-kind.js +0 -116
- package/dist/_members/media-model/testing/index.js +0 -1
- package/dist/_members/media-model/testing/mediaStoreContract.js +0 -82
- package/dist/_members/media-model/transcriptSearch.js +0 -70
- package/dist/_members/media-model/transcriptSearchCases.json +0 -79
- package/dist/_members/nle-export/compact-timeline.js +0 -73
- package/dist/_members/nle-export/compact-timeline.js.map +0 -1
- package/dist/_members/nle-export/composition-to-input.js +0 -147
- package/dist/_members/nle-export/composition-to-input.js.map +0 -1
- package/dist/_members/nle-export/fcpxml.js +0 -159
- package/dist/_members/nle-export/fcpxml.js.map +0 -1
- package/dist/_members/nle-export/index.js +0 -12
- package/dist/_members/nle-export/index.js.map +0 -1
- package/dist/_members/nle-export/premiere.js +0 -161
- package/dist/_members/nle-export/premiere.js.map +0 -1
- package/dist/_members/nle-export/server/index.js +0 -2
- package/dist/_members/nle-export/server/index.js.map +0 -1
- package/dist/_members/nle-export/server/pack-zip.js +0 -38
- package/dist/_members/nle-export/server/pack-zip.js.map +0 -1
- package/dist/_members/nle-export/srt.js +0 -50
- package/dist/_members/nle-export/srt.js.map +0 -1
- package/dist/_members/nle-export/types.js +0 -9
- package/dist/_members/nle-export/types.js.map +0 -1
- package/dist/_members/nle-export/xml/index.js +0 -11
- package/dist/_members/nle-export/xml/index.js.map +0 -1
- package/dist/_members/nle-export/xml-utils.js +0 -48
- package/dist/_members/nle-export/xml-utils.js.map +0 -1
- package/dist/_members/perception/activeSpeaker.js +0 -103
- package/dist/_members/perception/audioQuality.js +0 -76
- package/dist/_members/perception/energyBeat.js +0 -99
- package/dist/_members/perception/identityMatch.js +0 -91
- package/dist/_members/perception/index.js +0 -48
- package/dist/_members/perception/visualQuality.js +0 -95
- package/dist/_members/plane/conformance.js +0 -90
- package/dist/_members/plane/contract.js +0 -49
- package/dist/_members/plane/index.js +0 -16
- package/dist/_members/primitives/backgrounds/index.js +0 -32
- package/dist/_members/primitives/backgrounds/index.js.map +0 -1
- package/dist/_members/primitives/captions/index.js +0 -398
- package/dist/_members/primitives/captions/index.js.map +0 -1
- package/dist/_members/primitives/chunk-2LVE4UIT.js +0 -139
- package/dist/_members/primitives/chunk-2LVE4UIT.js.map +0 -1
- package/dist/_members/primitives/chunk-3IQUH6KK.js +0 -20
- package/dist/_members/primitives/chunk-3IQUH6KK.js.map +0 -1
- package/dist/_members/primitives/chunk-3OMURV6Q.js +0 -112
- package/dist/_members/primitives/chunk-3OMURV6Q.js.map +0 -1
- package/dist/_members/primitives/chunk-4IS6TMEG.js +0 -21
- package/dist/_members/primitives/chunk-4IS6TMEG.js.map +0 -1
- package/dist/_members/primitives/chunk-5MWGAEGQ.js +0 -1644
- package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +0 -1
- package/dist/_members/primitives/chunk-7RRPFPQK.js +0 -15
- package/dist/_members/primitives/chunk-7RRPFPQK.js.map +0 -1
- package/dist/_members/primitives/chunk-DH5TRZK2.js +0 -125
- package/dist/_members/primitives/chunk-DH5TRZK2.js.map +0 -1
- package/dist/_members/primitives/chunk-E3KNUSFG.js +0 -2337
- package/dist/_members/primitives/chunk-E3KNUSFG.js.map +0 -1
- package/dist/_members/primitives/chunk-G2B3G4HK.js +0 -47
- package/dist/_members/primitives/chunk-G2B3G4HK.js.map +0 -1
- package/dist/_members/primitives/chunk-HFPFGZXT.js +0 -1494
- package/dist/_members/primitives/chunk-HFPFGZXT.js.map +0 -1
- package/dist/_members/primitives/chunk-HIWVFZVH.js +0 -19
- package/dist/_members/primitives/chunk-HIWVFZVH.js.map +0 -1
- package/dist/_members/primitives/chunk-IDAL6G3Y.js +0 -134
- package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +0 -1
- package/dist/_members/primitives/chunk-KNC6JP5F.js +0 -34
- package/dist/_members/primitives/chunk-KNC6JP5F.js.map +0 -1
- package/dist/_members/primitives/chunk-KYRDVZST.js +0 -459
- package/dist/_members/primitives/chunk-KYRDVZST.js.map +0 -1
- package/dist/_members/primitives/chunk-LWLHS2NS.js +0 -3410
- package/dist/_members/primitives/chunk-LWLHS2NS.js.map +0 -1
- package/dist/_members/primitives/chunk-QAQ3P7DR.js +0 -8855
- package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +0 -1
- package/dist/_members/primitives/chunk-ROV2ODWC.js +0 -81
- package/dist/_members/primitives/chunk-ROV2ODWC.js.map +0 -1
- package/dist/_members/primitives/chunk-TCRC2FH3.js +0 -183
- package/dist/_members/primitives/chunk-TCRC2FH3.js.map +0 -1
- package/dist/_members/primitives/chunk-US4YEDAA.js +0 -96
- package/dist/_members/primitives/chunk-US4YEDAA.js.map +0 -1
- package/dist/_members/primitives/chunk-UVKRO5ER.js +0 -13
- package/dist/_members/primitives/chunk-UVKRO5ER.js.map +0 -1
- package/dist/_members/primitives/chunk-W4EIIF2I.js +0 -10
- package/dist/_members/primitives/chunk-W4EIIF2I.js.map +0 -1
- package/dist/_members/primitives/chunk-WPGKIPCO.js +0 -3563
- package/dist/_members/primitives/chunk-WPGKIPCO.js.map +0 -1
- package/dist/_members/primitives/chunk-WZFLEGMD.js +0 -1435
- package/dist/_members/primitives/chunk-WZFLEGMD.js.map +0 -1
- package/dist/_members/primitives/chunk-XHU3WBEI.js +0 -33
- package/dist/_members/primitives/chunk-XHU3WBEI.js.map +0 -1
- package/dist/_members/primitives/chunk-YN7WTZZ7.js +0 -46
- package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +0 -1
- package/dist/_members/primitives/effects/index.js +0 -30
- package/dist/_members/primitives/effects/index.js.map +0 -1
- package/dist/_members/primitives/hero-text/index.js +0 -14
- package/dist/_members/primitives/hero-text/index.js.map +0 -1
- package/dist/_members/primitives/index.js +0 -64
- package/dist/_members/primitives/index.js.map +0 -1
- package/dist/_members/primitives/layouts/index.js +0 -24
- package/dist/_members/primitives/layouts/index.js.map +0 -1
- package/dist/_members/primitives/lib/easings.js +0 -26
- package/dist/_members/primitives/lib/easings.js.map +0 -1
- package/dist/_members/primitives/lib/index.js +0 -74
- package/dist/_members/primitives/lib/index.js.map +0 -1
- package/dist/_members/primitives/lib/palette.js +0 -72
- package/dist/_members/primitives/lib/palette.js.map +0 -1
- package/dist/_members/primitives/lib/preview.js +0 -8
- package/dist/_members/primitives/lib/preview.js.map +0 -1
- package/dist/_members/primitives/lib/schema.js +0 -12
- package/dist/_members/primitives/lib/schema.js.map +0 -1
- package/dist/_members/primitives/lib/seeded-random.js +0 -14
- package/dist/_members/primitives/lib/seeded-random.js.map +0 -1
- package/dist/_members/primitives/lib/text/contrast.js +0 -12
- package/dist/_members/primitives/lib/text/contrast.js.map +0 -1
- package/dist/_members/primitives/lib/text/fill.js +0 -8
- package/dist/_members/primitives/lib/text/fill.js.map +0 -1
- package/dist/_members/primitives/lib/text/fitText.js +0 -10
- package/dist/_members/primitives/lib/text/fitText.js.map +0 -1
- package/dist/_members/primitives/lib/text/marker.js +0 -8
- package/dist/_members/primitives/lib/text/marker.js.map +0 -1
- package/dist/_members/primitives/lib/text/motion.js +0 -16
- package/dist/_members/primitives/lib/text/motion.js.map +0 -1
- package/dist/_members/primitives/lib/text/recolor.js +0 -8
- package/dist/_members/primitives/lib/text/recolor.js.map +0 -1
- package/dist/_members/primitives/lib/text/spec.js +0 -1
- package/dist/_members/primitives/lib/text/spec.js.map +0 -1
- package/dist/_members/primitives/lib/text/stage.js +0 -8
- package/dist/_members/primitives/lib/text/stage.js.map +0 -1
- package/dist/_members/primitives/lib/text/typeface.js +0 -8
- package/dist/_members/primitives/lib/text/typeface.js.map +0 -1
- package/dist/_members/primitives/lib/tokens.js +0 -24
- package/dist/_members/primitives/lib/tokens.js.map +0 -1
- package/dist/_members/primitives/lib/types.js +0 -1
- package/dist/_members/primitives/lib/types.js.map +0 -1
- package/dist/_members/primitives/params-required.json +0 -153
- package/dist/_members/primitives/scenes/index.js +0 -25
- package/dist/_members/primitives/scenes/index.js.map +0 -1
- package/dist/_members/primitives/subject-foreground/index.js +0 -30
- package/dist/_members/primitives/subject-foreground/index.js.map +0 -1
- package/dist/_members/primitives/text/index.js +0 -57
- package/dist/_members/primitives/text/index.js.map +0 -1
- package/dist/_members/primitives/transitions/index.js +0 -67
- package/dist/_members/primitives/transitions/index.js.map +0 -1
- package/dist/_members/primitives/ui-blocks/index.js +0 -76
- package/dist/_members/primitives/ui-blocks/index.js.map +0 -1
- package/dist/_members/primitives/version-map.json +0 -105
- package/dist/_members/primitives/workspace.js +0 -60
- package/dist/_members/primitives/workspace.js.map +0 -1
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { zid } from "convex-helpers/server/zod3";
|
|
3
|
-
import { GraphicRole } from "../graphics-plan/schemas.js";
|
|
4
|
-
export const EasingValue = z.union([
|
|
5
|
-
z.enum(["linear", "ease", "ease-in", "ease-out", "ease-in-out"]),
|
|
6
|
-
z.object({
|
|
7
|
-
kind: z.literal("cubic-bezier"),
|
|
8
|
-
x1: z.number().min(0).max(1),
|
|
9
|
-
y1: z.number(),
|
|
10
|
-
x2: z.number().min(0).max(1),
|
|
11
|
-
y2: z.number(),
|
|
12
|
-
}),
|
|
13
|
-
]);
|
|
14
|
-
/** A palette reference (audio-substrate P2 AudioPaletteEntry.ref): a pack
|
|
15
|
-
* soundId | music-pack bedId | org mediaId — an opaque string placement handle.
|
|
16
|
-
* The brand SOUND kit fields (audio.sonicLogo / uiSoundSet / bedStyle /
|
|
17
|
-
* ambiencePreference) reference sounds by this same handle. */
|
|
18
|
-
export const AudioPaletteRef = z.string().min(1);
|
|
19
|
-
export const FontRef = z.union([
|
|
20
|
-
z.object({
|
|
21
|
-
kind: z.literal("system"),
|
|
22
|
-
family: z.string().min(1),
|
|
23
|
-
}),
|
|
24
|
-
z.object({
|
|
25
|
-
kind: z.literal("web"),
|
|
26
|
-
family: z.string().min(1),
|
|
27
|
-
url: z.string().url().optional(),
|
|
28
|
-
}),
|
|
29
|
-
z.object({
|
|
30
|
-
kind: z.literal("uploaded"),
|
|
31
|
-
fontId: zid("fonts"),
|
|
32
|
-
family: z.string().optional(),
|
|
33
|
-
}),
|
|
34
|
-
]);
|
|
35
|
-
const Colors = z.object({
|
|
36
|
-
primary: z.string().min(1),
|
|
37
|
-
secondary: z.string().optional(),
|
|
38
|
-
accent: z.string().min(1),
|
|
39
|
-
background: z.string().min(1),
|
|
40
|
-
text: z.string().min(1),
|
|
41
|
-
textMuted: z.string().optional(),
|
|
42
|
-
border: z.string().optional(),
|
|
43
|
-
// Tier-2 core — author overrides for the derived fills + paired foregrounds.
|
|
44
|
-
surface: z.string().optional(),
|
|
45
|
-
card: z.string().optional(),
|
|
46
|
-
gridLine: z.string().optional(),
|
|
47
|
-
accentMuted: z.string().optional(),
|
|
48
|
-
textOnAccent: z.string().optional(),
|
|
49
|
-
textOnSurface: z.string().optional(),
|
|
50
|
-
});
|
|
51
|
-
const Fonts = z.object({
|
|
52
|
-
heading: FontRef,
|
|
53
|
-
body: FontRef.optional(),
|
|
54
|
-
caption: FontRef.optional(),
|
|
55
|
-
});
|
|
56
|
-
const Spacing = z.object({
|
|
57
|
-
base: z.number().positive().optional(),
|
|
58
|
-
lg: z.number().positive().optional(),
|
|
59
|
-
sm: z.number().positive().optional(),
|
|
60
|
-
});
|
|
61
|
-
const Sizing = z.object({
|
|
62
|
-
fontSizeHeading: z.number().positive().optional(),
|
|
63
|
-
fontSizeBody: z.number().positive().optional(),
|
|
64
|
-
fontSizeLabel: z.number().positive().optional(),
|
|
65
|
-
borderRadius: z.number().nonnegative().optional(),
|
|
66
|
-
});
|
|
67
|
-
const Motion = z.object({
|
|
68
|
-
duration: z.number().positive().optional(),
|
|
69
|
-
easing: EasingValue.optional(),
|
|
70
|
-
// Editorial motion identity — surfaces read these via `$brand:motion.*`
|
|
71
|
-
// (resolved at projection time). Mirrors the primitive `TextMotion` vocabulary.
|
|
72
|
-
entrance: z.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
|
|
73
|
-
staggerMs: z.number().nonnegative().optional(),
|
|
74
|
-
exitMs: z.number().nonnegative().optional(),
|
|
75
|
-
});
|
|
76
|
-
// Corner anchor shared by logo + watermark overlays.
|
|
77
|
-
const Placement = z.enum(["tl", "tr", "bl", "br"]);
|
|
78
|
-
const Logo = z.object({
|
|
79
|
-
src: z.string().min(1),
|
|
80
|
-
alt: z.string().optional(),
|
|
81
|
-
placement: Placement.optional(),
|
|
82
|
-
// Percentage of the composition width. Must be positive — a non-positive
|
|
83
|
-
// logo is a footgun, not an intent, so reject at the boundary.
|
|
84
|
-
sizePct: z.number().positive().optional(),
|
|
85
|
-
});
|
|
86
|
-
// Intro/outro bumper: either an authored card (title/subtitle on brand) or a
|
|
87
|
-
// pre-rendered video clip. `src` is optional on disk — a card needs none, and
|
|
88
|
-
// a video kit may carry the asset reference separately — so the wire shape
|
|
89
|
-
// stays sparse and the resolver fails loud later if a video lacks its source.
|
|
90
|
-
const IntroOutro = z.object({
|
|
91
|
-
kind: z.enum(["card", "video"]),
|
|
92
|
-
src: z.string().min(1).optional(),
|
|
93
|
-
title: z.string().optional(),
|
|
94
|
-
subtitle: z.string().optional(),
|
|
95
|
-
durationMs: z.number().positive().optional(),
|
|
96
|
-
});
|
|
97
|
-
const Watermark = z.object({
|
|
98
|
-
src: z.string().min(1),
|
|
99
|
-
// Alpha in [0,1]; anything outside is a malformed kit, not a clamp target.
|
|
100
|
-
opacity: z.number().min(0).max(1).optional(),
|
|
101
|
-
placement: Placement.optional(),
|
|
102
|
-
});
|
|
103
|
-
// ── Brand-kit language payload (built FROM INSPIRATION — spec 2026-07-14) ────
|
|
104
|
-
// A motif is an observed on-screen graphic reproduced as an ordinary authored
|
|
105
|
-
// skin (card html / overlay primitive / installed component). These mirror the
|
|
106
|
-
// storage validators (composition.ts) and the HTTP schemas (schemas.ts Step 1.5)
|
|
107
|
-
// verbatim — the wire validator has no `.openapi()` calls, so the shapes here
|
|
108
|
-
// are the plain-zod twins carried onto the wire BrandKit for the projection.
|
|
109
|
-
const MotifBody = z.discriminatedUnion("kind", [
|
|
110
|
-
z.object({
|
|
111
|
-
kind: z.literal("card"),
|
|
112
|
-
html: z.string().min(1),
|
|
113
|
-
tokens: z.record(z.string(), z.string()).optional(),
|
|
114
|
-
}),
|
|
115
|
-
z.object({
|
|
116
|
-
kind: z.literal("overlay"),
|
|
117
|
-
primitiveId: z.string().min(1),
|
|
118
|
-
params: z.record(z.string(), z.unknown()).optional(),
|
|
119
|
-
}),
|
|
120
|
-
z.object({
|
|
121
|
-
kind: z.literal("component"),
|
|
122
|
-
componentId: z.string().min(1),
|
|
123
|
-
props: z.record(z.string(), z.unknown()).optional(),
|
|
124
|
-
}),
|
|
125
|
-
]);
|
|
126
|
-
// Closed vocabulary — SSOT is MOTION_PRESETS (packages/authoring/src/motion/shell.ts).
|
|
127
|
-
const MotifMotionPreset = z.enum([
|
|
128
|
-
"fade-up",
|
|
129
|
-
"slide-in-left",
|
|
130
|
-
"slide-in-right",
|
|
131
|
-
"scale-pop",
|
|
132
|
-
"stagger-reveal",
|
|
133
|
-
]);
|
|
134
|
-
export const Motif = z.object({
|
|
135
|
-
id: z.string().min(1).max(40),
|
|
136
|
-
observed: z.string().min(1).max(500),
|
|
137
|
-
body: MotifBody,
|
|
138
|
-
motion: z.object({
|
|
139
|
-
preset: MotifMotionPreset,
|
|
140
|
-
enterMs: z.number().int().min(0).max(5000).optional(),
|
|
141
|
-
exitMs: z.number().int().min(0).max(5000).optional(),
|
|
142
|
-
staggerMs: z.number().int().min(0).max(2000).optional(),
|
|
143
|
-
confidence: z.enum(["high", "low"]).optional(),
|
|
144
|
-
}).optional(),
|
|
145
|
-
// Pinned to the closed graphics-plan GraphicRole vocabulary — the steering
|
|
146
|
-
// matcher (designBrief.ts) is exact-equality against a plan role, so an
|
|
147
|
-
// off-vocabulary role would synthesize a judge and then silently never steer
|
|
148
|
-
// (the half-applied-conditioning failure D1-R exists to kill). Storage stays
|
|
149
|
-
// an open string (matches the motion.preset pattern).
|
|
150
|
-
role: GraphicRole,
|
|
151
|
-
zone: z.object({ x: z.number(), y: z.number(), w: z.number(), h: z.number() }).optional(),
|
|
152
|
-
evidence: z.array(z.number().int().min(0)).max(24).optional(),
|
|
153
|
-
diffScore: z.number().min(0).max(1).optional(),
|
|
154
|
-
coverage: z.enum(["reproduced", "approximated", "skipped"]),
|
|
155
|
-
skipReason: z.string().max(300).optional(),
|
|
156
|
-
});
|
|
157
|
-
const AccessControl = z.object({
|
|
158
|
-
public: z.boolean().optional(),
|
|
159
|
-
readerOrgIds: z.array(z.string()).optional(),
|
|
160
|
-
writerOrgIds: z.array(z.string()).optional(),
|
|
161
|
-
});
|
|
162
|
-
const LicenseDeclaration = z.object({
|
|
163
|
-
type: z.string().min(1),
|
|
164
|
-
source: z.string().optional(),
|
|
165
|
-
notes: z.string().optional(),
|
|
166
|
-
});
|
|
167
|
-
export const BrandKit = z.object({
|
|
168
|
-
id: z.string().min(1),
|
|
169
|
-
name: z.string().min(1),
|
|
170
|
-
colors: Colors,
|
|
171
|
-
fonts: Fonts,
|
|
172
|
-
spacing: Spacing.optional(),
|
|
173
|
-
sizing: Sizing.optional(),
|
|
174
|
-
motion: Motion.optional(),
|
|
175
|
-
// Per-creator caption IDENTITY collected by the dashboard / derived from a
|
|
176
|
-
// creator's references. Consumed by resolveBrandKit's caption derivation:
|
|
177
|
-
// emphasisColor → caption.fg, base/highlight color (clamped to the APCA body
|
|
178
|
-
// floor over the scrim), the backdrop `plate` treatment, per-word `entrance`
|
|
179
|
-
// motion + timing, and the emphasis treatment (base face + serif/scale/weight/
|
|
180
|
-
// italic/transform/letter-spacing + emphasis-run plate) → caption identity
|
|
181
|
-
// that the render binding applies onto the Captions primitive. The kit now
|
|
182
|
-
// owns the caption LOOK (including plate + entrance). Base GEOMETRY (caption
|
|
183
|
-
// size, screen position, safe-area, maxWidth) is NOT here — that is calibrated
|
|
184
|
-
// craft owned by the primitive's default. The kit selects the LOOK; the
|
|
185
|
-
// primitive owns the legible realization.
|
|
186
|
-
captionProfile: z
|
|
187
|
-
.object({
|
|
188
|
-
// Base caption text color + spoken-word highlight — clamped to the APCA
|
|
189
|
-
// body floor over the scrim at projection (same guard as emphasisColor→fg).
|
|
190
|
-
color: z.string().optional(),
|
|
191
|
-
highlightColor: z.string().optional(),
|
|
192
|
-
emphasisColor: z.string().optional(),
|
|
193
|
-
// Caption backdrop plate — the whole-block legibility treatment.
|
|
194
|
-
plate: z.enum(["glass", "solid", "none"]).optional(),
|
|
195
|
-
// Per-word entrance motion + timing (the shared TextMotion vocabulary).
|
|
196
|
-
entrance: z.enum(["none", "fade", "word-pop", "stagger-up"]).optional(),
|
|
197
|
-
entranceMs: z.number().optional(),
|
|
198
|
-
entranceStaggerMs: z.number().optional(),
|
|
199
|
-
exitMs: z.number().optional(),
|
|
200
|
-
// Base caption face (the carrier-word font). Defaults to fonts.caption.
|
|
201
|
-
fontFamily: z.string().optional(),
|
|
202
|
-
// Emphasis-word treatment — the qualitative identity signal.
|
|
203
|
-
emphasisFontFamily: z.string().optional(),
|
|
204
|
-
emphasisScale: z.number().positive().optional(),
|
|
205
|
-
emphasisFontWeight: z.number().optional(),
|
|
206
|
-
emphasisFontStyle: z.enum(["normal", "italic"]).optional(),
|
|
207
|
-
emphasisTextTransform: z.enum(["none", "uppercase"]).optional(),
|
|
208
|
-
emphasisLetterSpacing: z.number().optional(),
|
|
209
|
-
// Emphasis-run highlighter plate (editorial caption look).
|
|
210
|
-
emphasisPlate: z.boolean().optional(),
|
|
211
|
-
emphasisPlateColor: z.string().optional(),
|
|
212
|
-
emphasisPlateTextColor: z.string().optional(),
|
|
213
|
-
})
|
|
214
|
-
.optional(),
|
|
215
|
-
// ── Language payload (built FROM INSPIRATION) ─────────────────────────────
|
|
216
|
-
// Carried untransformed onto the wire kit so the projection (resolveBrandKit)
|
|
217
|
-
// can surface it as `ResolvedBrandKit.language`. Not a `$brand:` token root —
|
|
218
|
-
// these are exemplar/motif references the maker + judge condition on, not
|
|
219
|
-
// bindable design tokens.
|
|
220
|
-
exemplarKeys: z.array(z.string().min(1)).max(24).optional(),
|
|
221
|
-
contactSheetKey: z.string().min(1).optional(),
|
|
222
|
-
motifs: z.array(Motif).max(24).optional(),
|
|
223
|
-
styleRubric: z.string().max(4000).optional(),
|
|
224
|
-
density: z.object({
|
|
225
|
-
graphicsPerMin: z.number().min(0).max(60),
|
|
226
|
-
maxSimultaneous: z.number().int().min(1).max(6),
|
|
227
|
-
}).optional(),
|
|
228
|
-
inspiration: z.object({
|
|
229
|
-
sources: z.array(z.string()).min(1).max(24),
|
|
230
|
-
extractedAt: z.number(),
|
|
231
|
-
extractionVersion: z.string().min(1).max(60),
|
|
232
|
-
}).optional(),
|
|
233
|
-
logo: Logo.optional(),
|
|
234
|
-
intro: IntroOutro.optional(),
|
|
235
|
-
outro: IntroOutro.optional(),
|
|
236
|
-
watermark: Watermark.optional(),
|
|
237
|
-
/** Brand audio identity (audio design spec 2026-07-20): default SFX intensity
|
|
238
|
-
* + music-bed defaults. Brief `audio` wins when present (caption-identity
|
|
239
|
-
* precedence: brand default beats brief absence; brief beats brand).
|
|
240
|
-
*
|
|
241
|
-
* Brand SOUND kit (audio-substrate Phase 5) — identity over TIME. All four
|
|
242
|
-
* fields are OPTIONAL; a kit that sets none behaves byte-identically to a kit
|
|
243
|
-
* with no audio block. Refs are palette references (P2 AudioPaletteEntry.ref:
|
|
244
|
-
* a pack soundId | music-pack bedId | org mediaId — an opaque string handle). */
|
|
245
|
-
audio: z.object({
|
|
246
|
-
sfxIntensity: z.enum(["off", "light", "standard", "dense"]).optional(),
|
|
247
|
-
musicEnabled: z.boolean().optional(),
|
|
248
|
-
musicMood: z.string().max(300).optional(),
|
|
249
|
-
/** SONIC LOGO — a brand audio signature bound to the intro/outro bookend at
|
|
250
|
-
* compose time (an sfx-role clip at the body edge adjacent to the render
|
|
251
|
-
* bookend). `ref` = a palette reference; `placement` = which bookend(s);
|
|
252
|
-
* `offsetMs` shifts within. Bound only when the corresponding bumper
|
|
253
|
-
* (kit.intro / kit.outro) exists — else a non-blocking advisory. */
|
|
254
|
-
sonicLogo: z.object({
|
|
255
|
-
ref: AudioPaletteRef,
|
|
256
|
-
placement: z.enum(["intro", "outro", "both"]),
|
|
257
|
-
offsetMs: z.number().int().min(0).max(10000).optional(),
|
|
258
|
-
}).optional(),
|
|
259
|
-
/** UI SOUND SET — per-family palette overrides consumed by the sfxCompile
|
|
260
|
-
* org-first draw as the HIGHEST-priority tier (brand > org palette > pack
|
|
261
|
-
* default), mirroring how a brand FONT sits above org defaults. Keys are the
|
|
262
|
-
* closed SfxFamily vocabulary; values are palette refs. */
|
|
263
|
-
uiSoundSet: z.object({
|
|
264
|
-
tick: AudioPaletteRef.optional(),
|
|
265
|
-
pop: AudioPaletteRef.optional(),
|
|
266
|
-
impact: AudioPaletteRef.optional(),
|
|
267
|
-
confirm: AudioPaletteRef.optional(),
|
|
268
|
-
error: AudioPaletteRef.optional(),
|
|
269
|
-
whoosh: AudioPaletteRef.optional(),
|
|
270
|
-
riser: AudioPaletteRef.optional(),
|
|
271
|
-
}).optional(),
|
|
272
|
-
/** BED STYLE — a preferred pack bed (`bedId`) or a style hint (`genre` /
|
|
273
|
-
* `bpmRange`). SURFACED-ONLY today (compose does not auto-select a pack bed
|
|
274
|
-
* — it uses a client-pinned bed or generates from mood); the field resolves
|
|
275
|
-
* through the kit + surfaces via get_profile / brand-kit reads so driving
|
|
276
|
-
* agents honor it when pinning / generating a bed. */
|
|
277
|
-
bedStyle: z.object({
|
|
278
|
-
bedId: AudioPaletteRef.optional(),
|
|
279
|
-
genre: z.string().max(120).optional(),
|
|
280
|
-
bpmRange: z.object({ min: z.number(), max: z.number() }).optional(),
|
|
281
|
-
}).optional(),
|
|
282
|
-
/** AMBIENCE PREFERENCE — a preferred ambience bed (`{ref}`) or explicit
|
|
283
|
-
* `null` (opt-out). SURFACED-ONLY (compose has no ambience auto-placement);
|
|
284
|
-
* resolves + surfaces for driving agents. */
|
|
285
|
-
ambiencePreference: z.object({ ref: AudioPaletteRef }).nullable().optional(),
|
|
286
|
-
}).optional(),
|
|
287
|
-
license: LicenseDeclaration.optional(),
|
|
288
|
-
licenseVerification: z.enum([
|
|
289
|
-
"attested",
|
|
290
|
-
"cueframe-verified",
|
|
291
|
-
"third-party-verified",
|
|
292
|
-
]).optional(),
|
|
293
|
-
ownerOrgId: z.string().optional(),
|
|
294
|
-
acl: AccessControl.optional(),
|
|
295
|
-
});
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ComposePlan — the locked contract between the compose PLANNER and the
|
|
3
|
-
* ASSEMBLER (multi-agent director spec 2026-06-11). The plan mirrors the
|
|
4
|
-
* composition model: framing → cropIntents, cuts → delete_ranges/excludedRanges,
|
|
5
|
-
* captions → CompositionCaptions.style intent, assets → mediaId refs,
|
|
6
|
-
* graphics → overlay/component refs. Specialists fulfill assets/graphics
|
|
7
|
-
* requests; the assembler integrates and never re-plans.
|
|
8
|
-
*/
|
|
9
|
-
import { z } from "zod";
|
|
10
|
-
// The graphics-domain SSOT: role vocabulary + structured copy. The plan
|
|
11
|
-
// references the SAME types the compiler consumes (no separate contract to drift).
|
|
12
|
-
import { GraphicRole, Copy } from "../graphics-plan/schemas.js";
|
|
13
|
-
/** The planner's subject pick — WHO/WHAT the camera tracks on a `frame` beat.
|
|
14
|
-
* This is the PLANNER↔assembler contract shape (kept subject-centric so the
|
|
15
|
-
* Langfuse-managed planner prompt is unchanged); the assembler (compile.ts)
|
|
16
|
-
* maps it onto the canonical `Focus` of a `ReframeSegment`. Same variants as
|
|
17
|
-
* `Focus`: face / all-faces / frame-center / active-speaker / point. */
|
|
18
|
-
export const PlanSubject = z.discriminatedUnion("kind", [
|
|
19
|
-
z.object({ kind: z.literal("face"), faceId: z.string().min(1) }),
|
|
20
|
-
z.object({ kind: z.literal("all-faces") }),
|
|
21
|
-
z.object({ kind: z.literal("frame-center") }),
|
|
22
|
-
z.object({ kind: z.literal("active-speaker") }),
|
|
23
|
-
z.object({
|
|
24
|
-
kind: z.literal("point"),
|
|
25
|
-
x: z.number().min(0).max(1),
|
|
26
|
-
y: z.number().min(0).max(1),
|
|
27
|
-
}),
|
|
28
|
-
]);
|
|
29
|
-
/** One framing decision — three first-class intents so none is expressible
|
|
30
|
-
* only by misusing another (the 2026-07-12 verify-rerun planner read 'trim'
|
|
31
|
-
* as "keep un-cropped" and trimmed the whole clip; the vocabulary had no
|
|
32
|
-
* legal move for subject-less footage):
|
|
33
|
-
* - 'frame' — SHOW this span, cropped/tracked per `subject` (required).
|
|
34
|
-
* - 'keep' — SHOW this span AS-IS, no reframe (b-roll, landscapes, any
|
|
35
|
-
* footage with nothing to track). No subject.
|
|
36
|
-
* - 'trim' — DELETE this span from the output entirely.
|
|
37
|
-
* Downstream: 'frame' compiles to a crop intent; 'keep' compiles to nothing
|
|
38
|
-
* (shown uncropped); 'trim' compiles to an excluded range. */
|
|
39
|
-
export const PlanFramingSegment = z
|
|
40
|
-
.object({
|
|
41
|
-
startSec: z.number().nonnegative(),
|
|
42
|
-
endSec: z.number().positive(),
|
|
43
|
-
action: z
|
|
44
|
-
.enum(["frame", "keep", "trim"])
|
|
45
|
-
.describe("'frame' = SHOW this span cropped/tracked per `subject`. 'keep' = SHOW this span as-is, no reframe (footage with nothing to track). 'trim' = DELETE this span from the output entirely — trimmed footage never appears."),
|
|
46
|
-
subject: PlanSubject.optional(),
|
|
47
|
-
shotScale: z.enum(["close", "standard", "wide"]).optional(),
|
|
48
|
-
zoomScale: z.number().min(0.4).max(1.0).optional(),
|
|
49
|
-
verticalBias: z.number().min(-0.3).max(0.3).optional(),
|
|
50
|
-
/** Optional in the plan; the assembler defaults it to 0 on set_crop_intents. */
|
|
51
|
-
lateralBias: z.number().min(-0.3).max(0.3).optional(),
|
|
52
|
-
intent: z.string().optional(),
|
|
53
|
-
})
|
|
54
|
-
.refine((s) => s.action !== "frame" || s.subject !== undefined, {
|
|
55
|
-
message: "frame segment requires a subject — for footage with no trackable subject use action:'keep' (shown as-is); do NOT trim spans you want shown",
|
|
56
|
-
})
|
|
57
|
-
.refine((s) => s.action !== "keep" || s.subject === undefined, {
|
|
58
|
-
message: "keep segment shows footage as-is — it takes no subject (use action:'frame' to track one)",
|
|
59
|
-
})
|
|
60
|
-
// ONE knob sizes the crop. `shotScale` (editorial, calibrated to the detected
|
|
61
|
-
// face at bake time) and `zoomScale` (explicit fraction of the frame) both do,
|
|
62
|
-
// and shotScale WINS — so a segment carrying both silently discards the zoom.
|
|
63
|
-
.refine((s) => s.shotScale === undefined || s.zoomScale === undefined, {
|
|
64
|
-
message: "framing segment takes EITHER shotScale (editorial scale — the bake calibrates the zoom to the detected face) OR zoomScale (an explicit fraction of the frame), never both: shotScale wins and the zoomScale would be silently discarded",
|
|
65
|
-
path: ["zoomScale"],
|
|
66
|
-
});
|
|
67
|
-
export const PlanCut = z.object({
|
|
68
|
-
startSec: z.number().nonnegative(),
|
|
69
|
-
endSec: z.number().positive(),
|
|
70
|
-
reason: z.string().min(1),
|
|
71
|
-
});
|
|
72
|
-
export const PlanAssetRequest = z.object({
|
|
73
|
-
id: z.string().min(1),
|
|
74
|
-
atSec: z.number().nonnegative(),
|
|
75
|
-
durSec: z.number().positive(),
|
|
76
|
-
kind: z.enum(["broll", "audio", "sfx", "music", "ambience", "gif", "image"]),
|
|
77
|
-
source: z.enum(["find", "generate"]),
|
|
78
|
-
intent: z.string().min(1),
|
|
79
|
-
/** Phase 1: the planner resolves `find` requests against the pool at plan
|
|
80
|
-
* time (it has search_library) and records the pick here. Unresolved find
|
|
81
|
-
* requests are stripped by the validator (degrade, not error). */
|
|
82
|
-
resolvedMediaId: z.string().optional(),
|
|
83
|
-
});
|
|
84
|
-
/**
|
|
85
|
-
* A first-class typed graphic the planner requests: a `role` (the editorial
|
|
86
|
-
* graphic type) + structured `copy` — NOT a coarse kind + freeform text. The
|
|
87
|
-
* designer phase reads these straight into a graphics-plan ContentBeat and
|
|
88
|
-
* compiles deterministically (no inference, no bespoke-JSX escape hatch).
|
|
89
|
-
* `role`/`copy` are the graphics-domain SSOT (graphics-plan/schemas); zPlane is
|
|
90
|
-
* implied by the role (`hero` → behind-subject) so it is not re-declared here.
|
|
91
|
-
*/
|
|
92
|
-
export const PlanGraphicRequest = z.object({
|
|
93
|
-
id: z.string().min(1),
|
|
94
|
-
atSec: z.number().nonnegative(),
|
|
95
|
-
durSec: z.number().positive(),
|
|
96
|
-
role: GraphicRole,
|
|
97
|
-
copy: Copy,
|
|
98
|
-
intent: z.string().min(1),
|
|
99
|
-
});
|
|
100
|
-
export const PlanMarker = z.object({
|
|
101
|
-
startSec: z.number().nonnegative(),
|
|
102
|
-
endSec: z.number().nonnegative().optional(),
|
|
103
|
-
kind: z.string().min(1),
|
|
104
|
-
name: z.string().optional(),
|
|
105
|
-
});
|
|
106
|
-
export const ComposePlan = z.object({
|
|
107
|
-
framing: z.array(PlanFramingSegment).min(1),
|
|
108
|
-
cuts: z.array(PlanCut).optional(),
|
|
109
|
-
captions: z.object({ styleIntent: z.string().optional() }).optional(),
|
|
110
|
-
assets: z.array(PlanAssetRequest).optional(),
|
|
111
|
-
graphics: z.array(PlanGraphicRequest).optional(),
|
|
112
|
-
markers: z.array(PlanMarker).optional(),
|
|
113
|
-
});
|