@cueframe/kernel 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/dist/_members/composition/ops/compositionOps.d.ts +1 -0
- package/dist/_members/composition/projection/behind-readiness.d.ts +127 -0
- package/dist/_members/composition/projection/index.d.ts +2 -0
- package/dist/_members/composition/projection/reframe-readiness.d.ts +156 -0
- package/dist/_members/composition/validators/composition.d.ts +42 -25
- package/dist/_members/composition/validators/render.d.ts +32 -0
- package/dist/_members/core/render/compositionRender.d.ts +17 -1
- package/dist/_members/core/render/types.d.ts +31 -0
- package/dist/authoring/build-tools.js +6 -6
- package/dist/authoring/context.js +4 -4
- package/dist/authoring/tools.js +5 -5
- package/dist/authoring.js +11 -9
- package/dist/{chunk-ZB3C3HM7.js → chunk-7FO3ZJ43.js} +3 -0
- package/dist/{chunk-ODL7GQJG.js → chunk-AP6ZIVAV.js} +2 -2
- package/dist/{chunk-IBYQG46O.js → chunk-AQBREB5O.js} +1 -1
- package/dist/{chunk-YIOY2XEO.js → chunk-DK2ODBNT.js} +15 -5
- package/dist/{chunk-JRQVPFLF.js → chunk-HY3RIEZW.js} +1 -1
- package/dist/{chunk-GEA7E2FL.js → chunk-JJ6XD7NG.js} +151 -1
- package/dist/{chunk-COYMZ76S.js → chunk-MBCXCJOE.js} +1 -1
- package/dist/{chunk-37NJ27UU.js → chunk-OCFDUCF4.js} +3 -0
- package/dist/{chunk-VOO5FQSS.js → chunk-PDYO3DOJ.js} +5 -5
- package/dist/{chunk-MXFAADCQ.js → chunk-PODIYN2K.js} +9 -2
- package/dist/{chunk-NFEGPWGS.js → chunk-TOJEXFXL.js} +1 -1
- package/dist/{chunk-LM4WDUQJ.js → chunk-UHGSZZDI.js} +1 -1
- package/dist/{chunk-XWKZB5U5.js → chunk-ZWMV6DD2.js} +24 -1
- package/dist/compose/renderer.js +3 -3
- package/dist/compose.js +6 -6
- package/dist/composition/graphics-plan.js +1 -1
- package/dist/composition/ops.js +3 -3
- package/dist/composition/primitive-catalog.js +1 -1
- package/dist/composition/projection.js +19 -3
- package/dist/composition/validators.js +6 -4
- package/dist/composition-ops.js +8 -6
- package/dist/composition.js +24 -6
- package/dist/{context-OKX3HHFS.js → context-YWUZDG5X.js} +4 -4
- package/dist/core/render.js +3 -3
- package/dist/core/select.js +2 -2
- package/dist/core.js +3 -3
- package/dist/errors.js +1 -1
- package/dist/mcp/adapter.js +1 -0
- package/dist/media-model/testing.js +1071 -718
- package/dist/nle-export/server.js +328 -130
- package/dist/nle-export.js +7 -6
- package/package.json +13 -14
- 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
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { create } from "xmlbuilder2";
|
|
2
|
-
/**
|
|
3
|
-
* Generate FCPXML v1.11. Compatible with Final Cut Pro 11 and DaVinci Resolve 19.
|
|
4
|
-
*
|
|
5
|
-
* Multi-clip, multi-asset composition:
|
|
6
|
-
* - One <format> per unique (w, h, fpsNum, fpsDen) across assets + sequence.
|
|
7
|
-
* - One <asset> per assets[] entry.
|
|
8
|
-
* - One <asset-clip> per spine[] item (offset/duration in sequence rate; start in source rate).
|
|
9
|
-
* - Markers with spineItemId render inside the matching <asset-clip>, start
|
|
10
|
-
* relativized to the clip's timelineStartFrames.
|
|
11
|
-
* - Markers without spineItemId render at spine root, start in sequence-absolute rate.
|
|
12
|
-
* - Text overlays overlapping a spine item render as markers inside that clip
|
|
13
|
-
* (value = overlay.text). Overlays outside all clips are dropped.
|
|
14
|
-
*/
|
|
15
|
-
export function generateFcpxml(input) {
|
|
16
|
-
const { title, sequence, assets, spine, markers, textOverlays } = input;
|
|
17
|
-
const doc = create({ version: "1.0", encoding: "UTF-8" })
|
|
18
|
-
.dtd({ name: "fcpxml" })
|
|
19
|
-
.ele("fcpxml", { version: "1.11" });
|
|
20
|
-
// ── Resources ────────────────────────────────────────────
|
|
21
|
-
const resources = doc.ele("resources");
|
|
22
|
-
// Collect unique formats across sequence + all assets.
|
|
23
|
-
const formatKey = (w, h, fpsNum, fpsDen) => `${w}x${h}-${fpsNum}-${fpsDen}`;
|
|
24
|
-
const formatSpecs = new Map();
|
|
25
|
-
const registerFormat = (w, h, fpsNum, fpsDen) => {
|
|
26
|
-
const key = formatKey(w, h, fpsNum, fpsDen);
|
|
27
|
-
const existing = formatSpecs.get(key);
|
|
28
|
-
if (existing)
|
|
29
|
-
return existing.id;
|
|
30
|
-
const id = formatId(w, h, fpsNum, fpsDen);
|
|
31
|
-
formatSpecs.set(key, { id, width: w, height: h, fpsNum, fpsDen });
|
|
32
|
-
return id;
|
|
33
|
-
};
|
|
34
|
-
const seqFormatId = registerFormat(sequence.width, sequence.height, sequence.fpsNum, sequence.fpsDen);
|
|
35
|
-
const assetFormatIds = new Map();
|
|
36
|
-
for (const asset of assets) {
|
|
37
|
-
const id = registerFormat(asset.width, asset.height, asset.fpsNum, asset.fpsDen);
|
|
38
|
-
assetFormatIds.set(asset.id, id);
|
|
39
|
-
}
|
|
40
|
-
for (const spec of formatSpecs.values()) {
|
|
41
|
-
resources.ele("format", {
|
|
42
|
-
id: spec.id,
|
|
43
|
-
name: formatName(spec.width, spec.height, spec.fpsNum, spec.fpsDen),
|
|
44
|
-
frameDuration: frameDuration(spec.fpsNum, spec.fpsDen),
|
|
45
|
-
width: String(spec.width),
|
|
46
|
-
height: String(spec.height),
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
// Assets
|
|
50
|
-
for (const asset of assets) {
|
|
51
|
-
const assetFormatId = assetFormatIds.get(asset.id);
|
|
52
|
-
const durMs = Math.round(asset.durationSec * 1000);
|
|
53
|
-
const a = resources.ele("asset", {
|
|
54
|
-
id: asset.id,
|
|
55
|
-
name: asset.displayName,
|
|
56
|
-
start: "0s",
|
|
57
|
-
duration: `${durMs}/1000s`,
|
|
58
|
-
hasVideo: "1",
|
|
59
|
-
hasAudio: "1",
|
|
60
|
-
format: assetFormatId,
|
|
61
|
-
videoSources: "1",
|
|
62
|
-
audioSources: "1",
|
|
63
|
-
audioChannels: "2",
|
|
64
|
-
});
|
|
65
|
-
a.ele("media-rep", {
|
|
66
|
-
kind: "original-media",
|
|
67
|
-
src: `./${asset.relPath}`,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
// ── Library / Event / Project / Sequence ───────────────
|
|
71
|
-
const seqDur = rational(sequence.durationFrames, sequence.fpsNum, sequence.fpsDen);
|
|
72
|
-
const spineEl = doc
|
|
73
|
-
.ele("library")
|
|
74
|
-
.ele("event", { name: title })
|
|
75
|
-
.ele("project", { name: title })
|
|
76
|
-
.ele("sequence", {
|
|
77
|
-
format: seqFormatId,
|
|
78
|
-
duration: seqDur,
|
|
79
|
-
tcStart: "0s",
|
|
80
|
-
tcFormat: "NDF",
|
|
81
|
-
audioLayout: "stereo",
|
|
82
|
-
audioRate: "48k",
|
|
83
|
-
})
|
|
84
|
-
.ele("spine");
|
|
85
|
-
const assetById = new Map(assets.map((a) => [a.id, a]));
|
|
86
|
-
// Spine items → asset-clips
|
|
87
|
-
for (const item of spine) {
|
|
88
|
-
const asset = assetById.get(item.assetId);
|
|
89
|
-
if (!asset)
|
|
90
|
-
continue;
|
|
91
|
-
const assetFormatId = assetFormatIds.get(asset.id);
|
|
92
|
-
const clipEl = spineEl.ele("asset-clip", {
|
|
93
|
-
ref: asset.id,
|
|
94
|
-
offset: rational(item.timelineStartFrames, sequence.fpsNum, sequence.fpsDen),
|
|
95
|
-
name: asset.displayName,
|
|
96
|
-
duration: rational(item.timelineDurationFrames, sequence.fpsNum, sequence.fpsDen),
|
|
97
|
-
start: rational(item.inFrames, asset.fpsNum, asset.fpsDen),
|
|
98
|
-
format: assetFormatId,
|
|
99
|
-
tcFormat: "NDF",
|
|
100
|
-
});
|
|
101
|
-
// Markers attached to this spine item
|
|
102
|
-
const clipMarkers = markers.filter((m) => m.spineItemId === item.id);
|
|
103
|
-
for (const m of clipMarkers) {
|
|
104
|
-
const relFrames = m.startFrames - item.timelineStartFrames;
|
|
105
|
-
emitMarker(clipEl, m, relFrames, sequence.fpsNum, sequence.fpsDen);
|
|
106
|
-
}
|
|
107
|
-
// Text overlays overlapping this spine item (by startFrames)
|
|
108
|
-
const itemEnd = item.timelineStartFrames + item.timelineDurationFrames;
|
|
109
|
-
const overlappingOverlays = textOverlays.filter((o) => o.startFrames >= item.timelineStartFrames && o.startFrames < itemEnd);
|
|
110
|
-
for (const o of overlappingOverlays) {
|
|
111
|
-
const relFrames = o.startFrames - item.timelineStartFrames;
|
|
112
|
-
emitOverlayMarker(clipEl, o, relFrames, sequence.fpsNum, sequence.fpsDen);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// Root-level markers (no spineItemId)
|
|
116
|
-
const rootMarkers = markers.filter((m) => !m.spineItemId);
|
|
117
|
-
for (const m of rootMarkers) {
|
|
118
|
-
emitMarker(spineEl, m, m.startFrames, sequence.fpsNum, sequence.fpsDen);
|
|
119
|
-
}
|
|
120
|
-
return doc.end({ prettyPrint: true, allowEmptyTags: true });
|
|
121
|
-
}
|
|
122
|
-
// ── helpers ────────────────────────────────────────────────
|
|
123
|
-
function rational(frames, fpsNum, fpsDen) {
|
|
124
|
-
if (frames === 0)
|
|
125
|
-
return "0s";
|
|
126
|
-
return `${frames * fpsDen}/${fpsNum}s`;
|
|
127
|
-
}
|
|
128
|
-
function frameDuration(fpsNum, fpsDen) {
|
|
129
|
-
return `${fpsDen}/${fpsNum}s`;
|
|
130
|
-
}
|
|
131
|
-
function formatId(width, height, fpsNum, fpsDen) {
|
|
132
|
-
return `r-${width}x${height}-${fpsNum}-${fpsDen}`;
|
|
133
|
-
}
|
|
134
|
-
function formatName(_w, h, fpsNum, fpsDen) {
|
|
135
|
-
const rate = fpsDen === 1001
|
|
136
|
-
? Math.round((fpsNum / 1000) * 100) / 100
|
|
137
|
-
: fpsNum / fpsDen;
|
|
138
|
-
return `FFVideoFormat${h}p${String(rate).replace(".", "")}`;
|
|
139
|
-
}
|
|
140
|
-
function emitMarker(parent, m, startFrames, fpsNum, fpsDen) {
|
|
141
|
-
const dur = Math.max(1, m.durationFrames);
|
|
142
|
-
const attrs = {
|
|
143
|
-
start: rational(startFrames, fpsNum, fpsDen),
|
|
144
|
-
duration: rational(dur, fpsNum, fpsDen),
|
|
145
|
-
value: m.name,
|
|
146
|
-
};
|
|
147
|
-
if (m.note)
|
|
148
|
-
attrs.note = m.note;
|
|
149
|
-
parent.ele("marker", attrs);
|
|
150
|
-
}
|
|
151
|
-
function emitOverlayMarker(parent, o, startFrames, fpsNum, fpsDen) {
|
|
152
|
-
const dur = Math.max(1, o.durationFrames);
|
|
153
|
-
parent.ele("marker", {
|
|
154
|
-
start: rational(startFrames, fpsNum, fpsDen),
|
|
155
|
-
duration: rational(dur, fpsNum, fpsDen),
|
|
156
|
-
value: o.text,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=fcpxml.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fcpxml.js","sourceRoot":"","sources":["../src/fcpxml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Root subpath — zero-dep, edge-runtime-safe. Types + pure-TS logic only.
|
|
3
|
-
*
|
|
4
|
-
* XML generators (which depend on xmlbuilder2) live at `@cueframe/nle-export/xml`.
|
|
5
|
-
* Node-only packaging (archiver) lives at `@cueframe/nle-export/server`.
|
|
6
|
-
*/
|
|
7
|
-
export { generateSrt } from "./srt";
|
|
8
|
-
export { compositionToClipExportInput } from "./composition-to-input";
|
|
9
|
-
export { compactTimeline } from "./compact-timeline";
|
|
10
|
-
export { slugify } from "./xml-utils";
|
|
11
|
-
export * from "./types";
|
|
12
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { create } from "xmlbuilder2";
|
|
2
|
-
/**
|
|
3
|
-
* xmlbuilder2 escapes &, <, > automatically in text nodes, but leaves
|
|
4
|
-
* " and ' unescaped (valid per XML spec since they aren't ambiguous in
|
|
5
|
-
* text content). Premiere Pro's xmeml consumers are historically
|
|
6
|
-
* conservative — pre-escape " and ' only so xmlbuilder2 can still
|
|
7
|
-
* handle the others without double-encoding.
|
|
8
|
-
*/
|
|
9
|
-
function escapeQuotes(s) {
|
|
10
|
-
return s.replace(/"/g, """).replace(/'/g, "'");
|
|
11
|
-
}
|
|
12
|
-
function displayRate(fpsNum, fpsDen) {
|
|
13
|
-
if (fpsDen === 1001) {
|
|
14
|
-
return { timebase: Math.round(fpsNum / 1000), ntsc: "TRUE" };
|
|
15
|
-
}
|
|
16
|
-
return { timebase: Math.round(fpsNum / fpsDen), ntsc: "FALSE" };
|
|
17
|
-
}
|
|
18
|
-
function findOwningSpineItem(spine, startFrames, durationFrames) {
|
|
19
|
-
const overlayStart = startFrames;
|
|
20
|
-
const overlayEnd = startFrames + Math.max(1, durationFrames);
|
|
21
|
-
for (const item of spine) {
|
|
22
|
-
const itemStart = item.timelineStartFrames;
|
|
23
|
-
const itemEnd = item.timelineStartFrames + item.timelineDurationFrames;
|
|
24
|
-
if (overlayStart < itemEnd && overlayEnd > itemStart) {
|
|
25
|
-
return item;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
export function generatePremiereXml(input) {
|
|
31
|
-
const { title, sequence, assets, spine, markers, textOverlays } = input;
|
|
32
|
-
const assetById = new Map();
|
|
33
|
-
for (const a of assets)
|
|
34
|
-
assetById.set(a.id, a);
|
|
35
|
-
const seqRate = displayRate(sequence.fpsNum, sequence.fpsDen);
|
|
36
|
-
const doc = create({ version: "1.0", encoding: "UTF-8" })
|
|
37
|
-
.dtd({ name: "xmeml" })
|
|
38
|
-
.ele("xmeml", { version: "4" });
|
|
39
|
-
const seqEl = doc.ele("sequence", { id: "sequence-1" });
|
|
40
|
-
seqEl.ele("name").txt(escapeQuotes(title)).up();
|
|
41
|
-
seqEl.ele("duration").txt(String(sequence.durationFrames)).up();
|
|
42
|
-
const seqRateEl = seqEl.ele("rate");
|
|
43
|
-
seqRateEl.ele("timebase").txt(String(seqRate.timebase)).up();
|
|
44
|
-
seqRateEl.ele("ntsc").txt(seqRate.ntsc).up();
|
|
45
|
-
seqRateEl.up();
|
|
46
|
-
const mediaEl = seqEl.ele("media");
|
|
47
|
-
// ── Video ────────────────────────────────────────────────
|
|
48
|
-
const videoEl = mediaEl.ele("video");
|
|
49
|
-
const videoFormatEl = videoEl.ele("format");
|
|
50
|
-
const videoSampEl = videoFormatEl.ele("samplecharacteristics");
|
|
51
|
-
videoSampEl.ele("width").txt(String(sequence.width)).up();
|
|
52
|
-
videoSampEl.ele("height").txt(String(sequence.height)).up();
|
|
53
|
-
videoSampEl.up();
|
|
54
|
-
videoFormatEl.up();
|
|
55
|
-
const trackEl = videoEl.ele("track");
|
|
56
|
-
const seenAssetIds = new Set();
|
|
57
|
-
spine.forEach((item, idx) => {
|
|
58
|
-
const asset = assetById.get(item.assetId);
|
|
59
|
-
if (!asset)
|
|
60
|
-
return;
|
|
61
|
-
const assetRate = displayRate(asset.fpsNum, asset.fpsDen);
|
|
62
|
-
const clipDurationInAssetRate = asset.originOutFrames - asset.originInFrames;
|
|
63
|
-
const clipitemEl = trackEl.ele("clipitem", { id: `clipitem-${idx + 1}` });
|
|
64
|
-
clipitemEl.ele("name").txt(escapeQuotes(asset.displayName)).up();
|
|
65
|
-
clipitemEl.ele("enabled").txt("TRUE").up();
|
|
66
|
-
clipitemEl.ele("duration").txt(String(clipDurationInAssetRate)).up();
|
|
67
|
-
const rateEl = clipitemEl.ele("rate");
|
|
68
|
-
rateEl.ele("timebase").txt(String(assetRate.timebase)).up();
|
|
69
|
-
rateEl.ele("ntsc").txt(assetRate.ntsc).up();
|
|
70
|
-
rateEl.up();
|
|
71
|
-
clipitemEl.ele("in").txt(String(item.inFrames)).up();
|
|
72
|
-
clipitemEl.ele("out").txt(String(item.outFrames)).up();
|
|
73
|
-
clipitemEl.ele("start").txt(String(item.timelineStartFrames)).up();
|
|
74
|
-
clipitemEl
|
|
75
|
-
.ele("end")
|
|
76
|
-
.txt(String(item.timelineStartFrames + item.timelineDurationFrames))
|
|
77
|
-
.up();
|
|
78
|
-
// <file>: full body on first occurrence, empty self-close on subsequent.
|
|
79
|
-
if (!seenAssetIds.has(asset.id)) {
|
|
80
|
-
seenAssetIds.add(asset.id);
|
|
81
|
-
const fileEl = clipitemEl.ele("file", { id: asset.id });
|
|
82
|
-
fileEl.ele("name").txt(escapeQuotes(asset.displayName)).up();
|
|
83
|
-
fileEl.ele("pathurl").txt(escapeQuotes(`file://./${asset.relPath}`)).up();
|
|
84
|
-
const fileRateEl = fileEl.ele("rate");
|
|
85
|
-
fileRateEl.ele("timebase").txt(String(assetRate.timebase)).up();
|
|
86
|
-
fileRateEl.ele("ntsc").txt(assetRate.ntsc).up();
|
|
87
|
-
fileRateEl.up();
|
|
88
|
-
// Duration in source-rate frames — use the rational rate, not the
|
|
89
|
-
// integer timebase. For NTSC 29.97 the integer timebase (30) would
|
|
90
|
-
// otherwise overshoot by a frame per every ~1000 frames, showing up
|
|
91
|
-
// in Premiere's bin metadata as a 1-frame-off clip length.
|
|
92
|
-
const assetDurationFrames = Math.round(asset.durationSec * (asset.fpsNum / asset.fpsDen));
|
|
93
|
-
fileEl.ele("duration").txt(String(assetDurationFrames)).up();
|
|
94
|
-
const fileMediaEl = fileEl.ele("media");
|
|
95
|
-
const fileVideoEl = fileMediaEl.ele("video");
|
|
96
|
-
const fileVideoSampEl = fileVideoEl.ele("samplecharacteristics");
|
|
97
|
-
fileVideoSampEl.ele("width").txt(String(asset.width)).up();
|
|
98
|
-
fileVideoSampEl.ele("height").txt(String(asset.height)).up();
|
|
99
|
-
fileVideoSampEl.up();
|
|
100
|
-
fileVideoEl.up();
|
|
101
|
-
const fileAudioEl = fileMediaEl.ele("audio");
|
|
102
|
-
const fileAudioSampEl = fileAudioEl.ele("samplecharacteristics");
|
|
103
|
-
fileAudioSampEl.ele("samplerate").txt("48000").up();
|
|
104
|
-
fileAudioSampEl.ele("depth").txt("16").up();
|
|
105
|
-
fileAudioSampEl.up();
|
|
106
|
-
fileAudioEl.ele("channelcount").txt("2").up();
|
|
107
|
-
fileAudioEl.up();
|
|
108
|
-
fileMediaEl.up();
|
|
109
|
-
fileEl.up();
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
clipitemEl.ele("file", { id: asset.id }).up();
|
|
113
|
-
}
|
|
114
|
-
// Markers belonging to this spine item.
|
|
115
|
-
const emitClipMarker = (name, note, startAbsFrames, durationFrames) => {
|
|
116
|
-
const markerEl = clipitemEl.ele("marker");
|
|
117
|
-
markerEl.ele("name").txt(escapeQuotes(name)).up();
|
|
118
|
-
if (note && note.length > 0) {
|
|
119
|
-
markerEl.ele("comment").txt(escapeQuotes(note)).up();
|
|
120
|
-
}
|
|
121
|
-
const relStart = startAbsFrames - item.timelineStartFrames;
|
|
122
|
-
const dur = Math.max(1, durationFrames);
|
|
123
|
-
markerEl.ele("in").txt(String(relStart)).up();
|
|
124
|
-
markerEl.ele("out").txt(String(relStart + dur)).up();
|
|
125
|
-
markerEl.up();
|
|
126
|
-
};
|
|
127
|
-
for (const m of markers) {
|
|
128
|
-
if (m.spineItemId === item.id) {
|
|
129
|
-
emitClipMarker(m.name, m.note, m.startFrames, m.durationFrames);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// Overlays overlapping this item.
|
|
133
|
-
for (const overlay of textOverlays) {
|
|
134
|
-
const owner = findOwningSpineItem(spine, overlay.startFrames, overlay.durationFrames);
|
|
135
|
-
if (owner && owner.id === item.id) {
|
|
136
|
-
emitClipMarker(overlay.text, undefined, overlay.startFrames, overlay.durationFrames);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
clipitemEl.up();
|
|
140
|
-
});
|
|
141
|
-
trackEl.up();
|
|
142
|
-
videoEl.up();
|
|
143
|
-
mediaEl.up();
|
|
144
|
-
// Root-level markers (no spineItemId) — emitted AFTER </media> (after all tracks).
|
|
145
|
-
for (const m of markers) {
|
|
146
|
-
if (m.spineItemId)
|
|
147
|
-
continue;
|
|
148
|
-
const markerEl = seqEl.ele("marker");
|
|
149
|
-
markerEl.ele("name").txt(escapeQuotes(m.name)).up();
|
|
150
|
-
if (m.note && m.note.length > 0) {
|
|
151
|
-
markerEl.ele("comment").txt(escapeQuotes(m.note)).up();
|
|
152
|
-
}
|
|
153
|
-
const dur = Math.max(1, m.durationFrames);
|
|
154
|
-
markerEl.ele("in").txt(String(m.startFrames)).up();
|
|
155
|
-
markerEl.ele("out").txt(String(m.startFrames + dur)).up();
|
|
156
|
-
markerEl.up();
|
|
157
|
-
}
|
|
158
|
-
seqEl.up();
|
|
159
|
-
return doc.end({ prettyPrint: true });
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=premiere.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"premiere.js","sourceRoot":"","sources":["../src/premiere.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import archiver from "archiver";
|
|
2
|
-
import { createWriteStream } from "node:fs";
|
|
3
|
-
import { readdir, stat } from "node:fs/promises";
|
|
4
|
-
import { join, relative } from "node:path";
|
|
5
|
-
export async function packExportZip({ workdir, format, }) {
|
|
6
|
-
const outputName = `${format}.zip`;
|
|
7
|
-
const zipPath = join(workdir, outputName);
|
|
8
|
-
const output = createWriteStream(zipPath);
|
|
9
|
-
const archive = archiver("zip", { zlib: { level: 6 } });
|
|
10
|
-
const done = new Promise((resolve, reject) => {
|
|
11
|
-
output.on("close", () => resolve());
|
|
12
|
-
output.on("error", reject);
|
|
13
|
-
archive.on("error", reject);
|
|
14
|
-
archive.pipe(output);
|
|
15
|
-
});
|
|
16
|
-
async function addDir(dir) {
|
|
17
|
-
const entries = await readdir(dir);
|
|
18
|
-
for (const name of entries) {
|
|
19
|
-
const full = join(dir, name);
|
|
20
|
-
const rel = relative(workdir, full);
|
|
21
|
-
if (rel === outputName)
|
|
22
|
-
continue; // skip our own zip
|
|
23
|
-
const s = await stat(full);
|
|
24
|
-
if (s.isDirectory()) {
|
|
25
|
-
await addDir(full);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const isMp4 = full.toLowerCase().endsWith(".mp4");
|
|
29
|
-
archive.file(full, { name: rel, store: isMp4 });
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
await addDir(workdir);
|
|
34
|
-
await archive.finalize();
|
|
35
|
-
await done;
|
|
36
|
-
return zipPath;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=pack-zip.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pack-zip.js","sourceRoot":"","sources":["../../src/server/pack-zip.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAI3C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,MAAM,GAIP;IACC,MAAM,UAAU,GAAG,GAAG,MAAM,MAAM,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,MAAM,CAAC,GAAW;QAC/B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,KAAK,UAAU;gBAAE,SAAS,CAAC,mBAAmB;YACrD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAA2B,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IACzB,MAAM,IAAI,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
function formatMs(totalMs) {
|
|
2
|
-
const ms = Math.max(0, Math.round(totalMs));
|
|
3
|
-
const h = Math.floor(ms / 3600000);
|
|
4
|
-
const m = Math.floor((ms % 3600000) / 60000);
|
|
5
|
-
const s = Math.floor((ms % 60000) / 1000);
|
|
6
|
-
const msPart = ms % 1000;
|
|
7
|
-
const pad = (n, w = 2) => String(n).padStart(w, "0");
|
|
8
|
-
return `${pad(h)}:${pad(m)}:${pad(s)},${pad(msPart, 3)}`;
|
|
9
|
-
}
|
|
10
|
-
export function generateSrt(input) {
|
|
11
|
-
const { spine, assets, transcriptsBySourceId, sequence } = input;
|
|
12
|
-
const seqFps = sequence.fpsNum / sequence.fpsDen;
|
|
13
|
-
const assetById = new Map(assets.map((a) => [a.id, a]));
|
|
14
|
-
const cues = [];
|
|
15
|
-
for (const item of spine) {
|
|
16
|
-
const asset = assetById.get(item.assetId);
|
|
17
|
-
if (!asset)
|
|
18
|
-
continue;
|
|
19
|
-
const transcript = transcriptsBySourceId[asset.sourceId];
|
|
20
|
-
if (!transcript?.length)
|
|
21
|
-
continue;
|
|
22
|
-
// Cue times are in **source seconds** (absolute on the original media).
|
|
23
|
-
// The clip plays source seconds [sourceInSec, sourceOutSec], which equals
|
|
24
|
-
// [asset.originInFrames, asset.originOutFrames] converted to seconds.
|
|
25
|
-
// item.inFrames/outFrames are offsets within the *trimmed* file and are
|
|
26
|
-
// NOT used here — cue matching happens in source-time.
|
|
27
|
-
const assetFps = asset.fpsNum / asset.fpsDen;
|
|
28
|
-
const sourceInSec = asset.originInFrames / assetFps;
|
|
29
|
-
const sourceOutSec = asset.originOutFrames / assetFps;
|
|
30
|
-
const timelineOffsetSec = item.timelineStartFrames / seqFps;
|
|
31
|
-
for (const cue of transcript) {
|
|
32
|
-
if (cue.endSec <= sourceInSec || cue.startSec >= sourceOutSec)
|
|
33
|
-
continue;
|
|
34
|
-
const clampStart = Math.max(cue.startSec, sourceInSec);
|
|
35
|
-
const clampEnd = Math.min(cue.endSec, sourceOutSec);
|
|
36
|
-
cues.push({
|
|
37
|
-
startMs: (clampStart - sourceInSec + timelineOffsetSec) * 1000,
|
|
38
|
-
endMs: (clampEnd - sourceInSec + timelineOffsetSec) * 1000,
|
|
39
|
-
text: cue.text,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
cues.sort((a, b) => a.startMs - b.startMs);
|
|
44
|
-
if (cues.length === 0)
|
|
45
|
-
return "";
|
|
46
|
-
return cues
|
|
47
|
-
.map((c, i) => `${i + 1}\n${formatMs(c.startMs)} --> ${formatMs(c.endMs)}\n${c.text}\n`)
|
|
48
|
-
.join("\n");
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=srt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"srt.js","sourceRoot":"","sources":["../src/srt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgMA,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAGjC;IAFlB,YACE,OAAe,EACC,OAA0C;QAE1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAmC;QAG1D,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NLE XML generators. Pulls `xmlbuilder2` which uses Node's Buffer, so this
|
|
3
|
-
* subpath only loads cleanly in Node or full browser bundles — NOT in edge
|
|
4
|
-
* runtimes (Convex V8 isolate, Cloudflare Workers without node-compat).
|
|
5
|
-
*
|
|
6
|
-
* Convex + edge-runtime consumers should import types + converter + srt from
|
|
7
|
-
* the package root, which is xmlbuilder2-free.
|
|
8
|
-
*/
|
|
9
|
-
export { generateFcpxml } from "../fcpxml";
|
|
10
|
-
export { generatePremiereXml } from "../premiere";
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/xml/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Classify a frame rate. Handles integer fps and NTSC fractional rates
|
|
3
|
-
* (23.976, 29.97, 59.94) which use rational time values with 1001 numerator.
|
|
4
|
-
*/
|
|
5
|
-
export function getFrameRateInfo(fps) {
|
|
6
|
-
const ntscN = Math.round((fps * 1001) / 1000);
|
|
7
|
-
const ntscFps = (ntscN * 1000) / 1001;
|
|
8
|
-
const isNtsc = ntscN > 0 &&
|
|
9
|
-
fps !== ntscN && // exclude integer rates
|
|
10
|
-
Math.abs(fps - ntscFps) < 0.01;
|
|
11
|
-
if (isNtsc) {
|
|
12
|
-
return {
|
|
13
|
-
displayRate: ntscN,
|
|
14
|
-
isNtsc: true,
|
|
15
|
-
frameDuration: `1001/${ntscN * 1000}s`,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
const rounded = Math.round(fps);
|
|
19
|
-
return {
|
|
20
|
-
displayRate: rounded,
|
|
21
|
-
isNtsc: false,
|
|
22
|
-
frameDuration: `1/${rounded}s`,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Convert seconds to an FCPXML rational time string.
|
|
27
|
-
* For NTSC rates, emits `frames*1001 / displayRate*1000 s` so timing stays exact.
|
|
28
|
-
*/
|
|
29
|
-
export function toRationalTime(seconds, fps) {
|
|
30
|
-
const { displayRate, isNtsc } = getFrameRateInfo(fps);
|
|
31
|
-
const frames = Math.round(seconds * fps);
|
|
32
|
-
if (isNtsc) {
|
|
33
|
-
return `${frames * 1001}/${displayRate * 1000}s`;
|
|
34
|
-
}
|
|
35
|
-
return `${frames}/${displayRate}s`;
|
|
36
|
-
}
|
|
37
|
-
/** Convert seconds to an integer frame count (display frames). */
|
|
38
|
-
export function toFrames(seconds, fps) {
|
|
39
|
-
return Math.round(seconds * fps);
|
|
40
|
-
}
|
|
41
|
-
export function slugify(s) {
|
|
42
|
-
return (s
|
|
43
|
-
.toLowerCase()
|
|
44
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
45
|
-
.replace(/^-+|-+$/g, '')
|
|
46
|
-
.slice(0, 64) || 'clip');
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=xml-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xml-utils.js","sourceRoot":"","sources":["../src/xml-utils.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtC,MAAM,MAAM,GACV,KAAK,GAAG,CAAC;QACT,GAAG,KAAK,KAAK,IAAI,wBAAwB;QACzC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IAEjC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,QAAQ,KAAK,GAAG,IAAI,GAAG;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO;QACL,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,KAAK,OAAO,GAAG;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,GAAW;IACzD,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,GAAG,MAAM,GAAG,IAAI,IAAI,WAAW,GAAG,IAAI,GAAG,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,WAAW,GAAG,CAAC;AACrC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAW;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,OAAO,CACL,CAAC;SACE,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAC1B,CAAC;AACJ,CAAC"}
|