@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
|
@@ -1,38 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Destination safe-zone registry — the platform-UI + broadcast keep-outs the
|
|
3
|
-
* composition floor carves out of the output rect before placing any element
|
|
4
|
-
* (spec §9). Fractions of the OUTPUT rect (origin top-left, y-down, [0,1]); one
|
|
5
|
-
* math path for every aspect because the coordinates are already normalized to
|
|
6
|
-
* the destination frame.
|
|
7
|
-
*
|
|
8
|
-
* Convention-grounded, NOT research-grounded: platform chrome (TikTok's right
|
|
9
|
-
* action rail + bottom username/caption strip, Reels/Shorts variants) is
|
|
10
|
-
* industry convention, not something the layout/saliency papers model. Keep this
|
|
11
|
-
* a plain data table so it stays legible and versionable as platforms change
|
|
12
|
-
* their chrome.
|
|
13
|
-
*
|
|
14
|
-
* Pure data + one lookup. No I/O. Same input → same output.
|
|
15
|
-
*/
|
|
16
1
|
import type { Rect } from "./composition-floor.js";
|
|
17
|
-
/** Bump on ANY change to a profile rect or the broadcast defaults below. The
|
|
18
|
-
* render consumer embeds this into renderCacheKey (spec §15) so a profile edit
|
|
19
|
-
* invalidates cached renders transitively, the way BAKE_VERSION already does —
|
|
20
|
-
* never a remembered manual bump. */
|
|
21
2
|
export declare const SAFE_ZONE_PROFILE_VERSION = "safezones-v2-2026.06.05";
|
|
22
3
|
export interface SafeZoneProfile {
|
|
23
|
-
/** Platform-UI rects the floor treats as hard keep-outs (never place text/graphics under them). */
|
|
24
4
|
exclusions: Rect[];
|
|
25
|
-
/** Broadcast title-safe: text should stay inside this inset. */
|
|
26
5
|
titleSafe: Rect;
|
|
27
|
-
/** Broadcast action-safe: critical action inside this (slightly larger) inset. */
|
|
28
6
|
actionSafe: Rect;
|
|
29
7
|
}
|
|
30
|
-
/** Normalize a platform name to a PROFILES key (lowercased, aliased). */
|
|
31
8
|
export declare function normalizePlatform(platform: string): string;
|
|
32
|
-
/**
|
|
33
|
-
* Resolve the safe-zone profile for a destination. Unknown platform (or an
|
|
34
|
-
* aspect a known platform has no profile for) → broadcast title/action-safe only
|
|
35
|
-
* (no platform exclusions) so the floor degrades to a correct, conservative
|
|
36
|
-
* result rather than throwing.
|
|
37
|
-
*/
|
|
38
9
|
export declare function lookupSafeZones(platform: string, aspect: string): SafeZoneProfile;
|
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Aspect-loss advisory: a source whose shape disagrees with the output frame,
|
|
3
|
-
* placed with no authored camera.
|
|
4
|
-
*
|
|
5
|
-
* A `cover` fill scales the source until it covers the frame and throws the
|
|
6
|
-
* overflow away, centred. For a 3840×5760 portrait photo in a 16:9 frame that
|
|
7
|
-
* discards ~62% of the image about the middle — reliably decapitating anyone in
|
|
8
|
-
* it. In the 2026-08-05 toddler-parks session 15 of 68 imported candidates were
|
|
9
|
-
* portrait, every one placed into 16:9 with no crop intent, and nothing said a
|
|
10
|
-
* word at any point in the pipeline.
|
|
11
|
-
*
|
|
12
|
-
* Note this is WORSE for stills than the `fit` field suggests: `fit` is not
|
|
13
|
-
* threaded to the image path at all (MainComposition routes `kind:'image'` to
|
|
14
|
-
* StillCrop, which has no `fit` prop), so an image is always cropped by the
|
|
15
|
-
* derived still trajectory — whose faceless default centre is a hardcoded
|
|
16
|
-
* [0.5, 0.5]. Declaring `fit:"contain"` does not avoid this; authoring a
|
|
17
|
-
* `reframe` (or a `kenBurns`) does.
|
|
18
|
-
*
|
|
19
|
-
* ADVISORY only — same `(input) => string[]` contract as `detectNoAudioTrack`.
|
|
20
|
-
* Cropping to fill is a legitimate choice; this only says nobody made it.
|
|
21
|
-
*/
|
|
22
|
-
/**
|
|
23
|
-
* Fraction of the source that survives a `cover` fill. Purely a function of the
|
|
24
|
-
* two aspect ratios: the narrower dimension is fully used, the wider one is
|
|
25
|
-
* trimmed to match.
|
|
26
|
-
*/
|
|
27
1
|
export declare function coverVisibleFraction(source: {
|
|
28
2
|
width: number;
|
|
29
3
|
height: number;
|
|
@@ -31,15 +5,18 @@ export declare function coverVisibleFraction(source: {
|
|
|
31
5
|
width: number;
|
|
32
6
|
height: number;
|
|
33
7
|
}): number;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
8
|
+
export interface AspectCropLoss {
|
|
9
|
+
clipId?: string;
|
|
10
|
+
mediaId: string;
|
|
11
|
+
lostPct: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function findAspectCropLosses(composition: unknown, dimensionsByMediaId: Record<string, {
|
|
14
|
+
width?: number;
|
|
15
|
+
height?: number;
|
|
16
|
+
} | undefined>, target: {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
}): AspectCropLoss[];
|
|
43
20
|
export declare function detectAspectCropLoss(composition: unknown, dimensionsByMediaId: Record<string, {
|
|
44
21
|
width?: number;
|
|
45
22
|
height?: number;
|
|
@@ -1,44 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reframe coverage invariant — the SINGLE source of truth for
|
|
3
|
-
* "a clip's `reframe.segments` MUST tile its PLAYED window: `[0, duration]`
|
|
4
|
-
* minus the clip's excluded spans" (clip-relative source seconds; segment 0 =
|
|
5
|
-
* the clip's `trim.start`). An excluded span is never walked by the renderer
|
|
6
|
-
* (`playableSpans` skips it and rebases across the gap), so it needs NO
|
|
7
|
-
* reframe coverage — demanding it would reject the compiler's own canonical
|
|
8
|
-
* trim output (trim → excludedRange + segments tiling the remainder).
|
|
9
|
-
*
|
|
10
|
-
* Pure arithmetic, ZERO runtime imports (structural param types only), so it is
|
|
11
|
-
* safe in BOTH the Convex V8 isolate (save-time `validateReframeCoverage`) AND
|
|
12
|
-
* the Temporal workflow sandbox (the compose-loop pre-derive gate). One
|
|
13
|
-
* definition, no drift — the two chokepoints enforce the exact same rule.
|
|
14
|
-
*
|
|
15
|
-
* Why it matters: `deriveTrajectory` bakes coverage = the union of the AUTHORED
|
|
16
|
-
* segments (it clamps, never extends). If the segments leave a gap (a forgotten
|
|
17
|
-
* head lead-in, or a source-absolute-vs-clip-relative time-base mis-map), the
|
|
18
|
-
* render walks a played frame no segment covers and `resolveSegmentAt` throws
|
|
19
|
-
* `trajectory_coverage_gap` deep in the renderer. Catching the gap on this pure
|
|
20
|
-
* path — where BOTH the played window and the segments are known — turns that
|
|
21
|
-
* cryptic late crash into an early, actionable, clip-named error.
|
|
22
|
-
*/
|
|
23
|
-
/** Seam-rounding slack: two segments meeting within EPS seconds are contiguous,
|
|
24
|
-
* not a gap (matches the fps-conversion tolerance at a segment edge). */
|
|
25
1
|
export declare const REFRAME_COVERAGE_EPS = 0.001;
|
|
26
|
-
/**
|
|
27
|
-
* The FIRST uncovered `[start, end]` span (in clip-relative source seconds) where
|
|
28
|
-
* `segments` fail to tile the PLAYED window — `[0, duration]` minus `excluded` —
|
|
29
|
-
* or `null` when every played instant is covered. Order-independent (sorts a
|
|
30
|
-
* copy). A legitimate subjectless lead-in is NOT a gap only when it is handled
|
|
31
|
-
* EXPLICITLY: either a frame-center segment covering it, or an excluded span
|
|
32
|
-
* removing it from playback (the compiler's trim → excludedRange path). This
|
|
33
|
-
* helper never invents either (feedback_never_add_fallbacks).
|
|
34
|
-
*
|
|
35
|
-
* `excluded` spans are clip-relative like the segments (source-absolute
|
|
36
|
-
* `excludedRanges` convert via `- trim.start` at the call site). An excluded
|
|
37
|
-
* instant counts as covered because the renderer never resolves a trajectory
|
|
38
|
-
* there (`playableSpans` drops it), so the sweep unions segments + exclusions
|
|
39
|
-
* and any remaining hole is exactly a played-and-uncovered span — the set that
|
|
40
|
-
* crashes `resolveSegmentAt`.
|
|
41
|
-
*/
|
|
42
2
|
export declare function firstReframeCoverageGap(segments: ReadonlyArray<{
|
|
43
3
|
startSec: number;
|
|
44
4
|
endSec: number;
|
|
@@ -1,19 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* derive — PURE multi-format derivation core (P5). Produce a reframed SIBLING
|
|
3
|
-
* composition for a new target Format: copy authored intent verbatim, set the
|
|
4
|
-
* new `format`, and author a GEOMETRIC single-subject `reframe` on every media
|
|
5
|
-
* clip that doesn't already carry one. Aspect-specific crop-window geometry,
|
|
6
|
-
* caption-band reserve, and width-anchored brand are re-resolved DOWNSTREAM at
|
|
7
|
-
* render from `composition.format` (deriveTrajectory + compositionFormatDimensions)
|
|
8
|
-
* — this module never touches them. Single-subject focus is aspect-independent.
|
|
9
|
-
*
|
|
10
|
-
* Group/editorial refinement (e.g. all-faces → active-speaker for a narrower
|
|
11
|
-
* aspect) is the explicit follow-on: an existing reframe is copied verbatim and
|
|
12
|
-
* the render honestly pads-and-holds (overframed) for the new aspect.
|
|
13
|
-
*/
|
|
14
1
|
import type { Composition, Format } from "../validators/composition.js";
|
|
15
2
|
import type { Focus } from "./index.js";
|
|
16
|
-
/** The inline face roster cached on `mediaItems.subjectTracks[windowHash].faces`. */
|
|
17
3
|
export interface RosterFace {
|
|
18
4
|
faceId: string;
|
|
19
5
|
bbox: {
|
|
@@ -25,13 +11,6 @@ export interface RosterFace {
|
|
|
25
11
|
speakingShare?: number;
|
|
26
12
|
}
|
|
27
13
|
export type ClipFaceRoster = RosterFace[];
|
|
28
|
-
/** Output FormatSpec the caller targets (no `platform` — preserved from source). */
|
|
29
14
|
export type TargetFormat = Pick<Format, "aspectRatio" | "fps" | "resolution">;
|
|
30
|
-
/**
|
|
31
|
-
* Geometric single-subject focus for the target aspect:
|
|
32
|
-
* - no faces → frame-center (screen-recording / faceless b-roll; honest center crop).
|
|
33
|
-
* - 2+ faces carry a speakingShare signal → active-speaker (the wedge follows the speaker).
|
|
34
|
-
* - otherwise → the single largest detected face (dominant subject).
|
|
35
|
-
*/
|
|
36
15
|
export declare function pickGeometricFocus(faces: ClipFaceRoster | undefined): Focus;
|
|
37
16
|
export declare function deriveReframedComposition(source: Composition, targetFormat: TargetFormat, perceptionByClipId: Record<string, ClipFaceRoster>): Composition;
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reframe — the canonical, typed model for "the camera": an at-most-one
|
|
3
|
-
* top-slot transform whose segments animate a source→output viewport over
|
|
4
|
-
* time. This is the REAL model the new pipeline derives + renders from
|
|
5
|
-
* natively (not a facade over `cropIntents`).
|
|
6
|
-
*
|
|
7
|
-
* Status: `reframe` is built correctly here as the canonical shape. The legacy
|
|
8
|
-
* `cropIntents` (subject-centric, source-level, required `lateralBias`, no
|
|
9
|
-
* `ease`) remains the live podcast path for now and is MIGRATED onto `reframe`
|
|
10
|
-
* later — at which point `cropIntents` is deleted. No lowering shim exists;
|
|
11
|
-
* the two coexist only during the migration window and share the per-frame
|
|
12
|
-
* trajectory back-end + the renderer.
|
|
13
|
-
*
|
|
14
|
-
* Design vs legacy:
|
|
15
|
-
* - `focus` (not `subject`): adds `point`; `shotScale` lives on `face` only.
|
|
16
|
-
* - `zoom` (not `zoomScale`): same meaning (<1 punches in).
|
|
17
|
-
* - `bias` optional (legacy `lateralBias` was required — podcast baggage).
|
|
18
|
-
* - `ease` is HONORED: the reframe derive bakes the eased zoom/center ramp
|
|
19
|
-
* into the per-frame trajectory channel, so the renderer is unchanged.
|
|
20
|
-
*/
|
|
21
1
|
import { z } from "zod";
|
|
22
2
|
export * from "./shotScale.js";
|
|
23
3
|
export * from "./aspectLoss.js";
|
|
@@ -65,16 +45,9 @@ export declare const Focus: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
|
|
|
65
45
|
mode: "active-speaker";
|
|
66
46
|
}>]>;
|
|
67
47
|
export type Focus = z.infer<typeof Focus>;
|
|
68
|
-
/**
|
|
69
|
-
* The segment's FIELDS, unrefined. `ReframeSegment` below wraps this in the
|
|
70
|
-
* shotScale-XOR-zoom refine, which makes it a ZodEffects with no `.shape` — so
|
|
71
|
-
* anything introspecting the field set (the OpenAPI doc-mirror lockstep guard)
|
|
72
|
-
* reads THIS. Validation always goes through `ReframeSegment`.
|
|
73
|
-
*/
|
|
74
48
|
export declare const ReframeSegmentFields: z.ZodObject<{
|
|
75
49
|
startSec: z.ZodNumber;
|
|
76
50
|
endSec: z.ZodNumber;
|
|
77
|
-
/** WHO/WHAT the camera tracks — see the `.describe()` for per-mode guidance. */
|
|
78
51
|
focus: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
|
|
79
52
|
mode: z.ZodLiteral<"frame-center">;
|
|
80
53
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -118,17 +91,8 @@ export declare const ReframeSegmentFields: z.ZodObject<{
|
|
|
118
91
|
}, {
|
|
119
92
|
mode: "active-speaker";
|
|
120
93
|
}>]>;
|
|
121
|
-
/** Editorial language for diff/log readability ("speaker-tight",
|
|
122
|
-
* "wide-context", "interviewer-reaction"). Not honored by the derive math
|
|
123
|
-
* — a relabel must not bust the variant cache, so it is EXCLUDED from
|
|
124
|
-
* `hashReframe`. */
|
|
125
94
|
intent: z.ZodOptional<z.ZodString>;
|
|
126
|
-
/** <1 punches in; 1 = full frame. Omitted when `focus.shotScale` governs — the
|
|
127
|
-
* two are MUTUALLY EXCLUSIVE (see the refine below). Absent = 1 (full frame),
|
|
128
|
-
* which is how `hashReframe` has always canonicalized it. */
|
|
129
95
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
130
|
-
/** Ease-in / ease-out durations (seconds) for the zoom ramp at this segment's
|
|
131
|
-
* edges. Honored at derive time (baked into the per-frame channel). */
|
|
132
96
|
ease: z.ZodOptional<z.ZodObject<{
|
|
133
97
|
in: z.ZodNumber;
|
|
134
98
|
out: z.ZodNumber;
|
|
@@ -139,7 +103,6 @@ export declare const ReframeSegmentFields: z.ZodObject<{
|
|
|
139
103
|
in: number;
|
|
140
104
|
out: number;
|
|
141
105
|
}>>;
|
|
142
|
-
/** Optional fine framing nudge, source-normalized [-0.3,0.3]. */
|
|
143
106
|
bias: z.ZodOptional<z.ZodObject<{
|
|
144
107
|
x: z.ZodNumber;
|
|
145
108
|
y: z.ZodNumber;
|
|
@@ -210,7 +173,6 @@ export declare const ReframeSegmentFields: z.ZodObject<{
|
|
|
210
173
|
export declare const ReframeSegment: z.ZodEffects<z.ZodObject<{
|
|
211
174
|
startSec: z.ZodNumber;
|
|
212
175
|
endSec: z.ZodNumber;
|
|
213
|
-
/** WHO/WHAT the camera tracks — see the `.describe()` for per-mode guidance. */
|
|
214
176
|
focus: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
|
|
215
177
|
mode: z.ZodLiteral<"frame-center">;
|
|
216
178
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -254,17 +216,8 @@ export declare const ReframeSegment: z.ZodEffects<z.ZodObject<{
|
|
|
254
216
|
}, {
|
|
255
217
|
mode: "active-speaker";
|
|
256
218
|
}>]>;
|
|
257
|
-
/** Editorial language for diff/log readability ("speaker-tight",
|
|
258
|
-
* "wide-context", "interviewer-reaction"). Not honored by the derive math
|
|
259
|
-
* — a relabel must not bust the variant cache, so it is EXCLUDED from
|
|
260
|
-
* `hashReframe`. */
|
|
261
219
|
intent: z.ZodOptional<z.ZodString>;
|
|
262
|
-
/** <1 punches in; 1 = full frame. Omitted when `focus.shotScale` governs — the
|
|
263
|
-
* two are MUTUALLY EXCLUSIVE (see the refine below). Absent = 1 (full frame),
|
|
264
|
-
* which is how `hashReframe` has always canonicalized it. */
|
|
265
220
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
266
|
-
/** Ease-in / ease-out durations (seconds) for the zoom ramp at this segment's
|
|
267
|
-
* edges. Honored at derive time (baked into the per-frame channel). */
|
|
268
221
|
ease: z.ZodOptional<z.ZodObject<{
|
|
269
222
|
in: z.ZodNumber;
|
|
270
223
|
out: z.ZodNumber;
|
|
@@ -275,7 +228,6 @@ export declare const ReframeSegment: z.ZodEffects<z.ZodObject<{
|
|
|
275
228
|
in: number;
|
|
276
229
|
out: number;
|
|
277
230
|
}>>;
|
|
278
|
-
/** Optional fine framing nudge, source-normalized [-0.3,0.3]. */
|
|
279
231
|
bias: z.ZodOptional<z.ZodObject<{
|
|
280
232
|
x: z.ZodNumber;
|
|
281
233
|
y: z.ZodNumber;
|
|
@@ -400,12 +352,10 @@ export declare const ReframeSegment: z.ZodEffects<z.ZodObject<{
|
|
|
400
352
|
} | undefined;
|
|
401
353
|
}>;
|
|
402
354
|
export type ReframeSegment = z.infer<typeof ReframeSegment>;
|
|
403
|
-
/** The camera channel: exactly one per layer; segments tile the clip. */
|
|
404
355
|
export declare const Reframe: z.ZodObject<{
|
|
405
356
|
segments: z.ZodArray<z.ZodEffects<z.ZodObject<{
|
|
406
357
|
startSec: z.ZodNumber;
|
|
407
358
|
endSec: z.ZodNumber;
|
|
408
|
-
/** WHO/WHAT the camera tracks — see the `.describe()` for per-mode guidance. */
|
|
409
359
|
focus: z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
|
|
410
360
|
mode: z.ZodLiteral<"frame-center">;
|
|
411
361
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -449,17 +399,8 @@ export declare const Reframe: z.ZodObject<{
|
|
|
449
399
|
}, {
|
|
450
400
|
mode: "active-speaker";
|
|
451
401
|
}>]>;
|
|
452
|
-
/** Editorial language for diff/log readability ("speaker-tight",
|
|
453
|
-
* "wide-context", "interviewer-reaction"). Not honored by the derive math
|
|
454
|
-
* — a relabel must not bust the variant cache, so it is EXCLUDED from
|
|
455
|
-
* `hashReframe`. */
|
|
456
402
|
intent: z.ZodOptional<z.ZodString>;
|
|
457
|
-
/** <1 punches in; 1 = full frame. Omitted when `focus.shotScale` governs — the
|
|
458
|
-
* two are MUTUALLY EXCLUSIVE (see the refine below). Absent = 1 (full frame),
|
|
459
|
-
* which is how `hashReframe` has always canonicalized it. */
|
|
460
403
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
461
|
-
/** Ease-in / ease-out durations (seconds) for the zoom ramp at this segment's
|
|
462
|
-
* edges. Honored at derive time (baked into the per-frame channel). */
|
|
463
404
|
ease: z.ZodOptional<z.ZodObject<{
|
|
464
405
|
in: z.ZodNumber;
|
|
465
406
|
out: z.ZodNumber;
|
|
@@ -470,7 +411,6 @@ export declare const Reframe: z.ZodObject<{
|
|
|
470
411
|
in: number;
|
|
471
412
|
out: number;
|
|
472
413
|
}>>;
|
|
473
|
-
/** Optional fine framing nudge, source-normalized [-0.3,0.3]. */
|
|
474
414
|
bias: z.ZodOptional<z.ZodObject<{
|
|
475
415
|
x: z.ZodNumber;
|
|
476
416
|
y: z.ZodNumber;
|
|
@@ -1,43 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* kenBurnsToReframe — lower a still-image Ken-Burns preset onto the canonical
|
|
3
|
-
* `Reframe` camera channel, so a still gets the SAME per-frame viewport
|
|
4
|
-
* treatment as video (one renderer, arbitrary point-zoom) instead of a
|
|
5
|
-
* StillFrame-only CSS preset.
|
|
6
|
-
*
|
|
7
|
-
* The five legacy presets (StillFrame.computeKenBurnsTransform) map as follows.
|
|
8
|
-
* A still has NO faces, so every preset uses a detection-free focus
|
|
9
|
-
* (`frame-center` or `point`) and rides the per-frame zoom/center ramp the
|
|
10
|
-
* derive bakes from `ease`:
|
|
11
|
-
*
|
|
12
|
-
* - "in" — frame-center, zoom ramps 1.0 → 0.84 over the clip (slow punch-in).
|
|
13
|
-
* - "out" — frame-center, zoom ramps 0.84 → 1.0 (slow pull-out).
|
|
14
|
-
* - "pan-l" — a held slight zoom, focus `point` panning right→left across frame.
|
|
15
|
-
* - "pan-r" — a held slight zoom, focus `point` panning left→right.
|
|
16
|
-
* - "none" — frame-center, zoom 1.0, no ease → no motion (identity viewport).
|
|
17
|
-
*
|
|
18
|
-
* Reframe `zoom` is a CROP-WINDOW scale: <1 punches in (tighter crop). The
|
|
19
|
-
* legacy StillFrame used CSS `scale()` where >1 zooms in; the magnitudes here
|
|
20
|
-
* (≈16% over the clip, vs the old 8%) are tuned for the crop-window convention
|
|
21
|
-
* and read equivalently against b-roll. Exact pixel parity with the old CSS
|
|
22
|
-
* preset is NOT a goal (and not asserted) — the unified path is the contract.
|
|
23
|
-
*
|
|
24
|
-
* `ease.in` / `ease.out` are the eased-ramp durations the derive consumes. For
|
|
25
|
-
* a monotonic zoom we put the WHOLE clip under one ease edge (in→ramp at the
|
|
26
|
-
* head for "out", or — equivalently — ramp the zoom across the clip). The
|
|
27
|
-
* derive (deriveTrajectory) interpolates the zoom across `ease` so the renderer
|
|
28
|
-
* stays a single per-frame sampler.
|
|
29
|
-
*/
|
|
30
1
|
import type { Reframe } from "./index.js";
|
|
31
2
|
export type KenBurnsMode = "in" | "out" | "pan-l" | "pan-r" | "none";
|
|
32
|
-
/** The punched-in zoom a Ken-Burns ramp reaches (crop-window scale; <1 = tighter). */
|
|
33
3
|
export declare const KEN_BURNS_ZOOM_TIGHT = 0.84;
|
|
34
|
-
/** The held zoom a pan preset sits at so the lateral move has room before edges. */
|
|
35
4
|
export declare const KEN_BURNS_PAN_ZOOM = 0.9;
|
|
36
|
-
/** How far (source-normalized) a pan preset slides the focus point laterally. */
|
|
37
5
|
export declare const KEN_BURNS_PAN_BIAS = 0.08;
|
|
38
|
-
/**
|
|
39
|
-
* Lower a Ken-Burns preset to a single-segment `Reframe` over `[0, durationSec)`.
|
|
40
|
-
* Pure; no detection. `durationSec` sets the segment span (and the ease edge
|
|
41
|
-
* length, so the ramp fills the whole clip).
|
|
42
|
-
*/
|
|
43
6
|
export declare function kenBurnsToReframe(mode: KenBurnsMode, durationSec: number): Reframe;
|
|
@@ -1,50 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shot scale — the ONE table that turns an editorial shot scale into a crop
|
|
3
|
-
* zoom, and the DECIDE-point test for whether that punch-in is earned at all.
|
|
4
|
-
*
|
|
5
|
-
* `shotScale` is a TARGET, not a zoom: put the tracked face at `target` of the
|
|
6
|
-
* output frame's height. The bake (`deriveTrajectory.calibrateShotScale`) reads
|
|
7
|
-
* the same table from here, so the plan-time guard and the render agree by
|
|
8
|
-
* construction — neither side keeps a copy.
|
|
9
|
-
*
|
|
10
|
-
* WHY THE WARRANT EXISTS: the bake honors ANY shotScale. It computes
|
|
11
|
-
* `zoom = faceHeight / target`, clamps to [0.4, 1.0], and crops — with no idea
|
|
12
|
-
* whether the source has the ROOM or the PIXELS to give. On 2026-07-13 a planner
|
|
13
|
-
* asked for `close` on a 720x900 talking-head already framed chest-up and
|
|
14
|
-
* centred; the bake dutifully cropped to ~392x490 and magnified it 2.7x to fill
|
|
15
|
-
* a 1080x1350 output. Nothing objected. The shot was already the shot.
|
|
16
|
-
*
|
|
17
|
-
* A punch-in is warranted only when all three hold:
|
|
18
|
-
* no-gain — the face is genuinely SMALLER than the scale asks for, so the
|
|
19
|
-
* crop reframes rather than merely resampling.
|
|
20
|
-
* no-room — the crop window, centred on the face and widened by how far the
|
|
21
|
-
* subject DRIFTS across the span, still fits inside the source.
|
|
22
|
-
* Otherwise the window clamps, the subject slides off its framing,
|
|
23
|
-
* and heads get clipped.
|
|
24
|
-
* no-pixels — the crop still has enough source pixels to fill the output
|
|
25
|
-
* without magnifying past MAX_SOURCE_MAGNIFICATION.
|
|
26
|
-
*
|
|
27
|
-
* Pure numbers in, pure verdict out — no perception types, no I/O. The caller
|
|
28
|
-
* supplies the face facts (the director reads them off the SubjectTrack) and the
|
|
29
|
-
* frame geometry.
|
|
30
|
-
*/
|
|
31
1
|
export type ShotScale = "close" | "standard" | "wide";
|
|
32
|
-
/** Face height as a fraction of the OUTPUT frame height, per editorial scale. */
|
|
33
2
|
export declare const SHOT_SCALE_TARGET: Record<ShotScale, number>;
|
|
34
|
-
/** The bake clamps the derived zoom to this range. */
|
|
35
3
|
export declare const ZOOM_MIN = 0.4;
|
|
36
4
|
export declare const ZOOM_MAX = 1;
|
|
37
|
-
/**
|
|
38
|
-
* A crop showing this much of the frame or more is not a reframe — it is a
|
|
39
|
-
* resample. Below the threshold the punch-in has to actually change the shot.
|
|
40
|
-
*/
|
|
41
5
|
export declare const NO_GAIN_ZOOM = 0.9;
|
|
42
|
-
/**
|
|
43
|
-
* Ceiling on how far the render may magnify SOURCE pixels to fill the output.
|
|
44
|
-
* 2x is the practical blow-up limit — past it the punch-in reads soft and mushy
|
|
45
|
-
* next to the un-cropped spans it cuts against. (A 4K source punches in freely;
|
|
46
|
-
* a 720p source has nothing to give.)
|
|
47
|
-
*/
|
|
48
6
|
export declare const MAX_SOURCE_MAGNIFICATION = 2;
|
|
49
7
|
export interface FrameGeometry {
|
|
50
8
|
srcW: number;
|
|
@@ -52,16 +10,9 @@ export interface FrameGeometry {
|
|
|
52
10
|
outW: number;
|
|
53
11
|
outH: number;
|
|
54
12
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Face facts over ONE framing segment's span. Source-normalized and
|
|
57
|
-
* output-agnostic — the same facts warrant a 9:16 and a 4:5 render.
|
|
58
|
-
*/
|
|
59
13
|
export interface FaceSpanFraming {
|
|
60
14
|
faceId: string;
|
|
61
|
-
/** Median face height / SOURCE height across the span. */
|
|
62
15
|
heightFrac: number;
|
|
63
|
-
/** Face-CENTRE travel across the span, source-normalized [0,1]. A static
|
|
64
|
-
* subject has cxMin ≈ cxMax; a walking one spreads. */
|
|
65
16
|
cxMin: number;
|
|
66
17
|
cxMax: number;
|
|
67
18
|
cyMin: number;
|
|
@@ -77,42 +28,16 @@ export type PunchInWarrant = {
|
|
|
77
28
|
rule: PunchInRule;
|
|
78
29
|
reason: string;
|
|
79
30
|
};
|
|
80
|
-
/**
|
|
81
|
-
* The source rect the output viewport sees at zoom 1.0 — the aspect-fit window.
|
|
82
|
-
* Mirrors `calibrateShotScale`'s `fitH`.
|
|
83
|
-
*/
|
|
84
31
|
export declare function fitWindow(g: FrameGeometry): {
|
|
85
32
|
fitW: number;
|
|
86
33
|
fitH: number;
|
|
87
34
|
};
|
|
88
|
-
/** The zoom a shotScale implies for a face of this height (fraction of the FIT window). */
|
|
89
35
|
export declare function shotScaleZoom(heightFracOfFit: number, shotScale: ShotScale): number;
|
|
90
|
-
/**
|
|
91
|
-
* Is this punch-in earned? Refusals carry the NUMBERS — they route back to the
|
|
92
|
-
* planner verbatim as its next-turn instruction, so they must say what is true
|
|
93
|
-
* of THIS footage and what to do instead.
|
|
94
|
-
*/
|
|
95
36
|
export declare function punchInWarrant(face: FaceSpanFraming, shotScale: ShotScale, g: FrameGeometry): PunchInWarrant;
|
|
96
|
-
/** One second of one tracked face, source-normalized. */
|
|
97
37
|
export interface FaceSecondRow {
|
|
98
38
|
heightFrac: number;
|
|
99
39
|
cx: number;
|
|
100
40
|
cy: number;
|
|
101
41
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Aggregate per-second face rows into the facts a warrant needs over ONE span:
|
|
104
|
-
* the MEDIAN height (robust to a stray frame) and the RANGE the centre travels
|
|
105
|
-
* (a walking subject spreads it; a static one collapses it to a point).
|
|
106
|
-
*
|
|
107
|
-
* Returns null when the face is absent for more than half the span — there is
|
|
108
|
-
* nothing to frame, and the caller must refuse rather than invent a box. Shared
|
|
109
|
-
* by the planner's guard and the author's `set_crop_intents`, so both judge a
|
|
110
|
-
* punch-in against the same aggregate.
|
|
111
|
-
*/
|
|
112
42
|
export declare function faceOverSpan(perSecond: Array<Record<string, FaceSecondRow>>, faceId: string, startSec: number, endSec: number): FaceSpanFraming | null;
|
|
113
|
-
/**
|
|
114
|
-
* The tightest scale this face+source actually supports, or null when none does
|
|
115
|
-
* (the source is already framed as tight as it can usefully go). This is what
|
|
116
|
-
* the PLANNER is told, so it never has to guess at a punch-in the guard refuses.
|
|
117
|
-
*/
|
|
118
43
|
export declare function tightestWarrantedShotScale(face: FaceSpanFraming, g: FrameGeometry): ShotScale | null;
|
|
@@ -1,52 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure trajectory math shared by the director's `deriveTrajectory` (the face/
|
|
3
|
-
* video producer) and the renderer's still path. This is the SINGLE source of
|
|
4
|
-
* truth for:
|
|
5
|
-
* - the eased zoom ramp (`buildEasedZooms`) + center pan ramp (`buildPannedCenters`),
|
|
6
|
-
* - the FACELESS still-image trajectory producer (`deriveStillTrajectory`),
|
|
7
|
-
* so the still and video paths share one renderer (CropFromTrajectory) and one
|
|
8
|
-
* per-frame center+zoom convention. Framework-free, no perception/face machinery
|
|
9
|
-
* (composition is a leaf) — a still has no faces, so its trajectory is purely the
|
|
10
|
-
* authored point/frame-center + the eased zoom/center ramp.
|
|
11
|
-
*
|
|
12
|
-
* The `TrajectoryData` / `TrajectorySegment` shapes are MIRRORS of the renderer's
|
|
13
|
-
* (packages/execution/render-entry/src/CropFromTrajectory.tsx) and the execution derive's
|
|
14
|
-
* (packages/execution/core/src/render/deriveTrajectory.ts) — three mirrors by
|
|
15
|
-
* design (different package boundaries; same wire shape).
|
|
16
|
-
*/
|
|
17
1
|
import type { Reframe } from "./index.js";
|
|
18
|
-
/** A normalized crop center `[cx, cy]` in [0,1] vs source dims. */
|
|
19
2
|
export type Center = [number, number];
|
|
20
|
-
/** Clamp to [0,1]. */
|
|
21
3
|
export declare function clip01(v: number): number;
|
|
22
|
-
/**
|
|
23
|
-
* Cubic ease-out `1 - (1-t)^3` for t∈[0,1] — matches the legacy StillFrame's
|
|
24
|
-
* `Easing.out(Easing.cubic)` so motion decelerates ("settled").
|
|
25
|
-
*/
|
|
26
4
|
export declare function easeOutCubic(t: number): number;
|
|
27
|
-
/**
|
|
28
|
-
* Per-frame crop-window zoom for an EASED segment. Holds at `targetZoom` through
|
|
29
|
-
* the body; ramps to/from full-frame (1.0) at the eased edges:
|
|
30
|
-
* - `easeInSec` at the HEAD: 1.0 → targetZoom.
|
|
31
|
-
* - `easeOutSec` at the TAIL: targetZoom → 1.0.
|
|
32
|
-
* Frame times are `frameIdx / srcFps` (segment-local). Edges clamp to the span.
|
|
33
|
-
*/
|
|
34
5
|
export declare function buildEasedZooms(frameCount: number, srcFps: number, targetZoom: number, easeInSec: number, easeOutSec: number): number[];
|
|
35
|
-
/**
|
|
36
|
-
* Ramp per-frame CENTERS for a `point`-focus pan: from an ORIGIN
|
|
37
|
-
* (`point + biasOffset`) to the authored `point`, eased over `easeInSec` at the
|
|
38
|
-
* head (then held). Used by Ken-Burns `pan-l` / `pan-r`.
|
|
39
|
-
*/
|
|
40
6
|
export declare function buildPannedCenters(frameCount: number, srcFps: number, point: Center, biasOffset: Center, easeInSec: number): Center[];
|
|
41
|
-
/** One tracked subject's per-frame face boxes + active-speaker windows. */
|
|
42
7
|
export interface TrajectorySubject {
|
|
43
8
|
face_id: string;
|
|
44
|
-
/** Per-frame [x,y,w,h] in [0,1] vs source dims; null where this subject has no face. */
|
|
45
9
|
face_box_series: Array<[number, number, number, number] | null>;
|
|
46
|
-
/** [startFrame, endFrame) ranges (segment-relative) where this subject is the active speaker. */
|
|
47
10
|
active_windows: Array<[number, number]>;
|
|
48
11
|
}
|
|
49
|
-
/** One trajectory segment. */
|
|
50
12
|
export interface TrajectorySegment {
|
|
51
13
|
idx: number;
|
|
52
14
|
start_sec: number;
|
|
@@ -58,20 +20,8 @@ export interface TrajectorySegment {
|
|
|
58
20
|
subjects: TrajectorySubject[];
|
|
59
21
|
caption_band_reserve: number;
|
|
60
22
|
zooms?: number[];
|
|
61
|
-
/**
|
|
62
|
-
* DERIVED outcome (Phase 5 zoom-to-fit): true iff this (sub-)shot's locked
|
|
63
|
-
* subject group is WIDER than the output aspect at zoom 1.0, so the camera
|
|
64
|
-
* pads-and-holds at the widest honest frame rather than containing the whole
|
|
65
|
-
* group. An emitted authored outcome surfaced to the driving agent (the
|
|
66
|
-
* editorial drop/cut decision is the agent's, not the renderer's) — NOT an
|
|
67
|
-
* error and NOT a silent edge-clip. Absent (undefined) on a fitting group and
|
|
68
|
-
* on every non-`all-faces` mode. The renderer ignores it (it's metadata for
|
|
69
|
-
* the agent / eval); the crop already pads-and-holds via the coverage clamp.
|
|
70
|
-
*/
|
|
71
23
|
overframed?: boolean;
|
|
72
24
|
}
|
|
73
|
-
/** The trajectory JSON the render consumes. (No `intent_hash` — no producer emits
|
|
74
|
-
* it and nothing reads it; it was a renderer-only drift field, now dropped.) */
|
|
75
25
|
export interface TrajectoryData {
|
|
76
26
|
bake_version: string;
|
|
77
27
|
aspect: string;
|
|
@@ -80,20 +30,5 @@ export interface TrajectoryData {
|
|
|
80
30
|
src_fps: number;
|
|
81
31
|
segments: TrajectorySegment[];
|
|
82
32
|
}
|
|
83
|
-
/** Per-aspect caption keep-out band (fraction of output height). SSOT — the
|
|
84
|
-
* execution derive imports this rather than re-declaring it. */
|
|
85
33
|
export declare const CAPTION_BAND_RESERVE: Record<string, number>;
|
|
86
|
-
/**
|
|
87
|
-
* Derive a FACELESS still-image trajectory from a `Reframe` (typically the one
|
|
88
|
-
* `kenBurnsToReframe` produced). A still has no detection, so every focus reduces
|
|
89
|
-
* to a constant authored center (`point` → `[x,y]`; everything else → frame-center
|
|
90
|
-
* `[0.5,0.5]`), and the only motion is the eased zoom (`buildEasedZooms`) / center
|
|
91
|
-
* pan (`buildPannedCenters`). Output is the SAME `TrajectoryData` shape the video
|
|
92
|
-
* path produces, so the renderer (CropFromTrajectory) consumes both identically.
|
|
93
|
-
*
|
|
94
|
-
* `srcW`/`srcH` are the IMAGE pixel dims (used by the renderer's crop-window math).
|
|
95
|
-
* Each segment's `[startSec, endSec)` × `fps` sets its per-frame series length.
|
|
96
|
-
* `fps` is the OUTPUT fps (the trajectory is sampled at this rate — `src_fps = fps`
|
|
97
|
-
* for a still, since the "source" is one frozen image with no native timeline).
|
|
98
|
-
*/
|
|
99
34
|
export declare function deriveStillTrajectory(reframe: Reframe, srcW: number, srcH: number, fps: number, aspect: string, bakeVersion: string): TrajectoryData;
|
|
@@ -1,36 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FLATTENING COMPOUND CLIPS.
|
|
3
|
-
*
|
|
4
|
-
* A `{kind:'composition'}` source is a reference; nothing downstream — the
|
|
5
|
-
* renderer, the evaluator, the still lane — knows how to draw a reference.
|
|
6
|
-
* Flattening resolves each compound clip into the child composition's own
|
|
7
|
-
* clips, shifted into the host's time and clipped to the compound's window,
|
|
8
|
-
* producing a composition with no compound sources left. It runs at the ONE
|
|
9
|
-
* translator every render lane already flows through, so a composition that
|
|
10
|
-
* embeds another renders identically on desktop, cloud and still lanes.
|
|
11
|
-
*
|
|
12
|
-
* Semantics, stated because each was a decision:
|
|
13
|
-
*
|
|
14
|
-
* - The child's tracks come in as NEW tracks directly after the host track
|
|
15
|
-
* carrying the compound clip (precomp semantics). Merging child clips into
|
|
16
|
-
* the HOST's lanes would collide with whatever else the host has there,
|
|
17
|
-
* and "my intro overwrote my b-roll" is not a bug anyone should meet.
|
|
18
|
-
* - `trim` selects a window of the child's own timeline; the compound's
|
|
19
|
-
* `duration` clips the result. Content beyond either is dropped, exactly
|
|
20
|
-
* as a media trim drops frames.
|
|
21
|
-
* - Child clip ids are prefixed with the compound clip's id, so two
|
|
22
|
-
* instances of the same child in one host cannot collide.
|
|
23
|
-
* - Child MARKERS are dropped. The host's marker lane is the host's.
|
|
24
|
-
*
|
|
25
|
-
* CYCLES AND DEPTH FAIL LOUD. A composition that embeds itself — directly or
|
|
26
|
-
* through a chain — has no finite flattening; and unbounded nesting is a
|
|
27
|
-
* stack-shaped denial of service. Both throw `InvariantError` rather than
|
|
28
|
-
* rendering something partial: a render that silently dropped an embedded
|
|
29
|
-
* sequence is a corrupted deliverable with a green checkmark.
|
|
30
|
-
*/
|
|
31
1
|
import type { Composition } from "../validators/composition.js";
|
|
32
2
|
export declare const MAX_COMPOUND_DEPTH = 4;
|
|
33
3
|
export type ResolveComposition = (compositionId: string) => Composition | undefined;
|
|
34
|
-
/** Does this composition contain any compound clip at all? Cheap gate. */
|
|
35
4
|
export declare function hasCompoundClips(composition: Pick<Composition, "tracks">): boolean;
|
|
36
5
|
export declare function flattenCompoundClips(composition: Composition, resolve: ResolveComposition): Composition;
|
|
@@ -1,39 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* INTENT → PLAN.
|
|
3
|
-
*
|
|
4
|
-
* The single entry point every gesture goes through. A caller says what it
|
|
5
|
-
* wants in timeline terms — "these clips, to this track, starting here" — and
|
|
6
|
-
* gets back a plan it can apply or a set of named refusals it can render. It
|
|
7
|
-
* never gets back a mutation.
|
|
8
|
-
*
|
|
9
|
-
* WHY THIS EXISTS AT ALL. The drag path used to do its own placement inline:
|
|
10
|
-
* hit-test a Y coordinate, look up the track, check kind compatibility, commit.
|
|
11
|
-
* It had no occupancy test (so two clips could be stacked at identical times on
|
|
12
|
-
* one track), no way to mint a lane, and no way to say why a drag was refused —
|
|
13
|
-
* the user just got a silent snap-back. Meanwhile the occupancy test, the
|
|
14
|
-
* placement resolver and TWO separate overlap invariant checkers all existed and
|
|
15
|
-
* none of them ran in production.
|
|
16
|
-
*
|
|
17
|
-
* The fix is not to add a call to the drag path. It is to make a drag path that
|
|
18
|
-
* skips placement unrepresentable, by giving the applier nothing to accept
|
|
19
|
-
* except the value this module produces.
|
|
20
|
-
*/
|
|
21
1
|
import type { Composition } from "../validators/composition.js";
|
|
22
2
|
import type { OverlapPolicy } from "./resolve.js";
|
|
23
3
|
import type { TimelinePlan } from "./plan.js";
|
|
24
|
-
/** One clip's requested destination. */
|
|
25
4
|
export interface ClipMove {
|
|
26
5
|
clipId: string;
|
|
27
|
-
/** Target lane. Same as the clip's current track for an in-lane slide. */
|
|
28
6
|
toTrackId: string;
|
|
29
7
|
startTime: number;
|
|
30
|
-
/** Timeline duration after the gesture — unchanged for a pure move. */
|
|
31
8
|
duration: number;
|
|
32
9
|
}
|
|
33
10
|
export interface MoveIntent {
|
|
34
11
|
type: "moveClips";
|
|
35
12
|
moves: readonly ClipMove[];
|
|
36
|
-
/** Default `resolve`; `refuse` is for callers that want a dry-run answer. */
|
|
37
13
|
policy?: OverlapPolicy;
|
|
38
14
|
label?: string;
|
|
39
15
|
}
|
|
@@ -43,11 +19,6 @@ export interface ResolveIntentArgs {
|
|
|
43
19
|
newClipId: () => string;
|
|
44
20
|
}
|
|
45
21
|
export declare function resolveMoveIntent(args: ResolveIntentArgs): TimelinePlan;
|
|
46
|
-
/**
|
|
47
|
-
* The gate's read-only half: does this composition still satisfy the one rule
|
|
48
|
-
* the move path exists to protect? Kept next to the resolver so a resolution
|
|
49
|
-
* bug fails here rather than reaching the document.
|
|
50
|
-
*/
|
|
51
22
|
export declare function planLeavesOverlaps(composition: Pick<Composition, "tracks">): Array<{
|
|
52
23
|
trackId: string;
|
|
53
24
|
clipIds: [string, string];
|