@cueframe/kernel 0.1.0 → 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/LICENSE +661 -0
- 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 +5 -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 +52 -0
- 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/index.d.ts +2 -0
- package/dist/_members/composition/projection/occlusion-budget.d.ts +0 -37
- package/dist/_members/composition/projection/reframe-readiness.d.ts +49 -0
- 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 +63 -529
- package/dist/_members/composition/validators/graphicKinds.d.ts +0 -28
- package/dist/_members/composition/validators/render.d.ts +55 -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 +2 -165
- 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 +4 -156
- 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 +16 -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-VOO5FQSS.js → chunk-BZZTVOGG.js} +6 -55
- package/dist/{chunk-ODL7GQJG.js → chunk-CAJQ7H5A.js} +17 -17
- package/dist/{chunk-ZB3C3HM7.js → chunk-DCVJWGIA.js} +4 -9
- package/dist/{chunk-IBYQG46O.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-XWKZB5U5.js → chunk-ICSZF37W.js} +21 -150
- 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-GEA7E2FL.js → chunk-PIURX6IZ.js} +220 -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-NFEGPWGS.js → chunk-TFGKUWHY.js} +1 -88
- package/dist/{chunk-LM4WDUQJ.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-COYMZ76S.js → chunk-VFMW3JUY.js} +1 -1
- package/dist/{chunk-YIOY2XEO.js → chunk-VHF66LCQ.js} +22 -94
- 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-JRQVPFLF.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 +28 -4
- 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 +8 -6
- package/dist/composition-ops.js +18 -135
- package/dist/composition.js +35 -9
- 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 +5 -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/testing.js +1071 -718
- package/dist/media-model.js +38 -6
- package/dist/nle-export/server.js +328 -130
- package/dist/nle-export.js +22 -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 +39 -24
- package/dist/_members/account-model/index.js +0 -4
- package/dist/_members/account-model/testing/conversationStoreContract.js +0 -168
- package/dist/_members/account-model/testing/index.js +0 -7
- package/dist/_members/account-model/testing/restorePointStoreContract.js +0 -69
- package/dist/_members/account-model/types/index.js +0 -1
- package/dist/_members/account-model/validators/contextFile.js +0 -18
- package/dist/_members/account-model/validators/conversation.js +0 -95
- package/dist/_members/account-model/validators/dashboardInsight.js +0 -16
- package/dist/_members/account-model/validators/index.js +0 -7
- package/dist/_members/account-model/validators/sessionToken.js +0 -49
- package/dist/_members/account-model/validators/uploadToken.js +0 -16
- package/dist/_members/account-model/validators/userSettings.js +0 -12
- package/dist/_members/account-model/validators/workingComposition.js +0 -20
- package/dist/_members/brand-derivation/constants.js +0 -20
- package/dist/_members/brand-derivation/contrastSafe.js +0 -114
- package/dist/_members/brand-derivation/index.js +0 -1
- package/dist/_members/cloud-import/chunk-XKO6ZSWI.js +0 -162
- package/dist/_members/cloud-import/chunk-XKO6ZSWI.js.map +0 -1
- package/dist/_members/cloud-import/index.js +0 -241
- package/dist/_members/cloud-import/index.js.map +0 -1
- package/dist/_members/cloud-import/multipartUpload.js +0 -7
- package/dist/_members/cloud-import/multipartUpload.js.map +0 -1
- package/dist/_members/composition/audio/audioMix.js +0 -61
- package/dist/_members/composition/audio/index.js +0 -5
- package/dist/_members/composition/audio/mixStaging.js +0 -195
- package/dist/_members/composition/audio/musicPack.generated.js +0 -136
- package/dist/_members/composition/audio/musicPack.js +0 -36
- package/dist/_members/composition/audio/pack.generated.js +0 -603
- package/dist/_members/composition/audio/pack.js +0 -48
- package/dist/_members/composition/audio/palette.js +0 -134
- package/dist/_members/composition/autozoom/index.js +0 -83
- package/dist/_members/composition/brand-kit.js +0 -45
- package/dist/_members/composition/brief/contract.js +0 -209
- package/dist/_members/composition/color-grade.js +0 -80
- package/dist/_members/composition/depth.js +0 -8
- package/dist/_members/composition/fixtures/index.js +0 -143
- package/dist/_members/composition/fixtures/vaayaErrored.d.ts +0 -25
- package/dist/_members/composition/fixtures/vaayaErrored.js +0 -203
- package/dist/_members/composition/fonts.js +0 -162
- package/dist/_members/composition/graphics-plan/compile.js +0 -221
- package/dist/_members/composition/graphics-plan/index.js +0 -10
- package/dist/_members/composition/graphics-plan/instantiateMotif.js +0 -44
- package/dist/_members/composition/graphics-plan/motion.js +0 -66
- package/dist/_members/composition/graphics-plan/schemas.js +0 -261
- package/dist/_members/composition/graphics-plan/solve.js +0 -145
- package/dist/_members/composition/index.js +0 -5
- package/dist/_members/composition/invariants/clipPlacement.js +0 -69
- package/dist/_members/composition/invariants/composition.js +0 -28
- package/dist/_members/composition/invariants/errors.js +0 -10
- package/dist/_members/composition/invariants/etag.js +0 -38
- package/dist/_members/composition/invariants/ids.js +0 -33
- package/dist/_members/composition/invariants/index.js +0 -9
- package/dist/_members/composition/invariants/keyframes.js +0 -45
- package/dist/_members/composition/invariants/markers.js +0 -29
- package/dist/_members/composition/invariants/time.js +0 -20
- package/dist/_members/composition/invariants/tracks.js +0 -304
- package/dist/_members/composition/ops/compositionOps.js +0 -1056
- package/dist/_members/composition/ops/headlessStore.js +0 -94
- package/dist/_members/composition/ops/index.js +0 -4
- package/dist/_members/composition/ops/selectors.js +0 -118
- package/dist/_members/composition/ops/timeline-word.js +0 -1
- package/dist/_members/composition/ops/transcript.js +0 -77
- package/dist/_members/composition/ops/types.js +0 -16
- package/dist/_members/composition/primitive-catalog/catalogQuery.js +0 -150
- package/dist/_members/composition/primitive-catalog/disabled.js +0 -32
- package/dist/_members/composition/primitive-catalog/generated/meta.js +0 -15161
- package/dist/_members/composition/primitive-catalog/index.js +0 -46
- package/dist/_members/composition/primitive-catalog/paramValidation.js +0 -231
- package/dist/_members/composition/primitive-catalog/projection.js +0 -164
- package/dist/_members/composition/primitive-catalog/types.js +0 -14
- package/dist/_members/composition/projection/behind-placement.js +0 -62
- package/dist/_members/composition/projection/brandKit.js +0 -482
- package/dist/_members/composition/projection/cardTokens.js +0 -209
- package/dist/_members/composition/projection/composition-floor.js +0 -582
- package/dist/_members/composition/projection/cropProjection.js +0 -257
- package/dist/_members/composition/projection/index.js +0 -7
- package/dist/_members/composition/projection/occlusion-budget.js +0 -104
- package/dist/_members/composition/projection/safe-zones.js +0 -99
- package/dist/_members/composition/reframe/aspectLoss.js +0 -115
- package/dist/_members/composition/reframe/coverage.js +0 -62
- package/dist/_members/composition/reframe/derive.js +0 -73
- package/dist/_members/composition/reframe/index.js +0 -109
- package/dist/_members/composition/reframe/kenBurns.js +0 -64
- package/dist/_members/composition/reframe/shotScale.js +0 -176
- package/dist/_members/composition/reframe/trajectory.js +0 -124
- package/dist/_members/composition/timeline/compound.js +0 -134
- package/dist/_members/composition/timeline/index.js +0 -9
- package/dist/_members/composition/timeline/intent.js +0 -228
- package/dist/_members/composition/timeline/keyframes.js +0 -121
- package/dist/_members/composition/timeline/link.js +0 -59
- package/dist/_members/composition/timeline/occupancy.js +0 -36
- package/dist/_members/composition/timeline/placement.js +0 -74
- package/dist/_members/composition/timeline/plan.js +0 -31
- package/dist/_members/composition/timeline/resolve.js +0 -170
- package/dist/_members/composition/timeline/trims.js +0 -278
- package/dist/_members/composition/types/index.js +0 -1
- package/dist/_members/composition/validators/brandKit.js +0 -295
- package/dist/_members/composition/validators/composePlan.js +0 -113
- package/dist/_members/composition/validators/composition.js +0 -703
- package/dist/_members/composition/validators/font.js +0 -34
- package/dist/_members/composition/validators/graphicKinds.js +0 -30
- package/dist/_members/composition/validators/index.js +0 -9
- package/dist/_members/composition/validators/project.js +0 -29
- package/dist/_members/composition/validators/registry.js +0 -41
- package/dist/_members/composition/validators/render.js +0 -139
- package/dist/_members/composition/validators/session.js +0 -37
- package/dist/_members/composition/validators/webhook.js +0 -72
- package/dist/_members/composition-ops/alphaLayers.js +0 -141
- package/dist/_members/composition-ops/index.js +0 -637
- package/dist/_members/composition-ops/materializeGrid.js +0 -99
- package/dist/_members/composition-ops/opRecorder.js +0 -196
- package/dist/_members/composition-ops/recordingStore.js +0 -14
- package/dist/_members/composition-ops/replaceRegion.js +0 -102
- package/dist/_members/composition-ops/testFixtures.js +0 -19
- package/dist/_members/core/index.js +0 -5
- package/dist/_members/core/render/bookends.js +0 -53
- package/dist/_members/core/render/captions.js +0 -127
- package/dist/_members/core/render/compositionRender.js +0 -1249
- package/dist/_members/core/render/deriveTrajectory.js +0 -889
- package/dist/_members/core/render/emphasis.js +0 -16
- package/dist/_members/core/render/eval/cropBox.js +0 -139
- package/dist/_members/core/render/eval/inclusion.js +0 -96
- package/dist/_members/core/render/eval/index.js +0 -146
- package/dist/_members/core/render/eval/metrics.js +0 -94
- package/dist/_members/core/render/exportSettings.js +0 -65
- package/dist/_members/core/render/index.js +0 -20
- package/dist/_members/core/render/mapFaceToPerson.js +0 -73
- package/dist/_members/core/render/types.js +0 -8
- package/dist/_members/core/render/vcam/cameraPath.js +0 -248
- package/dist/_members/core/render/vcam/constants.js +0 -115
- package/dist/_members/core/render/vcam/errorCodes.js +0 -39
- package/dist/_members/core/render/vcam/framing.js +0 -136
- package/dist/_members/core/render/vcam/requiredRegion.js +0 -137
- package/dist/_members/core/render/vcam/shots.js +0 -53
- package/dist/_members/core/render/vcam/subjectSet.js +0 -388
- package/dist/_members/core/select/errorCodes.js +0 -38
- package/dist/_members/core/select/index.js +0 -26
- package/dist/_members/core/select/model.js +0 -18
- package/dist/_members/core/select/select.js +0 -244
- package/dist/_members/core/select/stabilize.js +0 -242
- package/dist/_members/core/types.js +0 -7
- package/dist/_members/errors/index.js +0 -1
- package/dist/_members/errors/registry.js +0 -560
- package/dist/_members/foundation/codes/index.js +0 -31
- package/dist/_members/foundation/index.js +0 -2
- package/dist/_members/foundation/primitives/index.js +0 -5
- package/dist/_members/mcp/adapter.js +0 -771
- package/dist/_members/mcp/burnedNames.js +0 -73
- package/dist/_members/mcp/core.js +0 -390
- package/dist/_members/mcp/curation.js +0 -792
- package/dist/_members/mcp/executor.js +0 -142
- package/dist/_members/mcp/format.js +0 -9
- package/dist/_members/mcp/generated/catalogPreviews.js +0 -95
- package/dist/_members/mcp/generated/harness.js +0 -81
- package/dist/_members/mcp/generated/operations.js +0 -131
- package/dist/_members/mcp/index.js +0 -50
- package/dist/_members/mcp/internalLoopTools.js +0 -109
- package/dist/_members/mcp/prompts.js +0 -45
- package/dist/_members/mcp/resources.js +0 -166
- package/dist/_members/mcp/server.js +0 -340
- package/dist/_members/mcp/wait.js +0 -378
- package/dist/_members/mcp/x402Meta.js +0 -66
- package/dist/_members/media-model/api.js +0 -175
- package/dist/_members/media-model/index.js +0 -1
- package/dist/_members/media-model/media-kind.js +0 -116
- package/dist/_members/media-model/testing/index.js +0 -1
- package/dist/_members/media-model/testing/mediaStoreContract.js +0 -82
- package/dist/_members/media-model/transcriptSearch.js +0 -70
- package/dist/_members/media-model/transcriptSearchCases.json +0 -79
- package/dist/_members/nle-export/compact-timeline.js +0 -73
- package/dist/_members/nle-export/compact-timeline.js.map +0 -1
- package/dist/_members/nle-export/composition-to-input.js +0 -147
- package/dist/_members/nle-export/composition-to-input.js.map +0 -1
- package/dist/_members/nle-export/fcpxml.js +0 -159
- package/dist/_members/nle-export/fcpxml.js.map +0 -1
- package/dist/_members/nle-export/index.js +0 -12
- package/dist/_members/nle-export/index.js.map +0 -1
- package/dist/_members/nle-export/premiere.js +0 -161
- package/dist/_members/nle-export/premiere.js.map +0 -1
- package/dist/_members/nle-export/server/index.js +0 -2
- package/dist/_members/nle-export/server/index.js.map +0 -1
- package/dist/_members/nle-export/server/pack-zip.js +0 -38
- package/dist/_members/nle-export/server/pack-zip.js.map +0 -1
- package/dist/_members/nle-export/srt.js +0 -50
- package/dist/_members/nle-export/srt.js.map +0 -1
- package/dist/_members/nle-export/types.js +0 -9
- package/dist/_members/nle-export/types.js.map +0 -1
- package/dist/_members/nle-export/xml/index.js +0 -11
- package/dist/_members/nle-export/xml/index.js.map +0 -1
- package/dist/_members/nle-export/xml-utils.js +0 -48
- package/dist/_members/nle-export/xml-utils.js.map +0 -1
- package/dist/_members/perception/activeSpeaker.js +0 -103
- package/dist/_members/perception/audioQuality.js +0 -76
- package/dist/_members/perception/energyBeat.js +0 -99
- package/dist/_members/perception/identityMatch.js +0 -91
- package/dist/_members/perception/index.js +0 -48
- package/dist/_members/perception/visualQuality.js +0 -95
- package/dist/_members/plane/conformance.js +0 -90
- package/dist/_members/plane/contract.js +0 -49
- package/dist/_members/plane/index.js +0 -16
- package/dist/_members/primitives/backgrounds/index.js +0 -32
- package/dist/_members/primitives/backgrounds/index.js.map +0 -1
- package/dist/_members/primitives/captions/index.js +0 -398
- package/dist/_members/primitives/captions/index.js.map +0 -1
- package/dist/_members/primitives/chunk-2LVE4UIT.js +0 -139
- package/dist/_members/primitives/chunk-2LVE4UIT.js.map +0 -1
- package/dist/_members/primitives/chunk-3IQUH6KK.js +0 -20
- package/dist/_members/primitives/chunk-3IQUH6KK.js.map +0 -1
- package/dist/_members/primitives/chunk-3OMURV6Q.js +0 -112
- package/dist/_members/primitives/chunk-3OMURV6Q.js.map +0 -1
- package/dist/_members/primitives/chunk-4IS6TMEG.js +0 -21
- package/dist/_members/primitives/chunk-4IS6TMEG.js.map +0 -1
- package/dist/_members/primitives/chunk-5MWGAEGQ.js +0 -1644
- package/dist/_members/primitives/chunk-5MWGAEGQ.js.map +0 -1
- package/dist/_members/primitives/chunk-7RRPFPQK.js +0 -15
- package/dist/_members/primitives/chunk-7RRPFPQK.js.map +0 -1
- package/dist/_members/primitives/chunk-DH5TRZK2.js +0 -125
- package/dist/_members/primitives/chunk-DH5TRZK2.js.map +0 -1
- package/dist/_members/primitives/chunk-E3KNUSFG.js +0 -2337
- package/dist/_members/primitives/chunk-E3KNUSFG.js.map +0 -1
- package/dist/_members/primitives/chunk-G2B3G4HK.js +0 -47
- package/dist/_members/primitives/chunk-G2B3G4HK.js.map +0 -1
- package/dist/_members/primitives/chunk-HFPFGZXT.js +0 -1494
- package/dist/_members/primitives/chunk-HFPFGZXT.js.map +0 -1
- package/dist/_members/primitives/chunk-HIWVFZVH.js +0 -19
- package/dist/_members/primitives/chunk-HIWVFZVH.js.map +0 -1
- package/dist/_members/primitives/chunk-IDAL6G3Y.js +0 -134
- package/dist/_members/primitives/chunk-IDAL6G3Y.js.map +0 -1
- package/dist/_members/primitives/chunk-KNC6JP5F.js +0 -34
- package/dist/_members/primitives/chunk-KNC6JP5F.js.map +0 -1
- package/dist/_members/primitives/chunk-KYRDVZST.js +0 -459
- package/dist/_members/primitives/chunk-KYRDVZST.js.map +0 -1
- package/dist/_members/primitives/chunk-LWLHS2NS.js +0 -3410
- package/dist/_members/primitives/chunk-LWLHS2NS.js.map +0 -1
- package/dist/_members/primitives/chunk-QAQ3P7DR.js +0 -8855
- package/dist/_members/primitives/chunk-QAQ3P7DR.js.map +0 -1
- package/dist/_members/primitives/chunk-ROV2ODWC.js +0 -81
- package/dist/_members/primitives/chunk-ROV2ODWC.js.map +0 -1
- package/dist/_members/primitives/chunk-TCRC2FH3.js +0 -183
- package/dist/_members/primitives/chunk-TCRC2FH3.js.map +0 -1
- package/dist/_members/primitives/chunk-US4YEDAA.js +0 -96
- package/dist/_members/primitives/chunk-US4YEDAA.js.map +0 -1
- package/dist/_members/primitives/chunk-UVKRO5ER.js +0 -13
- package/dist/_members/primitives/chunk-UVKRO5ER.js.map +0 -1
- package/dist/_members/primitives/chunk-W4EIIF2I.js +0 -10
- package/dist/_members/primitives/chunk-W4EIIF2I.js.map +0 -1
- package/dist/_members/primitives/chunk-WPGKIPCO.js +0 -3563
- package/dist/_members/primitives/chunk-WPGKIPCO.js.map +0 -1
- package/dist/_members/primitives/chunk-WZFLEGMD.js +0 -1435
- package/dist/_members/primitives/chunk-WZFLEGMD.js.map +0 -1
- package/dist/_members/primitives/chunk-XHU3WBEI.js +0 -33
- package/dist/_members/primitives/chunk-XHU3WBEI.js.map +0 -1
- package/dist/_members/primitives/chunk-YN7WTZZ7.js +0 -46
- package/dist/_members/primitives/chunk-YN7WTZZ7.js.map +0 -1
- package/dist/_members/primitives/effects/index.js +0 -30
- package/dist/_members/primitives/effects/index.js.map +0 -1
- package/dist/_members/primitives/hero-text/index.js +0 -14
- package/dist/_members/primitives/hero-text/index.js.map +0 -1
- package/dist/_members/primitives/index.js +0 -64
- package/dist/_members/primitives/index.js.map +0 -1
- package/dist/_members/primitives/layouts/index.js +0 -24
- package/dist/_members/primitives/layouts/index.js.map +0 -1
- package/dist/_members/primitives/lib/easings.js +0 -26
- package/dist/_members/primitives/lib/easings.js.map +0 -1
- package/dist/_members/primitives/lib/index.js +0 -74
- package/dist/_members/primitives/lib/index.js.map +0 -1
- package/dist/_members/primitives/lib/palette.js +0 -72
- package/dist/_members/primitives/lib/palette.js.map +0 -1
- package/dist/_members/primitives/lib/preview.js +0 -8
- package/dist/_members/primitives/lib/preview.js.map +0 -1
- package/dist/_members/primitives/lib/schema.js +0 -12
- package/dist/_members/primitives/lib/schema.js.map +0 -1
- package/dist/_members/primitives/lib/seeded-random.js +0 -14
- package/dist/_members/primitives/lib/seeded-random.js.map +0 -1
- package/dist/_members/primitives/lib/text/contrast.js +0 -12
- package/dist/_members/primitives/lib/text/contrast.js.map +0 -1
- package/dist/_members/primitives/lib/text/fill.js +0 -8
- package/dist/_members/primitives/lib/text/fill.js.map +0 -1
- package/dist/_members/primitives/lib/text/fitText.js +0 -10
- package/dist/_members/primitives/lib/text/fitText.js.map +0 -1
- package/dist/_members/primitives/lib/text/marker.js +0 -8
- package/dist/_members/primitives/lib/text/marker.js.map +0 -1
- package/dist/_members/primitives/lib/text/motion.js +0 -16
- package/dist/_members/primitives/lib/text/motion.js.map +0 -1
- package/dist/_members/primitives/lib/text/recolor.js +0 -8
- package/dist/_members/primitives/lib/text/recolor.js.map +0 -1
- package/dist/_members/primitives/lib/text/spec.js +0 -1
- package/dist/_members/primitives/lib/text/spec.js.map +0 -1
- package/dist/_members/primitives/lib/text/stage.js +0 -8
- package/dist/_members/primitives/lib/text/stage.js.map +0 -1
- package/dist/_members/primitives/lib/text/typeface.js +0 -8
- package/dist/_members/primitives/lib/text/typeface.js.map +0 -1
- package/dist/_members/primitives/lib/tokens.js +0 -24
- package/dist/_members/primitives/lib/tokens.js.map +0 -1
- package/dist/_members/primitives/lib/types.js +0 -1
- package/dist/_members/primitives/lib/types.js.map +0 -1
- package/dist/_members/primitives/params-required.json +0 -153
- package/dist/_members/primitives/scenes/index.js +0 -25
- package/dist/_members/primitives/scenes/index.js.map +0 -1
- package/dist/_members/primitives/subject-foreground/index.js +0 -30
- package/dist/_members/primitives/subject-foreground/index.js.map +0 -1
- package/dist/_members/primitives/text/index.js +0 -57
- package/dist/_members/primitives/text/index.js.map +0 -1
- package/dist/_members/primitives/transitions/index.js +0 -67
- package/dist/_members/primitives/transitions/index.js.map +0 -1
- package/dist/_members/primitives/ui-blocks/index.js +0 -76
- package/dist/_members/primitives/ui-blocks/index.js.map +0 -1
- package/dist/_members/primitives/version-map.json +0 -105
- package/dist/_members/primitives/workspace.js +0 -60
- package/dist/_members/primitives/workspace.js.map +0 -1
- package/dist/chunk-37NJ27UU.js +0 -501
- package/dist/chunk-6EQXLEP6.js +0 -194
- package/dist/chunk-MXFAADCQ.js +0 -735
- package/dist/context-OKX3HHFS.js +0 -14
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crop→output projection — the SINGLE SOURCE OF TRUTH for mapping source-space
|
|
3
|
-
* trajectory/face geometry into OUTPUT (post-crop) coordinates. Previously these
|
|
4
|
-
* primitives lived in the Remotion app layer (packages/execution/render-entry/src/
|
|
5
|
-
* CropFromTrajectory.tsx + floor/sourceToOutput.ts); lifted here so BOTH the
|
|
6
|
-
* render path (buildFloorInput, CropFromTrajectory) AND the Director activity
|
|
7
|
-
* (structure-first graphics keep-outs) derive output geometry from ONE copy —
|
|
8
|
-
* no duplication, no approximation.
|
|
9
|
-
*
|
|
10
|
-
* All functions are pure math (no React/Remotion). The section-aware
|
|
11
|
-
* output→trajectory map + fail-loud coverage checks are preserved verbatim.
|
|
12
|
-
*/
|
|
13
|
-
import { CueframeError, encodeError } from "@cueframe/errors";
|
|
14
|
-
import { activeFaceKeepOutSeries, boundingBox } from "./composition-floor";
|
|
15
|
-
// Max fps-conversion rounding error at a segment seam: round(sec*srcFps) on the
|
|
16
|
-
// segment edge vs round(...*srcFps/fps) in the frame map can disagree by ~1
|
|
17
|
-
// frame; 2 is that bound plus one frame of safety. NOT a tunable behavior knob.
|
|
18
|
-
export const FRAME_ROUNDING_TOLERANCE = 2;
|
|
19
|
-
/**
|
|
20
|
-
* Resolve which trajectory segment (and index within it) a clip-relative source
|
|
21
|
-
* frame lands in. A frame within FRAME_ROUNDING_TOLERANCE of a segment edge
|
|
22
|
-
* clamps to the nearest edge; ANY larger gap FAILS LOUD (a real coverage/mapping
|
|
23
|
-
* bug — a cropIntent gap with no excludedRange, or a bad trim/section mapping —
|
|
24
|
-
* must not silently clamp onto the wrong frames).
|
|
25
|
-
*/
|
|
26
|
-
export function resolveSegmentAt(traj, srcFrame) {
|
|
27
|
-
for (const seg of traj.segments) {
|
|
28
|
-
const segStartFrame = Math.round(seg.start_sec * traj.src_fps);
|
|
29
|
-
const segEndFrame = Math.round(seg.end_sec * traj.src_fps);
|
|
30
|
-
if (srcFrame >= segStartFrame && srcFrame < segEndFrame) {
|
|
31
|
-
const inSegIdx = Math.max(0, Math.min(srcFrame - segStartFrame, seg.centers.length - 1));
|
|
32
|
-
return { seg, inSegIdx };
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (traj.segments.length === 0) {
|
|
36
|
-
throw new Error(encodeError(new CueframeError('trajectory_unresolved', 'trajectory has no segments')));
|
|
37
|
-
}
|
|
38
|
-
// Out of every segment: find the nearest edge + its distance.
|
|
39
|
-
let best = traj.segments[0];
|
|
40
|
-
let bestInIdx = 0;
|
|
41
|
-
let bestDist = Infinity;
|
|
42
|
-
for (const seg of traj.segments) {
|
|
43
|
-
const a = Math.round(seg.start_sec * traj.src_fps);
|
|
44
|
-
const b = Math.round(seg.end_sec * traj.src_fps);
|
|
45
|
-
const before = srcFrame < a;
|
|
46
|
-
const dist = before ? a - srcFrame : srcFrame - (b - 1);
|
|
47
|
-
if (dist < bestDist) {
|
|
48
|
-
bestDist = dist;
|
|
49
|
-
best = seg;
|
|
50
|
-
bestInIdx = before ? 0 : Math.max(0, seg.centers.length - 1);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (bestDist > FRAME_ROUNDING_TOLERANCE) {
|
|
54
|
-
throw new Error(encodeError(new CueframeError('trajectory_coverage_gap', `srcFrame ${srcFrame} is ${bestDist} frames outside every trajectory segment ` +
|
|
55
|
-
`(nearest [${best.start_sec.toFixed(2)}–${best.end_sec.toFixed(2)}s]). A coverage/` +
|
|
56
|
-
`mapping bug (a cropIntent gap with no excludedRange, or an output→trajectory frame ` +
|
|
57
|
-
`mismatch) — refusing to silently clamp a crop onto the wrong frames.`, { srcFrame, gapFrames: bestDist, nearest: [best.start_sec, best.end_sec] })));
|
|
58
|
-
}
|
|
59
|
-
// Within rounding slack of an edge → clamp (legitimate seam rounding).
|
|
60
|
-
return { seg: best, inSegIdx: Math.max(0, Math.min(bestInIdx, best.centers.length - 1)) };
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Map an OUTPUT frame to the CLIP-RELATIVE trajectory frame, section-aware. The
|
|
64
|
-
* trajectory is clip-relative (frame 0 = the clip's `trim.start`), but a clip
|
|
65
|
-
* with `excludedRanges` plays N playable spans, each seeking to a
|
|
66
|
-
* SOURCE-ABSOLUTE `sourceInFrames` with the trimmed gaps removed. So output
|
|
67
|
-
* frame F does NOT equal trajectory frame F; the section walk bridges the gaps.
|
|
68
|
-
*/
|
|
69
|
-
export function outputToTrajectoryFrame(sections, trimStartFrames, outFrame, srcFps, fps) {
|
|
70
|
-
let cum = 0;
|
|
71
|
-
for (const s of sections) {
|
|
72
|
-
if (outFrame < cum + s.durationInFrames) {
|
|
73
|
-
const clipFramesAtFps = s.sourceInFrames - trimStartFrames + (outFrame - cum);
|
|
74
|
-
return Math.round((clipFramesAtFps * srcFps) / fps);
|
|
75
|
-
}
|
|
76
|
-
cum += s.durationInFrames;
|
|
77
|
-
}
|
|
78
|
-
// Tail rounding overrun (±1-frame seam at the very end) — the sections tile the
|
|
79
|
-
// whole output by construction; clamp to the last span's final played frame.
|
|
80
|
-
const last = sections[sections.length - 1];
|
|
81
|
-
const clipFramesAtFps = last.sourceInFrames - trimStartFrames + (last.durationInFrames - 1);
|
|
82
|
-
return Math.round((clipFramesAtFps * srcFps) / fps);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Pure crop-transform math. Given the resolved per-frame center + crop params,
|
|
86
|
-
* the output dims, and the composition floor's reframe, returns the CSS
|
|
87
|
-
* transform (`tx`, `ty`, scaled source dims). `tyNoShift` is the y-translation
|
|
88
|
-
* WITHOUT the reframe, exposed so tests can assert magnitude.
|
|
89
|
-
*/
|
|
90
|
-
export function computeCropTransform(input) {
|
|
91
|
-
const { traj, outW, outH, cx, cy, zoomScale, verticalBias, lateralBias, reframe = { kind: 'transform', dy: 0, zoom: 1 }, } = input;
|
|
92
|
-
const reframeDy = reframe.kind === 'transform' ? reframe.dy : 0;
|
|
93
|
-
const faceScale = reframe.kind === 'transform' ? reframe.zoom : 1;
|
|
94
|
-
// Crop window dimensions in source coords (largest output-aspect rect that fits
|
|
95
|
-
// the source, scaled by zoom). zoom_scale<1.0 shrinks (= more zoom).
|
|
96
|
-
const outAR = outW / outH;
|
|
97
|
-
const srcAR = traj.src_w / traj.src_h;
|
|
98
|
-
let cropW;
|
|
99
|
-
let cropH;
|
|
100
|
-
if (srcAR > outAR) {
|
|
101
|
-
cropH = traj.src_h;
|
|
102
|
-
cropW = traj.src_h * outAR;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
cropW = traj.src_w;
|
|
106
|
-
cropH = traj.src_w / outAR;
|
|
107
|
-
}
|
|
108
|
-
const bakedZoom = Math.max(0.4, Math.min(1.0, zoomScale));
|
|
109
|
-
const effectiveZoom = Math.min(1.0, bakedZoom / Math.max(faceScale, 0.01));
|
|
110
|
-
cropW *= effectiveZoom;
|
|
111
|
-
cropH *= effectiveZoom;
|
|
112
|
-
// Scale source uniformly so crop window = output dimensions.
|
|
113
|
-
const scale = outW / cropW;
|
|
114
|
-
const scaledSrcW = traj.src_w * scale;
|
|
115
|
-
const scaledSrcH = traj.src_h * scale;
|
|
116
|
-
// Translate so the crop center sits at the output center, with bias applied in
|
|
117
|
-
// crop-window units (matches the bake's center+bias math).
|
|
118
|
-
const biasXPx = cropW * lateralBias * scale;
|
|
119
|
-
const biasYPx = cropH * verticalBias * scale;
|
|
120
|
-
const txRaw = outW / 2 - cx * scaledSrcW + biasXPx;
|
|
121
|
-
const tyNoShift = outH / 2 - cy * scaledSrcH + biasYPx;
|
|
122
|
-
// Reframe-yield: slide the source by dy·outH (dy<0 raises the subject).
|
|
123
|
-
const tyRaw = tyNoShift + reframeDy * outH;
|
|
124
|
-
// Coverage clamp — the scaled source must ALWAYS cover the output canvas (no
|
|
125
|
-
// black edge). A GEOMETRIC INVARIANT (cx/cy are raw face centroids).
|
|
126
|
-
const tx = Math.min(0, Math.max(outW - scaledSrcW, txRaw));
|
|
127
|
-
const ty = Math.min(0, Math.max(outH - scaledSrcH, tyRaw));
|
|
128
|
-
return { tx, ty, tyNoShift, scaledSrcW, scaledSrcH };
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Map a SOURCE-normalized rect (`{x,y,w,h}` in [0,1] against source dims) to an
|
|
132
|
-
* OUTPUT-normalized rect, applying the per-frame crop — the `crop∘FaceBoxSource`
|
|
133
|
-
* the composition floor's `FaceBoxOutput` is defined as. NOT clamped: a face near
|
|
134
|
-
* the source edge can map partly off-frame, and that is the truth the floor needs
|
|
135
|
-
* (`faceKeepOut` clamps to [0,1] when it builds the keep-out).
|
|
136
|
-
*/
|
|
137
|
-
export function sourceRectToOutput(src, t, outW, outH) {
|
|
138
|
-
return {
|
|
139
|
-
x: (t.tx + src.x * t.scaledSrcW) / outW,
|
|
140
|
-
y: (t.ty + src.y * t.scaledSrcH) / outH,
|
|
141
|
-
w: (src.w * t.scaledSrcW) / outW,
|
|
142
|
-
h: (src.h * t.scaledSrcH) / outH,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Build per-clip `Subject[]` with OUTPUT-space face boxes, accumulated by
|
|
147
|
-
* `face_id` across the clip's output frames — the projection loop factored out of
|
|
148
|
-
* the render's buildFloorInput so the Director derives IDENTICAL keep-outs. For
|
|
149
|
-
* each output frame: section-aware output→trajectory map → resolve segment →
|
|
150
|
-
* crop transform → project each source face box to output.
|
|
151
|
-
*/
|
|
152
|
-
export function buildSubjectsOutput(args) {
|
|
153
|
-
const { traj, sections, trimStartFrames, durationInFrames, outW, outH, fps } = args;
|
|
154
|
-
const series = new Map();
|
|
155
|
-
const activeBySubject = new Map();
|
|
156
|
-
const order = [];
|
|
157
|
-
const emptySeries = () => Array(durationInFrames).fill(null);
|
|
158
|
-
for (let f = 0; f < durationInFrames; f++) {
|
|
159
|
-
const srcFrame = outputToTrajectoryFrame(sections, trimStartFrames, f, traj.src_fps, fps);
|
|
160
|
-
const { seg, inSegIdx } = resolveSegmentAt(traj, srcFrame);
|
|
161
|
-
const [cx, cy] = seg.centers[inSegIdx];
|
|
162
|
-
const transform = computeCropTransform({
|
|
163
|
-
traj: { src_w: traj.src_w, src_h: traj.src_h },
|
|
164
|
-
outW,
|
|
165
|
-
outH,
|
|
166
|
-
cx,
|
|
167
|
-
cy,
|
|
168
|
-
zoomScale: seg.zoom_scale,
|
|
169
|
-
verticalBias: seg.vertical_bias,
|
|
170
|
-
lateralBias: seg.lateral_bias,
|
|
171
|
-
});
|
|
172
|
-
for (const subj of seg.subjects) {
|
|
173
|
-
if (!series.has(subj.face_id)) {
|
|
174
|
-
series.set(subj.face_id, emptySeries());
|
|
175
|
-
activeBySubject.set(subj.face_id, subj.active_windows ?? []);
|
|
176
|
-
order.push(subj.face_id);
|
|
177
|
-
}
|
|
178
|
-
const srcBox = subj.face_box_series[inSegIdx];
|
|
179
|
-
if (!srcBox)
|
|
180
|
-
continue;
|
|
181
|
-
const [x, y, w, h] = srcBox;
|
|
182
|
-
series.get(subj.face_id)[f] = sourceRectToOutput({ x, y, w, h }, transform, outW, outH);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return order.map((id) => ({
|
|
186
|
-
id,
|
|
187
|
-
faceBoxSeries: series.get(id),
|
|
188
|
-
activeWindows: (activeBySubject.get(id) ?? []).map(([startFrame, endFrame]) => ({ startFrame, endFrame })),
|
|
189
|
-
}));
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* The face keep-out rect(s) covering a beat window [startFrame, endFrame) in
|
|
193
|
-
* OUTPUT coords — for the structure-first graphics solver. Unions the
|
|
194
|
-
* speaker-active face keep-outs across the window into ONE bounding rect (so a
|
|
195
|
-
* graphic placed clear of it is clear of the face at EVERY frame of the beat).
|
|
196
|
-
* Empty when no face is present in the window (e.g. b-roll).
|
|
197
|
-
*/
|
|
198
|
-
export function faceKeepOutForWindow(subjects, startFrame, endFrame, depthMode = false) {
|
|
199
|
-
const series = activeFaceKeepOutSeries(subjects, depthMode);
|
|
200
|
-
const inWindow = series
|
|
201
|
-
.slice(Math.max(0, startFrame), Math.max(0, endFrame))
|
|
202
|
-
.filter((r) => r != null);
|
|
203
|
-
return inWindow.length ? [boundingBox(inWindow)] : [];
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Per-output-frame OUTPUT-space subject-SILHOUETTE keep-out — the silhouette twin
|
|
207
|
-
* of buildSubjectsOutput. For each output frame: section-aware output→trajectory
|
|
208
|
-
* map → resolve segment → crop transform (the SAME primitives buildSubjectsOutput
|
|
209
|
-
* uses for the FACE box) → project the source silhouette bbox supplied by the
|
|
210
|
-
* provider. `null` where the provider has no subject that frame. Unlike the face
|
|
211
|
-
* path this applies NO face-relative padding — the silhouette already includes
|
|
212
|
-
* hair/head/torso, so the projected box IS the keep-out. Off-crop overflow is
|
|
213
|
-
* clamped into the visible output frame [0,1] (the keep-out only concerns what is
|
|
214
|
-
* on screen).
|
|
215
|
-
*/
|
|
216
|
-
export function buildSilhouetteKeepOutOutput(args) {
|
|
217
|
-
const { traj, silhouette, sections, trimStartFrames, durationInFrames, outW, outH, fps } = args;
|
|
218
|
-
const series = new Array(durationInFrames).fill(null);
|
|
219
|
-
for (let f = 0; f < durationInFrames; f++) {
|
|
220
|
-
const srcFrame = outputToTrajectoryFrame(sections, trimStartFrames, f, traj.src_fps, fps);
|
|
221
|
-
const srcBox = silhouette.bboxAtSourceFrame(srcFrame);
|
|
222
|
-
if (!srcBox)
|
|
223
|
-
continue;
|
|
224
|
-
const { seg, inSegIdx } = resolveSegmentAt(traj, srcFrame);
|
|
225
|
-
const [cx, cy] = seg.centers[inSegIdx];
|
|
226
|
-
const transform = computeCropTransform({
|
|
227
|
-
traj: { src_w: traj.src_w, src_h: traj.src_h },
|
|
228
|
-
outW,
|
|
229
|
-
outH,
|
|
230
|
-
cx,
|
|
231
|
-
cy,
|
|
232
|
-
zoomScale: seg.zoom_scale,
|
|
233
|
-
verticalBias: seg.vertical_bias,
|
|
234
|
-
lateralBias: seg.lateral_bias,
|
|
235
|
-
});
|
|
236
|
-
const out = sourceRectToOutput(srcBox, transform, outW, outH);
|
|
237
|
-
const x = Math.max(0, Math.min(1, out.x));
|
|
238
|
-
const y = Math.max(0, Math.min(1, out.y));
|
|
239
|
-
const right = Math.max(0, Math.min(1, out.x + out.w));
|
|
240
|
-
const bot = Math.max(0, Math.min(1, out.y + out.h));
|
|
241
|
-
series[f] = { x, y, w: Math.max(0, right - x), h: Math.max(0, bot - y) };
|
|
242
|
-
}
|
|
243
|
-
return series;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Union the projected silhouette keep-out across a beat window [startFrame,
|
|
247
|
-
* endFrame) into ONE OUTPUT-space rect (so a graphic clear of it is clear of the
|
|
248
|
-
* subject at EVERY frame of the window) — the silhouette twin of
|
|
249
|
-
* faceKeepOutForWindow. Empty when no frame in the window carries a silhouette
|
|
250
|
-
* (degenerate zero-area rects are dropped).
|
|
251
|
-
*/
|
|
252
|
-
export function silhouetteKeepOutForWindow(series, startFrame, endFrame) {
|
|
253
|
-
const inWindow = series
|
|
254
|
-
.slice(Math.max(0, startFrame), Math.max(0, endFrame))
|
|
255
|
-
.filter((r) => r != null && r.w > 0 && r.h > 0);
|
|
256
|
-
return inWindow.length ? [boundingBox(inWindow)] : [];
|
|
257
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
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
|
-
/** Budget thresholds (frame-fraction coverage of the TEXT rect). Calibration
|
|
11
|
-
* defaults — Phase-7 fixtures tune them, the deploy-test is the truth.
|
|
12
|
-
* `minBite`: below this at EVERY sample the silhouette never bites the line —
|
|
13
|
-
* the depth effect is invisible, so don't pay its cost. `maxCoverage`: above
|
|
14
|
-
* this at ANY sample the body swallows the line. `maxTopHalf`: text-bearing
|
|
15
|
-
* overlays lose legibility when letter TOPS go under — cap the upper half. */
|
|
16
|
-
export const BUDGET = { minBite: 0.15, maxCoverage: 0.65, maxTopHalf: 0.35 };
|
|
17
|
-
/** Behind hero text extent heuristic (calibration constants; Phase-7 fixtures tune). */
|
|
18
|
-
export const BEHIND_TEXT_EXTENT = { heightFrac: 0.18 };
|
|
19
|
-
/**
|
|
20
|
-
* Verdict a window of coverage samples against the budget. Samples are checked
|
|
21
|
-
* in order; the FIRST violating sample decides (deterministic): a text-bearing
|
|
22
|
-
* overlay whose top half exceeds `maxTopHalf` → "tops-occluded"; any sample over
|
|
23
|
-
* `maxCoverage` → "swallow". If no sample violates but the maximum total never
|
|
24
|
-
* reaches `minBite` → "no-depth" (so is an empty window). Else "pass".
|
|
25
|
-
* `worstFrame` is the violating sample's frame for the two per-sample verdicts.
|
|
26
|
-
*/
|
|
27
|
-
export function evaluateOcclusionBudget(samples, opts = { textBearing: true }) {
|
|
28
|
-
let maxTotal = 0;
|
|
29
|
-
for (const s of samples) {
|
|
30
|
-
if (opts.textBearing && s.topHalf > BUDGET.maxTopHalf) {
|
|
31
|
-
return { verdict: "tops-occluded", worstFrame: s.f };
|
|
32
|
-
}
|
|
33
|
-
if (s.total > BUDGET.maxCoverage) {
|
|
34
|
-
return { verdict: "swallow", worstFrame: s.f };
|
|
35
|
-
}
|
|
36
|
-
if (s.total > maxTotal)
|
|
37
|
-
maxTotal = s.total;
|
|
38
|
-
}
|
|
39
|
-
if (maxTotal < BUDGET.minBite)
|
|
40
|
-
return { verdict: "no-depth" };
|
|
41
|
-
return { verdict: "pass" };
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Estimate matte coverage of a text rect from the sidecar's marginal profiles.
|
|
45
|
-
* APPROXIMATION (documented): overlap(textRect, bbox) area fraction, weighted by the
|
|
46
|
-
* mean col-bucket coverage across the intersected x-span (cols[i] = fraction of that
|
|
47
|
-
* column covered by the subject). topHalf uses the same estimate restricted to the
|
|
48
|
-
* text rect's upper half via the rows marginal weighting. Marginals can't give exact
|
|
49
|
-
* 2-D intersection — constants are calibrated against fixtures, and the deploy-test
|
|
50
|
-
* is the truth.
|
|
51
|
-
*
|
|
52
|
-
* All rects source-normalized [0,1]. A null bbox (no subject) → {0, 0}.
|
|
53
|
-
*/
|
|
54
|
-
export function estimateCoverage(textRect, frame) {
|
|
55
|
-
if (!frame.bbox)
|
|
56
|
-
return { total: 0, topHalf: 0 };
|
|
57
|
-
const subject = {
|
|
58
|
-
x: frame.bbox[0],
|
|
59
|
-
y: frame.bbox[1],
|
|
60
|
-
w: frame.bbox[2] - frame.bbox[0],
|
|
61
|
-
h: frame.bbox[3] - frame.bbox[1],
|
|
62
|
-
};
|
|
63
|
-
const total = coverageOfRect(textRect, subject, frame.cols);
|
|
64
|
-
const topRect = { x: textRect.x, y: textRect.y, w: textRect.w, h: textRect.h / 2 };
|
|
65
|
-
const topHalf = coverageOfRect(topRect, subject, frame.cols, frame.rows);
|
|
66
|
-
return { total: clamp01(total), topHalf: clamp01(topHalf) };
|
|
67
|
-
}
|
|
68
|
-
const clamp01 = (v) => Math.max(0, Math.min(1, v));
|
|
69
|
-
function intersect(a, b) {
|
|
70
|
-
const x0 = Math.max(a.x, b.x);
|
|
71
|
-
const y0 = Math.max(a.y, b.y);
|
|
72
|
-
const x1 = Math.min(a.x + a.w, b.x + b.w);
|
|
73
|
-
const y1 = Math.min(a.y + a.h, b.y + b.h);
|
|
74
|
-
if (x1 <= x0 || y1 <= y0)
|
|
75
|
-
return null;
|
|
76
|
-
return { x: x0, y: y0, w: x1 - x0, h: y1 - y0 };
|
|
77
|
-
}
|
|
78
|
-
/** Unweighted mean of the marginal buckets a [lo, hi) frame-normalized span
|
|
79
|
-
* overlaps. Bucket i covers [i/N, (i+1)/N). */
|
|
80
|
-
function meanBuckets(buckets, lo, hi) {
|
|
81
|
-
const n = buckets.length;
|
|
82
|
-
if (n === 0 || hi <= lo)
|
|
83
|
-
return 0;
|
|
84
|
-
const i0 = Math.max(0, Math.min(n - 1, Math.floor(lo * n)));
|
|
85
|
-
const i1 = Math.max(0, Math.min(n - 1, Math.ceil(hi * n) - 1));
|
|
86
|
-
let sum = 0;
|
|
87
|
-
for (let i = i0; i <= i1; i++)
|
|
88
|
-
sum += buckets[i];
|
|
89
|
-
return sum / (i1 - i0 + 1);
|
|
90
|
-
}
|
|
91
|
-
/** (overlap area / rect area) × mean col coverage over the overlap's x-span,
|
|
92
|
-
* optionally × mean row coverage over its y-span (the topHalf refinement). */
|
|
93
|
-
function coverageOfRect(rect, subject, cols, rows) {
|
|
94
|
-
const rectArea = rect.w * rect.h;
|
|
95
|
-
if (rectArea <= 0)
|
|
96
|
-
return 0;
|
|
97
|
-
const inter = intersect(rect, subject);
|
|
98
|
-
if (!inter)
|
|
99
|
-
return 0;
|
|
100
|
-
const areaFrac = (inter.w * inter.h) / rectArea;
|
|
101
|
-
const meanCol = meanBuckets(cols, inter.x, inter.x + inter.w);
|
|
102
|
-
const rowWeight = rows ? meanBuckets(rows, inter.y, inter.y + inter.h) : 1;
|
|
103
|
-
return areaFrac * meanCol * rowWeight;
|
|
104
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/** Bump on ANY change to a profile rect or the broadcast defaults below. The
|
|
2
|
-
* render consumer embeds this into renderCacheKey (spec §15) so a profile edit
|
|
3
|
-
* invalidates cached renders transitively, the way BAKE_VERSION already does —
|
|
4
|
-
* never a remembered manual bump. */
|
|
5
|
-
// v2: platform-name normalization (ig→reels, youtube→shorts) so the suggestion
|
|
6
|
-
// vocabulary resolves to a profile instead of silently falling to broadcast.
|
|
7
|
-
export const SAFE_ZONE_PROFILE_VERSION = "safezones-v2-2026.06.05";
|
|
8
|
-
/** A centered inset of the output rect by `(1 - frac)/2` on every edge. For
|
|
9
|
-
* fractions-of-output coordinates this IS the title/action-safe margin and is
|
|
10
|
-
* aspect-agnostic (the output rect already carries the aspect). */
|
|
11
|
-
function inset(frac) {
|
|
12
|
-
const m = (1 - frac) / 2;
|
|
13
|
-
return { x: m, y: m, w: frac, h: frac };
|
|
14
|
-
}
|
|
15
|
-
const TITLE_SAFE_FRAC = 0.9;
|
|
16
|
-
const ACTION_SAFE_FRAC = 0.93;
|
|
17
|
-
function broadcast() {
|
|
18
|
-
return { exclusions: [], titleSafe: inset(TITLE_SAFE_FRAC), actionSafe: inset(ACTION_SAFE_FRAC) };
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Platform-UI exclusion rects per (platform, aspect). Fractions of output.
|
|
22
|
-
* Extend as a platform changes its chrome. Keyed off the suggestion's
|
|
23
|
-
* `platforms[]` + `format` (the destination the agent already chose).
|
|
24
|
-
*/
|
|
25
|
-
const PROFILES = {
|
|
26
|
-
tiktok: {
|
|
27
|
-
"9:16": [
|
|
28
|
-
{ x: 0, y: 0.82, w: 1, h: 0.18 }, // bottom username/caption strip
|
|
29
|
-
{ x: 0.86, y: 0.45, w: 0.14, h: 0.4 }, // right action rail (like/comment/share)
|
|
30
|
-
{ x: 0, y: 0, w: 1, h: 0.06 }, // top (following/for-you tabs)
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
|
-
reels: {
|
|
34
|
-
"9:16": [
|
|
35
|
-
{ x: 0, y: 0.8, w: 1, h: 0.2 }, // bottom caption + audio strip
|
|
36
|
-
{ x: 0.85, y: 0.42, w: 0.15, h: 0.42 }, // right action rail
|
|
37
|
-
],
|
|
38
|
-
},
|
|
39
|
-
shorts: {
|
|
40
|
-
"9:16": [
|
|
41
|
-
{ x: 0, y: 0.84, w: 1, h: 0.16 }, // bottom title/channel strip
|
|
42
|
-
{ x: 0.88, y: 0.4, w: 0.12, h: 0.4 }, // right action rail
|
|
43
|
-
],
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* Map the suggestion's platform vocabulary (what the agent/clip pass emits) to a
|
|
48
|
-
* PROFILES key. Suggestions say `ig`/`instagram`/`youtube`; the profile table is
|
|
49
|
-
* keyed by the surface-with-chrome (`reels`/`shorts`/`tiktok`). Without this, an
|
|
50
|
-
* `ig` clip silently falls through to broadcast and captions sit under the Reels
|
|
51
|
-
* UI. Unknown names pass through unchanged (→ broadcast fallback).
|
|
52
|
-
*/
|
|
53
|
-
const PLATFORM_ALIASES = {
|
|
54
|
-
ig: "reels",
|
|
55
|
-
instagram: "reels",
|
|
56
|
-
reels: "reels",
|
|
57
|
-
igreels: "reels",
|
|
58
|
-
yt: "shorts",
|
|
59
|
-
youtube: "shorts",
|
|
60
|
-
ytshorts: "shorts",
|
|
61
|
-
shorts: "shorts",
|
|
62
|
-
tiktok: "tiktok",
|
|
63
|
-
tt: "tiktok",
|
|
64
|
-
};
|
|
65
|
-
/** Normalize a platform name to a PROFILES key (lowercased, aliased). */
|
|
66
|
-
export function normalizePlatform(platform) {
|
|
67
|
-
const k = (platform ?? "").trim().toLowerCase();
|
|
68
|
-
return PLATFORM_ALIASES[k] ?? k;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Resolve the safe-zone profile for a destination. Unknown platform (or an
|
|
72
|
-
* aspect a known platform has no profile for) → broadcast title/action-safe only
|
|
73
|
-
* (no platform exclusions) so the floor degrades to a correct, conservative
|
|
74
|
-
* result rather than throwing.
|
|
75
|
-
*/
|
|
76
|
-
export function lookupSafeZones(platform, aspect) {
|
|
77
|
-
const base = broadcast();
|
|
78
|
-
const key = normalizePlatform(platform);
|
|
79
|
-
// Exact platform when known; otherwise the UNION of every platform's chrome
|
|
80
|
-
// for this aspect — so when the destination isn't threaded, captions/overlays
|
|
81
|
-
// still clear ANY vertical surface's UI (the robust default) rather than
|
|
82
|
-
// silently dropping to broadcast and sitting under the bottom strip. A
|
|
83
|
-
// non-social aspect (16:9) has no profiles → union is empty → broadcast.
|
|
84
|
-
const exclusions = PROFILES[key]?.[aspect] ?? unionExclusionsForAspect(aspect);
|
|
85
|
-
// Copy the rects so callers can't mutate the shared table.
|
|
86
|
-
return { ...base, exclusions: exclusions.map((r) => ({ ...r })) };
|
|
87
|
-
}
|
|
88
|
-
/** Every known platform's exclusion rects for an aspect, concatenated. The
|
|
89
|
-
* caller (placeInLegalArea) avoids all of them, so overlap is fine — the net
|
|
90
|
-
* effect is the most-constraining chrome across platforms. */
|
|
91
|
-
function unionExclusionsForAspect(aspect) {
|
|
92
|
-
const all = [];
|
|
93
|
-
for (const platform of Object.keys(PROFILES)) {
|
|
94
|
-
const ex = PROFILES[platform]?.[aspect];
|
|
95
|
-
if (ex)
|
|
96
|
-
all.push(...ex);
|
|
97
|
-
}
|
|
98
|
-
return all;
|
|
99
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
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
|
-
export function coverVisibleFraction(source, target) {
|
|
28
|
-
const s = source.width / source.height;
|
|
29
|
-
const t = target.width / target.height;
|
|
30
|
-
if (!Number.isFinite(s) || !Number.isFinite(t) || s <= 0 || t <= 0)
|
|
31
|
-
return 1;
|
|
32
|
-
return Math.min(s, t) / Math.max(s, t);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Warn below this much of the source surviving. 0.75 = "more than a quarter of
|
|
36
|
-
* the picture is being thrown away" — comfortably past a 4:3-in-16:9 letterbox
|
|
37
|
-
* nudge (0.84) and well inside portrait-in-landscape (0.38).
|
|
38
|
-
*/
|
|
39
|
-
const VISIBLE_FRACTION_FLOOR = 0.75;
|
|
40
|
-
/** How many clips to name before eliding. */
|
|
41
|
-
const MAX_NAMED = 6;
|
|
42
|
-
/** Collect every `kind:'media'` clip source, with its enclosing clip's id. */
|
|
43
|
-
function collectMediaClips(value, nearestId, out) {
|
|
44
|
-
if (Array.isArray(value)) {
|
|
45
|
-
for (const v of value)
|
|
46
|
-
collectMediaClips(v, nearestId, out);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (value === null || typeof value !== "object")
|
|
50
|
-
return;
|
|
51
|
-
const obj = value;
|
|
52
|
-
const id = typeof obj.id === "string" ? obj.id : nearestId;
|
|
53
|
-
if (obj.kind === "media" && typeof obj.mediaId === "string") {
|
|
54
|
-
const reframe = obj.reframe;
|
|
55
|
-
const hasReframe = Array.isArray(reframe?.segments) && reframe.segments.length > 0;
|
|
56
|
-
out.push({
|
|
57
|
-
mediaId: obj.mediaId,
|
|
58
|
-
hasCamera: hasReframe || obj.kenBurns != null,
|
|
59
|
-
...(id !== undefined ? { clipId: id } : {}),
|
|
60
|
-
});
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
for (const v of Object.values(obj))
|
|
64
|
-
collectMediaClips(v, id, out);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Advisory for media placed into a materially different frame shape with no
|
|
68
|
-
* authored camera.
|
|
69
|
-
*
|
|
70
|
-
* `dimensionsByMediaId` is expected to be partial: image dimensions are
|
|
71
|
-
* populated LAZILY (they are not known at upload /complete), so a media with no
|
|
72
|
-
* width/height is SKIPPED rather than guessed at — an advisory that fires on
|
|
73
|
-
* missing metadata would train agents to ignore the channel.
|
|
74
|
-
*/
|
|
75
|
-
export function detectAspectCropLoss(composition, dimensionsByMediaId, target) {
|
|
76
|
-
const placed = [];
|
|
77
|
-
collectMediaClips(composition, undefined, placed);
|
|
78
|
-
if (placed.length === 0)
|
|
79
|
-
return [];
|
|
80
|
-
const offenders = [];
|
|
81
|
-
const seen = new Set();
|
|
82
|
-
for (const clip of placed) {
|
|
83
|
-
if (clip.hasCamera)
|
|
84
|
-
continue;
|
|
85
|
-
const dim = dimensionsByMediaId[clip.mediaId];
|
|
86
|
-
if (!dim?.width || !dim?.height)
|
|
87
|
-
continue; // dimensions arrive lazily — never guess
|
|
88
|
-
const visible = coverVisibleFraction({ width: dim.width, height: dim.height }, target);
|
|
89
|
-
if (visible >= VISIBLE_FRACTION_FLOOR)
|
|
90
|
-
continue;
|
|
91
|
-
const label = clip.clipId ?? clip.mediaId;
|
|
92
|
-
if (seen.has(label))
|
|
93
|
-
continue;
|
|
94
|
-
seen.add(label);
|
|
95
|
-
offenders.push({ label, lostPct: Math.round((1 - visible) * 100) });
|
|
96
|
-
}
|
|
97
|
-
if (offenders.length === 0)
|
|
98
|
-
return [];
|
|
99
|
-
const worst = offenders.reduce((a, b) => (b.lostPct > a.lostPct ? b : a));
|
|
100
|
-
const shown = offenders
|
|
101
|
-
.slice(0, MAX_NAMED)
|
|
102
|
-
.map((o) => `${o.label} (−${o.lostPct}%)`)
|
|
103
|
-
.join(", ");
|
|
104
|
-
const elided = offenders.length > MAX_NAMED ? ` (+${offenders.length - MAX_NAMED} more)` : "";
|
|
105
|
-
return [
|
|
106
|
-
`aspect_crop_loss — ${offenders.length} clip${offenders.length === 1 ? "" : "s"} ` +
|
|
107
|
-
`${offenders.length === 1 ? "is" : "are"} shaped very differently from the ` +
|
|
108
|
-
`${target.width}×${target.height} output and author no camera, so each is centre-cropped ` +
|
|
109
|
-
`to fill — discarding up to ${worst.lostPct}% of the picture with faces and subjects as ` +
|
|
110
|
-
`likely to fall outside the crop as inside it: ${shown}${elided}. Author a \`reframe\` ` +
|
|
111
|
-
`(focus a face, a point, or all-faces) or a \`kenBurns\` move on these clips, or render a ` +
|
|
112
|
-
`format closer to their shape. Note \`fit:"contain"\` does NOT avoid this for stills — ` +
|
|
113
|
-
`images are cropped by the still trajectory, which centres when it has no focus.`,
|
|
114
|
-
];
|
|
115
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
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
|
-
export const REFRAME_COVERAGE_EPS = 1e-3;
|
|
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
|
-
export function firstReframeCoverageGap(segments, duration, eps = REFRAME_COVERAGE_EPS, excluded = []) {
|
|
43
|
-
if (duration <= eps)
|
|
44
|
-
return null; // a zero/degenerate window has nothing to tile
|
|
45
|
-
const covered = [...segments, ...excluded].sort((a, b) => a.startSec - b.startSec);
|
|
46
|
-
let cursor = 0;
|
|
47
|
-
for (const span of covered) {
|
|
48
|
-
// Spans at/after the window end are outside the coverage domain — a
|
|
49
|
-
// malformed exclusion like [duration+0.5, …] must not manufacture a
|
|
50
|
-
// phantom gap [duration, span.start] on a fully-tiled window (the save
|
|
51
|
-
// guard separately rejects out-of-trim exclusions; THIS helper only
|
|
52
|
-
// answers coverage). Sorted input → nothing later can matter either.
|
|
53
|
-
if (span.startSec >= duration - eps)
|
|
54
|
-
break;
|
|
55
|
-
if (span.startSec > cursor + eps)
|
|
56
|
-
return [cursor, span.startSec]; // head / interior gap
|
|
57
|
-
cursor = Math.max(cursor, span.endSec);
|
|
58
|
-
}
|
|
59
|
-
if (cursor < duration - eps)
|
|
60
|
-
return [cursor, duration]; // tail gap
|
|
61
|
-
return null;
|
|
62
|
-
}
|