@cueframe/kernel 0.1.1 → 0.1.2
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/_members/account-model/testing/conversationStoreContract.d.ts +0 -59
- package/dist/_members/account-model/testing/index.d.ts +0 -5
- package/dist/_members/account-model/testing/restorePointStoreContract.d.ts +0 -24
- package/dist/_members/account-model/validators/contextFile.d.ts +0 -6
- package/dist/_members/account-model/validators/conversation.d.ts +0 -96
- package/dist/_members/account-model/validators/dashboardInsight.d.ts +0 -6
- package/dist/_members/account-model/validators/sessionToken.d.ts +0 -29
- package/dist/_members/account-model/validators/uploadToken.d.ts +0 -4
- package/dist/_members/account-model/validators/userSettings.d.ts +0 -4
- package/dist/_members/account-model/validators/workingComposition.d.ts +0 -7
- package/dist/_members/animate/animations/Create.d.ts +0 -19
- package/dist/_members/animate/animations/FadeIn.d.ts +0 -17
- package/dist/_members/animate/animations/GrowArrow.d.ts +0 -19
- package/dist/_members/animate/animations/GrowFromCenter.d.ts +0 -12
- package/dist/_members/animate/animations/Indicate.d.ts +0 -17
- package/dist/_members/animate/animations/MoveAlongPath.d.ts +0 -18
- package/dist/_members/animate/animations/Transform.d.ts +0 -28
- package/dist/_members/animate/animations/Wiggle.d.ts +0 -18
- package/dist/_members/animate/animations/Write.d.ts +0 -20
- package/dist/_members/animate/composition/AnimationGroup.d.ts +0 -21
- package/dist/_members/animate/composition/LaggedStart.d.ts +0 -22
- package/dist/_members/animate/composition/Succession.d.ts +0 -17
- package/dist/_members/animate/easing/rush.d.ts +0 -14
- package/dist/_members/animate/easing/smooth.d.ts +0 -7
- package/dist/_members/animate/easing/smootherstep.d.ts +0 -6
- package/dist/_members/animate/index.d.ts +0 -2
- package/dist/_members/animate/mobjects/Arrow.d.ts +0 -25
- package/dist/_members/animate/mobjects/BrandBox.d.ts +0 -25
- package/dist/_members/animate/mobjects/DiGraph.d.ts +0 -18
- package/dist/_members/animate/mobjects/Graph.d.ts +0 -38
- package/dist/_members/animate/three/ThreeCanvas.d.ts +0 -23
- package/dist/_members/animate/three/drei.d.ts +0 -7
- package/dist/_members/authoring/agent/buildTools.d.ts +0 -37
- package/dist/_members/authoring/agent/contextManagement.d.ts +0 -65
- package/dist/_members/authoring/agent/errors.d.ts +0 -9
- package/dist/_members/authoring/agent/memoryTool.d.ts +0 -2
- package/dist/_members/authoring/agent/promptCache.d.ts +0 -31
- package/dist/_members/authoring/agent.d.ts +0 -34
- package/dist/_members/authoring/capabilities.d.ts +0 -145
- package/dist/_members/authoring/composer/scopes.d.ts +0 -19
- package/dist/_members/authoring/context/brand.d.ts +0 -4
- package/dist/_members/authoring/context/brandTokens.d.ts +0 -4
- package/dist/_members/authoring/context/index.d.ts +0 -1
- package/dist/_members/authoring/context/timeline.d.ts +0 -15
- package/dist/_members/authoring/context/transcript.d.ts +0 -11
- package/dist/_members/authoring/context/types.d.ts +0 -4
- package/dist/_members/authoring/decomposer.d.ts +0 -12
- package/dist/_members/authoring/evaluate.d.ts +0 -26
- package/dist/_members/authoring/evaluator.d.ts +0 -16
- package/dist/_members/authoring/models/modelFactory.d.ts +0 -77
- package/dist/_members/authoring/motion/applyMotionPreset.d.ts +0 -12
- package/dist/_members/authoring/motion/materializeMotionPresetOps.d.ts +0 -7
- package/dist/_members/authoring/motion/shell.d.ts +0 -20
- package/dist/_members/authoring/pipelineTrace.d.ts +0 -19
- package/dist/_members/authoring/prompts/decomposerPrompt.d.ts +0 -4
- package/dist/_members/authoring/prompts/designReviewerPrompt.d.ts +0 -16
- package/dist/_members/authoring/prompts/evaluatorPrompt.d.ts +0 -4
- package/dist/_members/authoring/prompts/graphics.d.ts +0 -5
- package/dist/_members/authoring/prompts/plannerPrompt.d.ts +0 -30
- package/dist/_members/authoring/providers/resourceApi.d.ts +1 -20
- package/dist/_members/authoring/resource-routing.d.ts +0 -121
- package/dist/_members/authoring/resources.d.ts +0 -34
- package/dist/_members/authoring/scope.d.ts +0 -24
- package/dist/_members/authoring/tools/brandTokens.d.ts +0 -22
- package/dist/_members/authoring/tools/composeRoleTools.d.ts +0 -79
- package/dist/_members/authoring/tools/index.d.ts +0 -1
- package/dist/_members/authoring/tools/toolSets.d.ts +0 -50
- package/dist/_members/authoring/transpileComponent.d.ts +0 -34
- package/dist/_members/authoring/transpileHelper.d.ts +0 -18
- package/dist/_members/authoring/types.d.ts +0 -149
- package/dist/_members/brand-derivation/constants.d.ts +0 -17
- package/dist/_members/brand-derivation/contrastSafe.d.ts +0 -23
- package/dist/_members/cloud-import/CloudImportService.d.ts +0 -15
- package/dist/_members/cloud-import/ImportProvider.d.ts +0 -45
- package/dist/_members/cloud-import/MediaItemPreprocessor.d.ts +0 -9
- package/dist/_members/cloud-import/cloudConfig.d.ts +0 -15
- package/dist/_members/compose/CompositionRenderer.d.ts +0 -6
- package/dist/_members/compose/primitiveRegistry.d.ts +0 -64
- package/dist/_members/compose/sceneToRenderInput.d.ts +0 -26
- package/dist/_members/compose/schema.d.ts +0 -15
- package/dist/_members/compose/tokenResolver.d.ts +0 -11
- package/dist/_members/composition/audio/audioMix.d.ts +0 -34
- package/dist/_members/composition/audio/mixStaging.d.ts +0 -81
- package/dist/_members/composition/audio/musicPack.d.ts +0 -35
- package/dist/_members/composition/audio/musicPack.generated.d.ts +0 -6
- package/dist/_members/composition/audio/pack.d.ts +0 -43
- package/dist/_members/composition/audio/pack.generated.d.ts +0 -6
- package/dist/_members/composition/audio/palette.d.ts +0 -36
- package/dist/_members/composition/autozoom/index.d.ts +0 -32
- package/dist/_members/composition/brand-kit.d.ts +0 -8
- package/dist/_members/composition/brief/contract.d.ts +0 -90
- package/dist/_members/composition/color-grade.d.ts +0 -11
- package/dist/_members/composition/depth.d.ts +0 -19
- package/dist/_members/composition/fixtures/agentErrored.d.ts +0 -23
- package/dist/_members/composition/fonts.d.ts +0 -62
- package/dist/_members/composition/graphics-plan/compile.d.ts +0 -29
- package/dist/_members/composition/graphics-plan/index.d.ts +0 -5
- package/dist/_members/composition/graphics-plan/instantiateMotif.d.ts +0 -17
- package/dist/_members/composition/graphics-plan/motion.d.ts +0 -17
- package/dist/_members/composition/graphics-plan/schemas.d.ts +0 -171
- package/dist/_members/composition/graphics-plan/solve.d.ts +0 -19
- package/dist/_members/composition/invariants/clipPlacement.d.ts +0 -59
- package/dist/_members/composition/invariants/composition.d.ts +0 -5
- package/dist/_members/composition/invariants/etag.d.ts +0 -7
- package/dist/_members/composition/invariants/ids.d.ts +0 -6
- package/dist/_members/composition/invariants/keyframes.d.ts +0 -19
- package/dist/_members/composition/invariants/markers.d.ts +0 -6
- package/dist/_members/composition/invariants/time.d.ts +0 -8
- package/dist/_members/composition/invariants/tracks.d.ts +0 -48
- package/dist/_members/composition/ops/compositionOps.d.ts +4 -71
- package/dist/_members/composition/ops/compositionOps.shared.d.ts +30 -0
- package/dist/_members/composition/ops/headlessStore.d.ts +0 -24
- package/dist/_members/composition/ops/selectors.d.ts +0 -66
- package/dist/_members/composition/ops/timeline-word.d.ts +0 -5
- package/dist/_members/composition/ops/transcript.d.ts +0 -27
- package/dist/_members/composition/ops/types.d.ts +0 -51
- package/dist/_members/composition/primitive-catalog/catalogQuery.d.ts +0 -32
- package/dist/_members/composition/primitive-catalog/disabled.d.ts +0 -1
- package/dist/_members/composition/primitive-catalog/index.d.ts +0 -11
- package/dist/_members/composition/primitive-catalog/paramValidation.d.ts +0 -50
- package/dist/_members/composition/primitive-catalog/projection.d.ts +0 -39
- package/dist/_members/composition/primitive-catalog/types.d.ts +0 -78
- package/dist/_members/composition/projection/behind-placement.d.ts +0 -40
- package/dist/_members/composition/projection/behind-readiness.d.ts +14 -89
- package/dist/_members/composition/projection/brandKit.d.ts +0 -142
- package/dist/_members/composition/projection/cardTokens.d.ts +0 -65
- package/dist/_members/composition/projection/composition-floor.d.ts +0 -179
- package/dist/_members/composition/projection/cropProjection.d.ts +0 -75
- package/dist/_members/composition/projection/occlusion-budget.d.ts +0 -37
- package/dist/_members/composition/projection/reframe-readiness.d.ts +4 -111
- package/dist/_members/composition/projection/safe-zones.d.ts +0 -29
- package/dist/_members/composition/reframe/aspectLoss.d.ts +12 -35
- package/dist/_members/composition/reframe/coverage.d.ts +0 -40
- package/dist/_members/composition/reframe/derive.d.ts +0 -21
- package/dist/_members/composition/reframe/index.d.ts +0 -60
- package/dist/_members/composition/reframe/kenBurns.d.ts +0 -37
- package/dist/_members/composition/reframe/shotScale.d.ts +0 -75
- package/dist/_members/composition/reframe/trajectory.d.ts +0 -65
- package/dist/_members/composition/timeline/compound.d.ts +0 -31
- package/dist/_members/composition/timeline/intent.d.ts +0 -29
- package/dist/_members/composition/timeline/keyframes.d.ts +0 -43
- package/dist/_members/composition/timeline/link.d.ts +0 -27
- package/dist/_members/composition/timeline/occupancy.d.ts +1 -42
- package/dist/_members/composition/timeline/placement.d.ts +5 -52
- package/dist/_members/composition/timeline/plan.d.ts +5 -53
- package/dist/_members/composition/timeline/resolve.d.ts +0 -36
- package/dist/_members/composition/timeline/trims.d.ts +0 -49
- package/dist/_members/composition/validators/brandKit.d.ts +0 -29
- package/dist/_members/composition/validators/composePlan.d.ts +0 -39
- package/dist/_members/composition/validators/composition.d.ts +30 -513
- package/dist/_members/composition/validators/graphicKinds.d.ts +0 -28
- package/dist/_members/composition/validators/render.d.ts +23 -23
- package/dist/_members/composition-ops/alphaLayers.d.ts +0 -56
- package/dist/_members/composition-ops/index.d.ts +27 -148
- package/dist/_members/composition-ops/materializeGrid.d.ts +0 -28
- package/dist/_members/composition-ops/opRecorder.d.ts +0 -34
- package/dist/_members/composition-ops/recordingStore.d.ts +0 -16
- package/dist/_members/composition-ops/replaceRegion.d.ts +0 -48
- package/dist/_members/composition-ops/testFixtures.d.ts +0 -14
- package/dist/_members/convex-api/api.d.ts +0 -3
- package/dist/_members/convex-api/dataModel.d.ts +0 -2
- package/dist/_members/core/index.d.ts +1 -1
- package/dist/_members/core/render/bookends.d.ts +0 -44
- package/dist/_members/core/render/captions.d.ts +0 -42
- package/dist/_members/core/render/compositionRender.d.ts +1 -180
- package/dist/_members/core/render/deriveTrajectory.d.ts +0 -140
- package/dist/_members/core/render/emphasis.d.ts +0 -6
- package/dist/_members/core/render/eval/cropBox.d.ts +0 -69
- package/dist/_members/core/render/eval/inclusion.d.ts +0 -39
- package/dist/_members/core/render/eval/index.d.ts +0 -58
- package/dist/_members/core/render/eval/metrics.d.ts +0 -36
- package/dist/_members/core/render/exportSettings.d.ts +4 -12
- package/dist/_members/core/render/index.d.ts +1 -1
- package/dist/_members/core/render/mapFaceToPerson.d.ts +0 -27
- package/dist/_members/core/render/types.d.ts +1 -184
- package/dist/_members/core/render/variantKeys.d.ts +1 -0
- package/dist/_members/core/render/vcam/cameraPath.d.ts +0 -44
- package/dist/_members/core/render/vcam/constants.d.ts +0 -93
- package/dist/_members/core/render/vcam/errorCodes.d.ts +0 -28
- package/dist/_members/core/render/vcam/framing.d.ts +0 -76
- package/dist/_members/core/render/vcam/requiredRegion.d.ts +0 -71
- package/dist/_members/core/render/vcam/shots.d.ts +0 -40
- package/dist/_members/core/render/vcam/subjectSet.d.ts +0 -85
- package/dist/_members/core/select/errorCodes.d.ts +0 -25
- package/dist/_members/core/select/index.d.ts +0 -20
- package/dist/_members/core/select/model.d.ts +0 -79
- package/dist/_members/core/select/select.d.ts +0 -49
- package/dist/_members/core/select/stabilize.d.ts +0 -102
- package/dist/_members/core/types.d.ts +0 -1
- package/dist/_members/director/ai-sdk/chunks.d.ts +14 -0
- package/dist/_members/director/ai-sdk/context.d.ts +6 -0
- package/dist/_members/director/ai-sdk/generationTool.d.ts +8 -0
- package/dist/_members/director/ai-sdk/index.d.ts +4 -0
- package/dist/_members/director/ai-sdk/messages.d.ts +292 -0
- package/dist/_members/director/domain/chat.d.ts +357 -0
- package/dist/_members/director/domain/generation.d.ts +1 -0
- package/dist/_members/director/domain/index.d.ts +3 -0
- package/dist/_members/director/domain/ports.d.ts +32 -0
- package/dist/_members/director/index.d.ts +2 -0
- package/dist/_members/director/testing/contract.d.ts +52 -0
- package/dist/_members/director/testing/index.d.ts +1 -0
- package/dist/_members/errors/registry.d.ts +0 -32
- package/dist/_members/foundation/codes/index.d.ts +0 -21
- package/dist/_members/mcp/adapter.d.ts +1 -84
- package/dist/_members/mcp/burnedNames.d.ts +0 -16
- package/dist/_members/mcp/core.d.ts +1 -81
- package/dist/_members/mcp/curation.d.ts +0 -112
- package/dist/_members/mcp/executor.d.ts +0 -49
- package/dist/_members/mcp/format.d.ts +0 -6
- package/dist/_members/mcp/generated/catalogPreviews.d.ts +0 -1
- package/dist/_members/mcp/generated/operations.d.ts +0 -23
- package/dist/_members/mcp/internalLoopTools.d.ts +0 -23
- package/dist/_members/mcp/prompts.d.ts +0 -16
- package/dist/_members/mcp/resources.d.ts +0 -13
- package/dist/_members/mcp/server.d.ts +0 -61
- package/dist/_members/mcp/wait.d.ts +0 -22
- package/dist/_members/mcp/x402Meta.d.ts +0 -44
- package/dist/_members/media-model/generation.d.ts +314 -0
- package/dist/_members/media-model/index.d.ts +1 -0
- package/dist/_members/media-model/media-kind.d.ts +0 -27
- package/dist/_members/media-model/transcriptSearch.d.ts +0 -42
- package/dist/_members/nle-export/fcpxml.d.ts +0 -13
- package/dist/_members/nle-export/index.d.ts +0 -6
- package/dist/_members/nle-export/types.d.ts +0 -26
- package/dist/_members/nle-export/xml/index.d.ts +0 -8
- package/dist/_members/nle-export/xml-utils.d.ts +0 -12
- package/dist/_members/perception/activeSpeaker.d.ts +0 -94
- package/dist/_members/perception/audioQuality.d.ts +0 -64
- package/dist/_members/perception/energyBeat.d.ts +0 -81
- package/dist/_members/perception/identityMatch.d.ts +0 -66
- package/dist/_members/perception/index.d.ts +0 -52
- package/dist/_members/perception/visualQuality.d.ts +0 -73
- package/dist/_members/plane/conformance.d.ts +0 -59
- package/dist/_members/plane/contract.d.ts +0 -29
- package/dist/_members/plane/index.d.ts +0 -15
- package/dist/_members/primitives/backgrounds/animated-bar-chart/index.d.ts +0 -13
- package/dist/_members/primitives/backgrounds/animated-line-chart/index.d.ts +0 -14
- package/dist/_members/primitives/backgrounds/dither-gradient-bg/index.d.ts +0 -14
- package/dist/_members/primitives/backgrounds/dynamic-grid/index.d.ts +0 -8
- package/dist/_members/primitives/backgrounds/ecosystem-constellation/index.d.ts +0 -8
- package/dist/_members/primitives/backgrounds/infinite-marquee/index.d.ts +0 -8
- package/dist/_members/primitives/backgrounds/mesh-gradient-bg/index.d.ts +0 -8
- package/dist/_members/primitives/backgrounds/perspective-marquee/index.d.ts +0 -8
- package/dist/_members/primitives/backgrounds/silk-flow-bg/index.d.ts +0 -17
- package/dist/_members/primitives/backgrounds/vector-field/index.d.ts +0 -14
- package/dist/_members/primitives/backgrounds/volumetric-rays/index.d.ts +0 -18
- package/dist/_members/primitives/captions/Captions.d.ts +0 -24
- package/dist/_members/primitives/captions/index.d.ts +0 -15
- package/dist/_members/primitives/captions/paginate.d.ts +0 -21
- package/dist/_members/primitives/captions/placement.d.ts +0 -30
- package/dist/_members/primitives/effects/blur/index.d.ts +0 -16
- package/dist/_members/primitives/effects/color-grade/index.d.ts +0 -20
- package/dist/_members/primitives/effects/grain/index.d.ts +0 -12
- package/dist/_members/primitives/effects/parallax/index.d.ts +0 -13
- package/dist/_members/primitives/effects/particles/index.d.ts +0 -16
- package/dist/_members/primitives/effects/pulsing-indicator/index.d.ts +0 -10
- package/dist/_members/primitives/effects/spotlight-card/index.d.ts +0 -8
- package/dist/_members/primitives/effects/spring-pop-in/index.d.ts +0 -10
- package/dist/_members/primitives/effects/success-confetti/index.d.ts +0 -8
- package/dist/_members/primitives/effects/vignette/index.d.ts +0 -12
- package/dist/_members/primitives/hero-text/HeroText.d.ts +0 -17
- package/dist/_members/primitives/hero-text/config.d.ts +0 -10
- package/dist/_members/primitives/hero-text/index.d.ts +0 -14
- package/dist/_members/primitives/index.d.ts +0 -8
- package/dist/_members/primitives/layouts/chat-to-preview-layout/index.d.ts +0 -8
- package/dist/_members/primitives/layouts/infinite-bento-pan/index.d.ts +0 -8
- package/dist/_members/primitives/layouts/letterbox/index.d.ts +0 -15
- package/dist/_members/primitives/layouts/photo-grid/index.d.ts +0 -17
- package/dist/_members/primitives/layouts/picture-in-picture/index.d.ts +0 -21
- package/dist/_members/primitives/layouts/split-screen/index.d.ts +0 -15
- package/dist/_members/primitives/layouts/staggered-bento-grid/index.d.ts +0 -8
- package/dist/_members/primitives/lib/easings.d.ts +0 -27
- package/dist/_members/primitives/lib/palette.d.ts +0 -22
- package/dist/_members/primitives/lib/preview.d.ts +0 -22
- package/dist/_members/primitives/lib/schema.d.ts +0 -36
- package/dist/_members/primitives/lib/seeded-random.d.ts +0 -23
- package/dist/_members/primitives/lib/text/contrast.d.ts +0 -17
- package/dist/_members/primitives/lib/text/fill.d.ts +0 -5
- package/dist/_members/primitives/lib/text/fitText.d.ts +0 -37
- package/dist/_members/primitives/lib/text/marker.d.ts +0 -10
- package/dist/_members/primitives/lib/text/motion.d.ts +0 -46
- package/dist/_members/primitives/lib/text/recolor.d.ts +0 -11
- package/dist/_members/primitives/lib/text/spec.d.ts +0 -39
- package/dist/_members/primitives/lib/text/stage.d.ts +0 -17
- package/dist/_members/primitives/lib/text/typeface.d.ts +0 -11
- package/dist/_members/primitives/lib/tokens.d.ts +0 -87
- package/dist/_members/primitives/lib/types.d.ts +0 -141
- package/dist/_members/primitives/scenes/changelog-bite/index.d.ts +0 -12
- package/dist/_members/primitives/scenes/hero-device-assemble/index.d.ts +0 -8
- package/dist/_members/primitives/scenes/landing-code-showcase/index.d.ts +0 -8
- package/dist/_members/primitives/scenes/live-code-compilation/index.d.ts +0 -8
- package/dist/_members/primitives/scenes/pricing-tier-focus/index.d.ts +0 -8
- package/dist/_members/primitives/scenes/product-launch-trailer/index.d.ts +0 -8
- package/dist/_members/primitives/scenes/terminal-to-browser-deploy/index.d.ts +0 -8
- package/dist/_members/primitives/subject-foreground/SubjectForeground.d.ts +0 -38
- package/dist/_members/primitives/subject-foreground/index.d.ts +0 -21
- package/dist/_members/primitives/text/blur-reveal/index.d.ts +0 -9
- package/dist/_members/primitives/text/cinematic-title/index.d.ts +0 -14
- package/dist/_members/primitives/text/inline-highlight/index.d.ts +0 -11
- package/dist/_members/primitives/text/karaoke/index.d.ts +0 -13
- package/dist/_members/primitives/text/kinetic-type/index.d.ts +0 -15
- package/dist/_members/primitives/text/lower-third/index.d.ts +0 -14
- package/dist/_members/primitives/text/marker-highlight/index.d.ts +0 -10
- package/dist/_members/primitives/text/masked-slide-reveal/index.d.ts +0 -8
- package/dist/_members/primitives/text/matrix-decode/index.d.ts +0 -9
- package/dist/_members/primitives/text/quote-card/index.d.ts +0 -9
- package/dist/_members/primitives/text/rgb-glitch-text/index.d.ts +0 -13
- package/dist/_members/primitives/text/shimmer-sweep/index.d.ts +0 -10
- package/dist/_members/primitives/text/slot-machine-roll/index.d.ts +0 -8
- package/dist/_members/primitives/text/staggered-fade-up/index.d.ts +0 -12
- package/dist/_members/primitives/text/stat-counter/index.d.ts +0 -13
- package/dist/_members/primitives/text/strikethrough-replace/index.d.ts +0 -9
- package/dist/_members/primitives/text/text-effect/index.d.ts +0 -17
- package/dist/_members/primitives/text/text-fade-replace/index.d.ts +0 -8
- package/dist/_members/primitives/text/token-stream/index.d.ts +0 -11
- package/dist/_members/primitives/text/tracking-in/index.d.ts +0 -8
- package/dist/_members/primitives/text/typewriter/index.d.ts +0 -12
- package/dist/_members/primitives/transitions/chromatic-aberration-wipe/index.d.ts +0 -11
- package/dist/_members/primitives/transitions/code-diff-wipe/index.d.ts +0 -8
- package/dist/_members/primitives/transitions/directional-wipe/index.d.ts +0 -10
- package/dist/_members/primitives/transitions/frosted-glass-wipe/index.d.ts +0 -10
- package/dist/_members/primitives/transitions/glitch-cut/index.d.ts +0 -3
- package/dist/_members/primitives/transitions/grid-pixelate-wipe/index.d.ts +0 -14
- package/dist/_members/primitives/transitions/ink-wipe/index.d.ts +0 -3
- package/dist/_members/primitives/transitions/kinetic-type-mask/index.d.ts +0 -12
- package/dist/_members/primitives/transitions/light-leak/index.d.ts +0 -3
- package/dist/_members/primitives/transitions/luma-matte/index.d.ts +0 -2
- package/dist/_members/primitives/transitions/morph/index.d.ts +0 -2
- package/dist/_members/primitives/transitions/spatial-push/index.d.ts +0 -10
- package/dist/_members/primitives/transitions/swipe-transition-wipe/index.d.ts +0 -13
- package/dist/_members/primitives/transitions/zoom-through/index.d.ts +0 -2
- package/dist/_members/primitives/transitions/zoom-through-transition/index.d.ts +0 -9
- package/dist/_members/primitives/ui-blocks/ai-generate-overlay/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/ai-generation-canvas/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/badge-pop/index.d.ts +0 -11
- package/dist/_members/primitives/ui-blocks/before-after-slider/index.d.ts +0 -11
- package/dist/_members/primitives/ui-blocks/benchmark-bars/index.d.ts +0 -11
- package/dist/_members/primitives/ui-blocks/bounding-box-selector/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/browser-flow/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/brush-stroke-simulator/index.d.ts +0 -18
- package/dist/_members/primitives/ui-blocks/chat-exchange/index.d.ts +0 -10
- package/dist/_members/primitives/ui-blocks/code-accordion/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/context-meter/index.d.ts +0 -11
- package/dist/_members/primitives/ui-blocks/cursor-flow/index.d.ts +0 -11
- package/dist/_members/primitives/ui-blocks/dashboard-populate/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/data-flow-pipes/index.d.ts +0 -9
- package/dist/_members/primitives/ui-blocks/device-mockup-zoom/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/drag-and-drop-flow/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/eval-scorecard/index.d.ts +0 -11
- package/dist/_members/primitives/ui-blocks/glass-code-block/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/image-expand-to-fullscreen/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/metric-gauge/index.d.ts +0 -12
- package/dist/_members/primitives/ui-blocks/morphing-modal/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/pipeline-journey/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/progress-steps/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/reasoning-trace/index.d.ts +0 -10
- package/dist/_members/primitives/ui-blocks/simulated-cursor/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/terminal-simulator/index.d.ts +0 -19
- package/dist/_members/primitives/ui-blocks/toast-notification/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/tool-call-stack/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/tool-menu-slide-in/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/visual-docs-snippet/index.d.ts +0 -8
- package/dist/_members/primitives/ui-blocks/voice-waveform/index.d.ts +0 -11
- package/dist/_members/primitives/workspace.d.ts +0 -29
- package/dist/_members/render-harness/browserOptions.d.ts +11 -0
- package/dist/_members/render-harness/browserOptions.d.ts.map +1 -0
- package/dist/_members/render-harness/cardRender.d.ts +0 -40
- package/dist/_members/render-harness/cardRender.d.ts.map +1 -1
- package/dist/_members/render-harness/contractRender.d.ts +0 -16
- package/dist/_members/render-harness/contractRender.d.ts.map +1 -1
- package/dist/_members/render-harness/extractSegments.d.ts +0 -37
- package/dist/_members/render-harness/extractSegments.d.ts.map +1 -1
- package/dist/_members/render-harness/index.d.ts +0 -12
- package/dist/_members/render-harness/index.d.ts.map +1 -1
- package/dist/_members/render-harness/localRender.d.ts +1 -110
- package/dist/_members/render-harness/localRender.d.ts.map +1 -1
- package/dist/_members/render-harness/materializeSources.d.ts +0 -22
- package/dist/_members/render-harness/materializeSources.d.ts.map +1 -1
- package/dist/_members/render-harness/mediaServer.d.ts +0 -16
- package/dist/_members/render-harness/mediaServer.d.ts.map +1 -1
- package/dist/_members/render-harness/renderInputAssets.d.ts +0 -45
- package/dist/_members/render-harness/renderInputAssets.d.ts.map +1 -1
- package/dist/_members/render-harness/resolveAssets.d.ts +0 -24
- package/dist/_members/render-harness/resolveAssets.d.ts.map +1 -1
- package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts +0 -14
- package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts.map +1 -1
- package/dist/account-model/validators.js +1 -1
- package/dist/account-model.js +1 -1
- package/dist/animate.js +0 -15
- package/dist/authoring/build-tools.js +8 -8
- package/dist/authoring/composer.js +0 -20
- package/dist/authoring/context.js +6 -6
- package/dist/authoring/pipelineTrace.js +1 -1
- package/dist/authoring/prompts.js +1 -1
- package/dist/authoring/resource-routing.js +1 -1
- package/dist/authoring/resources.js +1 -1
- package/dist/authoring/tools.js +7 -7
- package/dist/authoring.js +14 -80
- package/dist/{chunk-TWQOKKAF.js → chunk-23HFEKV7.js} +0 -6
- package/dist/{chunk-EA6MYCYW.js → chunk-2B5VJZHL.js} +14 -25
- package/dist/chunk-73DQTUWY.js +131 -0
- package/dist/{chunk-HI4UTTPS.js → chunk-AO744WIK.js} +1 -43
- package/dist/chunk-BADZHXLR.js +0 -0
- package/dist/{chunk-GA23TRNR.js → chunk-BKHGL4MB.js} +5 -13
- package/dist/{chunk-PDYO3DOJ.js → chunk-BZZTVOGG.js} +6 -55
- package/dist/{chunk-AP6ZIVAV.js → chunk-CAJQ7H5A.js} +17 -17
- package/dist/{chunk-7FO3ZJ43.js → chunk-DCVJWGIA.js} +1 -9
- package/dist/{chunk-AQBREB5O.js → chunk-DWLNPNC4.js} +1 -4
- package/dist/{chunk-SW336CJP.js → chunk-DYZE7JZA.js} +3 -26
- package/dist/{chunk-HCCBDJLW.js → chunk-EP2Y6M2J.js} +0 -4
- package/dist/{chunk-ZE76SSRT.js → chunk-FMODQD5P.js} +0 -6
- package/dist/chunk-FTVZF4GO.js +0 -0
- package/dist/{chunk-PMY24FUD.js → chunk-G5BFI32U.js} +1 -1
- package/dist/{chunk-LD5ZOUFT.js → chunk-GF52TW4I.js} +0 -4
- package/dist/{chunk-ABL557OT.js → chunk-GMD33ZD7.js} +1 -8
- package/dist/{chunk-ZWMV6DD2.js → chunk-ICSZF37W.js} +10 -162
- package/dist/chunk-IEXAKOEX.js +113 -0
- package/dist/{chunk-UY4SWJVE.js → chunk-K2IUBCND.js} +0 -12
- package/dist/chunk-LJ5W4ZBU.js +146 -0
- package/dist/chunk-LLUW26BS.js +255 -0
- package/dist/{chunk-JJ6XD7NG.js → chunk-PIURX6IZ.js} +70 -2
- package/dist/{chunk-MMEJ3Y7E.js → chunk-QETYXKQQ.js} +1 -10
- package/dist/{chunk-YX2GSJK7.js → chunk-RP4SXXLJ.js} +1 -1
- package/dist/{chunk-P727GZVO.js → chunk-SAMQUUO5.js} +3 -5
- package/dist/{chunk-RF7U3SCL.js → chunk-TD347SSX.js} +3 -11
- package/dist/{chunk-TOJEXFXL.js → chunk-TFGKUWHY.js} +1 -88
- package/dist/{chunk-UHGSZZDI.js → chunk-TPA6PYN2.js} +1 -11
- package/dist/{chunk-OLFOPQCA.js → chunk-UQSOS726.js} +4 -18
- package/dist/{chunk-GBRNYH7W.js → chunk-V24L35GM.js} +0 -11
- package/dist/{chunk-MBCXCJOE.js → chunk-VFMW3JUY.js} +1 -1
- package/dist/{chunk-DK2ODBNT.js → chunk-VHF66LCQ.js} +16 -98
- package/dist/{chunk-JMURQODM.js → chunk-VZ7TYX6Z.js} +0 -1
- package/dist/{chunk-SIGGQRY2.js → chunk-W3SIWT7J.js} +5030 -4412
- package/dist/{chunk-W35ZMOXB.js → chunk-WPZKOVYF.js} +0 -5
- package/dist/chunk-WZH57M53.js +494 -0
- package/dist/{chunk-AYVJXDLB.js → chunk-XHGZ2E77.js} +0 -2
- package/dist/{chunk-HY3RIEZW.js → chunk-XQ72DZKJ.js} +1 -1
- package/dist/{chunk-7DHP4ESU.js → chunk-YLDMAZZE.js} +0 -10
- package/dist/{chunk-FYZVH3MC.js → chunk-YQ7FFW3G.js} +0 -11
- package/dist/chunk-ZPLJ24OV.js +93 -0
- package/dist/cloud-import/multipart.js +1 -1
- package/dist/cloud-import.js +9 -16
- package/dist/compose/renderer.js +18 -18
- package/dist/compose.js +21 -21
- package/dist/composition/audio.js +1 -1
- package/dist/composition/brand-kit.js +0 -5
- package/dist/composition/graphics-plan.js +4 -4
- package/dist/composition/ops.js +5 -5
- package/dist/composition/primitive-catalog.js +1 -1
- package/dist/composition/projection.js +11 -3
- package/dist/composition/reframe/kenBurns.js +0 -4
- package/dist/composition/reframe.js +4 -2
- package/dist/composition/timeline.js +1 -1
- package/dist/composition/validators/graphic-kinds.js +1 -1
- package/dist/composition/validators.js +4 -4
- package/dist/composition-ops.js +16 -135
- package/dist/composition.js +15 -7
- package/dist/context-JLLU3MYD.js +14 -0
- package/dist/core/render.js +9 -7
- package/dist/core/select.js +2 -6
- package/dist/core.js +5 -7
- package/dist/director/ai-sdk.d.ts +1 -0
- package/dist/director/ai-sdk.js +33 -0
- package/dist/director/domain.d.ts +1 -0
- package/dist/director/domain.js +62 -0
- package/dist/director/testing.d.ts +1 -0
- package/dist/director/testing.js +22 -0
- package/dist/director.d.ts +1 -0
- package/dist/director.js +86 -0
- package/dist/errors.js +1 -1
- package/dist/foundation.js +1 -0
- package/dist/mcp/adapter.js +4 -64
- package/dist/mcp/core.js +1 -1
- package/dist/mcp/curation.js +1 -1
- package/dist/mcp/server.js +4 -4
- package/dist/mcp.js +4 -4
- package/dist/media-model/generation.d.ts +1 -0
- package/dist/media-model/generation.js +40 -0
- package/dist/media-model.js +38 -6
- package/dist/nle-export.js +21 -21
- package/dist/plane/contract.js +0 -3
- package/dist/primitives/backgrounds.js +2 -2
- package/dist/primitives/captions.js +0 -5
- package/dist/primitives/effects.js +2 -2
- package/dist/primitives/hero-text.js +2 -2
- package/dist/primitives/layouts.js +2 -2
- package/dist/primitives/lib/index.js +17 -17
- package/dist/primitives/lib/text/fitText.js +1 -1
- package/dist/primitives/lib/tokens.js +1 -1
- package/dist/primitives/lib.js +17 -17
- package/dist/primitives/scenes.js +2 -2
- package/dist/primitives/text.js +2 -2
- package/dist/primitives/ui-blocks.js +4 -4
- package/dist/primitives.js +21 -21
- package/dist/render-harness/sandboxGlobalSpecs.js +1 -1
- package/dist/render-harness.js +24 -41
- package/package.json +37 -21
- package/dist/chunk-6EQXLEP6.js +0 -194
- package/dist/chunk-OCFDUCF4.js +0 -504
- package/dist/chunk-PODIYN2K.js +0 -742
- package/dist/context-YWUZDG5X.js +0 -14
|
@@ -22,47 +22,21 @@ export interface OverlayParams {
|
|
|
22
22
|
xPercent?: number;
|
|
23
23
|
yPercent?: number;
|
|
24
24
|
fontSize?: number;
|
|
25
|
-
/** heroText (depth grammar §3.4): font size as % of composition height (default 14). */
|
|
26
25
|
fontSizePct?: number;
|
|
27
|
-
/** heroText: per-word reveal offsets in ms relative to the overlay's start. */
|
|
28
26
|
revealAtMs?: number[];
|
|
29
|
-
/** heroText: display weight override (default 800). */
|
|
30
27
|
fontWeight?: number;
|
|
31
|
-
/**
|
|
32
|
-
* Behind-subject overlays only: `false` opts out of the atmospheric depth
|
|
33
|
-
* treatment (brightness/saturation/blur — `BEHIND_ATMOSPHERE`) the behind
|
|
34
|
-
* host applies by default. Ignored on front overlays.
|
|
35
|
-
*/
|
|
36
28
|
atmosphere?: boolean;
|
|
37
|
-
/** card overlay: the authored HTML/CSS fragment, rendered VERBATIM via
|
|
38
|
-
* dangerouslySetInnerHTML inside the region box (OverlayContent case 'card'). */
|
|
39
29
|
html?: string;
|
|
40
|
-
/** card overlay: brand-token map (literal | `$brand:` ref per value),
|
|
41
|
-
* resolved at render into `--cf-<key>` CSS custom properties on the wrapper box. */
|
|
42
30
|
cssTokens?: Record<string, string>;
|
|
43
31
|
}
|
|
44
32
|
export interface CompositionClip {
|
|
45
33
|
id: string;
|
|
46
34
|
src: string;
|
|
47
|
-
/** Proxy URL for preview playback (lighter H.264 transcode) */
|
|
48
35
|
previewSrc?: string;
|
|
49
36
|
sourceInFrames: number;
|
|
50
37
|
sourceOutFrames: number;
|
|
51
38
|
timelineStartFrames: number;
|
|
52
39
|
durationInFrames: number;
|
|
53
|
-
/** The clip's `trim.start` in output-fps frames. With `excludedRanges` the
|
|
54
|
-
* clip plays multiple playable spans whose `sourceInFrames` are source-
|
|
55
|
-
* absolute; the crop trajectory is clip-relative (frame 0 = trim.start), so
|
|
56
|
-
* the renderer needs this to map output frames → trajectory frames across the
|
|
57
|
-
* trimmed gaps. Absent ⇒ 0 (clip starts at its source origin).
|
|
58
|
-
*
|
|
59
|
-
* NOT guaranteed non-negative: it is a PURE OFFSET, not a validated
|
|
60
|
-
* trim.start echo. When a sandbox harness physically trims the source file
|
|
61
|
-
* (materializeSources' shallow-seek), sourceInFrames/sourceOutFrames/
|
|
62
|
-
* trimStartFrames are all rebased by the same shift into segment-file
|
|
63
|
-
* coordinates — only their differences are meaningful, and trimStartFrames
|
|
64
|
-
* can legitimately go negative. Consumers must never validate or seek on
|
|
65
|
-
* its absolute value. */
|
|
66
40
|
trimStartFrames?: number;
|
|
67
41
|
playbackRate?: number;
|
|
68
42
|
volume?: number;
|
|
@@ -70,112 +44,28 @@ export interface CompositionClip {
|
|
|
70
44
|
opacity?: number;
|
|
71
45
|
scale?: number;
|
|
72
46
|
rotation?: number;
|
|
73
|
-
/**
|
|
74
|
-
* TIME-VARYING channels, keyed by param path, times CLIP-RELATIVE in seconds.
|
|
75
|
-
* When a param appears here it overrides its scalar sibling above for the
|
|
76
|
-
* clip's duration; the scalar remains what a non-animating consumer reads.
|
|
77
|
-
* Interpolation is `valueAt` from `@cueframe/composition/timeline` — one
|
|
78
|
-
* implementation, because the editor, this renderer and the evaluator must
|
|
79
|
-
* agree or the motion the judge grades is not the motion that ships.
|
|
80
|
-
*/
|
|
81
47
|
animate?: Record<string, Array<{
|
|
82
48
|
time: number;
|
|
83
49
|
value: number;
|
|
84
50
|
easing?: unknown;
|
|
85
51
|
}>>;
|
|
86
|
-
/**
|
|
87
|
-
* Output-space placement rect (fractions of the output frame, 0..1).
|
|
88
|
-
* Default (absent) = full frame {x:0,y:0,w:1,h:1}. A sub-frame region makes
|
|
89
|
-
* the clip occupy only that rect of the output — the foundation for
|
|
90
|
-
* picture-in-picture / split-screen / inset cards, where lower tracks show
|
|
91
|
-
* through the uncovered area. The clip's source is fit into the region per
|
|
92
|
-
* `fit`. Mirrors `Region` on the wire (composition.ts).
|
|
93
|
-
*
|
|
94
|
-
* NOTE: the per-frame crop pipeline (CropFromTrajectory) renders against the
|
|
95
|
-
* FULL output frame; composing a sub-frame region with a non-identity crop
|
|
96
|
-
* requires the crop to target the region's aspect. The renderer applies the
|
|
97
|
-
* placement; full region×crop compose is wired incrementally.
|
|
98
|
-
*/
|
|
99
52
|
region?: {
|
|
100
53
|
x: number;
|
|
101
54
|
y: number;
|
|
102
55
|
w: number;
|
|
103
56
|
h: number;
|
|
104
57
|
};
|
|
105
|
-
/** How the source fills `region`: 'cover' (fill+crop, default) or 'contain' (letterbox). */
|
|
106
58
|
fit?: 'cover' | 'contain';
|
|
107
59
|
mediaType?: 'video' | 'audio' | 'image';
|
|
108
|
-
/**
|
|
109
|
-
* Ken-Burns motion preset for still-image clips (mediaType === 'image').
|
|
110
|
-
* A convenience the renderer's <StillCrop> lowers to a `reframe`
|
|
111
|
-
* (kenBurnsToReframe) and runs through the unified per-frame crop renderer.
|
|
112
|
-
* Default 'in' (gentle zoom-in). Ignored for video / audio clips.
|
|
113
|
-
*/
|
|
114
60
|
kenBurns?: 'in' | 'out' | 'pan-l' | 'pan-r' | 'none';
|
|
115
|
-
/**
|
|
116
|
-
* Authored camera channel for a still (mediaType === 'image'). When present,
|
|
117
|
-
* <StillCrop> derives the still trajectory from THIS (arbitrary per-frame
|
|
118
|
-
* point-zoom + center) instead of lowering `kenBurns` — so an image can zoom
|
|
119
|
-
* into a specific point (a UI element), not just the centered kenBurns
|
|
120
|
-
* presets. `kenBurns` is the fallback when no reframe was authored.
|
|
121
|
-
*/
|
|
122
61
|
reframe?: Reframe;
|
|
123
|
-
/**
|
|
124
|
-
* Loop the underlying media until the clip's duration runs out. Used by
|
|
125
|
-
* gif enrichment clips (whose source mp4 may be shorter than the moment)
|
|
126
|
-
* and audio ambient beds. Ignored on `mediaType === 'image'`.
|
|
127
|
-
*/
|
|
128
62
|
loop?: boolean;
|
|
129
63
|
transitionIn?: 'fade' | 'dissolve' | 'wipe' | 'none';
|
|
130
64
|
transitionDurationFrames?: number;
|
|
131
|
-
/** Original clip ID — set on sub-clips produced by splitting around deleted ranges. */
|
|
132
65
|
parentId?: string;
|
|
133
|
-
/**
|
|
134
|
-
* Pre-resolved crop-trajectory JSON URL for render-time per-frame
|
|
135
|
-
* cropping. When set, the renderer reads the trajectory's per-segment
|
|
136
|
-
* per-frame normalized centers and applies a CSS transform on the
|
|
137
|
-
* raw source video to produce the cropped output.
|
|
138
|
-
*
|
|
139
|
-
* 2026-05-28 substrate revision: replaces the prior baked-mp4
|
|
140
|
-
* substitution + variantMaskUrl combo. Bake produces only this JSON
|
|
141
|
-
* now; render-side does the pixel pushing. See
|
|
142
|
-
* packages/execution/core/src/render/deriveTrajectory.ts for the producer
|
|
143
|
-
* (TS-side, derived inline at render) and CropFromTrajectory.tsx for the
|
|
144
|
-
* consumer.
|
|
145
|
-
*/
|
|
146
66
|
cropTrajectoryUrl?: string;
|
|
147
|
-
/**
|
|
148
|
-
* The same per-frame crop trajectory, IN MEMORY rather than behind a URL.
|
|
149
|
-
*
|
|
150
|
-
* The editor derives a clip's trajectory client-side — `deriveTrajectory` is
|
|
151
|
-
* pure, and the cached subject track it reads arrives presigned on the media
|
|
152
|
-
* row — so there is no object to fetch and nothing to presign. Handing the
|
|
153
|
-
* renderer a URL would mean minting a blob one per keystroke, into a
|
|
154
|
-
* module-level per-URL cache that never evicts.
|
|
155
|
-
*
|
|
156
|
-
* `CropFromTrajectory` has taken an in-memory trajectory since the still path
|
|
157
|
-
* needed one (`traj = trajectory ?? fetched`), so this is a channel to a prop
|
|
158
|
-
* that already exists, not a second rendering path. The server render keeps
|
|
159
|
-
* using `cropTrajectoryUrl`: its trajectory is written to R2 by an action, and
|
|
160
|
-
* inlining it would put a per-frame series in the render snapshot.
|
|
161
|
-
*
|
|
162
|
-
* Exactly one of the two is set. When both are, this wins — it is the fresher
|
|
163
|
-
* of the two by construction, since it was derived from the edit in hand.
|
|
164
|
-
*/
|
|
165
67
|
cropTrajectory?: TrajectoryData;
|
|
166
|
-
/**
|
|
167
|
-
* Frame-packed CO-VIEW source for the captions-behind-speaker effect: ONE
|
|
168
|
-
* opaque H.264 (BiRefNet-portrait) with the scene (top half) and the matte
|
|
169
|
-
* (bottom half) stacked, baked frame-aligned per source window. When set,
|
|
170
|
-
* the clip renders via PackedSubjectComposite — a SINGLE decode yields both
|
|
171
|
-
* halves of the identical instant, so the matte cannot drift from the scene
|
|
172
|
-
* at any composition fps (the frame-lock fix). Crop-independent: one co-view
|
|
173
|
-
* per source window, reused across aspect/crop variants. Resolved at the
|
|
174
|
-
* caller layer (Temporal activity) from mediaItems.mattes[matteHash] and
|
|
175
|
-
* served same-origin so @remotion/media decodes it.
|
|
176
|
-
*/
|
|
177
68
|
packedUrl?: string;
|
|
178
|
-
/** Debug: tint the subject cut-out green to verify coverage. */
|
|
179
69
|
coViewDebug?: boolean;
|
|
180
70
|
}
|
|
181
71
|
export interface CompositionOverlay {
|
|
@@ -185,51 +75,22 @@ export interface CompositionOverlay {
|
|
|
185
75
|
startFrame: number;
|
|
186
76
|
durationInFrames: number;
|
|
187
77
|
params: OverlayParams;
|
|
188
|
-
/** 'behind-subject' renders under the subject cut-out (matte occludes it). Default front. */
|
|
189
78
|
zPlane?: 'front' | 'behind-subject';
|
|
190
|
-
/** Scene-space anchor for world-locking behind overlays through the crop trajectory. */
|
|
191
79
|
anchor?: {
|
|
192
80
|
space: 'scene';
|
|
193
81
|
x: number;
|
|
194
82
|
y: number;
|
|
195
83
|
};
|
|
196
|
-
/** Camera-motion differential for behind overlays: 0 = locked to scene; small ± = depth parallax. Range [-0.3, 0.3]. */
|
|
197
84
|
parallax?: number;
|
|
198
|
-
/** Output-space placement rect (fractions of the output frame, 0..1). Default
|
|
199
|
-
* (absent) = full frame. A sub-frame region makes the overlay primitive (card,
|
|
200
|
-
* text, image/gif/lottie) occupy only that rect — the universal placement
|
|
201
|
-
* layer (PiP / inset card / split-screen). Mirrors CompositionClip.region; the
|
|
202
|
-
* renderer wraps the overlay in the same RegionBox, and size-from-output
|
|
203
|
-
* primitives read the box dims via useEffectiveOutput. */
|
|
204
85
|
region?: {
|
|
205
86
|
x: number;
|
|
206
87
|
y: number;
|
|
207
88
|
w: number;
|
|
208
89
|
h: number;
|
|
209
90
|
};
|
|
210
|
-
/** How the overlay fills `region`: 'cover' (fill+crop, default) or 'contain' (letterbox). */
|
|
211
91
|
fit?: 'cover' | 'contain';
|
|
212
|
-
/**
|
|
213
|
-
* Entrance transition for the overlay — mirrors CompositionClip.transitionIn.
|
|
214
|
-
* When set, the overlay host (OverlayLayer / BehindOverlayHost) wraps the
|
|
215
|
-
* mounted content in a frame-pure entrance envelope (opacity fade; slide/scale
|
|
216
|
-
* for the motion variants) over `transitionDurationFrames` from the overlay's
|
|
217
|
-
* start. Absent = no envelope (byte-identical to prior behavior). Projected via
|
|
218
|
-
* the same `mapTransitionType` mapping the video lane uses, so the realized
|
|
219
|
-
* enum is fade/dissolve/wipe/none (dissolve+wipe degrade to an opacity fade for
|
|
220
|
-
* a single positioned box). Was silently dropped before: only the video lane
|
|
221
|
-
* projected `transitionIn`, so an authored overlay transition rendered as a
|
|
222
|
-
* dead hard cut.
|
|
223
|
-
*/
|
|
224
92
|
transitionIn?: 'fade' | 'dissolve' | 'wipe' | 'none';
|
|
225
93
|
transitionDurationFrames?: number;
|
|
226
|
-
/** Clip-level transform channel (wire `TimelineClip.position/opacity/scale/
|
|
227
|
-
* rotation` — "the animation channel"; `region` stays the placement
|
|
228
|
-
* primitive). `position` is the overlay's CENTER in output-space fractions
|
|
229
|
-
* [0,1] of its containing box (the region box, or the full frame). These
|
|
230
|
-
* were silently DROPPED by the projection until 2026-07-20 (spec §2.1.1) —
|
|
231
|
-
* an agent could PUT a position, read it back, and watch the render ignore
|
|
232
|
-
* it. Absent = the primitive's own layout (no wrapper transform). */
|
|
233
94
|
position?: {
|
|
234
95
|
x: number;
|
|
235
96
|
y: number;
|
|
@@ -237,24 +98,15 @@ export interface CompositionOverlay {
|
|
|
237
98
|
opacity?: number;
|
|
238
99
|
scale?: number;
|
|
239
100
|
rotation?: number;
|
|
101
|
+
animate?: CompositionClip['animate'];
|
|
240
102
|
}
|
|
241
103
|
export type CaptionWord = WireCaptionWord;
|
|
242
104
|
export type CaptionStyle = WireCaptionStyle & Required<Pick<WireCaptionStyle, 'fontFamily' | 'fontSize' | 'fontWeight' | 'color' | 'highlightColor' | 'backgroundColor' | 'position' | 'textTransform'>>;
|
|
243
|
-
/**
|
|
244
|
-
* Frame-based effect instance the renderer consumes. Mirrors
|
|
245
|
-
* `EffectInstance` from composition/types but with seconds normalized to
|
|
246
|
-
* frames so the render path is fps-agnostic.
|
|
247
|
-
*/
|
|
248
105
|
export interface CompositionEffect {
|
|
249
106
|
id: string;
|
|
250
107
|
primitiveId: string;
|
|
251
108
|
params: Record<string, unknown>;
|
|
252
109
|
target: EffectTarget;
|
|
253
|
-
/**
|
|
254
|
-
* For clip targets, frames RELATIVE to the clip's timeline start.
|
|
255
|
-
* For global targets, ABSOLUTE timeline frames.
|
|
256
|
-
* Undefined = render across the target's whole span.
|
|
257
|
-
*/
|
|
258
110
|
startFrame?: number;
|
|
259
111
|
durationInFrames?: number;
|
|
260
112
|
}
|
|
@@ -269,14 +121,6 @@ export interface CompositionAudioTrack {
|
|
|
269
121
|
fadeInFrames?: number;
|
|
270
122
|
fadeOutFrames?: number;
|
|
271
123
|
loop?: boolean;
|
|
272
|
-
/**
|
|
273
|
-
* Speech-aware duck envelope (music / vo tracks only; SFX is never ducked).
|
|
274
|
-
* Frame ranges are SEQUENCE-RELATIVE (0 = the track's `startFrame`) to match
|
|
275
|
-
* the fade domain `buildVolumeFunction` operates in. Resolved by the
|
|
276
|
-
* `compositionToRenderInput` post-projection pass from the composition's own
|
|
277
|
-
* caption words (or explicit `duck.windows`); absent ⇒ no ducking.
|
|
278
|
-
* `duckVolume` is the linear gain held during speech (10^(duckDb/20)).
|
|
279
|
-
*/
|
|
280
124
|
duckWindows?: Array<{
|
|
281
125
|
startFrame: number;
|
|
282
126
|
endFrame: number;
|
|
@@ -291,30 +135,12 @@ export interface RenderInput {
|
|
|
291
135
|
audioTracks?: CompositionAudioTrack[];
|
|
292
136
|
effects?: CompositionEffect[];
|
|
293
137
|
captionSegments?: CaptionWord[][];
|
|
294
|
-
/**
|
|
295
|
-
* The caption layer renders UNDER the speaker's silhouette
|
|
296
|
-
* (`composition.captions.zPlane === 'behind-subject'`). One choice for the
|
|
297
|
-
* whole layer, because it decides whether the SOURCE needs a matte — the
|
|
298
|
-
* $0.12/source-minute rung, not the $0.004 one, and a caption layer usually
|
|
299
|
-
* spans the whole video.
|
|
300
|
-
*
|
|
301
|
-
* Requested, not guaranteed: the renderer degrades to the front mount when no
|
|
302
|
-
* co-view is on the timeline (nothing to hide behind).
|
|
303
|
-
*/
|
|
304
138
|
captionsBehind?: boolean;
|
|
305
139
|
captionStyle?: Partial<CaptionStyle>;
|
|
306
140
|
width: number;
|
|
307
141
|
height: number;
|
|
308
142
|
fps: number;
|
|
309
143
|
durationInFrames: number;
|
|
310
|
-
/**
|
|
311
|
-
* Target platform frozen from the suggestion (`composition.format.platform`:
|
|
312
|
-
* tiktok/ig/youtube/…). Output-determining: the composition floor's safe-zone
|
|
313
|
-
* placement clears that surface's UI chrome from the caption band. Absent ⇒ the
|
|
314
|
-
* floor falls to its conservative 'unknown' (broadcast) safe-zone profile. Read
|
|
315
|
-
* straight from the wire `Format.platform`; the renderer threads it to every
|
|
316
|
-
* CropFromTrajectory so buildFloorInput sees the real destination.
|
|
317
|
-
*/
|
|
318
144
|
platform?: string;
|
|
319
145
|
outputWidth?: number;
|
|
320
146
|
outputHeight?: number;
|
|
@@ -322,14 +148,5 @@ export interface RenderInput {
|
|
|
322
148
|
watermark?: boolean;
|
|
323
149
|
scenes?: Scene[];
|
|
324
150
|
sceneGlobal?: GlobalEffects;
|
|
325
|
-
/**
|
|
326
|
-
* Active brand kit for render-time token resolution. This is the
|
|
327
|
-
* fully-materialized `ResolvedBrandKit` the render snapshot freezes
|
|
328
|
-
* (the render intake → resolveBrandKit), NOT the sparse
|
|
329
|
-
* 5-colour `@cueframe/core` BrandKit — it carries the Tier-2 colour core,
|
|
330
|
-
* `caption.{fg,scrim}`, and `fonts.{heading,body,caption}`. Overlay params may
|
|
331
|
-
* contain `"$brand:<path>"` refs that resolve against it. Optional — absent
|
|
332
|
-
* brand kit makes a `$brand:` ref fall to its contrast-safe / fallback default.
|
|
333
|
-
*/
|
|
334
151
|
brandKit?: ResolvedBrandKit;
|
|
335
152
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const BAKE_VERSION = "subjtrack-persistent-deadzone-fitzoom-v8-2026.06.21";
|
|
@@ -1,51 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vcam/cameraPath.ts — the SINGLE virtual-camera stability stage (Phase 3).
|
|
3
|
-
*
|
|
4
|
-
* Replaces both `emaSmooth` (for the centers) and the render-side
|
|
5
|
-
* `smoothTrajectory` Gaussian with ONE pass per shot. Per the spec
|
|
6
|
-
* (2026-06-21-virtual-camera-reframe-design.md, "Virtual-camera stability — one
|
|
7
|
-
* stage, no LP"):
|
|
8
|
-
*
|
|
9
|
-
* 1. Deadzone INCLUSION gate (output-crop-normalized): the camera HOLDS while
|
|
10
|
-
* the padded RequiredRegion stays inside a safe region of the current crop
|
|
11
|
-
* window; it moves ONLY when the region would exit. This is the inclusion
|
|
12
|
-
* INVARIANT — the crop always contains the RequiredRegion ⇒ the subject
|
|
13
|
-
* never walks out of frame. This is what turns Phase 2's "static hold" into
|
|
14
|
-
* "hold, then glide to re-contain" — a moving subject is TRACKED.
|
|
15
|
-
* 2. One Hamming-window weighted mean over each shot run's gated centers
|
|
16
|
-
* (acausal, single pass, no lag). Forward-fill at the start; the window
|
|
17
|
-
* AUTO-SHRINKS near a shot boundary so it never blends across a cut.
|
|
18
|
-
* 3. Null/occluded regions are forward-filled (the last in-shot region) before
|
|
19
|
-
* the gate, minus the deleted jump heuristic — gaps longer than the window
|
|
20
|
-
* hold; re-emergence outside the pad glides over the window.
|
|
21
|
-
*
|
|
22
|
-
* No second smoothing: render samples this base path verbatim. The only reset is
|
|
23
|
-
* a detector `shotBoundary` — a center jump is NEVER inferred as a cut (the
|
|
24
|
-
* deleted `isJump`/`JUMP_THRESHOLD` false-cut teleport).
|
|
25
|
-
*
|
|
26
|
-
* Coordinate systems: RequiredRegions + centers are SOURCE-NORMALIZED. The
|
|
27
|
-
* deadzone is OUTPUT-CROP-NORMALIZED (a fraction of the crop window), so the
|
|
28
|
-
* held feel is zoom-invariant — it is converted to source units here using the
|
|
29
|
-
* crop-window size. Pure, deterministic, no I/O.
|
|
30
|
-
*/
|
|
31
1
|
import type { RequiredRegion } from './requiredRegion.js';
|
|
32
2
|
import type { Center } from './subjectSet.js';
|
|
33
|
-
/** The crop window the camera commands, source-normalized (the largest output-
|
|
34
|
-
* aspect rect that fits the source, scaled by the clamped zoom). */
|
|
35
3
|
export interface CropWindow {
|
|
36
|
-
/** Window width as a fraction of source width ∈ (0,1]. */
|
|
37
4
|
w: number;
|
|
38
|
-
/** Window height as a fraction of source height ∈ (0,1]. */
|
|
39
5
|
h: number;
|
|
40
6
|
}
|
|
41
|
-
/**
|
|
42
|
-
* The single stability stage: per-frame RequiredRegions → smoothed, inclusion-
|
|
43
|
-
* satisfying per-frame crop centers (source-normalized). `cropFor(frame)` gives
|
|
44
|
-
* the crop window for that frame (it can vary per frame when zoom is eased).
|
|
45
|
-
*
|
|
46
|
-
* `interiorCuts` are segment-local frame indices where a new shot begins (the
|
|
47
|
-
* SAME set the derive already computes). Each shot is gated + smoothed
|
|
48
|
-
* independently (deadzone, window clamp, forward-fill all reset at the cut).
|
|
49
|
-
* Frames whose shot never resolved a region hold `centerHold` (source center).
|
|
50
|
-
*/
|
|
51
7
|
export declare function cameraPath(regions: Array<RequiredRegion | null>, cropFor: (frame: number) => CropWindow, fps: number, interiorCuts: Iterable<number>, centerHold?: Center): Center[];
|
|
@@ -1,113 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vcam/constants.ts — all virtual-camera selection params, in one place.
|
|
3
|
-
*
|
|
4
|
-
* Phase 2 (subject-of-interest selection). The deadzone / Hamming-window /
|
|
5
|
-
* zoom-fit params land alongside their modules in Phase 3/5; only the
|
|
6
|
-
* Phase-2 selection params live here today.
|
|
7
|
-
*
|
|
8
|
-
* Sizes are FRAME-HEIGHT fractions (a face box's height ÷ source height), the
|
|
9
|
-
* same units the detector emits. Persistence is a fraction of the shot's frames.
|
|
10
|
-
*/
|
|
11
|
-
/** Locked-set gate — drop a track iff
|
|
12
|
-
* `(persistence < P_MIN AND size_med < SIZE_DOMINANT) OR (size_med < SIZE_MIN)`.
|
|
13
|
-
* A transient small/brief face is dropped (can't re-weight anything); a
|
|
14
|
-
* DOMINANT late entrant (low persistence, large size) is KEPT — the flat
|
|
15
|
-
* `persistence < 0.5` gate would have silently dropped the intended subject. */
|
|
16
1
|
export declare const P_MIN = 0.5;
|
|
17
|
-
/** Minimum face-height fraction to survive the gate at all. */
|
|
18
2
|
export declare const SIZE_MIN = 0.06;
|
|
19
|
-
/** Face-height fraction at/above which a brief track is kept regardless of
|
|
20
|
-
* persistence (a dominant late entrant). */
|
|
21
3
|
export declare const SIZE_DOMINANT = 0.18;
|
|
22
|
-
/** Max members framed for `all-faces` (top-K by dominance). */
|
|
23
4
|
export declare const MAX_SUBJECTS = 3;
|
|
24
|
-
/** Dominance weights — `0.4·size + 0.2·centrality + 0.2·persistence + 0.2·speaking`.
|
|
25
|
-
* `speaking`/`centrality` feed dominance, NEVER the gate. */
|
|
26
5
|
export declare const DOMINANCE_WEIGHTS: {
|
|
27
6
|
readonly size: 0.4;
|
|
28
7
|
readonly centrality: 0.2;
|
|
29
8
|
readonly persistence: 0.2;
|
|
30
9
|
readonly speaking: 0.2;
|
|
31
10
|
};
|
|
32
|
-
/** Per-frame set-MEMBERSHIP hysteresis (in seconds; converted to frames with
|
|
33
|
-
* the source fps). The locked set is the candidate pool; whether a member is
|
|
34
|
-
* IN the framed region this frame is decided with add/drop hysteresis so a
|
|
35
|
-
* member flickering at the gate boundary doesn't toggle the framing. The
|
|
36
|
-
* deadzone (Phase 3) stabilizes PAN; hysteresis stabilizes set MEMBERSHIP. */
|
|
37
11
|
export declare const ENTER_SEC = 0.3;
|
|
38
12
|
export declare const LEAVE_SEC = 0.5;
|
|
39
|
-
/**
|
|
40
|
-
* Headroom pad added around a RequiredRegion's subject/group extent (a fraction
|
|
41
|
-
* of the SOURCE dimension), BEFORE the crop must contain it. This is the
|
|
42
|
-
* "frame the head, not just the box" margin — the region the crop is obliged to
|
|
43
|
-
* keep in view is the subject box grown by this much on every side. Source-
|
|
44
|
-
* normalized (the region geometry is source-normalized; the deadzone below is
|
|
45
|
-
* the output-crop-normalized hold band). ~6% of the source on each side gives a
|
|
46
|
-
* comfortable margin around a face/group without over-zooming.
|
|
47
|
-
*/
|
|
48
13
|
export declare const REGION_PAD = 0.06;
|
|
49
|
-
/**
|
|
50
|
-
* Deadzone inclusion gate (OUTPUT-CROP-NORMALIZED — a fraction of the crop
|
|
51
|
-
* WINDOW, the same units as the render's old `DEADZONE`). The camera HOLDS while
|
|
52
|
-
* the padded RequiredRegion stays inside the crop window shrunk by this margin
|
|
53
|
-
* on each side (the "safe region"); it only moves when the region would exit
|
|
54
|
-
* that safe region. Calibrated ≥ the render's old `DEADZONE=0.018` hold effect
|
|
55
|
-
* on a static head, so the relocated deadzone is no looser than before. 0.10 of
|
|
56
|
-
* the crop width is the spec's `REGION_PAD ≈ 0.10 of crop width` value — the
|
|
57
|
-
* band inside which subject motion demands ZERO camera motion (the locked feel).
|
|
58
|
-
*/
|
|
59
14
|
export declare const DEADZONE = 0.1;
|
|
60
|
-
/**
|
|
61
|
-
* Hamming smoothing window half-length, in SECONDS (converted to frames with the
|
|
62
|
-
* source fps; `round(0.5·fps)` ≈ 15 frames at 30fps). The single acausal
|
|
63
|
-
* Hamming-weighted mean over each shot run's deadzone-gated centers — replaces
|
|
64
|
-
* the old forward+backward EMA AND the render Gaussian. Clamped to the shot run
|
|
65
|
-
* (forward-fill at the start, window auto-shrinks near a shot boundary) so it
|
|
66
|
-
* never blends across a cut. A shorter window = snappier tracking; longer =
|
|
67
|
-
* more damped glide. 0.5s matches the spec.
|
|
68
|
-
*/
|
|
69
15
|
export declare const SMOOTH_WINDOW_SEC = 0.5;
|
|
70
|
-
/**
|
|
71
|
-
* Outlier-reject median-filter radius on the RequiredRegion series, in SECONDS
|
|
72
|
-
* (converted to frames with the source fps). A single-frame detector/ReID spike
|
|
73
|
-
* — the box teleporting across the frame for one frame, then snapping back —
|
|
74
|
-
* would yank the deadzone gate (the chase, re-skinned). A short median rejects
|
|
75
|
-
* it while tracking a clean multi-frame walk exactly (an order statistic, not a
|
|
76
|
-
* low-pass — lag-free on a monotone pan). ~0.12s (≈4 frames at 30fps, ≈7 at
|
|
77
|
-
* 60fps) outvotes a short multi-frame ReID swap without smearing a real walk.
|
|
78
|
-
*/
|
|
79
16
|
export declare const REGION_MEDIAN_SEC = 0.12;
|
|
80
|
-
/**
|
|
81
|
-
* Maximum per-frame camera-center move during the inclusion clamp, as a fraction
|
|
82
|
-
* of the CROP WINDOW per second (converted to source-units-per-frame with the
|
|
83
|
-
* crop size + fps). Sized GENEROUSLY: a real walking subject (≈3–5 crop-widths/s)
|
|
84
|
-
* tracks unthrottled, so the inclusion invariant holds frame-to-frame and the
|
|
85
|
-
* subject stays in frame (inclusionRate ≈ 1.0). The cap exists only to convert a
|
|
86
|
-
* single-frame TELEPORT — a detector ReID swap or a far re-emergence after a gap
|
|
87
|
-
* that would otherwise snap the camera a full frame-width in one frame — into a
|
|
88
|
-
* bounded ≤`cap/fps` step (the spec's "re-emergence glides over the window"; the
|
|
89
|
-
* parabolic re-acquire ease is the deferred L1 slot). At the cap the worst step
|
|
90
|
-
* is bounded well below the raw-centroid chase, while continuous tracking is
|
|
91
|
-
* unaffected. 8 crop-widths/sec ≈ 0.13 crop-widths/frame at 60fps.
|
|
92
|
-
*/
|
|
93
17
|
export declare const REACQUIRE_GLIDE_PER_SEC = 8;
|
|
94
|
-
/**
|
|
95
|
-
* The bake's crop-window zoom clamp, mirrored here so `fitZoom` produces a zoom
|
|
96
|
-
* inside the SAME envelope the renderer (`computeCropTransform` `bakedZoom`) and
|
|
97
|
-
* `cropWindowSizeFor` enforce. ZOOM_MAX = 1.0 is the widest honest frame (the
|
|
98
|
-
* largest source-fitting output-aspect rect — can't widen past the source);
|
|
99
|
-
* ZOOM_MIN = 0.4 is the tightest crop the bake allows. A fitting group is framed
|
|
100
|
-
* at the contained zoom clamped into [ZOOM_MIN, ZOOM_MAX]; an over-wide group
|
|
101
|
-
* pads-and-holds at ZOOM_MAX and is flagged `overframed`.
|
|
102
|
-
*/
|
|
103
18
|
export declare const ZOOM_MIN = 0.4;
|
|
104
19
|
export declare const ZOOM_MAX = 1;
|
|
105
|
-
/**
|
|
106
|
-
* Min-shot-length floor for ZOOM recalibration, in SECONDS (converted to frames
|
|
107
|
-
* with the source fps; round(0.4*fps) is ~12 frames at 30fps). A shot SHORTER
|
|
108
|
-
* than this inherits the PREVIOUS shot's zoom rather than recalibrating, so a
|
|
109
|
-
* sub-second montage (3-15-frame sub-shots, each independently zoom-fit) can't
|
|
110
|
-
* STROBE the zoom channel (the named regression risk this design introduces).
|
|
111
|
-
* Pan still resets at every cut - only the zoom is held; the floor is zoom-only.
|
|
112
|
-
*/
|
|
113
20
|
export declare const MIN_ZOOM_SHOT_FRAMES = 0.4;
|
|
@@ -1,30 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vcam/errorCodes.ts — the virtual-camera error vocabulary, as VALUES.
|
|
3
|
-
*
|
|
4
|
-
* Every code the vcam layer can throw (now or in a later phase) is listed here
|
|
5
|
-
* as a literal value, and the registry-membership CI test
|
|
6
|
-
* (`__tests__/vcamErrorRegistry.test.ts`) imports THIS list and asserts each one
|
|
7
|
-
* exists in `@cueframe/errors`'s `ERROR_CODES`. Importing the codes as values
|
|
8
|
-
* (not grepping string literals) means a template/variable code can't slip past
|
|
9
|
-
* the gate — an unregistered code would make the CFERR decode fall back to
|
|
10
|
-
* `internal_error` and 500 (the `clip_source_track_mismatch` landmine).
|
|
11
|
-
*
|
|
12
|
-
* Phase 1 registers all of these in `packages/errors/src/registry.ts` even
|
|
13
|
-
* though some are thrown only in later phases (`subject_uncontainable`,
|
|
14
|
-
* `trajectory_internal_gap`, `clip_trajectory_merge_conflict`) — registered now
|
|
15
|
-
* so they can never 500 when the phase that throws them lands.
|
|
16
|
-
*
|
|
17
|
-
* `subject_not_tracked` is the EXISTING segment-level resolution gate (kept,
|
|
18
|
-
* registered already); it's listed so the membership test covers the full vcam
|
|
19
|
-
* throw surface in one place.
|
|
20
|
-
*
|
|
21
|
-
* NOT codes (documented emitted outcomes / legal inputs, never throws):
|
|
22
|
-
* - `overframed` — an emitted boolean OUTCOME on an `all-faces` segment whose
|
|
23
|
-
* group is wider than the aspect (the widest honest frame), NOT an error.
|
|
24
|
-
* - a legacy track with no `shotBoundaries` → ONE shot (no
|
|
25
|
-
* `shot_boundaries_missing` throw); an empty locked set → center-hold.
|
|
26
|
-
*/
|
|
27
|
-
/** The error codes the vcam (virtual-camera) layer is allowed to throw. Each
|
|
28
|
-
* MUST be a row in `@cueframe/errors` `ERROR_CODES` (asserted in CI). */
|
|
29
1
|
export declare const VCAM_ERROR_CODES: readonly ["subject_not_tracked", "subject_detection_failed_on_generated", "subject_uncontainable", "trajectory_internal_gap", "clip_trajectory_merge_conflict"];
|
|
30
2
|
export type VcamErrorCode = (typeof VCAM_ERROR_CODES)[number];
|
|
@@ -1,90 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* vcam/framing.ts — zoom-to-fit for ALL modes (Phase 5).
|
|
3
|
-
*
|
|
4
|
-
* Generalizes today's face-only `calibrateShotScale` (which sizes ZOOM to a
|
|
5
|
-
* single detected face's median height for an editorial `shotScale`) into a
|
|
6
|
-
* mode-agnostic `fitZoom` that sizes the crop to CONTAIN a locked subject set's
|
|
7
|
-
* union extent — the automatic fit the spec mandates (brain spec
|
|
8
|
-
* 2026-06-21-virtual-camera-reframe-design.md, "Framing & zoom-to-fit (ALL
|
|
9
|
-
* modes)" + RESOLVED #2 "automatic-fit only for the ship").
|
|
10
|
-
*
|
|
11
|
-
* The headline consumer is `all-faces`: today every all-faces segment ships at
|
|
12
|
-
* zoom 1.0 (the widest honest frame) because `calibrateShotScale` has no
|
|
13
|
-
* `shotScale` target for it and returns the fallback. A group that FITS 9:16 is
|
|
14
|
-
* then left with wasted margin instead of being framed tight. `fitZoom` sizes the
|
|
15
|
-
* crop to the group's union so a fitting group is zoom-fit (zoom < 1.0), while an
|
|
16
|
-
* over-wide group (members at opposite edges of a 16:9 frame) is the documented
|
|
17
|
-
* `overframed` outcome: pad-and-hold at zoom 1.0, emit the flag, NEVER silently
|
|
18
|
-
* clip a wing and NEVER auto-drop a member (the editorial drop/cut decision
|
|
19
|
-
* belongs to the driving agent — RESOLVED #1).
|
|
20
|
-
*
|
|
21
|
-
* Hold scope is explicit (resolves the per-frame-vs-per-shot contradiction):
|
|
22
|
-
* zoom re-fits PER SHOT (a punch-in at every detector cut), but WITHIN a shot the
|
|
23
|
-
* fit is sized ONCE over the shot-wide union extent and HELD — no per-frame
|
|
24
|
-
* breathing. A pre-pass here computes the shot-max union BEFORE the per-shot zoom
|
|
25
|
-
* split slices the series.
|
|
26
|
-
*
|
|
27
|
-
* Sub-second montage cuts are a named zoom-strobe regression risk (3–15-frame
|
|
28
|
-
* sub-shots each independently calibrated → strobe). Mitigation: a min-shot-
|
|
29
|
-
* length floor — a shot shorter than `MIN_ZOOM_SHOT_FRAMES` INHERITS the previous
|
|
30
|
-
* shot's zoom (pan still resets at the cut; pan is cameraPath's job). So a 1-frame
|
|
31
|
-
* shot can't spike the zoom channel.
|
|
32
|
-
*
|
|
33
|
-
* Pure, deterministic, no I/O. Boxes are source-normalized `[x1,y1,x2,y2]` ∈
|
|
34
|
-
* [0,1]; `pad` is a fraction of the source dimension (the SAME `REGION_PAD` the
|
|
35
|
-
* RequiredRegion uses, so the crop is sized to contain exactly the padded region
|
|
36
|
-
* the camera is obliged to keep in frame).
|
|
37
|
-
*/
|
|
38
1
|
import type { NormBox } from './subjectSet.js';
|
|
39
|
-
/** One shot's automatic-fit result. */
|
|
40
2
|
export interface ShotFit {
|
|
41
|
-
/** Source-normalized zoom_scale (the largest output-aspect rect that fits the
|
|
42
|
-
* source × this contains the shot-wide padded union), clamped [ZOOM_MIN,
|
|
43
|
-
* ZOOM_MAX]. */
|
|
44
3
|
zoom: number;
|
|
45
|
-
/** True iff the padded union is WIDER than the crop window at zoom 1.0 — the
|
|
46
|
-
* group cannot be contained at the output aspect, so the camera pads-and-holds
|
|
47
|
-
* at zoom 1.0 (the widest honest frame). An emitted authored outcome, surfaced
|
|
48
|
-
* to the agent; NOT an error and NOT a silent clip. */
|
|
49
4
|
overframed: boolean;
|
|
50
5
|
}
|
|
51
|
-
/**
|
|
52
|
-
* The shot-wide padded union extent of a per-frame box series, over `[start,
|
|
53
|
-
* end)`. The union of every present box in the shot, grown by `pad` on each side
|
|
54
|
-
* (clamped to [0,1]). Returns null when no box is present anywhere in the shot
|
|
55
|
-
* (the camera center-holds; there is nothing to fit). Source-normalized.
|
|
56
|
-
*/
|
|
57
6
|
export declare function shotUnionExtent(boxes: Array<NormBox | null>, start: number, end: number, pad?: number): {
|
|
58
7
|
w: number;
|
|
59
8
|
h: number;
|
|
60
9
|
} | null;
|
|
61
|
-
/**
|
|
62
|
-
* The automatic zoom-to-fit for ONE shot's union extent. Sizes the crop so the
|
|
63
|
-
* largest output-aspect rect that fits the source, scaled by this zoom, CONTAINS
|
|
64
|
-
* the padded union on BOTH axes. The crop window scales linearly with zoom
|
|
65
|
-
* (`cropWindowSizeFor`: `cropW *= zoom`), so the smallest zoom that contains a
|
|
66
|
-
* source-normalized union of size `(uw, uh)` is `max(uw/Wb, uh/Hb)` where
|
|
67
|
-
* `(Wb, Hb)` is the zoom-1.0 window.
|
|
68
|
-
*
|
|
69
|
-
* Fits (≤ 1.0) → that zoom, clamped to the floor. Doesn't fit (> 1.0 needed, the
|
|
70
|
-
* group is wider than the output aspect) → `overframed`, pad-and-hold at 1.0. A
|
|
71
|
-
* null/empty extent → no subject to fit → zoom 1.0, not overframed (center-hold).
|
|
72
|
-
*/
|
|
73
10
|
export declare function fitZoom(extent: {
|
|
74
11
|
w: number;
|
|
75
12
|
h: number;
|
|
76
13
|
} | null, srcW: number, srcH: number, aspect: string): ShotFit;
|
|
77
|
-
/**
|
|
78
|
-
* Per-shot automatic zoom-to-fit over a segment's per-frame union-box series.
|
|
79
|
-
* Computes the shot-wide union extent per shot, then `fitZoom`, applying the
|
|
80
|
-
* min-shot-length floor: a shot shorter than `MIN_ZOOM_SHOT_FRAMES` INHERITS the
|
|
81
|
-
* previous shot's fit (zoom + overframed) so a sub-second montage cut can't strobe
|
|
82
|
-
* the zoom channel; pan still resets at the cut (cameraPath owns pan). The first
|
|
83
|
-
* shot has no predecessor → it fits on its own extent regardless of length (a
|
|
84
|
-
* single short clip must still frame its subject).
|
|
85
|
-
*
|
|
86
|
-
* Returns one `ShotFit` per shot, in shot order — the same shot order
|
|
87
|
-
* `segmentShots(interiorCuts, segLen)` produces. The caller (deriveTrajectory)
|
|
88
|
-
* applies the per-shot zoom to the matching sub-shot it already slices.
|
|
89
|
-
*/
|
|
90
14
|
export declare function fitZoomPerShot(boxes: Array<NormBox | null>, interiorCuts: Iterable<number>, srcW: number, srcH: number, aspect: string, fps: number, segLen: number, pad?: number): ShotFit[];
|