@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,9 +1,5 @@
|
|
|
1
1
|
export { apcaLc } from "../../brand-derivation/index.js";
|
|
2
|
-
/** Bump on ANY change to the algorithm or constants below. The render consumer
|
|
3
|
-
* embeds this into renderCacheKey (spec §15) so a floor change invalidates
|
|
4
|
-
* cached renders transitively — never a remembered manual bump. */
|
|
5
2
|
export declare const FLOOR_VERSION = "floor-v6-2026.06.09";
|
|
6
|
-
/** Fractions of the OUTPUT rect. Origin TOP-LEFT, y-down, all in [0,1]. */
|
|
7
3
|
export interface Rect {
|
|
8
4
|
x: number;
|
|
9
5
|
y: number;
|
|
@@ -11,73 +7,43 @@ export interface Rect {
|
|
|
11
7
|
h: number;
|
|
12
8
|
}
|
|
13
9
|
export type Anchor = "top" | "bottom" | "lower-third" | "left" | "right" | "free";
|
|
14
|
-
/** A frame window in absolute frame indices (inclusive start, exclusive end). */
|
|
15
10
|
export interface FrameWindow {
|
|
16
11
|
startFrame: number;
|
|
17
12
|
endFrame: number;
|
|
18
13
|
}
|
|
19
|
-
/** Per-frame face box normalized to the OUTPUT frame (the crop is already applied
|
|
20
|
-
* — render derives this as crop∘FaceBoxSource). `null` = no face that frame. */
|
|
21
14
|
export type FaceBoxOutput = Rect;
|
|
22
|
-
/** One tracked person. The bake (spec §10) emits a per-frame face box per subject
|
|
23
|
-
* plus the windows where they are the active speaker. */
|
|
24
15
|
export interface Subject {
|
|
25
16
|
id: string;
|
|
26
|
-
/** Per-frame face box (output coords), `null` where this subject has no face. */
|
|
27
17
|
faceBoxSeries: (FaceBoxOutput | null)[];
|
|
28
|
-
/** Windows where this subject is the active speaker (drives speaker-switch, spec §8). */
|
|
29
18
|
activeWindows?: FrameWindow[];
|
|
30
19
|
}
|
|
31
|
-
/** The composed layout shape resolved from `subjects[]`. `single-focus` is fully
|
|
32
|
-
* placed by this module; the designed split/stacked/speaker-switch geometry is a
|
|
33
|
-
* later plan (spec §8) — reported here so callers branch correctly and the
|
|
34
|
-
* multi-subject case is never silently flattened. */
|
|
35
20
|
export type LayoutIntent = "single-focus" | "split" | "stacked" | "speaker-switch";
|
|
36
|
-
/** The CEILING contract (spec §7) — declared here so the author-time agent and
|
|
37
|
-
* the render/ceiling consumers share one shape. The floor only bounds a
|
|
38
|
-
* treatment's animated EXTENT (a popping word must not pop onto the face); the
|
|
39
|
-
* treatment library itself lives above the floor. */
|
|
40
21
|
export interface Treatment {
|
|
41
22
|
segmentation: "word" | "phrase" | "line";
|
|
42
23
|
emphasis: {
|
|
43
24
|
keywords: string[];
|
|
44
25
|
style: "color" | "scale" | "weight";
|
|
45
26
|
};
|
|
46
|
-
/** One of the repo's mood-tagged kinetic caption styles (useWhen/pairsWith/avoidWith honoured above the floor). */
|
|
47
27
|
kineticPreset: string;
|
|
48
28
|
maxLines: number;
|
|
49
|
-
/** Index into the editorial type scale (spec §7.1) — NOT a raw px guess. */
|
|
50
29
|
typeScaleStep: number;
|
|
51
30
|
}
|
|
52
31
|
export interface PlacedElement {
|
|
53
32
|
id: string;
|
|
54
33
|
kind: "caption" | "graphic";
|
|
55
|
-
/** `inset` respects face + safe-zones + inter-element; `takeover` is intentional
|
|
56
|
-
* full-frame occlusion (honours only safe zones for its internal text). */
|
|
57
34
|
intent: "inset" | "takeover";
|
|
58
|
-
/** Captions are required (the reframe yields, never drops); graphics default droppable. */
|
|
59
35
|
required: boolean;
|
|
60
|
-
/** Higher places first. Captions highest by default. */
|
|
61
36
|
priority: number;
|
|
62
37
|
hasText: boolean;
|
|
63
|
-
/** MEASURED extent (caption layer measures the text; overlay measures the
|
|
64
|
-
* primitive at its declared params) — NOT a guess. The hard face guarantee is
|
|
65
|
-
* only as hard as this number, so it must be real (spec §5). */
|
|
66
38
|
measuredExtent: {
|
|
67
39
|
w: number;
|
|
68
40
|
h: number;
|
|
69
41
|
};
|
|
70
42
|
preferredRegion?: Anchor;
|
|
71
43
|
treatment?: Treatment;
|
|
72
|
-
/** Resolved text color (hex) for the legibility check; defaults to the white
|
|
73
|
-
* pole when omitted (the safe default text color over an unknown backdrop). */
|
|
74
44
|
textColor?: string;
|
|
75
|
-
/** Element time window in absolute frames (caller converts seconds→frames up front). */
|
|
76
45
|
timeWindow: FrameWindow;
|
|
77
46
|
}
|
|
78
|
-
/** Caller-supplied luminance summary of the layers BENEATH an element (no
|
|
79
|
-
* circularity — never the element's own remedy). Each tile is Y∈[0,1]; the
|
|
80
|
-
* WORST tile drives the decision. Render samples real pixels; tests synthesize. */
|
|
81
47
|
export interface LuminanceSummary {
|
|
82
48
|
tiles: number[];
|
|
83
49
|
}
|
|
@@ -90,10 +56,6 @@ export interface ResolvedElement {
|
|
|
90
56
|
remedy: LegibilityRemedy;
|
|
91
57
|
};
|
|
92
58
|
}
|
|
93
|
-
/** The reframe's yield. `transform` is a per-frame additive adjustment on the
|
|
94
|
-
* baked trajectory (generalises the old caption scalar shift); `mat` is a
|
|
95
|
-
* DESIGNED reserved band (the render fills it with blurred-glass/gradient —
|
|
96
|
-
* NEVER a flat letterbox on 9:16/4:5). */
|
|
97
59
|
export type ReframeAdjustment = {
|
|
98
60
|
kind: "transform";
|
|
99
61
|
dy: number;
|
|
@@ -118,129 +80,46 @@ export interface FloorInput {
|
|
|
118
80
|
platform: string;
|
|
119
81
|
aspect: "9:16" | "1:1" | "4:5" | "16:9";
|
|
120
82
|
};
|
|
121
|
-
/** Multi-subject native (spec §5/§8). One subject → single-focus. */
|
|
122
83
|
subjects: Subject[];
|
|
123
84
|
elements: PlacedElement[];
|
|
124
|
-
/** depthMode relaxes the face keep-out's LOWER edge into a torso band (spec §12).
|
|
125
|
-
* When `captionsBehind` is supplied, depthMode is GATED by the eligibility
|
|
126
|
-
* predicate (§22.2) — ineligible degrades to a normal lower-third caption. */
|
|
127
85
|
depthMode?: boolean;
|
|
128
|
-
/** Captions-behind-speaker eligibility signals (§22.2), injected by the render
|
|
129
|
-
* env: `activeSpeakerPresenceFraction` summarized from the bake's activeWindows;
|
|
130
|
-
* `activeBandCoverage` = the post-sizing matte occlusion of the caption band
|
|
131
|
-
* (a render-time sample, like `backdrop`). Absent ⇒ the gate is inert and
|
|
132
|
-
* depthMode is honored as authored (today's behavior). */
|
|
133
86
|
captionsBehind?: {
|
|
134
87
|
activeSpeakerPresenceFraction: number;
|
|
135
88
|
activeBandCoverage: number | null;
|
|
136
89
|
};
|
|
137
|
-
/** Layers-beneath luminance for an element's region+window. Render supplies the
|
|
138
|
-
* real sampler; tests supply a synthetic one. */
|
|
139
90
|
backdrop: (rect: Rect, frames: number[]) => LuminanceSummary;
|
|
140
91
|
}
|
|
141
92
|
export interface FloorEnvelope {
|
|
142
93
|
perElement: ResolvedElement[];
|
|
143
94
|
reframe: ReframeAdjustment;
|
|
144
|
-
/** Per-frame UNION face keep-out across all subjects (`null` where no subject has a face). */
|
|
145
95
|
faceKeepOut: (Rect | null)[];
|
|
146
96
|
layout: LayoutIntent;
|
|
147
97
|
diagnostics: FloorDiagnostics;
|
|
148
98
|
}
|
|
149
|
-
/** Face keep-out padding, in fractions of the FACE box (scales with face size,
|
|
150
|
-
* aspect-agnostic). Top grows most (hair/headroom), then bottom, then sides. */
|
|
151
99
|
export declare const FACE_PADDING: {
|
|
152
100
|
readonly top: 0.6;
|
|
153
101
|
readonly bottom: 0.3;
|
|
154
102
|
readonly side: 0.25;
|
|
155
103
|
};
|
|
156
|
-
/** APCA Lc target for caption/graphic text over video (spec §2 invariant 2).
|
|
157
|
-
* Numerically equals brand-derivation's `FLOORS.nonBody`, but it is a DISTINCT
|
|
158
|
-
* concept (text-over-hostile-video, not muted-UI-text) — kept separate on
|
|
159
|
-
* purpose so a change to one never silently moves the other. */
|
|
160
104
|
export declare const CAPTION_LC_FLOOR = 60;
|
|
161
|
-
/** Minimum effective zoom the yield may request — mirrors the bake's source-fit
|
|
162
|
-
* floor (`CropFromTrajectory` effectiveZoom clamp). Below this the source no
|
|
163
|
-
* longer fills the frame, so we fall to a designed mat instead. */
|
|
164
105
|
export declare const MIN_ZOOM = 0.4;
|
|
165
|
-
/** Pad a single face box by the face-relative padding vector and clamp to [0,1].
|
|
166
|
-
* `null` (no-face frame) → `null`. In depthMode the lower edge is NOT grown
|
|
167
|
-
* (the torso band is legible-behind, spec §12). */
|
|
168
106
|
export declare function faceKeepOut(face: FaceBoxOutput | null, depthMode?: boolean): Rect | null;
|
|
169
|
-
/** Axis-aligned bounding box of a set of rects. */
|
|
170
107
|
export declare function boundingBox(rects: Rect[]): Rect;
|
|
171
|
-
/** Per-frame UNION of every subject's padded face keep-out. `null` for a frame
|
|
172
|
-
* where no subject has a face. This is the floor's "face class" — captions never
|
|
173
|
-
* occlude ANY subject's face, single- or multi-subject. */
|
|
174
108
|
export declare function unionFaceKeepOutSeries(subjects: Subject[], depthMode?: boolean): (Rect | null)[];
|
|
175
|
-
/** Per-frame keep-out for SPEAKER-SWITCH (spec §8): the crop follows the active
|
|
176
|
-
* speaker, so only THEY are prominently in frame — the keep-out tracks the
|
|
177
|
-
* active subject (whose `activeWindows` cover the frame), NOT the union of all
|
|
178
|
-
* subjects. This lets captions sit tight under the in-frame speaker instead of
|
|
179
|
-
* clearing an off-frame second subject's union (the over-conservative single-
|
|
180
|
-
* stage behavior). Gaps (before the first switch, or no window covers the frame)
|
|
181
|
-
* hold the first subject that has a face there; truly faceless frames → null. */
|
|
182
109
|
export declare function activeFaceKeepOutSeries(subjects: Subject[], depthMode?: boolean): (Rect | null)[];
|
|
183
|
-
/** Resolve the composed layout shape from `subjects[]`. One subject → single-
|
|
184
|
-
* focus. Two+ subjects → speaker-switch when active-speaker windows exist,
|
|
185
|
-
* else a static split. (The DESIGNED geometry for the multi cases is spec §8 /
|
|
186
|
-
* a later plan; this module places them with a correct union keep-out and
|
|
187
|
-
* reports the intent so nothing is silently flattened.) */
|
|
188
110
|
export declare function resolveLayoutIntent(subjects: Subject[]): LayoutIntent;
|
|
189
|
-
/**
|
|
190
|
-
* Compute the reframe yield needed to open `neededBand` of vertical space below
|
|
191
|
-
* the (clip-max) face keep-out for a required element. Precedence:
|
|
192
|
-
* 1. already enough band below → identity transform
|
|
193
|
-
* 2. reposition: raise the source so the keep-out leaves `neededBand` below it
|
|
194
|
-
* 3. zoom-out: shrink the subject (capped at MIN_ZOOM) to free vertical space
|
|
195
|
-
* 4. designed mat: a reserved band at the bottom (the render fills it with a
|
|
196
|
-
* designed treatment — NEVER a flat letterbox; forbidden as a frame-border
|
|
197
|
-
* pillarbox on 9:16/4:5).
|
|
198
|
-
*/
|
|
199
111
|
export declare function reframeYield(input: {
|
|
200
112
|
maxFaceKeepOut: Rect;
|
|
201
113
|
neededBand: number;
|
|
202
114
|
aspect: string;
|
|
203
115
|
}): ReframeAdjustment;
|
|
204
|
-
/**
|
|
205
|
-
* TOP-direction reframe-yield — open `neededBand` of vertical space ABOVE the
|
|
206
|
-
* face keep-out for a HERO caption that sits ABOVE the subject (the "STEAL"
|
|
207
|
-
* composition: subject low, big text in the headroom). Mirror of `reframeYield`
|
|
208
|
-
* but UP-direction:
|
|
209
|
-
* 1. already enough band above → identity
|
|
210
|
-
* 2. reposition: LOWER the subject (dy>0) so the keep-out's top leaves the band
|
|
211
|
-
* 3. zoom-out: shrink the subject (capped at MIN_ZOOM) to free the rest
|
|
212
|
-
* 4. INFEASIBLE → `null` (NEVER a designed mat — "no fake stuff", per the hero
|
|
213
|
-
* caption decision). The caller degrades to a readable FRONT caption when
|
|
214
|
-
* real headroom can't fit the band (e.g. the head is already frame-high).
|
|
215
|
-
* NOTE: operates in OUTPUT-frame keep-out coords like reframeYield; the SOURCE
|
|
216
|
-
* headroom check (whether the source actually has room above the head) belongs
|
|
217
|
-
* to the eligibility gate that feeds this — see captionsBehind eligibility.
|
|
218
|
-
*/
|
|
219
116
|
export declare function reframeYieldTop(input: {
|
|
220
117
|
maxFaceKeepOut: Rect;
|
|
221
118
|
neededBand: number;
|
|
222
119
|
aspect: string;
|
|
223
120
|
}): ReframeAdjustment | null;
|
|
224
|
-
/** Speaker silhouette width ÷ face KEEP-OUT width. Shoulders span ~2.2× the bare
|
|
225
|
-
* face; the keep-out already carries side padding (~1.5× the face), so the
|
|
226
|
-
* silhouette is ~1.5× the keep-out. Used to size the co-view crop. */
|
|
227
121
|
export declare const SILHOUETTE_TO_KEEPOUT_W = 1.5;
|
|
228
|
-
/** Co-view target: the speaker silhouette must occupy at most this fraction of
|
|
229
|
-
* the OUTPUT width, so a centred caption (~0.8 wide) extends past the body on
|
|
230
|
-
* both sides and reads WITH a body-bite (spec §12) instead of vanishing. At 0.45
|
|
231
|
-
* the body covers ~45% of the width → ~44% of the caption is visible (a clear
|
|
232
|
-
* readable bite, not just the stray ends) while keeping a comfortable medium
|
|
233
|
-
* shot. Lower = more caption shown but a smaller subject (pure aesthetic knob). */
|
|
234
122
|
export declare const COVIEW_MAX_SILHOUETTE_W = 0.45;
|
|
235
|
-
/**
|
|
236
|
-
* Reframe for CAPTIONS-BEHIND (co-view, depthMode). Unlike reframeYield (which
|
|
237
|
-
* opens a vertical band BELOW the face for a lower-third caption), the co-view
|
|
238
|
-
* caption sits CENTRED behind the speaker — so the constraint is LATERAL: the
|
|
239
|
-
* silhouette must be narrower than the caption or the body hides the whole line
|
|
240
|
-
* (the over-occlusion bug). Widen the crop (shrink the subject, face-scale<1,
|
|
241
|
-
* capped at MIN_ZOOM) until the silhouette fits COVIEW_MAX_SILHOUETTE_W. dy=0 —
|
|
242
|
-
* no vertical reposition; the caption is behind, not below.
|
|
243
|
-
*/
|
|
244
123
|
export declare function coViewReframe(maxFaceKeepOut: Rect): ReframeAdjustment;
|
|
245
124
|
export declare const MIN_ACTIVE_SPEAKER_PRESENCE = 0.6;
|
|
246
125
|
export declare const COVIEW_MIN_BAND_COVERAGE = 0.15;
|
|
@@ -250,20 +129,6 @@ export interface CaptionsBehindEligibility {
|
|
|
250
129
|
eligible: boolean;
|
|
251
130
|
reason: CaptionsBehindReason;
|
|
252
131
|
}
|
|
253
|
-
/**
|
|
254
|
-
* Pure eligibility gate for captions-behind-speaker. Evaluated AFTER the co-view
|
|
255
|
-
* reframe sizing (spec §22.2), so `activeBandCoverage` is the post-sizing
|
|
256
|
-
* occlusion of the caption band by the active speaker's silhouette.
|
|
257
|
-
*
|
|
258
|
-
* @param activeSpeakerPresenceFraction fraction of clip frames with ANY active
|
|
259
|
-
* speaker present (single or two-shot; not "single speaker"). Injected.
|
|
260
|
-
* @param activeBandCoverage mean fraction of the caption band the active
|
|
261
|
-
* speaker's silhouette occludes over its windows; `null` ⇒ NOT YET MEASURED
|
|
262
|
-
* (the bake-time coverage scalar is a follow-on) → the coverage gate is
|
|
263
|
-
* SKIPPED and presence + coViewReframe sizing gate instead. Injected like
|
|
264
|
-
* `LuminanceSummary` (bake/render-env), keeping this function pure.
|
|
265
|
-
* @param legible APCA decision (Lc ≥ CAPTION_LC_FLOOR) on the visible portion.
|
|
266
|
-
*/
|
|
267
132
|
export declare function captionsBehindEligible(input: {
|
|
268
133
|
activeSpeakerPresenceFraction: number;
|
|
269
134
|
activeBandCoverage: number | null;
|
|
@@ -279,26 +144,7 @@ interface Blockers {
|
|
|
279
144
|
faceKeepOut: Rect[];
|
|
280
145
|
safeZones: Rect[];
|
|
281
146
|
}
|
|
282
|
-
/**
|
|
283
|
-
* Place a full-width-ish horizontal band element (caption / lower-third) in the
|
|
284
|
-
* legal area. Two-zone model (spec §6.2): center-crossing blockers carve the
|
|
285
|
-
* legal vertical GAPS (1-D solve); side regions (rails) cap the horizontal
|
|
286
|
-
* CORRIDOR of the chosen band. Returns `null` when no legal vertical gap of
|
|
287
|
-
* `minH` fits, or when side rails squeeze the corridor below MIN_CAPTION_WIDTH.
|
|
288
|
-
* (Full 2-D packing for split/stacked layouts is spec §8 / a later plan.)
|
|
289
|
-
*/
|
|
290
147
|
export declare function placeInLegalArea(el: PlaceReq, b: Blockers): Rect | null;
|
|
291
|
-
/**
|
|
292
|
-
* The safe caption REGION for a destination — the floor's caption placement
|
|
293
|
-
* WITHOUT per-clip face context. The reframe handles faces per clip; the caption
|
|
294
|
-
* position itself is clip-independent (safe-zone-driven), so the GLOBAL caption
|
|
295
|
-
* layer renders into THIS band and it matches the per-clip floor's caption region
|
|
296
|
-
* (and its scrim) by construction — same placeInLegalArea, same safe zones.
|
|
297
|
-
*
|
|
298
|
-
* For a bottom/lower-third anchor the region's BOTTOM edge sits at the top of the
|
|
299
|
-
* platform's bottom-UI strip, so a caption rendered into it clears the chrome on
|
|
300
|
-
* any vertical surface (lookupSafeZones unions platforms when none is threaded).
|
|
301
|
-
*/
|
|
302
148
|
export declare function resolveCaptionRegion(input: {
|
|
303
149
|
aspect: string;
|
|
304
150
|
platform?: string;
|
|
@@ -308,17 +154,6 @@ export declare function resolveCaptionRegion(input: {
|
|
|
308
154
|
};
|
|
309
155
|
anchor?: Anchor;
|
|
310
156
|
}): Rect;
|
|
311
|
-
/**
|
|
312
|
-
* The region a code/graphic overlay (jsxSource) must render WITHIN — the largest
|
|
313
|
-
* band clear of the caption + platform safe zones (item #10: floor assigns the
|
|
314
|
-
* region, the jsx obeys). Keeps editorial graphics off the captions and the
|
|
315
|
-
* platform UI; the agent's jsx reads `params.region` (output fractions) for its
|
|
316
|
-
* bounds instead of hard-coding positions / full-frame useVideoConfig math.
|
|
317
|
-
*
|
|
318
|
-
* v1 is face-agnostic (clip-independent, like the caption band); per-clip
|
|
319
|
-
* face-aware overlay placement is a follow-up — the brief tells the agent the
|
|
320
|
-
* region may contain the speaker, so graphic elements should favour its edges.
|
|
321
|
-
*/
|
|
322
157
|
export declare function resolveOverlayRegion(input: {
|
|
323
158
|
aspect: string;
|
|
324
159
|
platform?: string;
|
|
@@ -328,22 +163,8 @@ export declare function resolveOverlayRegion(input: {
|
|
|
328
163
|
h: number;
|
|
329
164
|
};
|
|
330
165
|
}): Rect;
|
|
331
|
-
/**
|
|
332
|
-
* Decide the legibility remedy for text of `textColor` over a backdrop luminance
|
|
333
|
-
* summary. Real APCA (no proxy): the text's relative luminance vs each tile's
|
|
334
|
-
* luminance, reduced to the WORST tile. ≥ CAPTION_LC_FLOOR → no remedy; else the
|
|
335
|
-
* floor REQUESTS the cheapest always-legible remedy (`scrim`; the render makes it
|
|
336
|
-
* a designed blurred-glass/gradient, never a hard stroke — spec §14). The
|
|
337
|
-
* `lcTarget` is always the floor (the remedy must clear it).
|
|
338
|
-
*/
|
|
339
166
|
export declare function decideLegibility(backdrop: LuminanceSummary, textColor?: string): {
|
|
340
167
|
lcTarget: number;
|
|
341
168
|
remedy: LegibilityRemedy;
|
|
342
169
|
};
|
|
343
|
-
/**
|
|
344
|
-
* Resolve the composition floor for one clip. Linear, single-stage-per-clip, no
|
|
345
|
-
* feedback loop → deterministic. Never throws; required elements are never
|
|
346
|
-
* dropped (they get a forced designed-mat / lowest-gap placement), only
|
|
347
|
-
* non-required elements may drop (logged in diagnostics).
|
|
348
|
-
*/
|
|
349
170
|
export declare function resolveCompositionFloor(input: FloorInput): FloorEnvelope;
|
|
@@ -1,45 +1,21 @@
|
|
|
1
1
|
import type { TrajectoryData, TrajectorySegment } from "../reframe/trajectory.js";
|
|
2
2
|
import type { Rect, ReframeAdjustment, Subject } from "./composition-floor.js";
|
|
3
3
|
export declare const FRAME_ROUNDING_TOLERANCE = 2;
|
|
4
|
-
/**
|
|
5
|
-
* Resolve which trajectory segment (and index within it) a clip-relative source
|
|
6
|
-
* frame lands in. A frame within FRAME_ROUNDING_TOLERANCE of a segment edge
|
|
7
|
-
* clamps to the nearest edge; ANY larger gap FAILS LOUD (a real coverage/mapping
|
|
8
|
-
* bug — a cropIntent gap with no excludedRange, or a bad trim/section mapping —
|
|
9
|
-
* must not silently clamp onto the wrong frames).
|
|
10
|
-
*/
|
|
11
4
|
export declare function resolveSegmentAt(traj: TrajectoryData, srcFrame: number): {
|
|
12
5
|
seg: TrajectorySegment;
|
|
13
6
|
inSegIdx: number;
|
|
14
7
|
};
|
|
15
|
-
/** A playable span of the clip — one JumpCutVideo section. `sourceInFrames` is
|
|
16
|
-
* the SOURCE-ABSOLUTE frame (output fps) the span seeks to. */
|
|
17
8
|
export interface CropSection {
|
|
18
9
|
sourceInFrames: number;
|
|
19
10
|
durationInFrames: number;
|
|
20
11
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Map an OUTPUT frame to the CLIP-RELATIVE trajectory frame, section-aware. The
|
|
23
|
-
* trajectory is clip-relative (frame 0 = the clip's `trim.start`), but a clip
|
|
24
|
-
* with `excludedRanges` plays N playable spans, each seeking to a
|
|
25
|
-
* SOURCE-ABSOLUTE `sourceInFrames` with the trimmed gaps removed. So output
|
|
26
|
-
* frame F does NOT equal trajectory frame F; the section walk bridges the gaps.
|
|
27
|
-
*/
|
|
28
12
|
export declare function outputToTrajectoryFrame(sections: CropSection[], trimStartFrames: number, outFrame: number, srcFps: number, fps: number): number;
|
|
29
|
-
/** The per-frame crop-transform pieces `sourceRectToOutput` needs — the subset of
|
|
30
|
-
* `computeCropTransform`'s output that maps source pixels to output pixels. */
|
|
31
13
|
export interface CropTransform {
|
|
32
14
|
tx: number;
|
|
33
15
|
ty: number;
|
|
34
16
|
scaledSrcW: number;
|
|
35
17
|
scaledSrcH: number;
|
|
36
18
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Pure crop-transform math. Given the resolved per-frame center + crop params,
|
|
39
|
-
* the output dims, and the composition floor's reframe, returns the CSS
|
|
40
|
-
* transform (`tx`, `ty`, scaled source dims). `tyNoShift` is the y-translation
|
|
41
|
-
* WITHOUT the reframe, exposed so tests can assert magnitude.
|
|
42
|
-
*/
|
|
43
19
|
export declare function computeCropTransform(input: {
|
|
44
20
|
traj: {
|
|
45
21
|
src_w: number;
|
|
@@ -60,13 +36,6 @@ export declare function computeCropTransform(input: {
|
|
|
60
36
|
scaledSrcW: number;
|
|
61
37
|
scaledSrcH: number;
|
|
62
38
|
};
|
|
63
|
-
/**
|
|
64
|
-
* Map a SOURCE-normalized rect (`{x,y,w,h}` in [0,1] against source dims) to an
|
|
65
|
-
* OUTPUT-normalized rect, applying the per-frame crop — the `crop∘FaceBoxSource`
|
|
66
|
-
* the composition floor's `FaceBoxOutput` is defined as. NOT clamped: a face near
|
|
67
|
-
* the source edge can map partly off-frame, and that is the truth the floor needs
|
|
68
|
-
* (`faceKeepOut` clamps to [0,1] when it builds the keep-out).
|
|
69
|
-
*/
|
|
70
39
|
export declare function sourceRectToOutput(src: Rect, t: CropTransform, outW: number, outH: number): Rect;
|
|
71
40
|
export interface BuildSubjectsOutputArgs {
|
|
72
41
|
traj: TrajectoryData;
|
|
@@ -77,38 +46,12 @@ export interface BuildSubjectsOutputArgs {
|
|
|
77
46
|
outH: number;
|
|
78
47
|
fps: number;
|
|
79
48
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Build per-clip `Subject[]` with OUTPUT-space face boxes, accumulated by
|
|
82
|
-
* `face_id` across the clip's output frames — the projection loop factored out of
|
|
83
|
-
* the render's buildFloorInput so the Director derives IDENTICAL keep-outs. For
|
|
84
|
-
* each output frame: section-aware output→trajectory map → resolve segment →
|
|
85
|
-
* crop transform → project each source face box to output.
|
|
86
|
-
*/
|
|
87
49
|
export declare function buildSubjectsOutput(args: BuildSubjectsOutputArgs): Subject[];
|
|
88
|
-
/**
|
|
89
|
-
* The face keep-out rect(s) covering a beat window [startFrame, endFrame) in
|
|
90
|
-
* OUTPUT coords — for the structure-first graphics solver. Unions the
|
|
91
|
-
* speaker-active face keep-outs across the window into ONE bounding rect (so a
|
|
92
|
-
* graphic placed clear of it is clear of the face at EVERY frame of the beat).
|
|
93
|
-
* Empty when no face is present in the window (e.g. b-roll).
|
|
94
|
-
*/
|
|
95
50
|
export declare function faceKeepOutForWindow(subjects: Subject[], startFrame: number, endFrame: number, depthMode?: boolean): Rect[];
|
|
96
|
-
/**
|
|
97
|
-
* A SOURCE-space subject-silhouette provider: given a CLIP-RELATIVE source frame
|
|
98
|
-
* (frame 0 = the clip's trim.start, at src_fps), return the subject's silhouette
|
|
99
|
-
* bbox source-normalized [0,1] (`{x,y,w,h}`), or `null` when no subject is present
|
|
100
|
-
* that frame. The matte-geometry sidecar's per-frame foreground bbox is today's
|
|
101
|
-
* concrete provider (see the director's buildEvalSilhouette); a person-track union
|
|
102
|
-
* is a drop-in alternate. DECOUPLED from the crop on purpose: the SILHOUETTE comes
|
|
103
|
-
* from here; the CROP comes from `traj` (the render's reframe) — so the box lands
|
|
104
|
-
* exactly where the shipped render places the subject.
|
|
105
|
-
*/
|
|
106
51
|
export interface SubjectSilhouetteSource {
|
|
107
52
|
bboxAtSourceFrame: (srcFrame: number) => Rect | null;
|
|
108
53
|
}
|
|
109
54
|
export interface BuildSilhouetteKeepOutArgs {
|
|
110
|
-
/** The RENDER's reframe trajectory (FACE-derived — the SHIPPED crop). Its
|
|
111
|
-
* segments supply the per-frame crop transform; its `subjects` are unused. */
|
|
112
55
|
traj: TrajectoryData;
|
|
113
56
|
silhouette: SubjectSilhouetteSource;
|
|
114
57
|
sections: CropSection[];
|
|
@@ -118,23 +61,5 @@ export interface BuildSilhouetteKeepOutArgs {
|
|
|
118
61
|
outH: number;
|
|
119
62
|
fps: number;
|
|
120
63
|
}
|
|
121
|
-
/**
|
|
122
|
-
* Per-output-frame OUTPUT-space subject-SILHOUETTE keep-out — the silhouette twin
|
|
123
|
-
* of buildSubjectsOutput. For each output frame: section-aware output→trajectory
|
|
124
|
-
* map → resolve segment → crop transform (the SAME primitives buildSubjectsOutput
|
|
125
|
-
* uses for the FACE box) → project the source silhouette bbox supplied by the
|
|
126
|
-
* provider. `null` where the provider has no subject that frame. Unlike the face
|
|
127
|
-
* path this applies NO face-relative padding — the silhouette already includes
|
|
128
|
-
* hair/head/torso, so the projected box IS the keep-out. Off-crop overflow is
|
|
129
|
-
* clamped into the visible output frame [0,1] (the keep-out only concerns what is
|
|
130
|
-
* on screen).
|
|
131
|
-
*/
|
|
132
64
|
export declare function buildSilhouetteKeepOutOutput(args: BuildSilhouetteKeepOutArgs): (Rect | null)[];
|
|
133
|
-
/**
|
|
134
|
-
* Union the projected silhouette keep-out across a beat window [startFrame,
|
|
135
|
-
* endFrame) into ONE OUTPUT-space rect (so a graphic clear of it is clear of the
|
|
136
|
-
* subject at EVERY frame of the window) — the silhouette twin of
|
|
137
|
-
* faceKeepOutForWindow. Empty when no frame in the window carries a silhouette
|
|
138
|
-
* (degenerate zero-area rects are dropped).
|
|
139
|
-
*/
|
|
140
65
|
export declare function silhouetteKeepOutForWindow(series: (Rect | null)[], startFrame: number, endFrame: number): Rect[];
|
|
@@ -1,61 +1,24 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Occlusion budget for behind-subject text (launch-grade text-behind-subject,
|
|
3
|
-
* Phase 2). Pure decisions over matte geometry sidecar frames: estimate how much
|
|
4
|
-
* of a text rect the subject covers, then verdict the window — too little bite
|
|
5
|
-
* reads as no depth at all; too much swallows the line; a covered TOP half eats
|
|
6
|
-
* the letter tops that carry legibility. The caller (a director activity) maps
|
|
7
|
-
* timeline→source frames, samples K frames, and degrades the overlay to front
|
|
8
|
-
* on any non-pass verdict — the overlay is never dropped.
|
|
9
|
-
*/
|
|
10
1
|
import type { MatteGeometryFrame } from "./behind-placement.js";
|
|
11
|
-
/** Budget thresholds (frame-fraction coverage of the TEXT rect). Calibration
|
|
12
|
-
* defaults — Phase-7 fixtures tune them, the deploy-test is the truth.
|
|
13
|
-
* `minBite`: below this at EVERY sample the silhouette never bites the line —
|
|
14
|
-
* the depth effect is invisible, so don't pay its cost. `maxCoverage`: above
|
|
15
|
-
* this at ANY sample the body swallows the line. `maxTopHalf`: text-bearing
|
|
16
|
-
* overlays lose legibility when letter TOPS go under — cap the upper half. */
|
|
17
2
|
export declare const BUDGET: {
|
|
18
3
|
readonly minBite: 0.15;
|
|
19
4
|
readonly maxCoverage: 0.65;
|
|
20
5
|
readonly maxTopHalf: 0.35;
|
|
21
6
|
};
|
|
22
|
-
/** Behind hero text extent heuristic (calibration constants; Phase-7 fixtures tune). */
|
|
23
7
|
export declare const BEHIND_TEXT_EXTENT: {
|
|
24
8
|
readonly heightFrac: 0.18;
|
|
25
9
|
};
|
|
26
|
-
/** Coverage at one sampled geometry frame: `total` over the full text rect,
|
|
27
|
-
* `topHalf` over its upper half. Both ∈ [0,1]. */
|
|
28
10
|
export interface CoverageSample {
|
|
29
11
|
f: number;
|
|
30
12
|
total: number;
|
|
31
13
|
topHalf: number;
|
|
32
14
|
}
|
|
33
15
|
export type BudgetVerdict = "pass" | "no-depth" | "swallow" | "tops-occluded";
|
|
34
|
-
/**
|
|
35
|
-
* Verdict a window of coverage samples against the budget. Samples are checked
|
|
36
|
-
* in order; the FIRST violating sample decides (deterministic): a text-bearing
|
|
37
|
-
* overlay whose top half exceeds `maxTopHalf` → "tops-occluded"; any sample over
|
|
38
|
-
* `maxCoverage` → "swallow". If no sample violates but the maximum total never
|
|
39
|
-
* reaches `minBite` → "no-depth" (so is an empty window). Else "pass".
|
|
40
|
-
* `worstFrame` is the violating sample's frame for the two per-sample verdicts.
|
|
41
|
-
*/
|
|
42
16
|
export declare function evaluateOcclusionBudget(samples: CoverageSample[], opts?: {
|
|
43
17
|
textBearing: boolean;
|
|
44
18
|
}): {
|
|
45
19
|
verdict: BudgetVerdict;
|
|
46
20
|
worstFrame?: number;
|
|
47
21
|
};
|
|
48
|
-
/**
|
|
49
|
-
* Estimate matte coverage of a text rect from the sidecar's marginal profiles.
|
|
50
|
-
* APPROXIMATION (documented): overlap(textRect, bbox) area fraction, weighted by the
|
|
51
|
-
* mean col-bucket coverage across the intersected x-span (cols[i] = fraction of that
|
|
52
|
-
* column covered by the subject). topHalf uses the same estimate restricted to the
|
|
53
|
-
* text rect's upper half via the rows marginal weighting. Marginals can't give exact
|
|
54
|
-
* 2-D intersection — constants are calibrated against fixtures, and the deploy-test
|
|
55
|
-
* is the truth.
|
|
56
|
-
*
|
|
57
|
-
* All rects source-normalized [0,1]. A null bbox (no subject) → {0, 0}.
|
|
58
|
-
*/
|
|
59
22
|
export declare function estimateCoverage(textRect: {
|
|
60
23
|
x: number;
|
|
61
24
|
y: number;
|
|
@@ -1,68 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WHICH CLIPS WANT A CROP, AND DO WE HAVE WHAT IT TAKES — answered in the
|
|
3
|
-
* editor, from data the media row already carries.
|
|
4
|
-
*
|
|
5
|
-
* The sibling of `behind-readiness.ts`, one rung down the fidelity ladder. That
|
|
6
|
-
* module asks whether a SILHOUETTE exists so an overlay can go behind a person;
|
|
7
|
-
* this one asks whether a BOX TRACK exists so a clip can follow one. Same shape,
|
|
8
|
-
* same discipline, ~40× apart in what the answer costs.
|
|
9
|
-
*
|
|
10
|
-
* ── WHY IT EXISTS ───────────────────────────────────────────────────────────
|
|
11
|
-
* A follow-the-speaker reframe is authored in the editor and only takes effect
|
|
12
|
-
* at render, because the crop trajectory is derived from a SUBJECT TRACK the
|
|
13
|
-
* editor never asked for. So the editor showed an uncropped source while the
|
|
14
|
-
* render produced a moving crop — the "editor shows something the render will
|
|
15
|
-
* not honour" defect, in its second location. Deriving the trajectory locally
|
|
16
|
-
* fixes that, and the derive needs to find the right track first. That lookup
|
|
17
|
-
* is what this module is.
|
|
18
|
-
*
|
|
19
|
-
* ── IT IS ONLY WORTH ANYTHING IF IT AGREES WITH THE SERVER ──────────────────
|
|
20
|
-
* `reframeTargets` mirrors `collectTrajectoryDeriveJobs` (private
|
|
21
|
-
* `renders.ts`) — the walk the SHIP render uses to decide which clips derive a
|
|
22
|
-
* trajectory and at which window. `sourceWindowKey` mirrors `hashSourceWindow`
|
|
23
|
-
* (private `@cueframe/shared/variant-keys`) byte for byte; the golden fixtures
|
|
24
|
-
* in `__tests__/reframe-readiness.test.ts` are hashes taken from PRODUCTION
|
|
25
|
-
* rather than invented, for the same reason `behind-readiness`'s are.
|
|
26
|
-
*
|
|
27
|
-
* ── WHAT IT DELIBERATELY DOES NOT CHECK ─────────────────────────────────────
|
|
28
|
-
* The DETECTOR VERSION. The server skips a track whose `detectorVersion` is not
|
|
29
|
-
* the current `DETECTOR_VERSION`, and the app cannot ask that without a third,
|
|
30
|
-
* unguarded mirror of a string whose TS↔Python sync is already CI-guarded on
|
|
31
|
-
* both existing copies. So the editor derives off whatever track sits at the
|
|
32
|
-
* window. A version bump means the render re-detects and the framing shifts
|
|
33
|
-
* slightly — same subject, same authored intent, and far closer to the truth
|
|
34
|
-
* than showing an uncropped source. A decision, not an omission.
|
|
35
|
-
*/
|
|
36
|
-
/** A source window. Subject tracks key on this — the window, plus the producer
|
|
37
|
-
* when it is not the default face detector. Mirrors `SourceWindowLike`. */
|
|
38
1
|
export interface SourceWindowLike {
|
|
39
2
|
startSec: number;
|
|
40
3
|
endSec: number;
|
|
41
|
-
/**
|
|
42
|
-
* Which producer detected the track: 'face' (YuNet/SCRFD, the default) or
|
|
43
|
-
* 'person' (YOLO11x + BoT-SORT). Folded into the hash ONLY when it is not
|
|
44
|
-
* 'face', so existing face-track keys never churn and a person track for the
|
|
45
|
-
* same window gets a DISTINCT key instead of overwriting the face one.
|
|
46
|
-
*/
|
|
47
4
|
detector?: "face" | "person";
|
|
48
5
|
}
|
|
49
|
-
/** The fields this module reads off a `mediaItems.subjectTracks[hash]` entry. */
|
|
50
6
|
export interface SubjectTrackEntryLike {
|
|
51
|
-
/** R2 object key — the STABLE identity every server-side reader matches on. */
|
|
52
7
|
trackR2Key?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Presigned URL for that key, added ALONGSIDE it by `resolveR2Urls`. The row
|
|
55
|
-
* carries only a SUMMARY of the track (the face roster, a count); the
|
|
56
|
-
* per-frame boxes `deriveTrajectory` needs are the R2 object, so this is the
|
|
57
|
-
* one field that makes a client-side derive possible at all.
|
|
58
|
-
*/
|
|
59
8
|
trackUrl?: string;
|
|
60
9
|
detectorVersion?: string;
|
|
61
10
|
window?: {
|
|
62
11
|
startSec: number;
|
|
63
12
|
endSec: number;
|
|
64
13
|
};
|
|
65
|
-
/** The inline face roster — who is in this window, for a per-person picker. */
|
|
66
14
|
faces?: Array<{
|
|
67
15
|
faceId: string;
|
|
68
16
|
bbox: {
|
|
@@ -74,18 +22,7 @@ export interface SubjectTrackEntryLike {
|
|
|
74
22
|
speakingShare?: number;
|
|
75
23
|
}>;
|
|
76
24
|
}
|
|
77
|
-
/**
|
|
78
|
-
* Content-address a source window, byte-identically to the server's
|
|
79
|
-
* `hashSourceWindow`. Milliseconds-rounded so float jitter cannot miss a cached
|
|
80
|
-
* track; 12 hex chars. Async because `crypto.subtle` is — available in the
|
|
81
|
-
* webview and in Node alike.
|
|
82
|
-
*
|
|
83
|
-
* The detector is omitted from the canonical form when it is 'face', which is
|
|
84
|
-
* NOT a shortcut: it is what keeps every already-cached face-track key valid.
|
|
85
|
-
*/
|
|
86
25
|
export declare function sourceWindowKey(window: SourceWindowLike): Promise<string>;
|
|
87
|
-
/** A clip that has authored a reframe, and the window whose track answers for
|
|
88
|
-
* it. `segments` travels along because `deriveTrajectory` takes it verbatim. */
|
|
89
26
|
export interface ReframeTarget {
|
|
90
27
|
clipId: string;
|
|
91
28
|
mediaId: string;
|
|
@@ -93,64 +30,20 @@ export interface ReframeTarget {
|
|
|
93
30
|
startSec: number;
|
|
94
31
|
endSec: number;
|
|
95
32
|
};
|
|
96
|
-
/** The authored `source.reframe.segments`, untouched — the derive owns their
|
|
97
|
-
* shape, and re-typing it here would be a fourth place to keep in sync. */
|
|
98
33
|
segments: unknown[];
|
|
99
34
|
}
|
|
100
|
-
/**
|
|
101
|
-
* Does this reframe track a real subject? A geometric one (a screen-recording
|
|
102
|
-
* point-zoom, an honest center crop) needs nothing detected and must NEVER be
|
|
103
|
-
* handed a detection bill — nor be told it is waiting for one.
|
|
104
|
-
*/
|
|
105
35
|
export declare function reframeNeedsDetection(segments: unknown[]): boolean;
|
|
106
|
-
/**
|
|
107
|
-
* Every clip in the composition that has authored a reframe, with the source
|
|
108
|
-
* window its track is keyed by.
|
|
109
|
-
*
|
|
110
|
-
* MIRRORS `collectTrajectoryDeriveJobs`, including the two rules that are easy
|
|
111
|
-
* to get subtly wrong:
|
|
112
|
-
* · only VIDEO and IMAGE tracks (an audio clip is `kind:"media"` too, and a
|
|
113
|
-
* viewport crop is meaningless for sound)
|
|
114
|
-
* · the window is the SOURCE TRIM, defaulted exactly as `renders.ts` defaults
|
|
115
|
-
* it — `trim.start ?? 0`, `trim.end ?? start + clip.duration`
|
|
116
|
-
*
|
|
117
|
-
* Walked defensively with no zod, the `collectBehindWindows` convention, so it
|
|
118
|
-
* is safe in every bundle.
|
|
119
|
-
*/
|
|
120
36
|
export declare function reframeTargets(composition: unknown): ReframeTarget[];
|
|
121
|
-
|
|
122
|
-
* What the editor can say about one reframed clip.
|
|
123
|
-
*
|
|
124
|
-
* `geometric` is a distinct state and not a convenience: a point-zoom on a
|
|
125
|
-
* screen recording is fully derivable with no detection, so calling it
|
|
126
|
-
* "waiting for a track" would be a lie that also implies a charge.
|
|
127
|
-
*/
|
|
128
|
-
export type ReframeReadiness =
|
|
129
|
-
/** No detection needed — derives off a faceless stub, today, for free. */
|
|
130
|
-
{
|
|
37
|
+
export type ReframeReadiness = {
|
|
131
38
|
state: "geometric";
|
|
132
|
-
}
|
|
133
|
-
/** The track exists and can be fetched. */
|
|
134
|
-
| {
|
|
39
|
+
} | {
|
|
135
40
|
state: "track-ready";
|
|
136
41
|
entry: SubjectTrackEntryLike;
|
|
137
42
|
trackUrl: string;
|
|
138
|
-
}
|
|
139
|
-
/** A track is registered but carries no presigned URL, so the client cannot
|
|
140
|
-
* derive. The RENDER still can — it reads the key directly. */
|
|
141
|
-
| {
|
|
43
|
+
} | {
|
|
142
44
|
state: "track-unfetchable";
|
|
143
45
|
entry: SubjectTrackEntryLike;
|
|
144
|
-
}
|
|
145
|
-
/** Nothing detected at this window yet. This is the state that buys one. */
|
|
146
|
-
| {
|
|
46
|
+
} | {
|
|
147
47
|
state: "no-track";
|
|
148
48
|
};
|
|
149
|
-
/**
|
|
150
|
-
* Can the editor derive this clip's crop trajectory right now?
|
|
151
|
-
*
|
|
152
|
-
* `subjectTracks` is `mediaItems.subjectTracks` for the target's media, exactly
|
|
153
|
-
* as it arrives from Convex — undefined for an item with no cloud perception,
|
|
154
|
-
* which is the honest shape for a local-only import.
|
|
155
|
-
*/
|
|
156
49
|
export declare function reframeReadinessForTarget(target: ReframeTarget, subjectTracks: Record<string, SubjectTrackEntryLike> | undefined): Promise<ReframeReadiness>;
|