@cueframe/kernel 0.0.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/dist/TextureLoader-UQOFUSAP.js +422 -0
- package/dist/VideoTexture-AQWSPIJG.js +62 -0
- package/dist/_members/account-model/index.d.ts +1 -0
- package/dist/_members/account-model/index.js +4 -0
- package/dist/_members/account-model/testing/conversationStoreContract.d.ts +97 -0
- package/dist/_members/account-model/testing/conversationStoreContract.js +168 -0
- package/dist/_members/account-model/testing/index.d.ts +7 -0
- package/dist/_members/account-model/testing/index.js +7 -0
- package/dist/_members/account-model/testing/restorePointStoreContract.d.ts +52 -0
- package/dist/_members/account-model/testing/restorePointStoreContract.js +69 -0
- package/dist/_members/account-model/types/index.d.ts +5 -0
- package/dist/_members/account-model/types/index.js +1 -0
- package/dist/_members/account-model/validators/contextFile.d.ts +36 -0
- package/dist/_members/account-model/validators/contextFile.js +18 -0
- package/dist/_members/account-model/validators/conversation.d.ts +153 -0
- package/dist/_members/account-model/validators/conversation.js +95 -0
- package/dist/_members/account-model/validators/dashboardInsight.d.ts +30 -0
- package/dist/_members/account-model/validators/dashboardInsight.js +16 -0
- package/dist/_members/account-model/validators/index.d.ts +7 -0
- package/dist/_members/account-model/validators/index.js +7 -0
- package/dist/_members/account-model/validators/sessionToken.d.ts +79 -0
- package/dist/_members/account-model/validators/sessionToken.js +49 -0
- package/dist/_members/account-model/validators/uploadToken.d.ts +33 -0
- package/dist/_members/account-model/validators/uploadToken.js +16 -0
- package/dist/_members/account-model/validators/userSettings.d.ts +22 -0
- package/dist/_members/account-model/validators/userSettings.js +12 -0
- package/dist/_members/account-model/validators/workingComposition.d.ts +34 -0
- package/dist/_members/account-model/validators/workingComposition.js +20 -0
- package/dist/_members/animate/animations/Create.d.ts +36 -0
- package/dist/_members/animate/animations/FadeIn.d.ts +36 -0
- package/dist/_members/animate/animations/GrowArrow.d.ts +36 -0
- package/dist/_members/animate/animations/GrowFromCenter.d.ts +25 -0
- package/dist/_members/animate/animations/Indicate.d.ts +29 -0
- package/dist/_members/animate/animations/MoveAlongPath.d.ts +30 -0
- package/dist/_members/animate/animations/Transform.d.ts +46 -0
- package/dist/_members/animate/animations/Wiggle.d.ts +31 -0
- package/dist/_members/animate/animations/Write.d.ts +35 -0
- package/dist/_members/animate/animations/index.d.ts +9 -0
- package/dist/_members/animate/composition/AnimationGroup.d.ts +32 -0
- package/dist/_members/animate/composition/LaggedStart.d.ts +33 -0
- package/dist/_members/animate/composition/Succession.d.ts +27 -0
- package/dist/_members/animate/composition/index.d.ts +3 -0
- package/dist/_members/animate/easing/index.d.ts +3 -0
- package/dist/_members/animate/easing/rush.d.ts +16 -0
- package/dist/_members/animate/easing/smooth.d.ts +8 -0
- package/dist/_members/animate/easing/smootherstep.d.ts +7 -0
- package/dist/_members/animate/index.d.ts +25 -0
- package/dist/_members/animate/mobjects/Arrow.d.ts +41 -0
- package/dist/_members/animate/mobjects/BrandBox.d.ts +43 -0
- package/dist/_members/animate/mobjects/DiGraph.d.ts +21 -0
- package/dist/_members/animate/mobjects/Graph.d.ts +72 -0
- package/dist/_members/animate/mobjects/index.d.ts +4 -0
- package/dist/_members/animate/three/ThreeCanvas.d.ts +36 -0
- package/dist/_members/animate/three/drei.d.ts +13 -0
- package/dist/_members/animate/three/index.d.ts +2 -0
- package/dist/_members/authoring/agent/buildTools.d.ts +54 -0
- package/dist/_members/authoring/agent/contextManagement.d.ts +73 -0
- package/dist/_members/authoring/agent/errors.d.ts +12 -0
- package/dist/_members/authoring/agent/index.d.ts +2 -0
- package/dist/_members/authoring/agent/memoryTool.d.ts +8 -0
- package/dist/_members/authoring/agent/promptCache.d.ts +34 -0
- package/dist/_members/authoring/agent.d.ts +59 -0
- package/dist/_members/authoring/capabilities.d.ts +306 -0
- package/dist/_members/authoring/composer/index.d.ts +2 -0
- package/dist/_members/authoring/composer/scopes.d.ts +26 -0
- package/dist/_members/authoring/context/brand.d.ts +37 -0
- package/dist/_members/authoring/context/brandTokens.d.ts +6 -0
- package/dist/_members/authoring/context/index.d.ts +8 -0
- package/dist/_members/authoring/context/timeline.d.ts +33 -0
- package/dist/_members/authoring/context/transcript.d.ts +24 -0
- package/dist/_members/authoring/context/types.d.ts +5 -0
- package/dist/_members/authoring/decomposer.d.ts +17 -0
- package/dist/_members/authoring/evaluate.d.ts +37 -0
- package/dist/_members/authoring/evaluator.d.ts +22 -0
- package/dist/_members/authoring/index.d.ts +25 -0
- package/dist/_members/authoring/models/modelFactory.d.ts +107 -0
- package/dist/_members/authoring/motion/applyMotionPreset.d.ts +31 -0
- package/dist/_members/authoring/motion/index.d.ts +6 -0
- package/dist/_members/authoring/motion/materializeMotionPresetOps.d.ts +38 -0
- package/dist/_members/authoring/motion/shell.d.ts +30 -0
- package/dist/_members/authoring/pipelineTrace.d.ts +38 -0
- package/dist/_members/authoring/prompts/decomposerPrompt.d.ts +5 -0
- package/dist/_members/authoring/prompts/designReviewerPrompt.d.ts +18 -0
- package/dist/_members/authoring/prompts/evaluatorPrompt.d.ts +5 -0
- package/dist/_members/authoring/prompts/graphics.d.ts +14 -0
- package/dist/_members/authoring/prompts/index.d.ts +4 -0
- package/dist/_members/authoring/prompts/plannerPrompt.d.ts +48 -0
- package/dist/_members/authoring/providers/index.d.ts +1 -0
- package/dist/_members/authoring/providers/resourceApi.d.ts +32 -0
- package/dist/_members/authoring/resource-routing.d.ts +186 -0
- package/dist/_members/authoring/resources.d.ts +59 -0
- package/dist/_members/authoring/scope.d.ts +31 -0
- package/dist/_members/authoring/tools/brandTokens.d.ts +34 -0
- package/dist/_members/authoring/tools/composeRoleTools.d.ts +112 -0
- package/dist/_members/authoring/tools/index.d.ts +4 -0
- package/dist/_members/authoring/tools/toolSets.d.ts +54 -0
- package/dist/_members/authoring/transpileComponent.d.ts +40 -0
- package/dist/_members/authoring/transpileHelper.d.ts +26 -0
- package/dist/_members/authoring/types.d.ts +572 -0
- package/dist/_members/brand-derivation/constants.d.ts +27 -0
- package/dist/_members/brand-derivation/constants.js +20 -0
- package/dist/_members/brand-derivation/contrastSafe.d.ts +47 -0
- package/dist/_members/brand-derivation/contrastSafe.js +114 -0
- package/dist/_members/brand-derivation/index.d.ts +1 -0
- package/dist/_members/brand-derivation/index.js +1 -0
- package/dist/_members/compose/CompositionRenderer.d.ts +12 -0
- package/dist/_members/compose/catalog.d.ts +1 -0
- package/dist/_members/compose/index.d.ts +8 -0
- package/dist/_members/compose/primitiveRegistry.d.ts +90 -0
- package/dist/_members/compose/sceneToRenderInput.d.ts +51 -0
- package/dist/_members/compose/schema.d.ts +45 -0
- package/dist/_members/compose/tokenResolver.d.ts +28 -0
- package/dist/_members/composition/audio/audioMix.d.ts +67 -0
- package/dist/_members/composition/audio/audioMix.js +61 -0
- package/dist/_members/composition/audio/index.d.ts +5 -0
- package/dist/_members/composition/audio/index.js +5 -0
- package/dist/_members/composition/audio/mixStaging.d.ts +107 -0
- package/dist/_members/composition/audio/mixStaging.js +195 -0
- package/dist/_members/composition/audio/musicPack.d.ts +56 -0
- package/dist/_members/composition/audio/musicPack.generated.d.ts +9 -0
- package/dist/_members/composition/audio/musicPack.generated.js +136 -0
- package/dist/_members/composition/audio/musicPack.js +36 -0
- package/dist/_members/composition/audio/pack.d.ts +67 -0
- package/dist/_members/composition/audio/pack.generated.d.ts +9 -0
- package/dist/_members/composition/audio/pack.generated.js +603 -0
- package/dist/_members/composition/audio/pack.js +48 -0
- package/dist/_members/composition/audio/palette.d.ts +82 -0
- package/dist/_members/composition/audio/palette.js +134 -0
- package/dist/_members/composition/autozoom/index.d.ts +57 -0
- package/dist/_members/composition/autozoom/index.js +83 -0
- package/dist/_members/composition/brand-kit.d.ts +58 -0
- package/dist/_members/composition/brand-kit.js +45 -0
- package/dist/_members/composition/brief/contract.d.ts +132 -0
- package/dist/_members/composition/brief/contract.js +209 -0
- package/dist/_members/composition/color-grade.d.ts +17 -0
- package/dist/_members/composition/color-grade.js +80 -0
- package/dist/_members/composition/depth.d.ts +24 -0
- package/dist/_members/composition/depth.js +8 -0
- package/dist/_members/composition/fixtures/agentErrored.d.ts +25 -0
- package/dist/_members/composition/fixtures/index.d.ts +7 -0
- package/dist/_members/composition/fixtures/index.js +143 -0
- package/dist/_members/composition/fixtures/vaayaErrored.d.ts +25 -0
- package/dist/_members/composition/fixtures/vaayaErrored.js +203 -0
- package/dist/_members/composition/fonts.d.ts +68 -0
- package/dist/_members/composition/fonts.js +162 -0
- package/dist/_members/composition/graphics-plan/compile.d.ts +43 -0
- package/dist/_members/composition/graphics-plan/compile.js +221 -0
- package/dist/_members/composition/graphics-plan/index.d.ts +11 -0
- package/dist/_members/composition/graphics-plan/index.js +10 -0
- package/dist/_members/composition/graphics-plan/instantiateMotif.d.ts +51 -0
- package/dist/_members/composition/graphics-plan/instantiateMotif.js +44 -0
- package/dist/_members/composition/graphics-plan/motion.d.ts +19 -0
- package/dist/_members/composition/graphics-plan/motion.js +66 -0
- package/dist/_members/composition/graphics-plan/schemas.d.ts +1672 -0
- package/dist/_members/composition/graphics-plan/schemas.js +261 -0
- package/dist/_members/composition/graphics-plan/solve.d.ts +34 -0
- package/dist/_members/composition/graphics-plan/solve.js +145 -0
- package/dist/_members/composition/index.d.ts +7 -0
- package/dist/_members/composition/index.js +5 -0
- package/dist/_members/composition/invariants/clipPlacement.d.ts +65 -0
- package/dist/_members/composition/invariants/clipPlacement.js +69 -0
- package/dist/_members/composition/invariants/composition.d.ts +9 -0
- package/dist/_members/composition/invariants/composition.js +28 -0
- package/dist/_members/composition/invariants/errors.d.ts +11 -0
- package/dist/_members/composition/invariants/errors.js +10 -0
- package/dist/_members/composition/invariants/etag.d.ts +10 -0
- package/dist/_members/composition/invariants/etag.js +38 -0
- package/dist/_members/composition/invariants/ids.d.ts +9 -0
- package/dist/_members/composition/invariants/ids.js +33 -0
- package/dist/_members/composition/invariants/index.d.ts +9 -0
- package/dist/_members/composition/invariants/index.js +9 -0
- package/dist/_members/composition/invariants/keyframes.d.ts +23 -0
- package/dist/_members/composition/invariants/keyframes.js +45 -0
- package/dist/_members/composition/invariants/markers.d.ts +9 -0
- package/dist/_members/composition/invariants/markers.js +29 -0
- package/dist/_members/composition/invariants/time.d.ts +22 -0
- package/dist/_members/composition/invariants/time.js +20 -0
- package/dist/_members/composition/invariants/tracks.d.ts +58 -0
- package/dist/_members/composition/invariants/tracks.js +304 -0
- package/dist/_members/composition/ops/compositionOps.d.ts +129 -0
- package/dist/_members/composition/ops/compositionOps.js +1056 -0
- package/dist/_members/composition/ops/headlessStore.d.ts +40 -0
- package/dist/_members/composition/ops/headlessStore.js +94 -0
- package/dist/_members/composition/ops/index.d.ts +6 -0
- package/dist/_members/composition/ops/index.js +4 -0
- package/dist/_members/composition/ops/selectors.d.ts +81 -0
- package/dist/_members/composition/ops/selectors.js +118 -0
- package/dist/_members/composition/ops/timeline-word.d.ts +24 -0
- package/dist/_members/composition/ops/timeline-word.js +1 -0
- package/dist/_members/composition/ops/transcript.d.ts +44 -0
- package/dist/_members/composition/ops/transcript.js +77 -0
- package/dist/_members/composition/ops/types.d.ts +145 -0
- package/dist/_members/composition/ops/types.js +16 -0
- package/dist/_members/composition/primitive-catalog/catalogQuery.d.ts +82 -0
- package/dist/_members/composition/primitive-catalog/catalogQuery.js +150 -0
- package/dist/_members/composition/primitive-catalog/disabled.d.ts +3 -0
- package/dist/_members/composition/primitive-catalog/disabled.js +32 -0
- package/dist/_members/composition/primitive-catalog/generated/meta.d.ts +2 -0
- package/dist/_members/composition/primitive-catalog/generated/meta.js +15161 -0
- package/dist/_members/composition/primitive-catalog/index.d.ts +28 -0
- package/dist/_members/composition/primitive-catalog/index.js +46 -0
- package/dist/_members/composition/primitive-catalog/paramValidation.d.ts +76 -0
- package/dist/_members/composition/primitive-catalog/paramValidation.js +231 -0
- package/dist/_members/composition/primitive-catalog/projection.d.ts +99 -0
- package/dist/_members/composition/primitive-catalog/projection.js +164 -0
- package/dist/_members/composition/primitive-catalog/types.d.ts +123 -0
- package/dist/_members/composition/primitive-catalog/types.js +14 -0
- package/dist/_members/composition/projection/behind-placement.d.ts +64 -0
- package/dist/_members/composition/projection/behind-placement.js +62 -0
- package/dist/_members/composition/projection/brandKit.d.ts +308 -0
- package/dist/_members/composition/projection/brandKit.js +482 -0
- package/dist/_members/composition/projection/cardTokens.d.ts +70 -0
- package/dist/_members/composition/projection/cardTokens.js +209 -0
- package/dist/_members/composition/projection/composition-floor.d.ts +349 -0
- package/dist/_members/composition/projection/composition-floor.js +582 -0
- package/dist/_members/composition/projection/cropProjection.d.ts +140 -0
- package/dist/_members/composition/projection/cropProjection.js +257 -0
- package/dist/_members/composition/projection/index.d.ts +7 -0
- package/dist/_members/composition/projection/index.js +7 -0
- package/dist/_members/composition/projection/occlusion-budget.d.ts +67 -0
- package/dist/_members/composition/projection/occlusion-budget.js +104 -0
- package/dist/_members/composition/projection/safe-zones.d.ts +38 -0
- package/dist/_members/composition/projection/safe-zones.js +99 -0
- package/dist/_members/composition/reframe/aspectLoss.d.ts +49 -0
- package/dist/_members/composition/reframe/aspectLoss.js +115 -0
- package/dist/_members/composition/reframe/coverage.d.ts +48 -0
- package/dist/_members/composition/reframe/coverage.js +62 -0
- package/dist/_members/composition/reframe/derive.d.ts +37 -0
- package/dist/_members/composition/reframe/derive.js +73 -0
- package/dist/_members/composition/reframe/index.d.ts +658 -0
- package/dist/_members/composition/reframe/index.js +109 -0
- package/dist/_members/composition/reframe/kenBurns.d.ts +43 -0
- package/dist/_members/composition/reframe/kenBurns.js +64 -0
- package/dist/_members/composition/reframe/shotScale.d.ts +118 -0
- package/dist/_members/composition/reframe/shotScale.js +176 -0
- package/dist/_members/composition/reframe/trajectory.d.ts +99 -0
- package/dist/_members/composition/reframe/trajectory.js +124 -0
- package/dist/_members/composition/timeline/compound.d.ts +36 -0
- package/dist/_members/composition/timeline/compound.js +134 -0
- package/dist/_members/composition/timeline/index.d.ts +9 -0
- package/dist/_members/composition/timeline/index.js +9 -0
- package/dist/_members/composition/timeline/intent.d.ts +54 -0
- package/dist/_members/composition/timeline/intent.js +228 -0
- package/dist/_members/composition/timeline/keyframes.d.ts +50 -0
- package/dist/_members/composition/timeline/keyframes.js +121 -0
- package/dist/_members/composition/timeline/link.d.ts +36 -0
- package/dist/_members/composition/timeline/link.js +59 -0
- package/dist/_members/composition/timeline/occupancy.d.ts +72 -0
- package/dist/_members/composition/timeline/occupancy.js +36 -0
- package/dist/_members/composition/timeline/placement.d.ts +86 -0
- package/dist/_members/composition/timeline/placement.js +74 -0
- package/dist/_members/composition/timeline/plan.d.ts +109 -0
- package/dist/_members/composition/timeline/plan.js +31 -0
- package/dist/_members/composition/timeline/resolve.d.ts +55 -0
- package/dist/_members/composition/timeline/resolve.js +170 -0
- package/dist/_members/composition/timeline/trims.d.ts +54 -0
- package/dist/_members/composition/timeline/trims.js +278 -0
- package/dist/_members/composition/types/index.d.ts +8 -0
- package/dist/_members/composition/types/index.js +1 -0
- package/dist/_members/composition/validators/brandKit.d.ts +1472 -0
- package/dist/_members/composition/validators/brandKit.js +295 -0
- package/dist/_members/composition/validators/composePlan.d.ts +960 -0
- package/dist/_members/composition/validators/composePlan.js +113 -0
- package/dist/_members/composition/validators/composition.d.ts +6881 -0
- package/dist/_members/composition/validators/composition.js +703 -0
- package/dist/_members/composition/validators/font.d.ts +114 -0
- package/dist/_members/composition/validators/font.js +34 -0
- package/dist/_members/composition/validators/graphicKinds.d.ts +32 -0
- package/dist/_members/composition/validators/graphicKinds.js +30 -0
- package/dist/_members/composition/validators/index.d.ts +9 -0
- package/dist/_members/composition/validators/index.js +9 -0
- package/dist/_members/composition/validators/project.d.ts +62 -0
- package/dist/_members/composition/validators/project.js +29 -0
- package/dist/_members/composition/validators/registry.d.ts +161 -0
- package/dist/_members/composition/validators/registry.js +41 -0
- package/dist/_members/composition/validators/render.d.ts +8274 -0
- package/dist/_members/composition/validators/render.js +139 -0
- package/dist/_members/composition/validators/session.d.ts +117 -0
- package/dist/_members/composition/validators/session.js +37 -0
- package/dist/_members/composition/validators/webhook.d.ts +83 -0
- package/dist/_members/composition/validators/webhook.js +72 -0
- package/dist/_members/composition-ops/alphaLayers.d.ts +70 -0
- package/dist/_members/composition-ops/alphaLayers.js +141 -0
- package/dist/_members/composition-ops/index.d.ts +4940 -0
- package/dist/_members/composition-ops/index.js +637 -0
- package/dist/_members/composition-ops/materializeGrid.d.ts +56 -0
- package/dist/_members/composition-ops/materializeGrid.js +99 -0
- package/dist/_members/composition-ops/opRecorder.d.ts +77 -0
- package/dist/_members/composition-ops/opRecorder.js +196 -0
- package/dist/_members/composition-ops/recordingStore.d.ts +23 -0
- package/dist/_members/composition-ops/recordingStore.js +14 -0
- package/dist/_members/composition-ops/replaceRegion.d.ts +65 -0
- package/dist/_members/composition-ops/replaceRegion.js +102 -0
- package/dist/_members/composition-ops/testFixtures.d.ts +19 -0
- package/dist/_members/composition-ops/testFixtures.js +19 -0
- package/dist/_members/core/index.d.ts +3 -0
- package/dist/_members/core/index.js +5 -0
- package/dist/_members/core/render/bookends.d.ts +62 -0
- package/dist/_members/core/render/bookends.js +53 -0
- package/dist/_members/core/render/captions.d.ts +65 -0
- package/dist/_members/core/render/captions.js +127 -0
- package/dist/_members/core/render/compositionRender.d.ts +190 -0
- package/dist/_members/core/render/compositionRender.js +1249 -0
- package/dist/_members/core/render/deriveTrajectory.d.ts +188 -0
- package/dist/_members/core/render/deriveTrajectory.js +889 -0
- package/dist/_members/core/render/emphasis.d.ts +13 -0
- package/dist/_members/core/render/emphasis.js +16 -0
- package/dist/_members/core/render/eval/cropBox.d.ts +88 -0
- package/dist/_members/core/render/eval/cropBox.js +139 -0
- package/dist/_members/core/render/eval/inclusion.d.ts +50 -0
- package/dist/_members/core/render/eval/inclusion.js +96 -0
- package/dist/_members/core/render/eval/index.d.ts +93 -0
- package/dist/_members/core/render/eval/index.js +146 -0
- package/dist/_members/core/render/eval/metrics.d.ts +50 -0
- package/dist/_members/core/render/eval/metrics.js +94 -0
- package/dist/_members/core/render/exportSettings.d.ts +40 -0
- package/dist/_members/core/render/exportSettings.js +65 -0
- package/dist/_members/core/render/index.d.ts +14 -0
- package/dist/_members/core/render/index.js +20 -0
- package/dist/_members/core/render/mapFaceToPerson.d.ts +39 -0
- package/dist/_members/core/render/mapFaceToPerson.js +73 -0
- package/dist/_members/core/render/types.d.ts +304 -0
- package/dist/_members/core/render/types.js +8 -0
- package/dist/_members/core/render/vcam/cameraPath.d.ts +51 -0
- package/dist/_members/core/render/vcam/cameraPath.js +248 -0
- package/dist/_members/core/render/vcam/constants.d.ts +113 -0
- package/dist/_members/core/render/vcam/constants.js +115 -0
- package/dist/_members/core/render/vcam/errorCodes.d.ts +30 -0
- package/dist/_members/core/render/vcam/errorCodes.js +39 -0
- package/dist/_members/core/render/vcam/framing.d.ts +90 -0
- package/dist/_members/core/render/vcam/framing.js +136 -0
- package/dist/_members/core/render/vcam/requiredRegion.d.ts +85 -0
- package/dist/_members/core/render/vcam/requiredRegion.js +137 -0
- package/dist/_members/core/render/vcam/shots.d.ts +45 -0
- package/dist/_members/core/render/vcam/shots.js +53 -0
- package/dist/_members/core/render/vcam/subjectSet.d.ts +106 -0
- package/dist/_members/core/render/vcam/subjectSet.js +388 -0
- package/dist/_members/core/select/errorCodes.d.ts +27 -0
- package/dist/_members/core/select/errorCodes.js +38 -0
- package/dist/_members/core/select/index.d.ts +27 -0
- package/dist/_members/core/select/index.js +26 -0
- package/dist/_members/core/select/model.d.ts +178 -0
- package/dist/_members/core/select/model.js +18 -0
- package/dist/_members/core/select/select.d.ts +63 -0
- package/dist/_members/core/select/select.js +244 -0
- package/dist/_members/core/select/stabilize.d.ts +145 -0
- package/dist/_members/core/select/stabilize.js +242 -0
- package/dist/_members/core/types.d.ts +84 -0
- package/dist/_members/core/types.js +7 -0
- package/dist/_members/errors/index.d.ts +1 -0
- package/dist/_members/errors/index.js +1 -0
- package/dist/_members/errors/registry.d.ts +708 -0
- package/dist/_members/errors/registry.js +560 -0
- package/dist/_members/foundation/codes/index.d.ts +31 -0
- package/dist/_members/foundation/codes/index.js +31 -0
- package/dist/_members/foundation/index.d.ts +2 -0
- package/dist/_members/foundation/index.js +2 -0
- package/dist/_members/foundation/primitives/index.d.ts +9 -0
- package/dist/_members/foundation/primitives/index.js +5 -0
- package/dist/_members/mcp/adapter.d.ts +138 -0
- package/dist/_members/mcp/adapter.js +771 -0
- package/dist/_members/mcp/burnedNames.d.ts +23 -0
- package/dist/_members/mcp/burnedNames.js +73 -0
- package/dist/_members/mcp/core.d.ts +158 -0
- package/dist/_members/mcp/core.js +390 -0
- package/dist/_members/mcp/curation.d.ts +155 -0
- package/dist/_members/mcp/curation.js +792 -0
- package/dist/_members/mcp/executor.d.ts +60 -0
- package/dist/_members/mcp/executor.js +142 -0
- package/dist/_members/mcp/format.d.ts +7 -0
- package/dist/_members/mcp/format.js +9 -0
- package/dist/_members/mcp/generated/catalogPreviews.d.ts +2 -0
- package/dist/_members/mcp/generated/catalogPreviews.js +95 -0
- package/dist/_members/mcp/generated/harness.d.ts +1 -0
- package/dist/_members/mcp/generated/harness.js +81 -0
- package/dist/_members/mcp/generated/operations.d.ts +41 -0
- package/dist/_members/mcp/generated/operations.js +131 -0
- package/dist/_members/mcp/index.d.ts +3 -0
- package/dist/_members/mcp/index.js +50 -0
- package/dist/_members/mcp/internalLoopTools.d.ts +25 -0
- package/dist/_members/mcp/internalLoopTools.js +109 -0
- package/dist/_members/mcp/prompts.d.ts +22 -0
- package/dist/_members/mcp/prompts.js +45 -0
- package/dist/_members/mcp/resources.d.ts +16 -0
- package/dist/_members/mcp/resources.js +166 -0
- package/dist/_members/mcp/server.d.ts +92 -0
- package/dist/_members/mcp/server.js +340 -0
- package/dist/_members/mcp/wait.d.ts +37 -0
- package/dist/_members/mcp/wait.js +378 -0
- package/dist/_members/mcp/x402Meta.d.ts +50 -0
- package/dist/_members/mcp/x402Meta.js +66 -0
- package/dist/_members/media-model/api.d.ts +877 -0
- package/dist/_members/media-model/api.js +175 -0
- package/dist/_members/media-model/index.d.ts +1 -0
- package/dist/_members/media-model/index.js +1 -0
- package/dist/_members/media-model/media-kind.d.ts +36 -0
- package/dist/_members/media-model/media-kind.js +116 -0
- package/dist/_members/media-model/testing/index.d.ts +2 -0
- package/dist/_members/media-model/testing/index.js +1 -0
- package/dist/_members/media-model/testing/mediaStoreContract.d.ts +17 -0
- package/dist/_members/media-model/testing/mediaStoreContract.js +82 -0
- package/dist/_members/media-model/transcriptSearch.d.ts +54 -0
- package/dist/_members/media-model/transcriptSearch.js +70 -0
- package/dist/_members/media-model/transcriptSearchCases.json +79 -0
- package/dist/_members/nle-export/compact-timeline.d.ts +2 -0
- package/dist/_members/nle-export/compact-timeline.js +73 -0
- package/dist/_members/nle-export/compact-timeline.js.map +1 -0
- package/dist/_members/nle-export/composition-to-input.d.ts +2 -0
- package/dist/_members/nle-export/composition-to-input.js +147 -0
- package/dist/_members/nle-export/composition-to-input.js.map +1 -0
- package/dist/_members/nle-export/fcpxml.d.ts +15 -0
- package/dist/_members/nle-export/fcpxml.js +159 -0
- package/dist/_members/nle-export/fcpxml.js.map +1 -0
- package/dist/_members/nle-export/index.d.ts +11 -0
- package/dist/_members/nle-export/index.js +12 -0
- package/dist/_members/nle-export/index.js.map +1 -0
- package/dist/_members/nle-export/premiere.d.ts +2 -0
- package/dist/_members/nle-export/premiere.js +161 -0
- package/dist/_members/nle-export/premiere.js.map +1 -0
- package/dist/_members/nle-export/server/index.d.ts +1 -0
- package/dist/_members/nle-export/server/index.js +2 -0
- package/dist/_members/nle-export/server/index.js.map +1 -0
- package/dist/_members/nle-export/server/pack-zip.d.ts +6 -0
- package/dist/_members/nle-export/server/pack-zip.js +38 -0
- package/dist/_members/nle-export/server/pack-zip.js.map +1 -0
- package/dist/_members/nle-export/srt.d.ts +2 -0
- package/dist/_members/nle-export/srt.js +50 -0
- package/dist/_members/nle-export/srt.js.map +1 -0
- package/dist/_members/nle-export/types.d.ts +183 -0
- package/dist/_members/nle-export/types.js +9 -0
- package/dist/_members/nle-export/types.js.map +1 -0
- package/dist/_members/nle-export/xml/index.d.ts +10 -0
- package/dist/_members/nle-export/xml/index.js +11 -0
- package/dist/_members/nle-export/xml/index.js.map +1 -0
- package/dist/_members/nle-export/xml-utils.d.ts +21 -0
- package/dist/_members/nle-export/xml-utils.js +48 -0
- package/dist/_members/nle-export/xml-utils.js.map +1 -0
- package/dist/_members/perception/activeSpeaker.d.ts +108 -0
- package/dist/_members/perception/activeSpeaker.js +103 -0
- package/dist/_members/perception/audioQuality.d.ts +78 -0
- package/dist/_members/perception/audioQuality.js +76 -0
- package/dist/_members/perception/energyBeat.d.ts +95 -0
- package/dist/_members/perception/energyBeat.js +99 -0
- package/dist/_members/perception/identityMatch.d.ts +80 -0
- package/dist/_members/perception/identityMatch.js +91 -0
- package/dist/_members/perception/index.d.ts +90 -0
- package/dist/_members/perception/index.js +48 -0
- package/dist/_members/perception/visualQuality.d.ts +86 -0
- package/dist/_members/perception/visualQuality.js +95 -0
- package/dist/_members/plane/conformance.d.ts +75 -0
- package/dist/_members/plane/conformance.js +90 -0
- package/dist/_members/plane/contract.d.ts +55 -0
- package/dist/_members/plane/contract.js +49 -0
- package/dist/_members/plane/index.d.ts +16 -0
- package/dist/_members/plane/index.js +16 -0
- package/dist/_members/primitives/backgrounds/animated-bar-chart/config.d.ts +42 -0
- package/dist/_members/primitives/backgrounds/animated-bar-chart/index.d.ts +28 -0
- package/dist/_members/primitives/backgrounds/animated-line-chart/config.d.ts +42 -0
- package/dist/_members/primitives/backgrounds/animated-line-chart/index.d.ts +29 -0
- package/dist/_members/primitives/backgrounds/dither-gradient-bg/config.d.ts +30 -0
- package/dist/_members/primitives/backgrounds/dither-gradient-bg/index.d.ts +25 -0
- package/dist/_members/primitives/backgrounds/dynamic-grid/config.d.ts +24 -0
- package/dist/_members/primitives/backgrounds/dynamic-grid/index.d.ts +17 -0
- package/dist/_members/primitives/backgrounds/ecosystem-constellation/config.d.ts +21 -0
- package/dist/_members/primitives/backgrounds/ecosystem-constellation/index.d.ts +16 -0
- package/dist/_members/primitives/backgrounds/index.d.ts +13 -0
- package/dist/_members/primitives/backgrounds/index.js +32 -0
- package/dist/_members/primitives/backgrounds/index.js.map +1 -0
- package/dist/_members/primitives/backgrounds/infinite-marquee/config.d.ts +36 -0
- package/dist/_members/primitives/backgrounds/infinite-marquee/index.d.ts +21 -0
- package/dist/_members/primitives/backgrounds/mesh-gradient-bg/config.d.ts +21 -0
- package/dist/_members/primitives/backgrounds/mesh-gradient-bg/index.d.ts +16 -0
- package/dist/_members/primitives/backgrounds/perspective-marquee/config.d.ts +42 -0
- package/dist/_members/primitives/backgrounds/perspective-marquee/index.d.ts +23 -0
- package/dist/_members/primitives/backgrounds/silk-flow-bg/config.d.ts +36 -0
- package/dist/_members/primitives/backgrounds/silk-flow-bg/index.d.ts +30 -0
- package/dist/_members/primitives/backgrounds/vector-field/config.d.ts +30 -0
- package/dist/_members/primitives/backgrounds/vector-field/index.d.ts +25 -0
- package/dist/_members/primitives/backgrounds/volumetric-rays/config.d.ts +33 -0
- package/dist/_members/primitives/backgrounds/volumetric-rays/index.d.ts +30 -0
- package/dist/_members/primitives/captions/Captions.d.ts +33 -0
- package/dist/_members/primitives/captions/index.d.ts +17 -0
- package/dist/_members/primitives/captions/index.js +398 -0
- package/dist/_members/primitives/captions/index.js.map +1 -0
- package/dist/_members/primitives/captions/paginate.d.ts +31 -0
- package/dist/_members/primitives/captions/placement.d.ts +35 -0
- package/dist/_members/primitives/chunk-2LVE4UIT.js +139 -0
- package/dist/_members/primitives/chunk-2LVE4UIT.js.map +1 -0
- package/dist/_members/primitives/chunk-3IQUH6KK.js +20 -0
- package/dist/_members/primitives/chunk-3IQUH6KK.js.map +1 -0
- package/dist/_members/primitives/chunk-3OMURV6Q.js +112 -0
- package/dist/_members/primitives/chunk-3OMURV6Q.js.map +1 -0
- package/dist/_members/primitives/chunk-4IS6TMEG.js +21 -0
- package/dist/_members/primitives/chunk-4IS6TMEG.js.map +1 -0
- package/dist/_members/primitives/chunk-5MWGAEGQ.js +1644 -0
- package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +1 -0
- package/dist/_members/primitives/chunk-7RRPFPQK.js +15 -0
- package/dist/_members/primitives/chunk-7RRPFPQK.js.map +1 -0
- package/dist/_members/primitives/chunk-DH5TRZK2.js +125 -0
- package/dist/_members/primitives/chunk-DH5TRZK2.js.map +1 -0
- package/dist/_members/primitives/chunk-E3KNUSFG.js +2337 -0
- package/dist/_members/primitives/chunk-E3KNUSFG.js.map +1 -0
- package/dist/_members/primitives/chunk-G2B3G4HK.js +47 -0
- package/dist/_members/primitives/chunk-G2B3G4HK.js.map +1 -0
- package/dist/_members/primitives/chunk-HFPFGZXT.js +1494 -0
- package/dist/_members/primitives/chunk-HFPFGZXT.js.map +1 -0
- package/dist/_members/primitives/chunk-HIWVFZVH.js +19 -0
- package/dist/_members/primitives/chunk-HIWVFZVH.js.map +1 -0
- package/dist/_members/primitives/chunk-IDAL6G3Y.js +134 -0
- package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +1 -0
- package/dist/_members/primitives/chunk-KNC6JP5F.js +34 -0
- package/dist/_members/primitives/chunk-KNC6JP5F.js.map +1 -0
- package/dist/_members/primitives/chunk-KYRDVZST.js +459 -0
- package/dist/_members/primitives/chunk-KYRDVZST.js.map +1 -0
- package/dist/_members/primitives/chunk-LWLHS2NS.js +3410 -0
- package/dist/_members/primitives/chunk-LWLHS2NS.js.map +1 -0
- package/dist/_members/primitives/chunk-QAQ3P7DR.js +8855 -0
- package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +1 -0
- package/dist/_members/primitives/chunk-ROV2ODWC.js +81 -0
- package/dist/_members/primitives/chunk-ROV2ODWC.js.map +1 -0
- package/dist/_members/primitives/chunk-TCRC2FH3.js +183 -0
- package/dist/_members/primitives/chunk-TCRC2FH3.js.map +1 -0
- package/dist/_members/primitives/chunk-US4YEDAA.js +96 -0
- package/dist/_members/primitives/chunk-US4YEDAA.js.map +1 -0
- package/dist/_members/primitives/chunk-UVKRO5ER.js +13 -0
- package/dist/_members/primitives/chunk-UVKRO5ER.js.map +1 -0
- package/dist/_members/primitives/chunk-W4EIIF2I.js +10 -0
- package/dist/_members/primitives/chunk-W4EIIF2I.js.map +1 -0
- package/dist/_members/primitives/chunk-WPGKIPCO.js +3563 -0
- package/dist/_members/primitives/chunk-WPGKIPCO.js.map +1 -0
- package/dist/_members/primitives/chunk-WZFLEGMD.js +1435 -0
- package/dist/_members/primitives/chunk-WZFLEGMD.js.map +1 -0
- package/dist/_members/primitives/chunk-XHU3WBEI.js +33 -0
- package/dist/_members/primitives/chunk-XHU3WBEI.js.map +1 -0
- package/dist/_members/primitives/chunk-YN7WTZZ7.js +46 -0
- package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +1 -0
- package/dist/_members/primitives/effects/blur/config.d.ts +24 -0
- package/dist/_members/primitives/effects/blur/index.d.ts +29 -0
- package/dist/_members/primitives/effects/color-grade/config.d.ts +30 -0
- package/dist/_members/primitives/effects/color-grade/index.d.ts +35 -0
- package/dist/_members/primitives/effects/grain/config.d.ts +21 -0
- package/dist/_members/primitives/effects/grain/index.d.ts +21 -0
- package/dist/_members/primitives/effects/index.d.ts +12 -0
- package/dist/_members/primitives/effects/index.js +30 -0
- package/dist/_members/primitives/effects/index.js.map +1 -0
- package/dist/_members/primitives/effects/parallax/config.d.ts +21 -0
- package/dist/_members/primitives/effects/parallax/index.d.ts +25 -0
- package/dist/_members/primitives/effects/particles/config.d.ts +33 -0
- package/dist/_members/primitives/effects/particles/index.d.ts +31 -0
- package/dist/_members/primitives/effects/pulsing-indicator/config.d.ts +24 -0
- package/dist/_members/primitives/effects/pulsing-indicator/index.d.ts +19 -0
- package/dist/_members/primitives/effects/spotlight-card/config.d.ts +42 -0
- package/dist/_members/primitives/effects/spotlight-card/index.d.ts +25 -0
- package/dist/_members/primitives/effects/spring-pop-in/config.d.ts +27 -0
- package/dist/_members/primitives/effects/spring-pop-in/index.d.ts +22 -0
- package/dist/_members/primitives/effects/success-confetti/config.d.ts +42 -0
- package/dist/_members/primitives/effects/success-confetti/index.d.ts +23 -0
- package/dist/_members/primitives/effects/vignette/config.d.ts +21 -0
- package/dist/_members/primitives/effects/vignette/index.d.ts +23 -0
- package/dist/_members/primitives/hero-text/HeroText.d.ts +29 -0
- package/dist/_members/primitives/hero-text/config.d.ts +46 -0
- package/dist/_members/primitives/hero-text/index.d.ts +18 -0
- package/dist/_members/primitives/hero-text/index.js +14 -0
- package/dist/_members/primitives/hero-text/index.js.map +1 -0
- package/dist/_members/primitives/index.d.ts +21 -0
- package/dist/_members/primitives/index.js +64 -0
- package/dist/_members/primitives/index.js.map +1 -0
- package/dist/_members/primitives/layouts/chat-to-preview-layout/config.d.ts +21 -0
- package/dist/_members/primitives/layouts/chat-to-preview-layout/index.d.ts +19 -0
- package/dist/_members/primitives/layouts/index.d.ts +9 -0
- package/dist/_members/primitives/layouts/index.js +24 -0
- package/dist/_members/primitives/layouts/index.js.map +1 -0
- package/dist/_members/primitives/layouts/infinite-bento-pan/config.d.ts +18 -0
- package/dist/_members/primitives/layouts/infinite-bento-pan/index.d.ts +15 -0
- package/dist/_members/primitives/layouts/letterbox/config.d.ts +18 -0
- package/dist/_members/primitives/layouts/letterbox/index.d.ts +23 -0
- package/dist/_members/primitives/layouts/photo-grid/config.d.ts +21 -0
- package/dist/_members/primitives/layouts/photo-grid/index.d.ts +25 -0
- package/dist/_members/primitives/layouts/picture-in-picture/config.d.ts +21 -0
- package/dist/_members/primitives/layouts/picture-in-picture/index.d.ts +32 -0
- package/dist/_members/primitives/layouts/split-screen/config.d.ts +15 -0
- package/dist/_members/primitives/layouts/split-screen/index.d.ts +22 -0
- package/dist/_members/primitives/layouts/staggered-bento-grid/config.d.ts +66 -0
- package/dist/_members/primitives/layouts/staggered-bento-grid/index.d.ts +24 -0
- package/dist/_members/primitives/lib/easings.d.ts +47 -0
- package/dist/_members/primitives/lib/easings.js +26 -0
- package/dist/_members/primitives/lib/easings.js.map +1 -0
- package/dist/_members/primitives/lib/index.d.ts +8 -0
- package/dist/_members/primitives/lib/index.js +74 -0
- package/dist/_members/primitives/lib/index.js.map +1 -0
- package/dist/_members/primitives/lib/palette.d.ts +55 -0
- package/dist/_members/primitives/lib/palette.js +72 -0
- package/dist/_members/primitives/lib/palette.js.map +1 -0
- package/dist/_members/primitives/lib/preview.d.ts +36 -0
- package/dist/_members/primitives/lib/preview.js +8 -0
- package/dist/_members/primitives/lib/preview.js.map +1 -0
- package/dist/_members/primitives/lib/schema.d.ts +53 -0
- package/dist/_members/primitives/lib/schema.js +12 -0
- package/dist/_members/primitives/lib/schema.js.map +1 -0
- package/dist/_members/primitives/lib/seeded-random.d.ts +33 -0
- package/dist/_members/primitives/lib/seeded-random.js +14 -0
- package/dist/_members/primitives/lib/seeded-random.js.map +1 -0
- package/dist/_members/primitives/lib/text/contrast.d.ts +27 -0
- package/dist/_members/primitives/lib/text/contrast.js +12 -0
- package/dist/_members/primitives/lib/text/contrast.js.map +1 -0
- package/dist/_members/primitives/lib/text/fill.d.ts +8 -0
- package/dist/_members/primitives/lib/text/fill.js +8 -0
- package/dist/_members/primitives/lib/text/fill.js.map +1 -0
- package/dist/_members/primitives/lib/text/fitText.d.ts +62 -0
- package/dist/_members/primitives/lib/text/fitText.js +10 -0
- package/dist/_members/primitives/lib/text/fitText.js.map +1 -0
- package/dist/_members/primitives/lib/text/marker.d.ts +15 -0
- package/dist/_members/primitives/lib/text/marker.js +8 -0
- package/dist/_members/primitives/lib/text/marker.js.map +1 -0
- package/dist/_members/primitives/lib/text/motion.d.ts +57 -0
- package/dist/_members/primitives/lib/text/motion.js +16 -0
- package/dist/_members/primitives/lib/text/motion.js.map +1 -0
- package/dist/_members/primitives/lib/text/recolor.d.ts +12 -0
- package/dist/_members/primitives/lib/text/recolor.js +8 -0
- package/dist/_members/primitives/lib/text/recolor.js.map +1 -0
- package/dist/_members/primitives/lib/text/spec.d.ts +82 -0
- package/dist/_members/primitives/lib/text/spec.js +1 -0
- package/dist/_members/primitives/lib/text/spec.js.map +1 -0
- package/dist/_members/primitives/lib/text/stage.d.ts +23 -0
- package/dist/_members/primitives/lib/text/stage.js +8 -0
- package/dist/_members/primitives/lib/text/stage.js.map +1 -0
- package/dist/_members/primitives/lib/text/typeface.d.ts +16 -0
- package/dist/_members/primitives/lib/text/typeface.js +8 -0
- package/dist/_members/primitives/lib/text/typeface.js.map +1 -0
- package/dist/_members/primitives/lib/tokens.d.ts +109 -0
- package/dist/_members/primitives/lib/tokens.js +24 -0
- package/dist/_members/primitives/lib/tokens.js.map +1 -0
- package/dist/_members/primitives/lib/types.d.ts +200 -0
- package/dist/_members/primitives/lib/types.js +1 -0
- package/dist/_members/primitives/lib/types.js.map +1 -0
- package/dist/_members/primitives/params-required.json +153 -0
- package/dist/_members/primitives/scenes/changelog-bite/config.d.ts +36 -0
- package/dist/_members/primitives/scenes/changelog-bite/index.d.ts +28 -0
- package/dist/_members/primitives/scenes/hero-device-assemble/config.d.ts +24 -0
- package/dist/_members/primitives/scenes/hero-device-assemble/index.d.ts +16 -0
- package/dist/_members/primitives/scenes/index.d.ts +9 -0
- package/dist/_members/primitives/scenes/index.js +25 -0
- package/dist/_members/primitives/scenes/index.js.map +1 -0
- package/dist/_members/primitives/scenes/landing-code-showcase/config.d.ts +15 -0
- package/dist/_members/primitives/scenes/landing-code-showcase/index.d.ts +15 -0
- package/dist/_members/primitives/scenes/landing-code-showcase/timeline.d.ts +15 -0
- package/dist/_members/primitives/scenes/live-code-compilation/config.d.ts +15 -0
- package/dist/_members/primitives/scenes/live-code-compilation/index.d.ts +14 -0
- package/dist/_members/primitives/scenes/pricing-tier-focus/config.d.ts +21 -0
- package/dist/_members/primitives/scenes/pricing-tier-focus/index.d.ts +15 -0
- package/dist/_members/primitives/scenes/product-launch-trailer/config.d.ts +33 -0
- package/dist/_members/primitives/scenes/product-launch-trailer/index.d.ts +20 -0
- package/dist/_members/primitives/scenes/terminal-to-browser-deploy/config.d.ts +21 -0
- package/dist/_members/primitives/scenes/terminal-to-browser-deploy/index.d.ts +15 -0
- package/dist/_members/primitives/subject-foreground/SubjectForeground.d.ts +43 -0
- package/dist/_members/primitives/subject-foreground/index.d.ts +23 -0
- package/dist/_members/primitives/subject-foreground/index.js +30 -0
- package/dist/_members/primitives/subject-foreground/index.js.map +1 -0
- package/dist/_members/primitives/text/blur-reveal/config.d.ts +30 -0
- package/dist/_members/primitives/text/blur-reveal/index.d.ts +20 -0
- package/dist/_members/primitives/text/cinematic-title/config.d.ts +87 -0
- package/dist/_members/primitives/text/cinematic-title/index.d.ts +31 -0
- package/dist/_members/primitives/text/index.d.ts +23 -0
- package/dist/_members/primitives/text/index.js +57 -0
- package/dist/_members/primitives/text/index.js.map +1 -0
- package/dist/_members/primitives/text/inline-highlight/config.d.ts +36 -0
- package/dist/_members/primitives/text/inline-highlight/index.d.ts +24 -0
- package/dist/_members/primitives/text/karaoke/config.d.ts +108 -0
- package/dist/_members/primitives/text/karaoke/index.d.ts +32 -0
- package/dist/_members/primitives/text/kinetic-type/config.d.ts +60 -0
- package/dist/_members/primitives/text/kinetic-type/index.d.ts +29 -0
- package/dist/_members/primitives/text/lower-third/config.d.ts +84 -0
- package/dist/_members/primitives/text/lower-third/index.d.ts +30 -0
- package/dist/_members/primitives/text/marker-highlight/config.d.ts +39 -0
- package/dist/_members/primitives/text/marker-highlight/index.d.ts +24 -0
- package/dist/_members/primitives/text/masked-slide-reveal/config.d.ts +30 -0
- package/dist/_members/primitives/text/masked-slide-reveal/index.d.ts +19 -0
- package/dist/_members/primitives/text/matrix-decode/config.d.ts +33 -0
- package/dist/_members/primitives/text/matrix-decode/index.d.ts +21 -0
- package/dist/_members/primitives/text/quote-card/config.d.ts +21 -0
- package/dist/_members/primitives/text/quote-card/index.d.ts +23 -0
- package/dist/_members/primitives/text/rgb-glitch-text/config.d.ts +39 -0
- package/dist/_members/primitives/text/rgb-glitch-text/index.d.ts +27 -0
- package/dist/_members/primitives/text/shimmer-sweep/config.d.ts +30 -0
- package/dist/_members/primitives/text/shimmer-sweep/index.d.ts +21 -0
- package/dist/_members/primitives/text/slot-machine-roll/config.d.ts +30 -0
- package/dist/_members/primitives/text/slot-machine-roll/index.d.ts +19 -0
- package/dist/_members/primitives/text/staggered-fade-up/config.d.ts +39 -0
- package/dist/_members/primitives/text/staggered-fade-up/index.d.ts +26 -0
- package/dist/_members/primitives/text/stat-counter/config.d.ts +33 -0
- package/dist/_members/primitives/text/stat-counter/index.d.ts +31 -0
- package/dist/_members/primitives/text/strikethrough-replace/config.d.ts +33 -0
- package/dist/_members/primitives/text/strikethrough-replace/index.d.ts +21 -0
- package/dist/_members/primitives/text/text-effect/config.d.ts +24 -0
- package/dist/_members/primitives/text/text-effect/index.d.ts +29 -0
- package/dist/_members/primitives/text/text-fade-replace/config.d.ts +30 -0
- package/dist/_members/primitives/text/text-fade-replace/index.d.ts +19 -0
- package/dist/_members/primitives/text/token-stream/config.d.ts +21 -0
- package/dist/_members/primitives/text/token-stream/index.d.ts +25 -0
- package/dist/_members/primitives/text/tracking-in/config.d.ts +33 -0
- package/dist/_members/primitives/text/tracking-in/index.d.ts +21 -0
- package/dist/_members/primitives/text/typewriter/config.d.ts +36 -0
- package/dist/_members/primitives/text/typewriter/index.d.ts +26 -0
- package/dist/_members/primitives/transitions/chromatic-aberration-wipe/config.d.ts +15 -0
- package/dist/_members/primitives/transitions/chromatic-aberration-wipe/index.d.ts +19 -0
- package/dist/_members/primitives/transitions/code-diff-wipe/config.d.ts +36 -0
- package/dist/_members/primitives/transitions/code-diff-wipe/index.d.ts +21 -0
- package/dist/_members/primitives/transitions/directional-wipe/config.d.ts +12 -0
- package/dist/_members/primitives/transitions/directional-wipe/index.d.ts +17 -0
- package/dist/_members/primitives/transitions/frosted-glass-wipe/config.d.ts +12 -0
- package/dist/_members/primitives/transitions/frosted-glass-wipe/index.d.ts +17 -0
- package/dist/_members/primitives/transitions/glitch-cut/config.d.ts +15 -0
- package/dist/_members/primitives/transitions/glitch-cut/index.d.ts +11 -0
- package/dist/_members/primitives/transitions/grid-pixelate-wipe/config.d.ts +21 -0
- package/dist/_members/primitives/transitions/grid-pixelate-wipe/index.d.ts +24 -0
- package/dist/_members/primitives/transitions/index.d.ts +17 -0
- package/dist/_members/primitives/transitions/index.js +67 -0
- package/dist/_members/primitives/transitions/index.js.map +1 -0
- package/dist/_members/primitives/transitions/ink-wipe/config.d.ts +15 -0
- package/dist/_members/primitives/transitions/ink-wipe/index.d.ts +13 -0
- package/dist/_members/primitives/transitions/kinetic-type-mask/config.d.ts +15 -0
- package/dist/_members/primitives/transitions/kinetic-type-mask/index.d.ts +20 -0
- package/dist/_members/primitives/transitions/light-leak/config.d.ts +15 -0
- package/dist/_members/primitives/transitions/light-leak/index.d.ts +11 -0
- package/dist/_members/primitives/transitions/luma-matte/config.d.ts +12 -0
- package/dist/_members/primitives/transitions/luma-matte/index.d.ts +11 -0
- package/dist/_members/primitives/transitions/morph/config.d.ts +12 -0
- package/dist/_members/primitives/transitions/morph/index.d.ts +11 -0
- package/dist/_members/primitives/transitions/spatial-push/config.d.ts +12 -0
- package/dist/_members/primitives/transitions/spatial-push/index.d.ts +17 -0
- package/dist/_members/primitives/transitions/swipe-transition-wipe/config.d.ts +18 -0
- package/dist/_members/primitives/transitions/swipe-transition-wipe/index.d.ts +22 -0
- package/dist/_members/primitives/transitions/zoom-through/config.d.ts +39 -0
- package/dist/_members/primitives/transitions/zoom-through/index.d.ts +12 -0
- package/dist/_members/primitives/transitions/zoom-through-transition/config.d.ts +24 -0
- package/dist/_members/primitives/transitions/zoom-through-transition/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/ai-generate-overlay/config.d.ts +48 -0
- package/dist/_members/primitives/ui-blocks/ai-generate-overlay/index.d.ts +25 -0
- package/dist/_members/primitives/ui-blocks/ai-generation-canvas/config.d.ts +21 -0
- package/dist/_members/primitives/ui-blocks/ai-generation-canvas/index.d.ts +16 -0
- package/dist/_members/primitives/ui-blocks/badge-pop/config.d.ts +27 -0
- package/dist/_members/primitives/ui-blocks/badge-pop/index.d.ts +21 -0
- package/dist/_members/primitives/ui-blocks/before-after-slider/config.d.ts +21 -0
- package/dist/_members/primitives/ui-blocks/before-after-slider/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/benchmark-bars/config.d.ts +86 -0
- package/dist/_members/primitives/ui-blocks/benchmark-bars/index.d.ts +25 -0
- package/dist/_members/primitives/ui-blocks/bounding-box-selector/config.d.ts +27 -0
- package/dist/_members/primitives/ui-blocks/bounding-box-selector/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/browser-flow/config.d.ts +15 -0
- package/dist/_members/primitives/ui-blocks/browser-flow/index.d.ts +15 -0
- package/dist/_members/primitives/ui-blocks/brush-stroke-simulator/config.d.ts +36 -0
- package/dist/_members/primitives/ui-blocks/brush-stroke-simulator/index.d.ts +32 -0
- package/dist/_members/primitives/ui-blocks/chat-exchange/config.d.ts +27 -0
- package/dist/_members/primitives/ui-blocks/chat-exchange/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/code-accordion/config.d.ts +42 -0
- package/dist/_members/primitives/ui-blocks/code-accordion/index.d.ts +23 -0
- package/dist/_members/primitives/ui-blocks/context-meter/config.d.ts +24 -0
- package/dist/_members/primitives/ui-blocks/context-meter/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/cursor-flow/config.d.ts +84 -0
- package/dist/_members/primitives/ui-blocks/cursor-flow/index.d.ts +29 -0
- package/dist/_members/primitives/ui-blocks/dashboard-populate/config.d.ts +18 -0
- package/dist/_members/primitives/ui-blocks/dashboard-populate/index.d.ts +15 -0
- package/dist/_members/primitives/ui-blocks/data-flow-pipes/config.d.ts +120 -0
- package/dist/_members/primitives/ui-blocks/data-flow-pipes/index.d.ts +34 -0
- package/dist/_members/primitives/ui-blocks/device-mockup-zoom/config.d.ts +24 -0
- package/dist/_members/primitives/ui-blocks/device-mockup-zoom/index.d.ts +19 -0
- package/dist/_members/primitives/ui-blocks/drag-and-drop-flow/config.d.ts +24 -0
- package/dist/_members/primitives/ui-blocks/drag-and-drop-flow/index.d.ts +17 -0
- package/dist/_members/primitives/ui-blocks/eval-scorecard/config.d.ts +48 -0
- package/dist/_members/primitives/ui-blocks/eval-scorecard/index.d.ts +23 -0
- package/dist/_members/primitives/ui-blocks/glass-code-block/config.d.ts +39 -0
- package/dist/_members/primitives/ui-blocks/glass-code-block/index.d.ts +22 -0
- package/dist/_members/primitives/ui-blocks/image-expand-to-fullscreen/config.d.ts +141 -0
- package/dist/_members/primitives/ui-blocks/image-expand-to-fullscreen/index.d.ts +32 -0
- package/dist/_members/primitives/ui-blocks/index.d.ts +33 -0
- package/dist/_members/primitives/ui-blocks/index.js +76 -0
- package/dist/_members/primitives/ui-blocks/index.js.map +1 -0
- package/dist/_members/primitives/ui-blocks/metric-gauge/config.d.ts +46 -0
- package/dist/_members/primitives/ui-blocks/metric-gauge/index.d.ts +23 -0
- package/dist/_members/primitives/ui-blocks/morphing-modal/config.d.ts +141 -0
- package/dist/_members/primitives/ui-blocks/morphing-modal/index.d.ts +35 -0
- package/dist/_members/primitives/ui-blocks/pipeline-journey/config.d.ts +18 -0
- package/dist/_members/primitives/ui-blocks/pipeline-journey/index.d.ts +15 -0
- package/dist/_members/primitives/ui-blocks/progress-steps/config.d.ts +51 -0
- package/dist/_members/primitives/ui-blocks/progress-steps/index.d.ts +22 -0
- package/dist/_members/primitives/ui-blocks/reasoning-trace/config.d.ts +21 -0
- package/dist/_members/primitives/ui-blocks/reasoning-trace/index.d.ts +18 -0
- package/dist/_members/primitives/ui-blocks/simulated-cursor/config.d.ts +69 -0
- package/dist/_members/primitives/ui-blocks/simulated-cursor/index.d.ts +23 -0
- package/dist/_members/primitives/ui-blocks/terminal-simulator/config.d.ts +63 -0
- package/dist/_members/primitives/ui-blocks/terminal-simulator/index.d.ts +39 -0
- package/dist/_members/primitives/ui-blocks/toast-notification/config.d.ts +33 -0
- package/dist/_members/primitives/ui-blocks/toast-notification/index.d.ts +21 -0
- package/dist/_members/primitives/ui-blocks/tool-call-stack/config.d.ts +54 -0
- package/dist/_members/primitives/ui-blocks/tool-call-stack/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/tool-menu-slide-in/config.d.ts +33 -0
- package/dist/_members/primitives/ui-blocks/tool-menu-slide-in/index.d.ts +20 -0
- package/dist/_members/primitives/ui-blocks/visual-docs-snippet/config.d.ts +90 -0
- package/dist/_members/primitives/ui-blocks/visual-docs-snippet/index.d.ts +27 -0
- package/dist/_members/primitives/ui-blocks/voice-waveform/config.d.ts +24 -0
- package/dist/_members/primitives/ui-blocks/voice-waveform/index.d.ts +20 -0
- package/dist/_members/primitives/version-map.json +105 -0
- package/dist/_members/primitives/workspace.d.ts +51 -0
- package/dist/_members/primitives/workspace.js +60 -0
- package/dist/_members/primitives/workspace.js.map +1 -0
- package/dist/_members/render-harness/cardRender.d.ts +64 -0
- package/dist/_members/render-harness/cardRender.d.ts.map +1 -0
- package/dist/_members/render-harness/contractRender.d.ts +43 -0
- package/dist/_members/render-harness/contractRender.d.ts.map +1 -0
- package/dist/_members/render-harness/extractSegments.d.ts +53 -0
- package/dist/_members/render-harness/extractSegments.d.ts.map +1 -0
- package/dist/_members/render-harness/index.d.ts +30 -0
- package/dist/_members/render-harness/index.d.ts.map +1 -0
- package/dist/_members/render-harness/localRender.d.ts +167 -0
- package/dist/_members/render-harness/localRender.d.ts.map +1 -0
- package/dist/_members/render-harness/materializeSources.d.ts +29 -0
- package/dist/_members/render-harness/materializeSources.d.ts.map +1 -0
- package/dist/_members/render-harness/mediaServer.d.ts +22 -0
- package/dist/_members/render-harness/mediaServer.d.ts.map +1 -0
- package/dist/_members/render-harness/renderInputAssets.d.ts +63 -0
- package/dist/_members/render-harness/renderInputAssets.d.ts.map +1 -0
- package/dist/_members/render-harness/resolveAssets.d.ts +33 -0
- package/dist/_members/render-harness/resolveAssets.d.ts.map +1 -0
- package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts +23 -0
- package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts.map +1 -0
- package/dist/account-model/testing.d.ts +1 -0
- package/dist/account-model/testing.js +145 -0
- package/dist/account-model/types.d.ts +1 -0
- package/dist/account-model/types.js +0 -0
- package/dist/account-model/validators.d.ts +1 -0
- package/dist/account-model/validators.js +26 -0
- package/dist/account-model.d.ts +1 -0
- package/dist/account-model.js +26 -0
- package/dist/animate.d.ts +1 -0
- package/dist/animate.js +79412 -0
- package/dist/authoring/build-tools.d.ts +1 -0
- package/dist/authoring/build-tools.js +29 -0
- package/dist/authoring/capabilities.d.ts +1 -0
- package/dist/authoring/capabilities.js +11 -0
- package/dist/authoring/composer.d.ts +1 -0
- package/dist/authoring/composer.js +53 -0
- package/dist/authoring/context.d.ts +1 -0
- package/dist/authoring/context.js +14 -0
- package/dist/authoring/models.d.ts +1 -0
- package/dist/authoring/models.js +14 -0
- package/dist/authoring/pipelineTrace.d.ts +1 -0
- package/dist/authoring/pipelineTrace.js +7 -0
- package/dist/authoring/prompts.d.ts +1 -0
- package/dist/authoring/prompts.js +29 -0
- package/dist/authoring/providers.d.ts +1 -0
- package/dist/authoring/providers.js +99 -0
- package/dist/authoring/resource-routing.d.ts +1 -0
- package/dist/authoring/resource-routing.js +206 -0
- package/dist/authoring/resources.d.ts +1 -0
- package/dist/authoring/resources.js +35 -0
- package/dist/authoring/tools.d.ts +1 -0
- package/dist/authoring/tools.js +29 -0
- package/dist/authoring/transpileComponent.d.ts +1 -0
- package/dist/authoring/transpileComponent.js +2248 -0
- package/dist/authoring/transpileHelper.d.ts +1 -0
- package/dist/authoring/transpileHelper.js +9 -0
- package/dist/authoring/types.d.ts +1 -0
- package/dist/authoring/types.js +0 -0
- package/dist/authoring.d.ts +1 -0
- package/dist/authoring.js +1295 -0
- package/dist/brand-derivation/constants.d.ts +1 -0
- package/dist/brand-derivation/constants.js +11 -0
- package/dist/brand-derivation.d.ts +1 -0
- package/dist/brand-derivation.js +23 -0
- package/dist/chunk-2ESYSVXG.js +48 -0
- package/dist/chunk-37NJ27UU.js +501 -0
- package/dist/chunk-52AHXNKM.js +435 -0
- package/dist/chunk-5I7VDCAC.js +15647 -0
- package/dist/chunk-6CMVBTTP.js +1933 -0
- package/dist/chunk-6EQXLEP6.js +194 -0
- package/dist/chunk-6QJ3V3VS.js +1444 -0
- package/dist/chunk-7DHP4ESU.js +138 -0
- package/dist/chunk-7GISRVON.js +14176 -0
- package/dist/chunk-7PA7FGLD.js +609 -0
- package/dist/chunk-ATAF24QG.js +735 -0
- package/dist/chunk-AWT3P5ZN.js +1609 -0
- package/dist/chunk-B4VMU2IJ.js +211 -0
- package/dist/chunk-BDMTUEEZ.js +19 -0
- package/dist/chunk-BRKJKB33.js +683 -0
- package/dist/chunk-CX2IIQ4R.js +111 -0
- package/dist/chunk-D2EG7J7X.js +31 -0
- package/dist/chunk-DENF4TPI.js +249 -0
- package/dist/chunk-DIBOJJMU.js +16838 -0
- package/dist/chunk-DLF4WVSE.js +9 -0
- package/dist/chunk-DSNG6WLU.js +82 -0
- package/dist/chunk-EA6MYCYW.js +135 -0
- package/dist/chunk-EAUSEGB7.js +420 -0
- package/dist/chunk-ELLSET2N.js +195 -0
- package/dist/chunk-EMGFZ3PR.js +14 -0
- package/dist/chunk-FUWJOVVK.js +3633 -0
- package/dist/chunk-G3PBH53P.js +85 -0
- package/dist/chunk-G75E7YA4.js +11883 -0
- package/dist/chunk-GBRNYH7W.js +72 -0
- package/dist/chunk-GH27OS5S.js +104 -0
- package/dist/chunk-GULDS3VE.js +41 -0
- package/dist/chunk-H5LMJKZU.js +0 -0
- package/dist/chunk-HI4UTTPS.js +954 -0
- package/dist/chunk-JCZQT7K3.js +3266 -0
- package/dist/chunk-JD77Y2WM.js +3423 -0
- package/dist/chunk-JF4JJAFP.js +10 -0
- package/dist/chunk-JMURQODM.js +438 -0
- package/dist/chunk-JOURGVOR.js +27 -0
- package/dist/chunk-JRQVPFLF.js +459 -0
- package/dist/chunk-KF5ETMKB.js +544 -0
- package/dist/chunk-KYRDKK2D.js +47 -0
- package/dist/chunk-LD5ZOUFT.js +55 -0
- package/dist/chunk-M3I5LMAB.js +426 -0
- package/dist/chunk-MC5DLSEV.js +202 -0
- package/dist/chunk-MCBUX5XV.js +70 -0
- package/dist/chunk-MFHXCHRI.js +33 -0
- package/dist/chunk-MMEJ3Y7E.js +327 -0
- package/dist/chunk-MVEE6HEC.js +8512 -0
- package/dist/chunk-N67PDTKQ.js +1419 -0
- package/dist/chunk-NDKERSXY.js +1296 -0
- package/dist/chunk-NV4I6GJV.js +1091 -0
- package/dist/chunk-OIRUO5P7.js +397 -0
- package/dist/chunk-P43IE4WB.js +181 -0
- package/dist/chunk-QGAWDLYX.js +92 -0
- package/dist/chunk-QH3YI3ND.js +100 -0
- package/dist/chunk-QLAQHR3L.js +254 -0
- package/dist/chunk-RHVLQNYF.js +20 -0
- package/dist/chunk-S3P5BFFL.js +2265 -0
- package/dist/chunk-SIGGQRY2.js +8483 -0
- package/dist/chunk-TULRCY6U.js +729 -0
- package/dist/chunk-TWQOKKAF.js +859 -0
- package/dist/chunk-U3JPILZS.js +15 -0
- package/dist/chunk-U4V4FZGE.js +20 -0
- package/dist/chunk-UEI3NLNK.js +127 -0
- package/dist/chunk-V43Y7IE4.js +3621 -0
- package/dist/chunk-VIVQHIGZ.js +4319 -0
- package/dist/chunk-W35ZMOXB.js +23 -0
- package/dist/chunk-WB2VFDQZ.js +58 -0
- package/dist/chunk-WREYUH2E.js +104 -0
- package/dist/chunk-WZTTZHNR.js +3339 -0
- package/dist/chunk-XELS2BGA.js +13 -0
- package/dist/chunk-XLIPPLG3.js +18 -0
- package/dist/chunk-YA3OR2KK.js +249 -0
- package/dist/chunk-ZE76SSRT.js +358 -0
- package/dist/chunk-ZFEXATWN.js +46 -0
- package/dist/chunk-ZSZABOE5.js +425 -0
- package/dist/compose/renderer.d.ts +1 -0
- package/dist/compose/renderer.js +173 -0
- package/dist/compose.d.ts +1 -0
- package/dist/compose.js +76 -0
- package/dist/composition/audio.d.ts +1 -0
- package/dist/composition/audio.js +63 -0
- package/dist/composition/autozoom.d.ts +1 -0
- package/dist/composition/autozoom.js +76 -0
- package/dist/composition/brand-kit.d.ts +1 -0
- package/dist/composition/brand-kit.js +34 -0
- package/dist/composition/brief.d.ts +1 -0
- package/dist/composition/brief.js +112 -0
- package/dist/composition/depth.d.ts +1 -0
- package/dist/composition/depth.js +12 -0
- package/dist/composition/fixtures.d.ts +1 -0
- package/dist/composition/fixtures.js +154 -0
- package/dist/composition/fonts.d.ts +1 -0
- package/dist/composition/fonts.js +74 -0
- package/dist/composition/graphics-plan.d.ts +1 -0
- package/dist/composition/graphics-plan.js +400 -0
- package/dist/composition/invariants.d.ts +1 -0
- package/dist/composition/invariants.js +49 -0
- package/dist/composition/ops.d.ts +1 -0
- package/dist/composition/ops.js +53 -0
- package/dist/composition/primitive-catalog.d.ts +1 -0
- package/dist/composition/primitive-catalog.js +60 -0
- package/dist/composition/projection.d.ts +1 -0
- package/dist/composition/projection.js +119 -0
- package/dist/composition/reframe/coverage.d.ts +1 -0
- package/dist/composition/reframe/coverage.js +20 -0
- package/dist/composition/reframe/kenBurns.d.ts +1 -0
- package/dist/composition/reframe/kenBurns.js +53 -0
- package/dist/composition/reframe/shotScale.d.ts +1 -0
- package/dist/composition/reframe/shotScale.js +25 -0
- package/dist/composition/reframe/trajectory.d.ts +1 -0
- package/dist/composition/reframe/trajectory.js +17 -0
- package/dist/composition/reframe.d.ts +1 -0
- package/dist/composition/reframe.js +39 -0
- package/dist/composition/timeline.d.ts +1 -0
- package/dist/composition/timeline.js +70 -0
- package/dist/composition/types.d.ts +1 -0
- package/dist/composition/types.js +0 -0
- package/dist/composition/validators/graphic-kinds.d.ts +1 -0
- package/dist/composition/validators/graphic-kinds.js +9 -0
- package/dist/composition/validators.d.ts +1 -0
- package/dist/composition/validators.js +180 -0
- package/dist/composition-ops.d.ts +1 -0
- package/dist/composition-ops.js +882 -0
- package/dist/composition.d.ts +1 -0
- package/dist/composition.js +433 -0
- package/dist/context-CEAKQ5T7.js +14 -0
- package/dist/core/render.d.ts +1 -0
- package/dist/core/render.js +105 -0
- package/dist/core/select.d.ts +1 -0
- package/dist/core/select.js +42 -0
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.js +0 -0
- package/dist/core.d.ts +1 -0
- package/dist/core.js +38 -0
- package/dist/dist-LAJ2363K.js +545 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +17 -0
- package/dist/foundation/codes.d.ts +1 -0
- package/dist/foundation/codes.js +7 -0
- package/dist/foundation/primitives.d.ts +1 -0
- package/dist/foundation/primitives.js +13 -0
- package/dist/foundation.d.ts +1 -0
- package/dist/foundation.js +17 -0
- package/dist/hls-HD4C5G6W.js +33000 -0
- package/dist/magic-string.es-SDTMJBWP.js +1308 -0
- package/dist/mcp/adapter.d.ts +1 -0
- package/dist/mcp/adapter.js +670 -0
- package/dist/mcp/core.d.ts +1 -0
- package/dist/mcp/core.js +41 -0
- package/dist/mcp/curation.d.ts +1 -0
- package/dist/mcp/curation.js +23 -0
- package/dist/mcp/executor.d.ts +1 -0
- package/dist/mcp/executor.js +13 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +27 -0
- package/dist/mcp.d.ts +1 -0
- package/dist/mcp.js +138 -0
- package/dist/media-model/media-kind.d.ts +1 -0
- package/dist/media-model/media-kind.js +108 -0
- package/dist/media-model/testing.d.ts +1 -0
- package/dist/media-model/testing.js +16029 -0
- package/dist/media-model/transcriptSearch.d.ts +1 -0
- package/dist/media-model/transcriptSearch.js +32 -0
- package/dist/media-model.d.ts +1 -0
- package/dist/media-model.js +154 -0
- package/dist/nle-export/server.d.ts +1 -0
- package/dist/nle-export/server.js +25658 -0
- package/dist/nle-export/xml.d.ts +1 -0
- package/dist/nle-export/xml.js +23102 -0
- package/dist/nle-export.d.ts +1 -0
- package/dist/nle-export.js +313 -0
- package/dist/perception.d.ts +1 -0
- package/dist/perception.js +145 -0
- package/dist/plane/conformance.d.ts +1 -0
- package/dist/plane/conformance.js +13 -0
- package/dist/plane/contract.d.ts +1 -0
- package/dist/plane/contract.js +31 -0
- package/dist/plane.d.ts +1 -0
- package/dist/plane.js +13 -0
- package/dist/primitives/backgrounds.d.ts +1 -0
- package/dist/primitives/backgrounds.js +32 -0
- package/dist/primitives/captions.d.ts +1 -0
- package/dist/primitives/captions.js +629 -0
- package/dist/primitives/effects.d.ts +1 -0
- package/dist/primitives/effects.js +30 -0
- package/dist/primitives/hero-text.d.ts +1 -0
- package/dist/primitives/hero-text.js +14 -0
- package/dist/primitives/layouts.d.ts +1 -0
- package/dist/primitives/layouts.js +24 -0
- package/dist/primitives/lib/easings.d.ts +1 -0
- package/dist/primitives/lib/easings.js +25 -0
- package/dist/primitives/lib/index.d.ts +1 -0
- package/dist/primitives/lib/index.js +78 -0
- package/dist/primitives/lib/palette.d.ts +1 -0
- package/dist/primitives/lib/palette.js +71 -0
- package/dist/primitives/lib/preview.d.ts +1 -0
- package/dist/primitives/lib/preview.js +8 -0
- package/dist/primitives/lib/schema.d.ts +1 -0
- package/dist/primitives/lib/schema.js +12 -0
- package/dist/primitives/lib/seeded-random.d.ts +1 -0
- package/dist/primitives/lib/seeded-random.js +13 -0
- package/dist/primitives/lib/text/contrast.d.ts +1 -0
- package/dist/primitives/lib/text/contrast.js +11 -0
- package/dist/primitives/lib/text/fill.d.ts +1 -0
- package/dist/primitives/lib/text/fill.js +7 -0
- package/dist/primitives/lib/text/fitText.d.ts +1 -0
- package/dist/primitives/lib/text/fitText.js +10 -0
- package/dist/primitives/lib/text/marker.d.ts +1 -0
- package/dist/primitives/lib/text/marker.js +7 -0
- package/dist/primitives/lib/text/motion.d.ts +1 -0
- package/dist/primitives/lib/text/motion.js +15 -0
- package/dist/primitives/lib/text/recolor.d.ts +1 -0
- package/dist/primitives/lib/text/recolor.js +7 -0
- package/dist/primitives/lib/text/spec.d.ts +1 -0
- package/dist/primitives/lib/text/spec.js +0 -0
- package/dist/primitives/lib/text/stage.d.ts +1 -0
- package/dist/primitives/lib/text/stage.js +7 -0
- package/dist/primitives/lib/text/typeface.d.ts +1 -0
- package/dist/primitives/lib/text/typeface.js +7 -0
- package/dist/primitives/lib/tokens.d.ts +1 -0
- package/dist/primitives/lib/tokens.js +24 -0
- package/dist/primitives/lib/types.d.ts +1 -0
- package/dist/primitives/lib/types.js +0 -0
- package/dist/primitives/lib.d.ts +1 -0
- package/dist/primitives/lib.js +78 -0
- package/dist/primitives/params-required.json +153 -0
- package/dist/primitives/scenes.d.ts +1 -0
- package/dist/primitives/scenes.js +25 -0
- package/dist/primitives/subject-foreground.d.ts +1 -0
- package/dist/primitives/subject-foreground.js +28 -0
- package/dist/primitives/text.d.ts +1 -0
- package/dist/primitives/text.js +57 -0
- package/dist/primitives/transitions.d.ts +1 -0
- package/dist/primitives/transitions.js +66 -0
- package/dist/primitives/ui-blocks.d.ts +1 -0
- package/dist/primitives/ui-blocks.js +76 -0
- package/dist/primitives/version-map.json +105 -0
- package/dist/primitives/workspace.d.ts +1 -0
- package/dist/primitives/workspace.js +25 -0
- package/dist/primitives.d.ts +1 -0
- package/dist/primitives.js +65 -0
- package/dist/render-harness/sandboxGlobalSpecs.d.ts +1 -0
- package/dist/render-harness/sandboxGlobalSpecs.js +13 -0
- package/dist/render-harness.d.ts +1 -0
- package/dist/render-harness.js +1019 -0
- package/dist/token-RGFIT24D.js +69 -0
- package/dist/token-util-GPLSGYVO.js +5 -0
- package/dist/vision_bundle-5Y376MAR.js +4084 -0
- package/package.json +493 -0
|
@@ -0,0 +1,889 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deriveTrajectory — PURE TypeScript STAGE-B crop-trajectory math (the cheap
|
|
3
|
+
* "apply a crop intent" half), derived over a cached source-level `subjectTrack`.
|
|
4
|
+
*
|
|
5
|
+
* This is the SINGLE crop derivation for EVERY render surface — the agent's
|
|
6
|
+
* in-loop capture, the verifier eval, AND the customer ship render — by
|
|
7
|
+
* construction: each surface calls THIS function over the SAME cached track +
|
|
8
|
+
* the SAME authored reframe, so the trajectory is identical bytes with no
|
|
9
|
+
* pre-baked variant cache to drift. Render-time-resolution (2026-06-14): the
|
|
10
|
+
* trajectory is DERIVED INLINE at render, never looked up as a baked variant,
|
|
11
|
+
* which deleted the trajectory variant cache + its `variant_not_baked` bug class.
|
|
12
|
+
*
|
|
13
|
+
* Lives in @cueframe/execution/core (`@cueframe/core/render`) — it depends only
|
|
14
|
+
* on TYPES from @cueframe/perception (`SubjectTrack`/`Face`/`FaceBox`) and
|
|
15
|
+
* @cueframe/composition (`ReframeSegment` + the eased-ramp helpers), both legal
|
|
16
|
+
* execution-framework dependencies (execution MAY depend on perception +
|
|
17
|
+
* composition). The Modal `reframe_bake` re-detection path is retired — there is
|
|
18
|
+
* one derivation, so there is no TS↔Python drift to guard against.
|
|
19
|
+
*
|
|
20
|
+
* Output shape is the canonical `TrajectoryData` from
|
|
21
|
+
* @cueframe/composition/reframe/trajectory — the SSOT that both this producer and
|
|
22
|
+
* the renderer (CropFromTrajectory.tsx) import; neither declares a local mirror.
|
|
23
|
+
*
|
|
24
|
+
* See brain/Projects/CueFrame/specs/2026-06-14-render-time-resolution-design.md.
|
|
25
|
+
*/
|
|
26
|
+
// Eased zoom / center-pan ramps live in @cueframe/composition (the SINGLE source
|
|
27
|
+
// of truth shared with the renderer's still path), so the still and video paths
|
|
28
|
+
// can't drift. Imported here; re-exported for this module's existing test surface.
|
|
29
|
+
import { buildEasedZooms, buildPannedCenters, CAPTION_BAND_RESERVE } from '@cueframe/composition/reframe/trajectory';
|
|
30
|
+
// The shot-scale target table + clamp — SSOT, shared with the plan-time punch-in
|
|
31
|
+
// guard (`punchInWarrant`). Never re-declare these constants here.
|
|
32
|
+
import { SHOT_SCALE_TARGET, shotScaleZoom } from '@cueframe/composition/reframe/shotScale';
|
|
33
|
+
export { buildEasedZooms, buildPannedCenters, easeOutCubic } from '@cueframe/composition/reframe/trajectory';
|
|
34
|
+
// Typed, fail-loud render error. CFERR-encoded so code+fix survive the Convex
|
|
35
|
+
// action→route error serialization (see @cueframe/errors codec).
|
|
36
|
+
import { CueframeError, encodeError } from '@cueframe/errors';
|
|
37
|
+
// vcam (virtual-camera) subject selection + stability — the `all-faces` chase
|
|
38
|
+
// killer (Phase 2) + the deadzone-glide tracking stage (Phase 3) + the `face`/
|
|
39
|
+
// `active-speaker` single-subject adapter (P4 — those modes now run the SAME
|
|
40
|
+
// geometric-deadzone path as all-faces, no longer the legacy `emaSmooth`).
|
|
41
|
+
import { selectSubjectSet, selectSingleSubjectBoxes } from './vcam/subjectSet';
|
|
42
|
+
import { buildRequiredRegions } from './vcam/requiredRegion';
|
|
43
|
+
import { cameraPath } from './vcam/cameraPath';
|
|
44
|
+
import { fitZoomPerShot } from './vcam/framing';
|
|
45
|
+
import { segmentShots } from './vcam/shots';
|
|
46
|
+
/**
|
|
47
|
+
* Normalized area of a face detection — used to rank faces largest-first
|
|
48
|
+
* (largest ≈ closest to camera = `face-0` by convention). Mirrors
|
|
49
|
+
* reframe_bake.py `_face_area` (width/height path; negatives clamp to 0).
|
|
50
|
+
*/
|
|
51
|
+
export function faceArea(face) {
|
|
52
|
+
return Math.max(0, face.width) * Math.max(0, face.height);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Filter the detector's face list by the segment's subject pick:
|
|
56
|
+
* - `all-faces` → all faces (cropper fits the union bbox).
|
|
57
|
+
* - `frame-center` → [] (cropper centers on the source geometric center).
|
|
58
|
+
* - `face` faceId=`face-N` → the face with that STABLE tracker id this frame.
|
|
59
|
+
* The roster the agent authors against carries the tracker's stable ids, so
|
|
60
|
+
* `face-2` means "that tracked person," NOT "the 3rd-largest face this frame."
|
|
61
|
+
* Absent this frame → [] (caller emits no center; EMA forward-fills) rather
|
|
62
|
+
* than silently snapping to a DIFFERENT person — the old area-rank +
|
|
63
|
+
* out-of-range→largest behavior is exactly what made the crop ping-pong
|
|
64
|
+
* between speakers (brain Issue crop-subject-resolved-by-area-rank).
|
|
65
|
+
* - The EMPTY-string faceId is a sentinel (the active-speaker degrade, see
|
|
66
|
+
* deriveSegment) meaning "no specific subject this frame → largest face."
|
|
67
|
+
* Throws on an unknown kind.
|
|
68
|
+
*
|
|
69
|
+
* NB: the retired Python `reframe_bake._resolve_subject_faces` did area-rank;
|
|
70
|
+
* that path is dead (TS is the only live derivation), so there is no drift.
|
|
71
|
+
*/
|
|
72
|
+
export function resolveSubjectFaces(faces, subject) {
|
|
73
|
+
if (faces.length === 0)
|
|
74
|
+
return faces;
|
|
75
|
+
if (subject.kind === 'all-faces')
|
|
76
|
+
return faces;
|
|
77
|
+
if (subject.kind === 'frame-center')
|
|
78
|
+
return [];
|
|
79
|
+
// `point` is detection-free — it never selects a face. deriveSegment
|
|
80
|
+
// short-circuits before this is reached; kept exhaustive for safety.
|
|
81
|
+
if (subject.kind === 'point')
|
|
82
|
+
return [];
|
|
83
|
+
if (subject.kind === 'face') {
|
|
84
|
+
const faceId = subject.faceId;
|
|
85
|
+
// Sentinel: empty / non-`face-` id → "no specific subject → largest face"
|
|
86
|
+
// (the active-speaker degrade and legacy callers rely on this).
|
|
87
|
+
if (typeof faceId !== 'string' || faceId === '' || !faceId.startsWith('face-')) {
|
|
88
|
+
const ranked = [...faces].sort((a, b) => faceArea(b) - faceArea(a));
|
|
89
|
+
return ranked.slice(0, 1);
|
|
90
|
+
}
|
|
91
|
+
// Match the authored STABLE identity; absent this frame → [].
|
|
92
|
+
const match = faces.find((f) => f.faceId === faceId);
|
|
93
|
+
return match ? [match] : [];
|
|
94
|
+
}
|
|
95
|
+
throw new Error(`unknown_subject_kind: ${subject.kind}`);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The target crop center from face dets + subject pick. Mirrors
|
|
99
|
+
* reframe_bake.py `_selected_face_center`: `frame-center` (and no usable
|
|
100
|
+
* selection) → null (caller centers on source); otherwise the area-weighted
|
|
101
|
+
* centroid of the selected faces (degenerates to a single face's center).
|
|
102
|
+
*/
|
|
103
|
+
export function selectedFaceCenter(faces, subject) {
|
|
104
|
+
if (subject.kind === 'frame-center')
|
|
105
|
+
return null;
|
|
106
|
+
// `point` centers on a fixed authored location, independent of detection.
|
|
107
|
+
if (subject.kind === 'point')
|
|
108
|
+
return [subject.x, subject.y];
|
|
109
|
+
if (faces.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
const selected = resolveSubjectFaces(faces, subject);
|
|
112
|
+
if (selected.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
let totalArea = 0;
|
|
115
|
+
let cxAcc = 0;
|
|
116
|
+
let cyAcc = 0;
|
|
117
|
+
for (const f of selected) {
|
|
118
|
+
const area = faceArea(f) || 1e-6;
|
|
119
|
+
cxAcc += (f.x + f.width / 2) * area;
|
|
120
|
+
cyAcc += (f.y + f.height / 2) * area;
|
|
121
|
+
totalArea += area;
|
|
122
|
+
}
|
|
123
|
+
return [cxAcc / totalArea, cyAcc / totalArea];
|
|
124
|
+
}
|
|
125
|
+
/** Normalized distance beyond which adjacent centers are treated as a shot
|
|
126
|
+
* change (hard cut / new angle) and smoothing snaps instead of blending —
|
|
127
|
+
* mirror of reframe_bake.py `JUMP_THRESHOLD`. */
|
|
128
|
+
export const JUMP_THRESHOLD = 0.15;
|
|
129
|
+
/** Minimum fraction of a segment's frames in which an authored `face` subject
|
|
130
|
+
* must actually be tracked. Below this, deriveTrajectory FAILS LOUD instead of
|
|
131
|
+
* silently centering the crop — the authored identity isn't really in the clip
|
|
132
|
+
* (tracker ID fragmentation). A genuine subject is present for the large
|
|
133
|
+
* majority of frames it's framed over; 40% is a generous floor. */
|
|
134
|
+
export const MIN_SUBJECT_RESOLUTION = 0.4;
|
|
135
|
+
export function isJump(a, b) {
|
|
136
|
+
return Math.abs(a[0] - b[0]) > JUMP_THRESHOLD || Math.abs(a[1] - b[1]) > JUMP_THRESHOLD;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Shot-aware EMA on per-frame centers. Forward-fill nulls with the last-known
|
|
140
|
+
* position, then a forward + backward EMA pass, where BOTH passes snap (no
|
|
141
|
+
* blend) ONLY across a detector-reported shot cut (`cutFrames`).
|
|
142
|
+
*
|
|
143
|
+
* Phase 1 (vcam): the `isJump`/`JUMP_THRESHOLD` inference is GONE as a cut
|
|
144
|
+
* signal. A center jump is NEVER inferred to be a cut — that inference was the
|
|
145
|
+
* false-cut snap (a ByteTrack detection-lag jiggle read as a new shot →
|
|
146
|
+
* teleport). Cuts come ONLY from `shotBoundaries`. `isJump`/`JUMP_THRESHOLD`
|
|
147
|
+
* remain exported (legacy consumers) but no longer drive smoothing here.
|
|
148
|
+
*
|
|
149
|
+
* Phase 3 (vcam): the `all-faces` CAMERA-CENTER smoothing is now the deadzone-
|
|
150
|
+
* inclusion + Hamming-window stage in `cameraPath` (the camera TRACKS a moving
|
|
151
|
+
* group). `emaSmooth` stays for the SEPARABLE non-center use — the per-subject
|
|
152
|
+
* `face_box_series` the floor reads (`perSubjectSeries`) — and for the
|
|
153
|
+
* UNCHANGED face/active-speaker/frame-center center path (byte-identical to the
|
|
154
|
+
* pre-Phase-3 behavior, the mode-isolation invariant). It is NOT used for the
|
|
155
|
+
* all-faces centers any more.
|
|
156
|
+
*/
|
|
157
|
+
export function emaSmooth(centers, alpha = 0.4, cutFrames) {
|
|
158
|
+
const n = centers.length;
|
|
159
|
+
if (n === 0)
|
|
160
|
+
return [];
|
|
161
|
+
// A frame is a hard reset boundary ONLY when it STARTS a new shot per the
|
|
162
|
+
// detector (`cutFrames`, frame-exact). No jump inference.
|
|
163
|
+
const isCut = (i) => cutFrames?.has(i) ?? false;
|
|
164
|
+
// Fill nulls. A gap is normally forward-filled with the prior known position
|
|
165
|
+
// (a brief occlusion — the subject hasn't moved). When a SHOT CUT falls inside
|
|
166
|
+
// the gap, split it AT the cut: frames before the cut belong to the old shot
|
|
167
|
+
// (prior position), frames from the cut on belong to the new shot (next known
|
|
168
|
+
// position) — so the crop snaps at the cut, not frames late. With no detector
|
|
169
|
+
// cut in the gap, forward-fill (hold the old position) — no jump back-fill.
|
|
170
|
+
const fillFirst = centers.find((c) => c !== null) ?? [0.5, 0.5];
|
|
171
|
+
const filled = new Array(n);
|
|
172
|
+
let lastVal = fillFirst;
|
|
173
|
+
let i = 0;
|
|
174
|
+
while (i < n) {
|
|
175
|
+
if (centers[i] !== null) {
|
|
176
|
+
lastVal = centers[i];
|
|
177
|
+
filled[i] = lastVal;
|
|
178
|
+
i++;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
let j = i;
|
|
182
|
+
while (j < n && centers[j] === null)
|
|
183
|
+
j++;
|
|
184
|
+
const nextVal = j < n ? centers[j] : lastVal;
|
|
185
|
+
// First detector cut at or after i, within the gap [i, j].
|
|
186
|
+
let cut = -1;
|
|
187
|
+
if (cutFrames) {
|
|
188
|
+
for (let k = i; k <= j; k++) {
|
|
189
|
+
if (isCut(k)) {
|
|
190
|
+
cut = k;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (cut >= 0) {
|
|
196
|
+
for (let k = i; k < j; k++)
|
|
197
|
+
filled[k] = k < cut ? lastVal : nextVal;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
for (let k = i; k < j; k++)
|
|
201
|
+
filled[k] = lastVal;
|
|
202
|
+
}
|
|
203
|
+
i = j;
|
|
204
|
+
}
|
|
205
|
+
// Forward EMA — reset (snap) ONLY at a detector shot cut.
|
|
206
|
+
const forward = [filled[0]];
|
|
207
|
+
for (let i = 1; i < n; i++) {
|
|
208
|
+
const prev = forward[i - 1];
|
|
209
|
+
const curr = filled[i];
|
|
210
|
+
if (isCut(i)) {
|
|
211
|
+
forward.push(curr);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
forward.push([
|
|
215
|
+
alpha * curr[0] + (1 - alpha) * prev[0],
|
|
216
|
+
alpha * curr[1] + (1 - alpha) * prev[1],
|
|
217
|
+
]);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Backward EMA — reset ONLY when the i→i+1 transition crosses a detector cut.
|
|
221
|
+
const final = new Array(n);
|
|
222
|
+
final[n - 1] = forward[n - 1];
|
|
223
|
+
for (let i = n - 2; i >= 0; i--) {
|
|
224
|
+
const nxt = final[i + 1];
|
|
225
|
+
const curr = forward[i];
|
|
226
|
+
if (isCut(i + 1)) {
|
|
227
|
+
final[i] = curr;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
final[i] = [
|
|
231
|
+
alpha * curr[0] + (1 - alpha) * nxt[0],
|
|
232
|
+
alpha * curr[1] + (1 - alpha) * nxt[1],
|
|
233
|
+
];
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return final;
|
|
237
|
+
}
|
|
238
|
+
/** Clamp to [0,1] — mirror of reframe_bake.py `_clip01`. */
|
|
239
|
+
export function clip01(v) {
|
|
240
|
+
return Math.max(0, Math.min(1, v));
|
|
241
|
+
}
|
|
242
|
+
/** Bottom-band fraction the render keeps clear for captions per aspect.
|
|
243
|
+
* CAPTION_BAND_RESERVE is the SSOT in @cueframe/composition (imported above). */
|
|
244
|
+
export function captionBandReserve(aspect) {
|
|
245
|
+
return CAPTION_BAND_RESERVE[aspect] ?? 0.0;
|
|
246
|
+
}
|
|
247
|
+
/** Output aspect as width/height (e.g. '9:16' → 0.5625). FAILS LOUD on a
|
|
248
|
+
* malformed aspect — a silent 9/16 default frames every non-vertical render
|
|
249
|
+
* vertically (no-fallbacks rule). Callers pass `composition.format.aspectRatio`,
|
|
250
|
+
* which the Composition validator constrains to a known enum, so a throw here
|
|
251
|
+
* is a genuine drift/bug, never a user-reachable path. */
|
|
252
|
+
export function aspectWhRatio(aspect) {
|
|
253
|
+
const parts = aspect.split(':');
|
|
254
|
+
const w = Number(parts[0]);
|
|
255
|
+
const h = Number(parts[1]);
|
|
256
|
+
if (parts.length !== 2 || !Number.isFinite(w) || !Number.isFinite(h) || w <= 0 || h === 0) {
|
|
257
|
+
throw new Error(`aspectWhRatio: invalid aspect ratio '${aspect}' (expected 'W:H')`);
|
|
258
|
+
}
|
|
259
|
+
return w / h;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* The crop window size (source-normalized) for a given `zoom_scale` + output
|
|
263
|
+
* aspect — the bake half of the renderer's `computeCropTransform`: the largest
|
|
264
|
+
* output-aspect rect that fits the source, scaled by the zoom (clamped to
|
|
265
|
+
* [0.4,1.0] like `bakedZoom`). Shared so the cameraPath deadzone (output-crop
|
|
266
|
+
* units) can convert to the source-normalized geometry the regions live in.
|
|
267
|
+
*/
|
|
268
|
+
export function cropWindowSizeFor(srcW, srcH, zoomScale, aspect) {
|
|
269
|
+
if (srcW <= 0 || srcH <= 0)
|
|
270
|
+
return { w: 1, h: 1 };
|
|
271
|
+
const outAR = aspectWhRatio(aspect);
|
|
272
|
+
const srcAR = srcW / srcH;
|
|
273
|
+
let cropW;
|
|
274
|
+
let cropH;
|
|
275
|
+
if (srcAR > outAR) {
|
|
276
|
+
cropH = srcH;
|
|
277
|
+
cropW = srcH * outAR;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
cropW = srcW;
|
|
281
|
+
cropH = srcW / outAR;
|
|
282
|
+
}
|
|
283
|
+
const bakedZoom = Math.max(0.4, Math.min(1.0, zoomScale));
|
|
284
|
+
cropW *= bakedZoom;
|
|
285
|
+
cropH *= bakedZoom;
|
|
286
|
+
return { w: cropW / srcW, h: cropH / srcH };
|
|
287
|
+
}
|
|
288
|
+
/** Return the value at the largest key ≤ `key` (fallback to the smallest key
|
|
289
|
+
* when none precedes; null when empty) — mirror of `_nearest_kp_value`.
|
|
290
|
+
* per-keyframe-speaker is a Map<frameOffset, faceId>. */
|
|
291
|
+
export function nearestKpValue(d, key) {
|
|
292
|
+
if (d.size === 0)
|
|
293
|
+
return null;
|
|
294
|
+
const keys = [...d.keys()];
|
|
295
|
+
const preceding = keys.filter((k) => k <= key);
|
|
296
|
+
if (preceding.length > 0)
|
|
297
|
+
return d.get(Math.max(...preceding)) ?? null;
|
|
298
|
+
return d.get(Math.min(...keys)) ?? null;
|
|
299
|
+
}
|
|
300
|
+
/** Contiguous [startFrame, endFrame) ranges where `faceId` is the active
|
|
301
|
+
* speaker; adjacent same-speaker spans merge — mirror of `_active_windows_for`.
|
|
302
|
+
* Each keyframe pick holds until the next keyframe (last → frameCount). */
|
|
303
|
+
export function activeWindowsFor(faceId, perKeyframeSpeaker, frameCount) {
|
|
304
|
+
if (perKeyframeSpeaker.size === 0)
|
|
305
|
+
return [];
|
|
306
|
+
const kfs = [...perKeyframeSpeaker.keys()].sort((a, b) => a - b);
|
|
307
|
+
const windows = [];
|
|
308
|
+
for (let j = 0; j < kfs.length; j++) {
|
|
309
|
+
const kf = kfs[j];
|
|
310
|
+
if (perKeyframeSpeaker.get(kf) !== faceId)
|
|
311
|
+
continue;
|
|
312
|
+
const start = kf;
|
|
313
|
+
const end = j + 1 < kfs.length ? kfs[j + 1] : frameCount;
|
|
314
|
+
const last = windows[windows.length - 1];
|
|
315
|
+
if (last && last[1] === start)
|
|
316
|
+
last[1] = end;
|
|
317
|
+
else
|
|
318
|
+
windows.push([start, end]);
|
|
319
|
+
}
|
|
320
|
+
return windows;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Build smoothed per-subject normalized face-box series + active windows from
|
|
324
|
+
* the tracker's per-frame `{faceId: [x1,y1,x2,y2]}` (pixel) output. Mirror of
|
|
325
|
+
* reframe_bake.py `_per_subject_series`: stable subject order = first
|
|
326
|
+
* appearance; centers + sizes EMA-smoothed (alpha 0.35) with the same shot-aware
|
|
327
|
+
* reset as the crop centers; frames with no tracked face stay null.
|
|
328
|
+
*/
|
|
329
|
+
export function perSubjectSeries(perFrameTracked, srcW, srcH, perKeyframeSpeaker, frameCount, cutFrames) {
|
|
330
|
+
if (srcW <= 0 || srcH <= 0)
|
|
331
|
+
return [];
|
|
332
|
+
// Stable subject order = first appearance across the segment.
|
|
333
|
+
const faceIds = [];
|
|
334
|
+
const seen = new Set();
|
|
335
|
+
for (const tracked of perFrameTracked) {
|
|
336
|
+
for (const fid of Object.keys(tracked)) {
|
|
337
|
+
if (!seen.has(fid)) {
|
|
338
|
+
seen.add(fid);
|
|
339
|
+
faceIds.push(fid);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
const subjects = [];
|
|
344
|
+
for (const fid of faceIds) {
|
|
345
|
+
const centers = new Array(frameCount).fill(null);
|
|
346
|
+
const sizes = new Array(frameCount).fill(null);
|
|
347
|
+
for (let i = 0; i < frameCount; i++) {
|
|
348
|
+
const tracked = i < perFrameTracked.length ? perFrameTracked[i] : {};
|
|
349
|
+
const bbox = tracked[fid];
|
|
350
|
+
if (!bbox || bbox.length < 4)
|
|
351
|
+
continue;
|
|
352
|
+
const [x1, y1, x2, y2] = bbox;
|
|
353
|
+
centers[i] = [(x1 + x2) / 2 / srcW, (y1 + y2) / 2 / srcH];
|
|
354
|
+
sizes[i] = [Math.max(0, x2 - x1) / srcW, Math.max(0, y2 - y1) / srcH];
|
|
355
|
+
}
|
|
356
|
+
const smCenters = emaSmooth(centers, 0.35, cutFrames);
|
|
357
|
+
const smSizes = emaSmooth(sizes, 0.35, cutFrames);
|
|
358
|
+
const boxSeries = [];
|
|
359
|
+
for (let i = 0; i < frameCount; i++) {
|
|
360
|
+
if (centers[i] === null) {
|
|
361
|
+
boxSeries.push(null);
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
const [cx, cy] = smCenters[i];
|
|
365
|
+
const [w, h] = smSizes[i];
|
|
366
|
+
boxSeries.push([clip01(cx - w / 2), clip01(cy - h / 2), clip01(w), clip01(h)]);
|
|
367
|
+
}
|
|
368
|
+
subjects.push({
|
|
369
|
+
face_id: fid,
|
|
370
|
+
face_box_series: boxSeries,
|
|
371
|
+
active_windows: activeWindowsFor(fid, perKeyframeSpeaker, frameCount),
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return subjects;
|
|
375
|
+
}
|
|
376
|
+
/** §22.1 target face-height fraction of the OUTPUT per editorial shot scale
|
|
377
|
+
* (mirror of reframe_bake.py `_SHOT_SCALE_TARGET`). */
|
|
378
|
+
/**
|
|
379
|
+
* §22.1 (Phase 4): calibrate ZOOM to the DETECTED face for an editorial shot
|
|
380
|
+
* scale. zoom = median(face_h_px)/fit_h / target, clamped [ZOOM_MIN, ZOOM_MAX].
|
|
381
|
+
* shotScale seeds ZOOM ONLY — verticalBias (headroom) is the agent's AUTHORED
|
|
382
|
+
* value, passed through verbatim; it is NEVER overridden here (the floor-vision
|
|
383
|
+
* fix). When the authored fields are omitted: zoom defaults to 1.0 (frame as-is)
|
|
384
|
+
* and headroom to 0 (dead-center, never auto-applied). Falls back to the authored
|
|
385
|
+
* zoom/bias when shotScale is unset or no face was detected.
|
|
386
|
+
*
|
|
387
|
+
* The target table + the clamp live in @cueframe/composition/reframe/shotScale —
|
|
388
|
+
* the SAME module the plan-time punch-in guard reads, so a shotScale the guard
|
|
389
|
+
* admitted and the zoom this bakes can never disagree. Do NOT re-declare them here.
|
|
390
|
+
*
|
|
391
|
+
* NOTE this honors whatever shotScale reaches it. Whether the punch-in was EARNED
|
|
392
|
+
* (is there room around the face? pixels to magnify?) is decided at the plan, by
|
|
393
|
+
* `punchInWarrant` in that same module. A shotScale arriving here that the warrant
|
|
394
|
+
* would refuse is a bug in the guard, not something to re-check.
|
|
395
|
+
*/
|
|
396
|
+
export function calibrateShotScale(shotScale, subjects, srcW, srcH, aspect, fallbackZoom, fallbackVbias, authoredSubject) {
|
|
397
|
+
const target = shotScale ? SHOT_SCALE_TARGET[shotScale] : undefined;
|
|
398
|
+
if (target === undefined || srcH <= 0)
|
|
399
|
+
return [fallbackZoom ?? 1.0, fallbackVbias ?? 0];
|
|
400
|
+
const outAr = aspectWhRatio(aspect);
|
|
401
|
+
const srcAr = srcW / srcH;
|
|
402
|
+
const fitH = srcAr > outAr ? srcH : srcW / outAr;
|
|
403
|
+
if (fitH <= 0)
|
|
404
|
+
return [fallbackZoom ?? 1.0, fallbackVbias ?? 0];
|
|
405
|
+
// Pool face heights from the AUTHORED subject only. Pooling every tracked
|
|
406
|
+
// person (the old `for (const s of subjects)`) let the OTHER speaker in a
|
|
407
|
+
// wide two-shot — small, far from camera — drag the median down, flooring
|
|
408
|
+
// `zoom` at 0.4 and over-tightening the crop until the subject's head was
|
|
409
|
+
// clipped (the R3 "head-cropped close-up" bug). The zoom must size to the
|
|
410
|
+
// subject the segment actually frames, not to whoever else is on screen.
|
|
411
|
+
// Non-`face` picks (all-faces / active-speaker / frame-center) have no single
|
|
412
|
+
// authored id, so they keep the full pool. Defensive: if the authored id is
|
|
413
|
+
// absent from the series (shouldn't happen — deriveTrajectory fails loud
|
|
414
|
+
// below MIN_SUBJECT_RESOLUTION first), fall back to all subjects.
|
|
415
|
+
const authoredPool = authoredSubject?.kind === 'face' && authoredSubject.faceId.startsWith('face-')
|
|
416
|
+
? subjects.filter((s) => s.face_id === authoredSubject.faceId)
|
|
417
|
+
: subjects;
|
|
418
|
+
const pool = authoredPool.some((s) => (s.face_box_series ?? []).some((b) => b !== null))
|
|
419
|
+
? authoredPool
|
|
420
|
+
: subjects;
|
|
421
|
+
const heights = [];
|
|
422
|
+
for (const s of pool) {
|
|
423
|
+
for (const b of s.face_box_series ?? []) {
|
|
424
|
+
if (b !== null && b.length >= 4)
|
|
425
|
+
heights.push(b[3] * srcH);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (heights.length === 0)
|
|
429
|
+
return [fallbackZoom ?? 1.0, fallbackVbias ?? 0];
|
|
430
|
+
heights.sort((a, b) => a - b);
|
|
431
|
+
const medianH = heights[Math.floor(heights.length / 2)];
|
|
432
|
+
const baseFaceFrac = medianH / fitH;
|
|
433
|
+
if (baseFaceFrac <= 0)
|
|
434
|
+
return [fallbackZoom ?? 1.0, fallbackVbias ?? 0];
|
|
435
|
+
const zoom = shotScaleZoom(baseFaceFrac, shotScale);
|
|
436
|
+
// shotScale seeds zoom; headroom is the AUTHORED verticalBias (0 when omitted),
|
|
437
|
+
// never the old hardcoded -0.15 (the floor-vision fix). Phase 4.
|
|
438
|
+
return [zoom, fallbackVbias ?? 0];
|
|
439
|
+
}
|
|
440
|
+
// ── Contract: STAGE A output (the cached source-level subjectTrack) ──────────
|
|
441
|
+
// TrajectorySubject / TrajectorySegment / TrajectoryData are imported + re-exported
|
|
442
|
+
// from @cueframe/composition/reframe/trajectory at the top of this file (the SSOT).
|
|
443
|
+
/**
|
|
444
|
+
* Derive ONE segment's per-frame crop centers + per-subject series from a
|
|
445
|
+
* segment-local slice of the cached track. Mirror of the STAGE B half of
|
|
446
|
+
* reframe_bake.py `_bake_segment` (steps 4–7): per-frame subject filter
|
|
447
|
+
* (active-speaker uses the nearest keyframe pick; otherwise largest/face-N) →
|
|
448
|
+
* shot-aware EMA (alpha 0.35) → holes land at [0.5,0.5] → per-subject series.
|
|
449
|
+
*/
|
|
450
|
+
export function deriveSegment(perFrameTracked, srcW, srcH, perKeyframeSpeaker, subject, cutFrames, fps,
|
|
451
|
+
// Output aspect + the segment's zoom — used ONLY by the all-faces cameraPath
|
|
452
|
+
// to size the crop window the deadzone-inclusion gate must keep the subject
|
|
453
|
+
// inside. Optional + trailing so the existing face/point/active-speaker/
|
|
454
|
+
// frame-center callers (and the parity test) are unaffected; the all-faces
|
|
455
|
+
// path falls back to a 9:16 / zoom-1.0 window when omitted (a conservative,
|
|
456
|
+
// wide window — the gate still tracks, just with a slightly larger hold band).
|
|
457
|
+
aspect, zoomScale) {
|
|
458
|
+
const frameCount = perFrameTracked.length;
|
|
459
|
+
// `point` is detection-free: the crop sits at the authored normalized
|
|
460
|
+
// location for every frame of the segment. Screen recordings carry no faces,
|
|
461
|
+
// so the face-resolution loop below would leave every center null and fill
|
|
462
|
+
// [0.5,0.5]; short-circuit to the authored point instead. resolvedFrames =
|
|
463
|
+
// frameCount because the subject is, by construction, present every frame.
|
|
464
|
+
if (subject.kind === 'point') {
|
|
465
|
+
const centers = new Array(frameCount)
|
|
466
|
+
.fill(null)
|
|
467
|
+
.map(() => [subject.x, subject.y]);
|
|
468
|
+
return { centers, subjects: [], resolvedFrames: frameCount };
|
|
469
|
+
}
|
|
470
|
+
// `all-faces` — the CHASE-KILLER (Phase 2) + DEADZONE-GLIDE TRACKING (Phase 3)
|
|
471
|
+
// path. Select a STABLE subject set (per-shot size-aware locked set → segment
|
|
472
|
+
// pool → dominance top-K → per-frame membership hysteresis); subjectSet now
|
|
473
|
+
// emits the per-frame framed-group UNION BOX, which we lower to a per-frame
|
|
474
|
+
// RequiredRegion (the padded box the crop must contain) and feed to cameraPath
|
|
475
|
+
// — the single deadzone-inclusion + Hamming-window stability stage. The camera
|
|
476
|
+
// HOLDS while the group stays inside the safe region of the crop, then GLIDES
|
|
477
|
+
// to re-contain it when it moves (a walking subject is TRACKED, not lost), and
|
|
478
|
+
// never chases per-frame transient micro-motion (the gate's hold band).
|
|
479
|
+
// Mode-isolated: only `all-faces` routes here; every other mode keeps the
|
|
480
|
+
// existing per-frame selectedFaceCenter → emaSmooth path below verbatim. The
|
|
481
|
+
// per-subject `subjects` series the floor reads is still produced by
|
|
482
|
+
// `perSubjectSeries` (unchanged), so this only changes WHERE the camera points.
|
|
483
|
+
// An empty locked set (faceless / crowd-only clip) → center-hold (a defined
|
|
484
|
+
// outcome, not a throw) — selectSubjectSet returns [0.5,0.5] every frame and a
|
|
485
|
+
// null region every frame, which cameraPath turns into a held center.
|
|
486
|
+
if (subject.kind === 'all-faces') {
|
|
487
|
+
const sel = selectSubjectSet(perFrameTracked, srcW, srcH, fps ?? 30, perKeyframeSpeaker, cutFrames ?? new Set());
|
|
488
|
+
// Build the canonical per-frame RequiredRegions (pad + per-shot outlier
|
|
489
|
+
// reject) — THE region the camera must contain — then run the single
|
|
490
|
+
// stability stage. The crop window the deadzone gate must keep the region
|
|
491
|
+
// inside is sized from the segment's authored zoom + output aspect (all-faces
|
|
492
|
+
// has no per-frame eased zoom, so one window per shot is exact).
|
|
493
|
+
const regions = buildRequiredRegions(sel.perFrameBoxes, fps ?? 30, cutFrames ?? new Set());
|
|
494
|
+
// PHASE 5 — automatic zoom-to-fit (ALL modes; all-faces is the headline). Size
|
|
495
|
+
// the crop PER SHOT to CONTAIN the shot-wide padded union of the locked group:
|
|
496
|
+
// a group that fits 9:16 is framed TIGHT (zoom < 1.0), an over-wide group
|
|
497
|
+
// pads-and-holds at zoom 1.0 + emits `overframed`. The min-shot-length floor
|
|
498
|
+
// (framing.ts) holds the zoom across a sub-second montage so it can't strobe.
|
|
499
|
+
// The deadzone-inclusion gate then operates inside this FITTED window (a
|
|
500
|
+
// tighter window has a proportionally tighter hold band — DEADZONE is a
|
|
501
|
+
// fraction of the crop), so the camera frames the zoom-fit group, not a
|
|
502
|
+
// stale wide window.
|
|
503
|
+
const effAspect = aspect ?? '9:16';
|
|
504
|
+
const shotFits = fitZoomPerShot(sel.perFrameBoxes, cutFrames ?? new Set(), srcW, srcH, effAspect, fps ?? 30, frameCount);
|
|
505
|
+
// Map each frame → its shot's fitted crop window (the window the deadzone gate
|
|
506
|
+
// must keep the region inside). Per-shot constant; cameraPath reads it per
|
|
507
|
+
// frame. The shot order matches `fitZoomPerShot` (both use `segmentShots`).
|
|
508
|
+
const shotRanges = segmentShots(cutFrames ?? new Set(), frameCount);
|
|
509
|
+
const winByFrame = new Array(frameCount);
|
|
510
|
+
const fallbackWin = cropWindowSizeFor(srcW, srcH, zoomScale ?? 1.0, effAspect);
|
|
511
|
+
for (let s = 0; s < shotRanges.length; s++) {
|
|
512
|
+
const fit = shotFits[s];
|
|
513
|
+
const win = fit
|
|
514
|
+
? cropWindowSizeFor(srcW, srcH, fit.zoom, effAspect)
|
|
515
|
+
: fallbackWin;
|
|
516
|
+
for (let i = shotRanges[s].start; i < shotRanges[s].end; i++)
|
|
517
|
+
winByFrame[i] = win;
|
|
518
|
+
}
|
|
519
|
+
const cropFor = (frame) => winByFrame[frame] ?? fallbackWin;
|
|
520
|
+
const centers = cameraPath(regions, cropFor, fps ?? 30, cutFrames ?? new Set(), [0.5, 0.5]);
|
|
521
|
+
const subjects = perSubjectSeries(perFrameTracked, srcW, srcH, perKeyframeSpeaker, frameCount, cutFrames);
|
|
522
|
+
return { centers, subjects, resolvedFrames: sel.resolvedFrames, shotFits };
|
|
523
|
+
}
|
|
524
|
+
// `face` / `active-speaker` — the P4 MIGRATION. These were a per-frame
|
|
525
|
+
// `selectedFaceCenter` → `emaSmooth(0.35)` over a bare CENTROID. They now run the
|
|
526
|
+
// SAME geometric-deadzone path as `all-faces` (a DELIBERATE, re-eval'd behavior
|
|
527
|
+
// change — NOT byte-equivalent): the `topK=1` subjects adapter resolves the
|
|
528
|
+
// single chosen subject's per-frame BOX (its real extent), lowers it to a padded
|
|
529
|
+
// + outlier-rejected RequiredRegion (`buildRequiredRegions`, the same builder
|
|
530
|
+
// all-faces uses), and feeds it to `cameraPath` (the sealed geometric-deadzone
|
|
531
|
+
// stabilizer). The win, characterized in the P4 eval: a moving subject is TRACKED
|
|
532
|
+
// with a tighter intra-shot hold and a real box to contain (smoother + better
|
|
533
|
+
// inclusion than the old point-EMA chase). `frame-center` is the ONLY mode left
|
|
534
|
+
// on the bare centroid path below — it carries NO subject (selectedFaceCenter →
|
|
535
|
+
// null → [0.5,0.5]), so it is pure Lowering with an empty selection, byte-
|
|
536
|
+
// identical to before. `point` short-circuited above.
|
|
537
|
+
if (subject.kind === 'face' || subject.kind === 'active-speaker') {
|
|
538
|
+
const pick = subject.kind === 'face'
|
|
539
|
+
? { kind: 'face', authoredFaceId: subject.faceId }
|
|
540
|
+
: { kind: 'active-speaker' };
|
|
541
|
+
const single = selectSingleSubjectBoxes(perFrameTracked, srcW, srcH, perKeyframeSpeaker, pick, (frame) => nearestKpValue(perKeyframeSpeaker, frame));
|
|
542
|
+
// Lower the per-frame chosen-subject box → the padded, outlier-rejected
|
|
543
|
+
// RequiredRegion the crop must contain, then run the single deadzone-inclusion
|
|
544
|
+
// + Hamming stability stage. A shot with NO resolved subject center-holds (the
|
|
545
|
+
// documented no-subject outcome; the old emaSmooth instead carried the last
|
|
546
|
+
// face position across an empty shot — a silent hold-last that framed an absent
|
|
547
|
+
// subject; the deadzone path is correct, `feedback_never_add_fallbacks`).
|
|
548
|
+
const regions = buildRequiredRegions(single.perFrameBoxes, fps ?? 30, cutFrames ?? new Set());
|
|
549
|
+
const effAspect = aspect ?? '9:16';
|
|
550
|
+
const win = cropWindowSizeFor(srcW, srcH, zoomScale ?? 1.0, effAspect);
|
|
551
|
+
const centers = cameraPath(regions, () => win, fps ?? 30, cutFrames ?? new Set(), [0.5, 0.5]);
|
|
552
|
+
const subjects = perSubjectSeries(perFrameTracked, srcW, srcH, perKeyframeSpeaker, frameCount, cutFrames);
|
|
553
|
+
return { centers, subjects, resolvedFrames: single.resolvedFrames };
|
|
554
|
+
}
|
|
555
|
+
// `frame-center` — the bare-centroid path (the ONLY remaining EMA caller). It
|
|
556
|
+
// carries no subject: `selectedFaceCenter` returns null every frame, so
|
|
557
|
+
// `emaSmooth` forward-fills [0.5,0.5] — the documented frame-center behavior,
|
|
558
|
+
// byte-identical to before P4.
|
|
559
|
+
const rawCenters = new Array(frameCount).fill(null);
|
|
560
|
+
for (let i = 0; i < frameCount; i++) {
|
|
561
|
+
const tracked = perFrameTracked[i];
|
|
562
|
+
if (!tracked || Object.keys(tracked).length === 0)
|
|
563
|
+
continue;
|
|
564
|
+
const faceDicts = Object.entries(tracked).map(([faceId, b]) => ({
|
|
565
|
+
faceId,
|
|
566
|
+
x: b[0] / srcW,
|
|
567
|
+
y: b[1] / srcH,
|
|
568
|
+
width: (b[2] - b[0]) / srcW,
|
|
569
|
+
height: (b[3] - b[1]) / srcH,
|
|
570
|
+
}));
|
|
571
|
+
rawCenters[i] = selectedFaceCenter(faceDicts, subject);
|
|
572
|
+
}
|
|
573
|
+
// How many frames a subject was ACTUALLY found in (a non-null center). For
|
|
574
|
+
// frame-center this is 0 (no subject) — the resolution gate exempts frame-center.
|
|
575
|
+
const resolvedFrames = rawCenters.reduce((n, c) => (c !== null ? n + 1 : n), 0);
|
|
576
|
+
const smoothed = emaSmooth(rawCenters, 0.35, cutFrames);
|
|
577
|
+
const centers = [];
|
|
578
|
+
for (let i = 0; i < frameCount; i++) {
|
|
579
|
+
const c = i < smoothed.length ? smoothed[i] : null;
|
|
580
|
+
// All-null for frame-center → [0.5,0.5] (the intended center).
|
|
581
|
+
centers.push(c === null ? [0.5, 0.5] : [c[0], c[1]]);
|
|
582
|
+
}
|
|
583
|
+
const subjects = perSubjectSeries(perFrameTracked, srcW, srcH, perKeyframeSpeaker, frameCount, cutFrames);
|
|
584
|
+
return { centers, subjects, resolvedFrames };
|
|
585
|
+
}
|
|
586
|
+
/**
|
|
587
|
+
* Derive the full crop trajectory for a set of authored reframe segments over a
|
|
588
|
+
* cached source-level `subjectTrack` — the cheap per-candidate STAGE B run
|
|
589
|
+
* in-loop before perception. Mirror of reframe_bake.py `_bake_reframe_impl`'s
|
|
590
|
+
* segment loop: per segment, slice the window-local track to the segment's
|
|
591
|
+
* frame range, rebase the keyframe picks, derive centers + subjects, then
|
|
592
|
+
* calibrate zoom/vbias (§22.1) — emitting the `TrajectoryData` the render reads.
|
|
593
|
+
*
|
|
594
|
+
* Segment times are CLIP-RELATIVE and index the subjectTrack directly (the track
|
|
595
|
+
* is detected over the clip's source window, frame 0 = window start). FAILS LOUD
|
|
596
|
+
* when a specific-face segment resolves in too few frames — the symptom of
|
|
597
|
+
* tracker ID fragmentation, which used to be hidden by a silent frame-center
|
|
598
|
+
* fallback (the R3 "crop on nothing" bug).
|
|
599
|
+
*/
|
|
600
|
+
/**
|
|
601
|
+
* Map a reframe `Focus` → the internal `Subject` the derive math consumes
|
|
602
|
+
* (mode→kind, same variants). `shotScale` lives ONLY on the `face` focus
|
|
603
|
+
* variant in the reframe model; the loop reads it off the focus separately
|
|
604
|
+
* (it is NOT part of `Subject`). Pure rename — no behavior change.
|
|
605
|
+
*/
|
|
606
|
+
function focusToSubject(focus) {
|
|
607
|
+
switch (focus.mode) {
|
|
608
|
+
case 'face':
|
|
609
|
+
return { kind: 'face', faceId: focus.faceId };
|
|
610
|
+
case 'point':
|
|
611
|
+
return { kind: 'point', x: focus.x, y: focus.y };
|
|
612
|
+
case 'all-faces':
|
|
613
|
+
return { kind: 'all-faces' };
|
|
614
|
+
case 'frame-center':
|
|
615
|
+
return { kind: 'frame-center' };
|
|
616
|
+
case 'active-speaker':
|
|
617
|
+
return { kind: 'active-speaker' };
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
/** Frame-rounding tolerance for the sub-shot tiling assertion. Sub-shot bounds
|
|
621
|
+
* are integer frame indices into the segment slice, so a legitimate tiling has
|
|
622
|
+
* ZERO gap; the tolerance (< 1 frame) only absorbs a future float-bound rounding
|
|
623
|
+
* drift, never a real dropped sub-shot (which is ≥ 1 frame). NOT a float `==`
|
|
624
|
+
* (the first-draft bug that would false-throw on rounding). */
|
|
625
|
+
const FRAME_ROUNDING_TOLERANCE = 0.5;
|
|
626
|
+
/** Build the `trajectory_internal_gap` fail-loud error (registered, category
|
|
627
|
+
* `internal`) for a sub-shot non-tiling within one authored segment. */
|
|
628
|
+
function internalGap(seg, segIdx, detail) {
|
|
629
|
+
return new Error(encodeError(new CueframeError('trajectory_internal_gap', `authored segment ${segIdx} [${seg.startSec}–${seg.endSec}s]: sub-shots do not tile the segment — ${detail}. ` +
|
|
630
|
+
`A dropped sub-shot leaves an internal coverage gap the render would only catch downstream.`, { segment: [seg.startSec, seg.endSec], segIdx, detail })));
|
|
631
|
+
}
|
|
632
|
+
export function deriveTrajectory(track, segments, aspect, bakeVersion,
|
|
633
|
+
// D10 (P5 4b): true when the source is AI-GENERATED media
|
|
634
|
+
// (`mediaItems.mediaSource === "generated"`). PURE param — the function never
|
|
635
|
+
// reads Convex / the row; the activity resolves the flag and threads it here.
|
|
636
|
+
// It changes ONLY which error a subject-mode resolution failure throws: a
|
|
637
|
+
// generated clip emits the DISTINCT `subject_detection_failed_on_generated`
|
|
638
|
+
// (the agent should use a GEOMETRIC reframe on faceless b-roll) instead of the
|
|
639
|
+
// generic `subject_not_tracked`. The non-generated path is byte-for-byte
|
|
640
|
+
// unchanged (the flag defaults false). Subject modes are face /
|
|
641
|
+
// active-speaker / all-faces; frame-center / point are geometric and exempt.
|
|
642
|
+
isGenerated = false) {
|
|
643
|
+
const fps = track.srcFps;
|
|
644
|
+
const perKf = new Map(Object.entries(track.perKeyframeSpeaker).map(([k, v]) => [Number(k), v]));
|
|
645
|
+
const out = [];
|
|
646
|
+
const trackLen = track.perFrameTracked.length;
|
|
647
|
+
// Window-local frame indices where a new shot begins (detector cuts). Absent
|
|
648
|
+
// on tracks from the pre-shots detector — the derivation then degrades to the
|
|
649
|
+
// jump-threshold inference (unchanged behavior).
|
|
650
|
+
const winCuts = track.shotBoundaries ?? [];
|
|
651
|
+
for (let idx = 0; idx < segments.length; idx++) {
|
|
652
|
+
const seg = segments[idx];
|
|
653
|
+
// Map the reframe segment onto the internal derive inputs — pure rename,
|
|
654
|
+
// identical math. focus→Subject; shotScale rides the `face` focus variant;
|
|
655
|
+
// zoom→fallbackZoom (default 1 = frame as-is); bias.y→verticalBias,
|
|
656
|
+
// bias.x→lateralBias (both default 0 when bias is absent).
|
|
657
|
+
const subject = focusToSubject(seg.focus);
|
|
658
|
+
const shotScale = seg.focus.mode === 'face' ? seg.focus.shotScale : undefined;
|
|
659
|
+
const zoomScale = seg.zoom;
|
|
660
|
+
// A `point`-focus segment with BOTH `ease` and `bias` is a Ken-Burns PAN
|
|
661
|
+
// (kenBurnsToReframe): `bias` is the pan ORIGIN offset and the motion is
|
|
662
|
+
// expressed as a per-frame CENTER ramp (buildPannedCenters), NOT a constant
|
|
663
|
+
// crop-window bias. So zero the crop bias for a pan — otherwise the pan would
|
|
664
|
+
// ALSO carry a static lateral shift. All other segments map bias verbatim.
|
|
665
|
+
const isEasedPan = seg.focus.mode === 'point' && !!seg.ease && !!seg.bias;
|
|
666
|
+
const verticalBias = isEasedPan ? 0 : seg.bias?.y;
|
|
667
|
+
const lateralBias = isEasedPan ? 0 : seg.bias?.x ?? 0;
|
|
668
|
+
// Clamp the segment's frame range to the cached track's extent. The detect
|
|
669
|
+
// window is meant to cover the whole clip, but a rounding overrun or a
|
|
670
|
+
// tail-shot read-failure can push segEnd past the track; without the clamp
|
|
671
|
+
// an over-range slice silently truncates and the render holds the last
|
|
672
|
+
// center for the uncovered tail. A fully-past segment (segStart ≥ trackLen)
|
|
673
|
+
// clamps to zero length and is skipped explicitly (review finding #5).
|
|
674
|
+
const segStart = Math.min(Math.round(seg.startSec * fps), trackLen);
|
|
675
|
+
const segEnd = Math.min(Math.round(seg.endSec * fps), trackLen);
|
|
676
|
+
if (segEnd - segStart <= 0)
|
|
677
|
+
continue;
|
|
678
|
+
const segPerFrame = track.perFrameTracked.slice(segStart, segEnd);
|
|
679
|
+
// Rebase the window-local keyframe picks into segment-local offsets.
|
|
680
|
+
const segKf = new Map();
|
|
681
|
+
for (const [k, v] of perKf) {
|
|
682
|
+
if (k >= segStart && k < segEnd)
|
|
683
|
+
segKf.set(k - segStart, v);
|
|
684
|
+
}
|
|
685
|
+
// Rebase the window-local shot cuts into segment-local offsets. Only cuts
|
|
686
|
+
// STRICTLY inside the segment are interior resets; a cut at segStart is the
|
|
687
|
+
// segment's own fresh start (frame 0 has no prior to blend), and a cut at
|
|
688
|
+
// segEnd belongs to the next segment.
|
|
689
|
+
const segCuts = new Set();
|
|
690
|
+
for (const b of winCuts) {
|
|
691
|
+
if (b > segStart && b < segEnd)
|
|
692
|
+
segCuts.add(b - segStart);
|
|
693
|
+
}
|
|
694
|
+
const { centers, subjects, resolvedFrames, shotFits } = deriveSegment(segPerFrame, track.srcW, track.srcH, segKf, subject, segCuts, fps,
|
|
695
|
+
// The all-faces cameraPath sizes its deadzone-inclusion crop window from
|
|
696
|
+
// the output aspect + the segment's authored zoom (default 1.0). Other
|
|
697
|
+
// modes ignore these. Per-shot zoom calibration (below) is `face`-only, so
|
|
698
|
+
// the all-faces window matches the emitted `zoom_scale` for every sub-shot.
|
|
699
|
+
aspect, zoomScale);
|
|
700
|
+
if (centers.length === 0)
|
|
701
|
+
continue;
|
|
702
|
+
// D10 (P5 4b) — GENERATED footage fails loud on ANY under-resolved SUBJECT
|
|
703
|
+
// mode (face / active-speaker / all-faces). AI-generated b-roll often carries
|
|
704
|
+
// no detectable faces; a subject-mode reframe on it would silently center-hold
|
|
705
|
+
// on nobody. Throw a DISTINCT `subject_detection_failed_on_generated` (vs the
|
|
706
|
+
// generic `subject_not_tracked`) so the driving agent learns the corrective
|
|
707
|
+
// action is a GEOMETRIC reframe (frame-center / point — exempt below), not a
|
|
708
|
+
// re-detect. This branch is ONLY taken when `isGenerated` is true, so the
|
|
709
|
+
// uploaded path is untouched. `point`/`frame-center` are detection-free
|
|
710
|
+
// (resolvedFrames is geometric) and never enter this block.
|
|
711
|
+
if (isGenerated &&
|
|
712
|
+
(subject.kind === 'face' ||
|
|
713
|
+
subject.kind === 'active-speaker' ||
|
|
714
|
+
subject.kind === 'all-faces')) {
|
|
715
|
+
const rate = resolvedFrames / (segEnd - segStart);
|
|
716
|
+
if (rate < MIN_SUBJECT_RESOLUTION) {
|
|
717
|
+
throw new Error(encodeError(new CueframeError('subject_detection_failed_on_generated', `segment [${seg.startSec}–${seg.endSec}s] authored subject mode '${subject.kind}'` +
|
|
718
|
+
(subject.kind === 'face' ? ` (face '${subject.faceId}')` : '') +
|
|
719
|
+
` resolved in only ${resolvedFrames}/${segEnd - segStart} frames ` +
|
|
720
|
+
`(${(rate * 100).toFixed(0)}%) on AI-GENERATED media — generated b-roll carries ` +
|
|
721
|
+
`no detectable subject for this reframe. Use a GEOMETRIC reframe (frame-center or ` +
|
|
722
|
+
`point) on generated footage instead of a subject-tracking mode.`, {
|
|
723
|
+
mode: subject.kind,
|
|
724
|
+
...(subject.kind === 'face' ? { faceId: subject.faceId } : {}),
|
|
725
|
+
resolvedFrames,
|
|
726
|
+
totalFrames: segEnd - segStart,
|
|
727
|
+
segment: [seg.startSec, seg.endSec],
|
|
728
|
+
})));
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
// FAIL LOUD on an unresolvable authored face (no silent frame-center
|
|
732
|
+
// fallback). When the agent authors `subject: {faceId}` but that id is
|
|
733
|
+
// tracked in < MIN_SUBJECT_RESOLUTION of the segment's frames, the crop
|
|
734
|
+
// would silently sit at frame-center on nobody — the R3 bug. A real subject
|
|
735
|
+
// is present for most of the segment it's authored over; <40% means the
|
|
736
|
+
// per-frame tracker isn't carrying that identity (ID fragmentation), which
|
|
737
|
+
// must surface, not ship. frame-center / all-faces / active-speaker don't
|
|
738
|
+
// require a persistent specific id and are exempt. (The generated path above
|
|
739
|
+
// already short-circuited for `isGenerated`; this is the UNCHANGED uploaded
|
|
740
|
+
// gate.)
|
|
741
|
+
if (subject.kind === 'face') {
|
|
742
|
+
const rate = resolvedFrames / (segEnd - segStart);
|
|
743
|
+
if (rate < MIN_SUBJECT_RESOLUTION) {
|
|
744
|
+
throw new Error(encodeError(new CueframeError('subject_not_tracked', `segment [${seg.startSec}–${seg.endSec}s] authored subject face ` +
|
|
745
|
+
`'${subject.faceId}' resolved in only ${resolvedFrames}/${segEnd - segStart} frames ` +
|
|
746
|
+
`(${(rate * 100).toFixed(0)}%) — the per-frame tracker does not carry this identity ` +
|
|
747
|
+
`across the segment (ID fragmentation). Refusing to ship a frame-centered crop on no subject.`, {
|
|
748
|
+
faceId: subject.faceId,
|
|
749
|
+
resolvedFrames,
|
|
750
|
+
totalFrames: segEnd - segStart,
|
|
751
|
+
segment: [seg.startSec, seg.endSec],
|
|
752
|
+
})));
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
// PER-SHOT zoom: split the authored segment at EVERY interior shot cut and
|
|
756
|
+
// calibrate zoom independently per sub-shot. The agent authors ONE shotScale
|
|
757
|
+
// across a segment that may MIX a close-up and a wide two-shot; a single
|
|
758
|
+
// segment-wide zoom is then too loose for the wide shot, so the subject sits
|
|
759
|
+
// small against the couch/backdrop (the R3 "couch frames"). Per-shot zoom
|
|
760
|
+
// sizes the subject to target in EVERY shot — a deliberate punch-in at the
|
|
761
|
+
// cut. Splitting at every detected cut (no minimum-length filter) also makes
|
|
762
|
+
// a cut that lands a few frames inside a segment — e.g. when the agent's
|
|
763
|
+
// authored boundary sits just before the real visual cut — fall on its own
|
|
764
|
+
// sub-shot with the correct (wide) zoom, instead of wearing the next shot's
|
|
765
|
+
// zoom for those frames (the cut "flash"). `segCuts` already excludes the
|
|
766
|
+
// segment's own start/end (b>segStart && b<segEnd), so every interior cut is a
|
|
767
|
+
// real within-segment shot change; zero-length spans are dropped below.
|
|
768
|
+
// Centers + each subject's face-box series are sliced and re-based to the
|
|
769
|
+
// sub-shot's frame 0 so the render's resolveSegmentAt (which indexes by
|
|
770
|
+
// `srcFrame - round(start_sec*fps)`) lands on the right frame.
|
|
771
|
+
const segLen = segEnd - segStart;
|
|
772
|
+
const interior = [...segCuts].sort((a, b) => a - b);
|
|
773
|
+
const bounds = [0, ...interior, segLen];
|
|
774
|
+
// Collect the EMITTED (non-skipped) sub-shot frame-spans for this authored
|
|
775
|
+
// segment, so we can assert (after the loop) that they TILE [0, segLen) — a
|
|
776
|
+
// sub-shot silently dropped (a future regression) would leave an internal gap
|
|
777
|
+
// the render's coverage guard only catches downstream. See the tiling
|
|
778
|
+
// assertion below (`trajectory_internal_gap`).
|
|
779
|
+
const emittedSpans = [];
|
|
780
|
+
// The per-sub-shot index (incremented only on a NON-skipped span) aligns 1:1
|
|
781
|
+
// with `shotFits` — both the bounds loop here and `framing.fitZoomPerShot`
|
|
782
|
+
// enumerate the SAME `segmentShots(segCuts, segLen)` ranges (same cut set,
|
|
783
|
+
// same zero-length drop, same order), so `shotFits[shotIdx]` is THIS sub-shot's
|
|
784
|
+
// automatic fit (Phase 5). `shotFits` is emitted ONLY for all-faces.
|
|
785
|
+
let shotIdx = 0;
|
|
786
|
+
for (let k = 0; k < bounds.length - 1; k++) {
|
|
787
|
+
const a = bounds[k];
|
|
788
|
+
const b = bounds[k + 1];
|
|
789
|
+
// EXEMPT skip-path: a zero-length sub-shot span (a cut landing on a segment
|
|
790
|
+
// boundary, or two coincident cuts) emits nothing — a legitimate drop, not
|
|
791
|
+
// an internal gap. Not recorded in emittedSpans (the tiling assertion treats
|
|
792
|
+
// these as measure-zero, per the spec's skip-path exemption).
|
|
793
|
+
if (b - a <= 0)
|
|
794
|
+
continue;
|
|
795
|
+
emittedSpans.push([a, b]);
|
|
796
|
+
const thisShot = shotIdx;
|
|
797
|
+
shotIdx++;
|
|
798
|
+
const subSubjects = subjects.map((s) => ({
|
|
799
|
+
face_id: s.face_id,
|
|
800
|
+
face_box_series: s.face_box_series.slice(a, b),
|
|
801
|
+
active_windows: s.active_windows
|
|
802
|
+
.map(([ws, we]) => [Math.max(ws, a) - a, Math.min(we, b) - a])
|
|
803
|
+
.filter(([ws, we]) => we > ws),
|
|
804
|
+
}));
|
|
805
|
+
// ZOOM source: `all-faces` uses the automatic zoom-to-fit (Phase 5) — size
|
|
806
|
+
// the crop to CONTAIN the shot-wide locked-group union (zoom < 1.0 when it
|
|
807
|
+
// fits) or pad-and-hold at 1.0 + flag `overframed` when the group is wider
|
|
808
|
+
// than the aspect. Every OTHER mode keeps `calibrateShotScale` (the
|
|
809
|
+
// editorial `shotScale` zoom for `face`/`active-speaker`, the authored
|
|
810
|
+
// fallback elsewhere) — byte-identical to before Phase 5.
|
|
811
|
+
const allFacesFit = subject.kind === 'all-faces' ? shotFits?.[thisShot] : undefined;
|
|
812
|
+
const [zoom, vbias] = allFacesFit
|
|
813
|
+
? [allFacesFit.zoom, verticalBias ?? 0]
|
|
814
|
+
: calibrateShotScale(shotScale, subSubjects, track.srcW, track.srcH, aspect, zoomScale, verticalBias, subject);
|
|
815
|
+
const overframed = allFacesFit?.overframed === true;
|
|
816
|
+
const subLen = b - a;
|
|
817
|
+
// Eased centers (Ken-Burns PAN): ramp the per-frame center from the pan
|
|
818
|
+
// origin (point + bias) to the authored point over this sub-shot's ease-in.
|
|
819
|
+
const subCenters = isEasedPan && seg.focus.mode === 'point'
|
|
820
|
+
? buildPannedCenters(subLen, fps, [seg.focus.x, seg.focus.y], [seg.bias?.x ?? 0, seg.bias?.y ?? 0], seg.ease?.in ?? 0)
|
|
821
|
+
: centers.slice(a, b);
|
|
822
|
+
// Per-frame `zooms` — ADDITIVE, emitted ONLY for an eased segment (the
|
|
823
|
+
// Ken-Burns / image ramp). The ramp holds at the calibrated `zoom` and
|
|
824
|
+
// sweeps to/from full-frame (1.0) at the eased edges. A segment with no
|
|
825
|
+
// `ease` omits this entirely → scalar `zoom_scale` path → byte-identical
|
|
826
|
+
// face/video parity.
|
|
827
|
+
const zooms = seg.ease
|
|
828
|
+
? buildEasedZooms(subLen, fps, zoom, seg.ease.in, seg.ease.out)
|
|
829
|
+
: undefined;
|
|
830
|
+
out.push({
|
|
831
|
+
idx: out.length,
|
|
832
|
+
// Frame-based off the SNAPPED segStart (not the authored seg.startSec) so
|
|
833
|
+
// the segment times line up with the cut-aligned slice the render reads.
|
|
834
|
+
start_sec: (segStart + a) / fps,
|
|
835
|
+
end_sec: (segStart + b) / fps,
|
|
836
|
+
zoom_scale: zoom,
|
|
837
|
+
vertical_bias: vbias,
|
|
838
|
+
lateral_bias: lateralBias,
|
|
839
|
+
centers: subCenters,
|
|
840
|
+
subjects: subSubjects,
|
|
841
|
+
caption_band_reserve: captionBandReserve(aspect),
|
|
842
|
+
...(zooms ? { zooms } : {}),
|
|
843
|
+
// Emit the DERIVED `overframed` outcome ONLY when true (an all-faces
|
|
844
|
+
// sub-shot whose group is wider than the aspect). Omitted (undefined) on
|
|
845
|
+
// a fitting group and every other mode, so the field never appears unless
|
|
846
|
+
// it is the documented widest-honest-frame case — keeps the trajectory
|
|
847
|
+
// JSON minimal and the golden diff scoped to real over-wide shots.
|
|
848
|
+
...(overframed ? { overframed: true } : {}),
|
|
849
|
+
});
|
|
850
|
+
}
|
|
851
|
+
// ── trajectory_internal_gap: the sub-shots of THIS authored segment must
|
|
852
|
+
// TILE [0, segLen) (reframe spec Phase 6). A sub-shot silently dropped (a
|
|
853
|
+
// future regression in the bounds/skip logic) would leave an internal gap the
|
|
854
|
+
// render's coverage guard only catches downstream at render. Frame-rounding
|
|
855
|
+
// tolerance (NOT float ==): assert each emitted span's end meets the next
|
|
856
|
+
// span's start within FRAME_ROUNDING_TOLERANCE, and that the spans span
|
|
857
|
+
// [0, segLen). Skip-path-exempt: zero-length sub-shots are never recorded
|
|
858
|
+
// (measure zero); a segment that emitted NOTHING (every sub-shot skipped —
|
|
859
|
+
// e.g. all-zero-length, or the `centers.length===0`/`segLen<=0` upstream
|
|
860
|
+
// continues) is also exempt (no sub-shot to gap against). Cross-AUTHORED-
|
|
861
|
+
// segment gaps (real excludedRanges between segments) are out of scope — this
|
|
862
|
+
// asserts ONLY within one authored segment's sub-shots.
|
|
863
|
+
if (emittedSpans.length > 0) {
|
|
864
|
+
const sorted = [...emittedSpans].sort((x, y) => x[0] - y[0]);
|
|
865
|
+
// Leading coverage: the first sub-shot starts at frame 0 of the segment.
|
|
866
|
+
if (Math.abs(sorted[0][0]) > FRAME_ROUNDING_TOLERANCE) {
|
|
867
|
+
throw internalGap(seg, idx, `first sub-shot starts at frame ${sorted[0][0]}, not 0`);
|
|
868
|
+
}
|
|
869
|
+
// Trailing coverage: the last sub-shot ends at segLen.
|
|
870
|
+
if (Math.abs(sorted[sorted.length - 1][1] - segLen) > FRAME_ROUNDING_TOLERANCE) {
|
|
871
|
+
throw internalGap(seg, idx, `last sub-shot ends at frame ${sorted[sorted.length - 1][1]}, not ${segLen}`);
|
|
872
|
+
}
|
|
873
|
+
// Interior coverage: each span's end meets the next span's start.
|
|
874
|
+
for (let s = 0; s < sorted.length - 1; s++) {
|
|
875
|
+
if (sorted[s + 1][0] - sorted[s][1] > FRAME_ROUNDING_TOLERANCE) {
|
|
876
|
+
throw internalGap(seg, idx, `gap between sub-shot ending at frame ${sorted[s][1]} and next starting at ${sorted[s + 1][0]}`);
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
return {
|
|
882
|
+
bake_version: bakeVersion,
|
|
883
|
+
aspect,
|
|
884
|
+
src_w: track.srcW,
|
|
885
|
+
src_h: track.srcH,
|
|
886
|
+
src_fps: fps,
|
|
887
|
+
segments: out,
|
|
888
|
+
};
|
|
889
|
+
}
|