@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
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CAN THIS OVERLAY ACTUALLY GO BEHIND THE SUBJECT — answered in the editor,
|
|
3
|
+
* before a render is paid for.
|
|
4
|
+
*
|
|
5
|
+
* The render already decides this, in the director's `resolveBehindPlacement`:
|
|
6
|
+
* a behind-subject overlay whose clip has no matte, no geometry sidecar, or too
|
|
7
|
+
* little subject presence is DEGRADED — `zPlane` flipped back to `front` and the
|
|
8
|
+
* authored `anchor` deleted — and the reason is recorded in a `degraded[]` array
|
|
9
|
+
* that both of its callers discard. So the user flips the toggle, pays for a
|
|
10
|
+
* render, and finds out from the output.
|
|
11
|
+
*
|
|
12
|
+
* This module answers the same question from data the editor already has on the
|
|
13
|
+
* media row, so the toggle can tell the truth at the moment it is flipped.
|
|
14
|
+
*
|
|
15
|
+
* ── IT IS ONLY WORTH ANYTHING IF IT AGREES WITH THE SERVER ──────────────────
|
|
16
|
+
* Every rule below mirrors a specific server rule, named at its call site. Two
|
|
17
|
+
* helpers are currently duplicated from the private `@cueframe/shared/
|
|
18
|
+
* variant-keys` (`hashMatteIntent`, `clipOverlapsBehindWindow`); they live here
|
|
19
|
+
* because this package is the shared one, and the private copies become
|
|
20
|
+
* re-exports of these when the fact-record work lands. Until then the agreement
|
|
21
|
+
* is held by `__tests__/behind-readiness.test.ts`, whose key fixture is a hash
|
|
22
|
+
* taken from PRODUCTION rather than invented.
|
|
23
|
+
*
|
|
24
|
+
* ── WHAT IT CANNOT ANSWER ───────────────────────────────────────────────────
|
|
25
|
+
* The server has a FOURTH degrade path — the occlusion budget — which needs the
|
|
26
|
+
* `.geometry.json` sidecar from R2, and the client has no presigned URL for it.
|
|
27
|
+
* So `subject-present` means "the preconditions hold", NOT "this is guaranteed
|
|
28
|
+
* to render behind", and UI copy must not promise more.
|
|
29
|
+
*/
|
|
30
|
+
/** A matte intent: the clip's SOURCE window plus what is being cut out.
|
|
31
|
+
* Mirrors `MatteIntentLike` in the private variant-keys. */
|
|
32
|
+
export interface MatteIntentLike {
|
|
33
|
+
startSec: number;
|
|
34
|
+
endSec: number;
|
|
35
|
+
subjectClass: "person" | "product";
|
|
36
|
+
}
|
|
37
|
+
/** The fields this module reads off a `mediaItems.mattes[hash]` entry — the
|
|
38
|
+
* same two `resolveBehindPlacement` reads out of its `matteGeometry` map. */
|
|
39
|
+
export interface MatteEntryLike {
|
|
40
|
+
geometryR2Key?: string;
|
|
41
|
+
presenceFraction?: number;
|
|
42
|
+
}
|
|
43
|
+
/** The clip an overlay will be placed against, and the source window whose
|
|
44
|
+
* matte answers for it. */
|
|
45
|
+
export interface BehindTarget {
|
|
46
|
+
mediaId: string;
|
|
47
|
+
window: {
|
|
48
|
+
startSec: number;
|
|
49
|
+
endSec: number;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Why a behind-subject overlay will or will not survive the render. The three
|
|
54
|
+
* failing states correspond 1:1 to the server's degrade reasons: `no-clip` and
|
|
55
|
+
* `no-subject` both degrade as `"no-subject"` there, `no-matte` as
|
|
56
|
+
* `"no-geometry"`.
|
|
57
|
+
*/
|
|
58
|
+
export type BehindReadiness = {
|
|
59
|
+
state: "no-clip";
|
|
60
|
+
} | {
|
|
61
|
+
state: "no-matte";
|
|
62
|
+
target: BehindTarget;
|
|
63
|
+
} | {
|
|
64
|
+
state: "no-subject";
|
|
65
|
+
target: BehindTarget;
|
|
66
|
+
presenceFraction: number;
|
|
67
|
+
} | {
|
|
68
|
+
state: "subject-present";
|
|
69
|
+
target: BehindTarget;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Content-address a matte intent, byte-identically to the server's
|
|
73
|
+
* `hashMatteIntent`. Milliseconds-rounded so float jitter cannot miss a cached
|
|
74
|
+
* matte; 12 hex chars. Async because `crypto.subtle` is — available in the
|
|
75
|
+
* webview and in Node alike.
|
|
76
|
+
*
|
|
77
|
+
* The bake VERSION is deliberately not hashed (it segments the R2 key instead),
|
|
78
|
+
* so this key is stable across model bumps.
|
|
79
|
+
*/
|
|
80
|
+
export declare function matteIntentKey(intent: MatteIntentLike): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* The clip a behind-subject overlay anchors against: **the first media clip on
|
|
83
|
+
* a VIDEO track, in track→content order, whose timeline range overlaps the
|
|
84
|
+
* overlay**. This is `resolveBehindPlacement`'s rule, and it is deliberately
|
|
85
|
+
* NOT `computeMatteWindowsByMediaId`'s — that one also scans audio and image
|
|
86
|
+
* tracks, because it answers a different question (which mattes to bake).
|
|
87
|
+
* Mirroring the wrong one of the two would put the editor and the render into
|
|
88
|
+
* exactly the disagreement this module exists to remove.
|
|
89
|
+
*
|
|
90
|
+
* The returned `window` is the clip's SOURCE trim, defaulted the way
|
|
91
|
+
* `renders.ts` defaults it: `trim.start ?? 0`, `trim.end ?? start + duration`.
|
|
92
|
+
* That is the window the matte is keyed by.
|
|
93
|
+
*
|
|
94
|
+
* Returns null when the overlay is unknown, or floats over no video clip —
|
|
95
|
+
* which the server degrades as `"no-subject"`.
|
|
96
|
+
*/
|
|
97
|
+
export declare function primaryClipForOverlay(composition: unknown, overlayId: string): BehindTarget | null;
|
|
98
|
+
export interface BehindReadinessInput {
|
|
99
|
+
/** The wire-shape composition currently open in the editor. */
|
|
100
|
+
composition: unknown;
|
|
101
|
+
/** The overlay being inspected. It need NOT already be behind-subject — the
|
|
102
|
+
* editor asks this to decide what to show BEFORE the toggle is flipped. */
|
|
103
|
+
overlayId: string;
|
|
104
|
+
/** `mediaItems.mattes`, per media id, exactly as it arrives from Convex. */
|
|
105
|
+
mattesByMediaId: Record<string, Record<string, MatteEntryLike> | undefined>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Will this overlay actually render behind the subject? Mirrors the first three
|
|
109
|
+
* of `resolveBehindPlacement`'s four gates, in the same order:
|
|
110
|
+
*
|
|
111
|
+
* 1. no primary clip → server: degrade("no-subject")
|
|
112
|
+
* 2. no matte / no geometry sidecar → server: degrade("no-geometry")
|
|
113
|
+
* 3. presence below the floor → server: degrade("no-subject")
|
|
114
|
+
*
|
|
115
|
+
* The fourth (occlusion budget) is not knowable client-side — see the header.
|
|
116
|
+
*/
|
|
117
|
+
export declare function behindReadinessForOverlay(input: BehindReadinessInput): Promise<BehindReadiness>;
|
|
118
|
+
/**
|
|
119
|
+
* The same verdict from an ALREADY-RESOLVED target — the half that actually
|
|
120
|
+
* costs something (a SHA-256) split from the half that is a pure walk.
|
|
121
|
+
*
|
|
122
|
+
* The editor calls this one. `primaryClipForOverlay` is sync, so a component
|
|
123
|
+
* can memoize the target on the composition and then depend only on the
|
|
124
|
+
* window's two numbers plus the media's matte record — instead of re-hashing on
|
|
125
|
+
* every keystroke that produces a new composition reference.
|
|
126
|
+
*/
|
|
127
|
+
export declare function behindReadinessForTarget(target: BehindTarget | null, mattes: Record<string, MatteEntryLike> | undefined): Promise<BehindReadiness>;
|
|
@@ -3,5 +3,7 @@ export * from "./cardTokens.js";
|
|
|
3
3
|
export * from "./composition-floor.js";
|
|
4
4
|
export * from "./safe-zones.js";
|
|
5
5
|
export * from "./behind-placement.js";
|
|
6
|
+
export * from "./behind-readiness.js";
|
|
7
|
+
export * from "./reframe-readiness.js";
|
|
6
8
|
export * from "./occlusion-budget.js";
|
|
7
9
|
export * from "./cropProjection.js";
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHICH CLIPS WANT A CROP, AND DO WE HAVE WHAT IT TAKES — answered in the
|
|
3
|
+
* editor, from data the media row already carries.
|
|
4
|
+
*
|
|
5
|
+
* The sibling of `behind-readiness.ts`, one rung down the fidelity ladder. That
|
|
6
|
+
* module asks whether a SILHOUETTE exists so an overlay can go behind a person;
|
|
7
|
+
* this one asks whether a BOX TRACK exists so a clip can follow one. Same shape,
|
|
8
|
+
* same discipline, ~40× apart in what the answer costs.
|
|
9
|
+
*
|
|
10
|
+
* ── WHY IT EXISTS ───────────────────────────────────────────────────────────
|
|
11
|
+
* A follow-the-speaker reframe is authored in the editor and only takes effect
|
|
12
|
+
* at render, because the crop trajectory is derived from a SUBJECT TRACK the
|
|
13
|
+
* editor never asked for. So the editor showed an uncropped source while the
|
|
14
|
+
* render produced a moving crop — the "editor shows something the render will
|
|
15
|
+
* not honour" defect, in its second location. Deriving the trajectory locally
|
|
16
|
+
* fixes that, and the derive needs to find the right track first. That lookup
|
|
17
|
+
* is what this module is.
|
|
18
|
+
*
|
|
19
|
+
* ── IT IS ONLY WORTH ANYTHING IF IT AGREES WITH THE SERVER ──────────────────
|
|
20
|
+
* `reframeTargets` mirrors `collectTrajectoryDeriveJobs` (private
|
|
21
|
+
* `renders.ts`) — the walk the SHIP render uses to decide which clips derive a
|
|
22
|
+
* trajectory and at which window. `sourceWindowKey` mirrors `hashSourceWindow`
|
|
23
|
+
* (private `@cueframe/shared/variant-keys`) byte for byte; the golden fixtures
|
|
24
|
+
* in `__tests__/reframe-readiness.test.ts` are hashes taken from PRODUCTION
|
|
25
|
+
* rather than invented, for the same reason `behind-readiness`'s are.
|
|
26
|
+
*
|
|
27
|
+
* ── WHAT IT DELIBERATELY DOES NOT CHECK ─────────────────────────────────────
|
|
28
|
+
* The DETECTOR VERSION. The server skips a track whose `detectorVersion` is not
|
|
29
|
+
* the current `DETECTOR_VERSION`, and the app cannot ask that without a third,
|
|
30
|
+
* unguarded mirror of a string whose TS↔Python sync is already CI-guarded on
|
|
31
|
+
* both existing copies. So the editor derives off whatever track sits at the
|
|
32
|
+
* window. A version bump means the render re-detects and the framing shifts
|
|
33
|
+
* slightly — same subject, same authored intent, and far closer to the truth
|
|
34
|
+
* than showing an uncropped source. A decision, not an omission.
|
|
35
|
+
*/
|
|
36
|
+
/** A source window. Subject tracks key on this — the window, plus the producer
|
|
37
|
+
* when it is not the default face detector. Mirrors `SourceWindowLike`. */
|
|
38
|
+
export interface SourceWindowLike {
|
|
39
|
+
startSec: number;
|
|
40
|
+
endSec: number;
|
|
41
|
+
/**
|
|
42
|
+
* Which producer detected the track: 'face' (YuNet/SCRFD, the default) or
|
|
43
|
+
* 'person' (YOLO11x + BoT-SORT). Folded into the hash ONLY when it is not
|
|
44
|
+
* 'face', so existing face-track keys never churn and a person track for the
|
|
45
|
+
* same window gets a DISTINCT key instead of overwriting the face one.
|
|
46
|
+
*/
|
|
47
|
+
detector?: "face" | "person";
|
|
48
|
+
}
|
|
49
|
+
/** The fields this module reads off a `mediaItems.subjectTracks[hash]` entry. */
|
|
50
|
+
export interface SubjectTrackEntryLike {
|
|
51
|
+
/** R2 object key — the STABLE identity every server-side reader matches on. */
|
|
52
|
+
trackR2Key?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Presigned URL for that key, added ALONGSIDE it by `resolveR2Urls`. The row
|
|
55
|
+
* carries only a SUMMARY of the track (the face roster, a count); the
|
|
56
|
+
* per-frame boxes `deriveTrajectory` needs are the R2 object, so this is the
|
|
57
|
+
* one field that makes a client-side derive possible at all.
|
|
58
|
+
*/
|
|
59
|
+
trackUrl?: string;
|
|
60
|
+
detectorVersion?: string;
|
|
61
|
+
window?: {
|
|
62
|
+
startSec: number;
|
|
63
|
+
endSec: number;
|
|
64
|
+
};
|
|
65
|
+
/** The inline face roster — who is in this window, for a per-person picker. */
|
|
66
|
+
faces?: Array<{
|
|
67
|
+
faceId: string;
|
|
68
|
+
bbox: {
|
|
69
|
+
x: number;
|
|
70
|
+
y: number;
|
|
71
|
+
width: number;
|
|
72
|
+
height: number;
|
|
73
|
+
};
|
|
74
|
+
speakingShare?: number;
|
|
75
|
+
}>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Content-address a source window, byte-identically to the server's
|
|
79
|
+
* `hashSourceWindow`. Milliseconds-rounded so float jitter cannot miss a cached
|
|
80
|
+
* track; 12 hex chars. Async because `crypto.subtle` is — available in the
|
|
81
|
+
* webview and in Node alike.
|
|
82
|
+
*
|
|
83
|
+
* The detector is omitted from the canonical form when it is 'face', which is
|
|
84
|
+
* NOT a shortcut: it is what keeps every already-cached face-track key valid.
|
|
85
|
+
*/
|
|
86
|
+
export declare function sourceWindowKey(window: SourceWindowLike): Promise<string>;
|
|
87
|
+
/** A clip that has authored a reframe, and the window whose track answers for
|
|
88
|
+
* it. `segments` travels along because `deriveTrajectory` takes it verbatim. */
|
|
89
|
+
export interface ReframeTarget {
|
|
90
|
+
clipId: string;
|
|
91
|
+
mediaId: string;
|
|
92
|
+
window: {
|
|
93
|
+
startSec: number;
|
|
94
|
+
endSec: number;
|
|
95
|
+
};
|
|
96
|
+
/** The authored `source.reframe.segments`, untouched — the derive owns their
|
|
97
|
+
* shape, and re-typing it here would be a fourth place to keep in sync. */
|
|
98
|
+
segments: unknown[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Does this reframe track a real subject? A geometric one (a screen-recording
|
|
102
|
+
* point-zoom, an honest center crop) needs nothing detected and must NEVER be
|
|
103
|
+
* handed a detection bill — nor be told it is waiting for one.
|
|
104
|
+
*/
|
|
105
|
+
export declare function reframeNeedsDetection(segments: unknown[]): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Every clip in the composition that has authored a reframe, with the source
|
|
108
|
+
* window its track is keyed by.
|
|
109
|
+
*
|
|
110
|
+
* MIRRORS `collectTrajectoryDeriveJobs`, including the two rules that are easy
|
|
111
|
+
* to get subtly wrong:
|
|
112
|
+
* · only VIDEO and IMAGE tracks (an audio clip is `kind:"media"` too, and a
|
|
113
|
+
* viewport crop is meaningless for sound)
|
|
114
|
+
* · the window is the SOURCE TRIM, defaulted exactly as `renders.ts` defaults
|
|
115
|
+
* it — `trim.start ?? 0`, `trim.end ?? start + clip.duration`
|
|
116
|
+
*
|
|
117
|
+
* Walked defensively with no zod, the `collectBehindWindows` convention, so it
|
|
118
|
+
* is safe in every bundle.
|
|
119
|
+
*/
|
|
120
|
+
export declare function reframeTargets(composition: unknown): ReframeTarget[];
|
|
121
|
+
/**
|
|
122
|
+
* What the editor can say about one reframed clip.
|
|
123
|
+
*
|
|
124
|
+
* `geometric` is a distinct state and not a convenience: a point-zoom on a
|
|
125
|
+
* screen recording is fully derivable with no detection, so calling it
|
|
126
|
+
* "waiting for a track" would be a lie that also implies a charge.
|
|
127
|
+
*/
|
|
128
|
+
export type ReframeReadiness =
|
|
129
|
+
/** No detection needed — derives off a faceless stub, today, for free. */
|
|
130
|
+
{
|
|
131
|
+
state: "geometric";
|
|
132
|
+
}
|
|
133
|
+
/** The track exists and can be fetched. */
|
|
134
|
+
| {
|
|
135
|
+
state: "track-ready";
|
|
136
|
+
entry: SubjectTrackEntryLike;
|
|
137
|
+
trackUrl: string;
|
|
138
|
+
}
|
|
139
|
+
/** A track is registered but carries no presigned URL, so the client cannot
|
|
140
|
+
* derive. The RENDER still can — it reads the key directly. */
|
|
141
|
+
| {
|
|
142
|
+
state: "track-unfetchable";
|
|
143
|
+
entry: SubjectTrackEntryLike;
|
|
144
|
+
}
|
|
145
|
+
/** Nothing detected at this window yet. This is the state that buys one. */
|
|
146
|
+
| {
|
|
147
|
+
state: "no-track";
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Can the editor derive this clip's crop trajectory right now?
|
|
151
|
+
*
|
|
152
|
+
* `subjectTracks` is `mediaItems.subjectTracks` for the target's media, exactly
|
|
153
|
+
* as it arrives from Convex — undefined for an item with no cloud perception,
|
|
154
|
+
* which is the honest shape for a local-only import.
|
|
155
|
+
*/
|
|
156
|
+
export declare function reframeReadinessForTarget(target: ReframeTarget, subjectTracks: Record<string, SubjectTrackEntryLike> | undefined): Promise<ReframeReadiness>;
|
|
@@ -3303,9 +3303,12 @@ export type CaptionStyle = z.infer<typeof CaptionStyle>;
|
|
|
3303
3303
|
/** One caption SEGMENT (a phrase / sentence) — the content unit the agent
|
|
3304
3304
|
* authors AND a hard caption-page boundary at render: the renderer paginates
|
|
3305
3305
|
* within a segment and never pools words across two, so sentence-bounded
|
|
3306
|
-
* segments (see `splitIntoSentences`) cut captions at sentence ends.
|
|
3307
|
-
*
|
|
3308
|
-
*
|
|
3306
|
+
* segments (see `splitIntoSentences`) cut captions at sentence ends.
|
|
3307
|
+
*
|
|
3308
|
+
* Depth is NOT per-segment: it is one choice for the whole caption layer
|
|
3309
|
+
* (`CompositionCaptions.zPlane`), because it decides whether the source needs
|
|
3310
|
+
* a matte at all. (This comment said captions were FRONT-ONLY until
|
|
3311
|
+
* 2026-08-28 — see `CaptionDepth` for why that rule existed and why it went.) */
|
|
3309
3312
|
export declare const CaptionSegment: z.ZodObject<{
|
|
3310
3313
|
words: z.ZodArray<z.ZodObject<{
|
|
3311
3314
|
text: z.ZodString;
|
|
@@ -3344,28 +3347,6 @@ export declare const CaptionSegment: z.ZodObject<{
|
|
|
3344
3347
|
}[];
|
|
3345
3348
|
}>;
|
|
3346
3349
|
export type CaptionSegment = z.infer<typeof CaptionSegment>;
|
|
3347
|
-
/**
|
|
3348
|
-
* PROVENANCE IS REQUIRED. `segments` is a materialized projection, and until
|
|
3349
|
-
* 2026-08-14 it carried no record of where it came from — which is the whole
|
|
3350
|
-
* bug. `useCaptionMaterialization` said so itself: "once segments exist there is
|
|
3351
|
-
* no reliable way to distinguish 'materialized from this doc' from
|
|
3352
|
-
* 'API-authored', and guessing risks destroying" the authored ones. So nothing
|
|
3353
|
-
* dared re-derive, and captions silently outlived the edits that invalidated
|
|
3354
|
-
* them — a real project carried words timed 1940–4400ms inside a 2.4s
|
|
3355
|
-
* composition, with the render reading those stale times.
|
|
3356
|
-
*
|
|
3357
|
-
* `derived` — a projection of a clip's transcript. Anything that changes that
|
|
3358
|
-
* clip (trim, cut, an excluded range, playback rate) MUST re-derive it, and may,
|
|
3359
|
-
* because `from` says exactly what to recompute from.
|
|
3360
|
-
*
|
|
3361
|
-
* `authored` — a human or agent wrote these words. Never rewritten
|
|
3362
|
-
* automatically; the segmentation is a deliberate choice.
|
|
3363
|
-
*
|
|
3364
|
-
* Segments stay MATERIALIZED rather than resolved at read time on purpose:
|
|
3365
|
-
* `compositionToRenderInput(composition, srcUrls)` takes no transcripts, and a
|
|
3366
|
-
* renderer that had to fetch them would stop being self-contained and
|
|
3367
|
-
* deterministic — which the render cache key depends on.
|
|
3368
|
-
*/
|
|
3369
3350
|
export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.ZodObject<{
|
|
3370
3351
|
source: z.ZodLiteral<"derived">;
|
|
3371
3352
|
/** The clip these words are a projection OF. Re-derive from this. */
|
|
@@ -3510,6 +3491,7 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3510
3491
|
annotationColor?: string | undefined;
|
|
3511
3492
|
maxWidthPercent?: number | undefined;
|
|
3512
3493
|
}>>;
|
|
3494
|
+
zPlane: z.ZodOptional<z.ZodEnum<["front", "behind-subject"]>>;
|
|
3513
3495
|
}, "strip", z.ZodTypeAny, {
|
|
3514
3496
|
segments: {
|
|
3515
3497
|
words: {
|
|
@@ -3524,6 +3506,7 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3524
3506
|
from: {
|
|
3525
3507
|
clipId: string;
|
|
3526
3508
|
};
|
|
3509
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
3527
3510
|
style?: {
|
|
3528
3511
|
position?: "top" | "center" | "bottom" | undefined;
|
|
3529
3512
|
fontFamily?: string | undefined;
|
|
@@ -3571,6 +3554,7 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3571
3554
|
from: {
|
|
3572
3555
|
clipId: string;
|
|
3573
3556
|
};
|
|
3557
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
3574
3558
|
style?: {
|
|
3575
3559
|
position?: "top" | "center" | "bottom" | undefined;
|
|
3576
3560
|
fontFamily?: string | undefined;
|
|
@@ -3740,6 +3724,7 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3740
3724
|
annotationColor?: string | undefined;
|
|
3741
3725
|
maxWidthPercent?: number | undefined;
|
|
3742
3726
|
}>>;
|
|
3727
|
+
zPlane: z.ZodOptional<z.ZodEnum<["front", "behind-subject"]>>;
|
|
3743
3728
|
}, "strip", z.ZodTypeAny, {
|
|
3744
3729
|
segments: {
|
|
3745
3730
|
words: {
|
|
@@ -3751,6 +3736,7 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3751
3736
|
}[];
|
|
3752
3737
|
}[];
|
|
3753
3738
|
source: "authored";
|
|
3739
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
3754
3740
|
style?: {
|
|
3755
3741
|
position?: "top" | "center" | "bottom" | undefined;
|
|
3756
3742
|
fontFamily?: string | undefined;
|
|
@@ -3795,6 +3781,7 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3795
3781
|
}[];
|
|
3796
3782
|
}[];
|
|
3797
3783
|
source: "authored";
|
|
3784
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
3798
3785
|
style?: {
|
|
3799
3786
|
position?: "top" | "center" | "bottom" | undefined;
|
|
3800
3787
|
fontFamily?: string | undefined;
|
|
@@ -3829,6 +3816,12 @@ export declare const CompositionCaptions: z.ZodDiscriminatedUnion<"source", [z.Z
|
|
|
3829
3816
|
maxWidthPercent?: number | undefined;
|
|
3830
3817
|
} | undefined;
|
|
3831
3818
|
}>]>;
|
|
3819
|
+
/** Do these captions render UNDER the speaker's silhouette? The one predicate
|
|
3820
|
+
* every gate asks, so the trigger, the renderer and the editor cannot drift
|
|
3821
|
+
* the way the overlay gates did before `isBehindSubjectDepthSource`. */
|
|
3822
|
+
export declare function captionsAreBehindSubject(captions: {
|
|
3823
|
+
zPlane?: unknown;
|
|
3824
|
+
} | null | undefined): boolean;
|
|
3832
3825
|
export type CompositionCaptions = z.infer<typeof CompositionCaptions>;
|
|
3833
3826
|
/** All caption words across the layer's segments, in order — the flattened view
|
|
3834
3827
|
* consumers that don't care about behind use. */
|
|
@@ -4337,6 +4330,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4337
4330
|
annotationColor?: string | undefined;
|
|
4338
4331
|
maxWidthPercent?: number | undefined;
|
|
4339
4332
|
}>>;
|
|
4333
|
+
zPlane: z.ZodOptional<z.ZodEnum<["front", "behind-subject"]>>;
|
|
4340
4334
|
}, "strip", z.ZodTypeAny, {
|
|
4341
4335
|
segments: {
|
|
4342
4336
|
words: {
|
|
@@ -4351,6 +4345,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4351
4345
|
from: {
|
|
4352
4346
|
clipId: string;
|
|
4353
4347
|
};
|
|
4348
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
4354
4349
|
style?: {
|
|
4355
4350
|
position?: "top" | "center" | "bottom" | undefined;
|
|
4356
4351
|
fontFamily?: string | undefined;
|
|
@@ -4398,6 +4393,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4398
4393
|
from: {
|
|
4399
4394
|
clipId: string;
|
|
4400
4395
|
};
|
|
4396
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
4401
4397
|
style?: {
|
|
4402
4398
|
position?: "top" | "center" | "bottom" | undefined;
|
|
4403
4399
|
fontFamily?: string | undefined;
|
|
@@ -4567,6 +4563,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4567
4563
|
annotationColor?: string | undefined;
|
|
4568
4564
|
maxWidthPercent?: number | undefined;
|
|
4569
4565
|
}>>;
|
|
4566
|
+
zPlane: z.ZodOptional<z.ZodEnum<["front", "behind-subject"]>>;
|
|
4570
4567
|
}, "strip", z.ZodTypeAny, {
|
|
4571
4568
|
segments: {
|
|
4572
4569
|
words: {
|
|
@@ -4578,6 +4575,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4578
4575
|
}[];
|
|
4579
4576
|
}[];
|
|
4580
4577
|
source: "authored";
|
|
4578
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
4581
4579
|
style?: {
|
|
4582
4580
|
position?: "top" | "center" | "bottom" | undefined;
|
|
4583
4581
|
fontFamily?: string | undefined;
|
|
@@ -4622,6 +4620,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4622
4620
|
}[];
|
|
4623
4621
|
}[];
|
|
4624
4622
|
source: "authored";
|
|
4623
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
4625
4624
|
style?: {
|
|
4626
4625
|
position?: "top" | "center" | "bottom" | undefined;
|
|
4627
4626
|
fontFamily?: string | undefined;
|
|
@@ -4884,6 +4883,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4884
4883
|
from: {
|
|
4885
4884
|
clipId: string;
|
|
4886
4885
|
};
|
|
4886
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
4887
4887
|
style?: {
|
|
4888
4888
|
position?: "top" | "center" | "bottom" | undefined;
|
|
4889
4889
|
fontFamily?: string | undefined;
|
|
@@ -4928,6 +4928,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
4928
4928
|
}[];
|
|
4929
4929
|
}[];
|
|
4930
4930
|
source: "authored";
|
|
4931
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
4931
4932
|
style?: {
|
|
4932
4933
|
position?: "top" | "center" | "bottom" | undefined;
|
|
4933
4934
|
fontFamily?: string | undefined;
|
|
@@ -5019,6 +5020,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
5019
5020
|
from: {
|
|
5020
5021
|
clipId: string;
|
|
5021
5022
|
};
|
|
5023
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
5022
5024
|
style?: {
|
|
5023
5025
|
position?: "top" | "center" | "bottom" | undefined;
|
|
5024
5026
|
fontFamily?: string | undefined;
|
|
@@ -5063,6 +5065,7 @@ export declare const Composition: z.ZodObject<{
|
|
|
5063
5065
|
}[];
|
|
5064
5066
|
}[];
|
|
5065
5067
|
source: "authored";
|
|
5068
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
5066
5069
|
style?: {
|
|
5067
5070
|
position?: "top" | "center" | "bottom" | undefined;
|
|
5068
5071
|
fontFamily?: string | undefined;
|
|
@@ -5660,6 +5663,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
5660
5663
|
annotationColor?: string | undefined;
|
|
5661
5664
|
maxWidthPercent?: number | undefined;
|
|
5662
5665
|
}>>;
|
|
5666
|
+
zPlane: z.ZodOptional<z.ZodEnum<["front", "behind-subject"]>>;
|
|
5663
5667
|
}, "strip", z.ZodTypeAny, {
|
|
5664
5668
|
segments: {
|
|
5665
5669
|
words: {
|
|
@@ -5674,6 +5678,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
5674
5678
|
from: {
|
|
5675
5679
|
clipId: string;
|
|
5676
5680
|
};
|
|
5681
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
5677
5682
|
style?: {
|
|
5678
5683
|
position?: "top" | "center" | "bottom" | undefined;
|
|
5679
5684
|
fontFamily?: string | undefined;
|
|
@@ -5721,6 +5726,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
5721
5726
|
from: {
|
|
5722
5727
|
clipId: string;
|
|
5723
5728
|
};
|
|
5729
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
5724
5730
|
style?: {
|
|
5725
5731
|
position?: "top" | "center" | "bottom" | undefined;
|
|
5726
5732
|
fontFamily?: string | undefined;
|
|
@@ -5890,6 +5896,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
5890
5896
|
annotationColor?: string | undefined;
|
|
5891
5897
|
maxWidthPercent?: number | undefined;
|
|
5892
5898
|
}>>;
|
|
5899
|
+
zPlane: z.ZodOptional<z.ZodEnum<["front", "behind-subject"]>>;
|
|
5893
5900
|
}, "strip", z.ZodTypeAny, {
|
|
5894
5901
|
segments: {
|
|
5895
5902
|
words: {
|
|
@@ -5901,6 +5908,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
5901
5908
|
}[];
|
|
5902
5909
|
}[];
|
|
5903
5910
|
source: "authored";
|
|
5911
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
5904
5912
|
style?: {
|
|
5905
5913
|
position?: "top" | "center" | "bottom" | undefined;
|
|
5906
5914
|
fontFamily?: string | undefined;
|
|
@@ -5945,6 +5953,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
5945
5953
|
}[];
|
|
5946
5954
|
}[];
|
|
5947
5955
|
source: "authored";
|
|
5956
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
5948
5957
|
style?: {
|
|
5949
5958
|
position?: "top" | "center" | "bottom" | undefined;
|
|
5950
5959
|
fontFamily?: string | undefined;
|
|
@@ -6207,6 +6216,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6207
6216
|
from: {
|
|
6208
6217
|
clipId: string;
|
|
6209
6218
|
};
|
|
6219
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6210
6220
|
style?: {
|
|
6211
6221
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6212
6222
|
fontFamily?: string | undefined;
|
|
@@ -6251,6 +6261,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6251
6261
|
}[];
|
|
6252
6262
|
}[];
|
|
6253
6263
|
source: "authored";
|
|
6264
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6254
6265
|
style?: {
|
|
6255
6266
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6256
6267
|
fontFamily?: string | undefined;
|
|
@@ -6342,6 +6353,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6342
6353
|
from: {
|
|
6343
6354
|
clipId: string;
|
|
6344
6355
|
};
|
|
6356
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6345
6357
|
style?: {
|
|
6346
6358
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6347
6359
|
fontFamily?: string | undefined;
|
|
@@ -6386,6 +6398,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6386
6398
|
}[];
|
|
6387
6399
|
}[];
|
|
6388
6400
|
source: "authored";
|
|
6401
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6389
6402
|
style?: {
|
|
6390
6403
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6391
6404
|
fontFamily?: string | undefined;
|
|
@@ -6625,6 +6638,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6625
6638
|
from: {
|
|
6626
6639
|
clipId: string;
|
|
6627
6640
|
};
|
|
6641
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6628
6642
|
style?: {
|
|
6629
6643
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6630
6644
|
fontFamily?: string | undefined;
|
|
@@ -6669,6 +6683,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6669
6683
|
}[];
|
|
6670
6684
|
}[];
|
|
6671
6685
|
source: "authored";
|
|
6686
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6672
6687
|
style?: {
|
|
6673
6688
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6674
6689
|
fontFamily?: string | undefined;
|
|
@@ -6771,6 +6786,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6771
6786
|
from: {
|
|
6772
6787
|
clipId: string;
|
|
6773
6788
|
};
|
|
6789
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6774
6790
|
style?: {
|
|
6775
6791
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6776
6792
|
fontFamily?: string | undefined;
|
|
@@ -6815,6 +6831,7 @@ export declare const CompositionVersion: z.ZodObject<{
|
|
|
6815
6831
|
}[];
|
|
6816
6832
|
}[];
|
|
6817
6833
|
source: "authored";
|
|
6834
|
+
zPlane?: "front" | "behind-subject" | undefined;
|
|
6818
6835
|
style?: {
|
|
6819
6836
|
position?: "top" | "center" | "bottom" | undefined;
|
|
6820
6837
|
fontFamily?: string | undefined;
|