gitframes 1.2.35 → 1.3.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.
Files changed (40) hide show
  1. package/dist/audio/index.mjs +4 -4
  2. package/dist/{audio-C4kiPbrV.mjs → audio-DvL7gQQ8.mjs} +3 -3
  3. package/dist/{audio-C4kiPbrV.mjs.map → audio-DvL7gQQ8.mjs.map} +1 -1
  4. package/dist/{audio-CiXUMGyk.mjs → audio-sZdRh_qg.mjs} +3 -3
  5. package/dist/{audio-CiXUMGyk.mjs.map → audio-sZdRh_qg.mjs.map} +1 -1
  6. package/dist/{dist-C37594c6.mjs → dist-8vbhZYqX.mjs} +471 -152
  7. package/dist/dist-8vbhZYqX.mjs.map +1 -0
  8. package/dist/{dist-CMF9eNLB.mjs → dist-B0vCkDzJ.mjs} +37 -3
  9. package/dist/dist-B0vCkDzJ.mjs.map +1 -0
  10. package/dist/effects/index.d.mts +2 -2
  11. package/dist/effects/index.mjs +3 -3
  12. package/dist/{effects-4t4qk-BR.mjs → effects-C3nV-k4T.mjs} +949 -1559
  13. package/dist/effects-C3nV-k4T.mjs.map +1 -0
  14. package/dist/fonts/index.mjs +1 -1
  15. package/dist/{fonts-Dn18r_ST.mjs → fonts-dn-pl4Pe.mjs} +3 -3
  16. package/dist/{fonts-Dn18r_ST.mjs.map → fonts-dn-pl4Pe.mjs.map} +1 -1
  17. package/dist/{index-YZsTjqut.d.mts → index-D-O2kwLx.d.mts} +3 -3
  18. package/dist/{index-YZsTjqut.d.mts.map → index-D-O2kwLx.d.mts.map} +1 -1
  19. package/dist/{index-B1557AUi.d.mts → index-t9GyO4Ei.d.mts} +35 -50
  20. package/dist/index-t9GyO4Ei.d.mts.map +1 -0
  21. package/dist/index.d.mts +89 -79
  22. package/dist/index.d.mts.map +1 -1
  23. package/dist/index.mjs +142 -126
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/react/index.mjs +2 -2
  26. package/dist/renderer/index.d.mts +2 -2
  27. package/dist/renderer/index.mjs +3 -3
  28. package/dist/{renderer-DVi31fSv.mjs → renderer-CMDIVxhv.mjs} +317 -14
  29. package/dist/renderer-CMDIVxhv.mjs.map +1 -0
  30. package/dist/{renderers-CLJQRPVU-CMZnHNK0.mjs → renderers-CLJQRPVU-DuQ7-PaC.mjs} +3 -3
  31. package/dist/{renderers-CLJQRPVU-CMZnHNK0.mjs.map → renderers-CLJQRPVU-DuQ7-PaC.mjs.map} +1 -1
  32. package/dist/signals/index.mjs +5 -5
  33. package/dist/{signals-BB_kdndF.mjs → signals-CLaCq092.mjs} +2 -2
  34. package/dist/{signals-BB_kdndF.mjs.map → signals-CLaCq092.mjs.map} +1 -1
  35. package/package.json +55 -55
  36. package/dist/dist-C37594c6.mjs.map +0 -1
  37. package/dist/dist-CMF9eNLB.mjs.map +0 -1
  38. package/dist/effects-4t4qk-BR.mjs.map +0 -1
  39. package/dist/index-B1557AUi.d.mts.map +0 -1
  40. package/dist/renderer-DVi31fSv.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,19 +1,33 @@
1
1
  import "./chunk-GMkBE123.mjs";
2
- import { $ as DataTypes, $t as frameArraySignal, At as TextOperationSchema, B as BaseMediaOperationPropsSchema, Bt as VideoTimingPropsSchema, C as preloadFont, Ct as SignalDataSchema, D as useCurrentFrame, Dt as SingleOutputGenericSchema, E as springCalculation, Et as SignalStatsSchema, Ft as VideoAnimationSchema, G as ConfigHandleSchema, Gt as computed, H as CAPTION_LAYER_DEFAULTS, Ht as appendOperation, It as VideoLayerTypeSchema, J as DEFAULT_DURATION_MS, Jt as createVirtualMedia, K as ConfigSchemaRegistry, Kt as cosineSignal, L as AnimationTypeSchema, Lt as VideoSpatialPropsSchema, Mt as TimelineTransformSchema, Nt as TransitionSchema, O as useVideoConfig, Ot as SourceOperationSchema, Pt as TransitionTypeSchema, Q as DataTypeVal, Qt as findSourceAsset, R as AnyOutputUnionSchema, Rt as VideoStylePropsSchema, S as parseColorToRgb, Sn as updateClockSignals, St as SignalChannelMetaSchema, T as spring, Tt as SignalMathDataSchema, U as COMPOSITE_OPERATIONS, Ut as checkNodeResultCache, V as BaseVideoLayerPropsSchema, Vt as VirtualMediaDataSchema, W as COMPOSITOR_DEFAULTS, Wt as computeVideoCropRenderProps, X as DEFAULT_MEDIA_DIMENSION, Xt as deserializeSignalData, Y as DEFAULT_FPS, Yt as dataTypeColors, Z as DataType, Zt as extractSvgDimensions, _ as interpolate, _n as signal, _t as NodeResultSchema, a as mixAudioTracks, an as getLeafMediaType, at as GeneratorSignalDataSchema, b as measureText, bn as stampResult, bt as ProgrammaticSignal, c as LIGHT_UNIFORM_SIZE_BYTES, cn as hasOnlySingleSource, ct as JsonValueSchema, d as PlaybackContext, dn as isVirtualMediaData, dt as MediaOperationSchema, en as frameSignal, et as Effect$1, f as PlaybackProvider, fn as programmaticSignal, ft as MediaSourceSchema, g as hasDelayRender, gn as serializeSignalData, gt as NodeMetadataSchema, h as computeStrokeRect, hn as resolveMediaMimeType, ht as MultiOutputGenericSchema, in as getFingerprint, it as FileDataSchema, jt as TimelineSegmentSchema, k as ColorSchema, kt as TEXT_LAYER_DEFAULTS, l as MAX_LIGHTS, ln as isEqual, lt as MIME_TYPES, m as bezier, mn as registerSignalDependency, mt as ModerationUnrefundableError, nn as getActiveMediaMetadata, nt as ExtendedLayerSchema, on as getMediaType, ot as GlobalCompositeOperation, p as Vector3Math, pn as progressSignal, pt as ModerationError, q as DATA_TYPE_EXTENSIONS, qt as createOutputItemSchema, rn as getFileDataMetadata, rt as FileAssetSchema, s as Easing, sn as getRenderFingerprint, st as HandleTypeVal, tn as generateId, tt as ExportResultSchema, u as Matrix4Math, un as isSignal, ut as MediaMetadataSchema, v as mapBlendModeToSkia, vn as signalBuilder, vt as NodeVisualConfigSchema, w as requiresIsolation, wt as SignalGateDataSchema, x as measureTextAsync, xn as timeSignal, xt as Signal, y as measureSpring, yn as sineSignal, yt as OutputItemSchema, z as AudioExtractorSignalDataSchema, zt as VideoTextPropsSchema } from "./dist-CMF9eNLB.mjs";
3
- import { $ as parseOBJ, B as generateExtrudedTextGeometry, D as chartBridgeCache, G as loadFBX, J as lutStore, K as loadModel3D, Q as parseMTL, S as SlugFontCache, W as inputStore, Y as mediaDecoderCache, Z as parseFBX, _ as Renderer2D, a as Camera3D, b as ShadowPipeline, c as GlassPipeline, d as HeadlessGPUCanvasContextMock, f as Light3D, h as Path3D, j as drawChartNode, l as HeadlessChartCanvasElementMock, n as AudioLatentTrackCache, nt as signalRegistry, o as ChartGPUEngineBridge, p as MotionBlurPipeline, q as loadOBJ, r as AudioMeshDeformPipeline, rt as textureCache, s as EffectPipeline, t as AudioLatentEngine, tt as shaderStore, u as HeadlessChartContainerMock, v as Renderer3D, w as SlugPipeline, y as SSAOPipeline, z as ensureDevice } from "./dist-C37594c6.mjs";
4
- import "./renderers-CLJQRPVU-CMZnHNK0.mjs";
5
- import "./signals-BB_kdndF.mjs";
6
- import { t as AudioSignal } from "./audio-CiXUMGyk.mjs";
7
- import { t as FontManager } from "./fonts-Dn18r_ST.mjs";
8
- import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "./audio-C4kiPbrV.mjs";
9
- import { C as Yolo, Ct as DepthNormalsComputePipeline, D as ColorKey, E as ColorBalance, Et as TensorPipeline, O as Vignette, S as UnsharpMask, St as ControlNetMultiplexer, T as Blur, Tt as TemporalDeflickerPipeline, _ as SSAO, _t as YoloVisionRunner, a as CustomEffect, b as TemporalDeflicker, bt as pinNodeToObject, c as GradientMap, ct as POSE_LANDMARKS_YOLO, d as Levels, dt as SpatialLandmarkTransformer, f as MediaPipe, ft as TemporalObjectTracker, g as Relight3D, gt as YoloVisionBundle, h as PBRGlass, ht as YoloNode$1, i as Curves, l as HalftoneScreen, lt as PoseSkeletonRenderer, m as MotionBlur, mt as YOLO_POSE_KEYPOINT_NAMES, n as AudioSignalExtractor, o as DepthOfField, p as Modulate, pt as YOLO_COCO17_BONES, r as Crop, s as FilmGrain, st as MEDIAPIPE_TO_YOLO_POSE_INDEX, t as ApplyLUT, u as HighPass, ut as SegmentationTexturePool, v as SelectiveColor, vt as analyzeSequence, wt as OpticalFlowComputePipeline, x as TileOffset, xt as CannyComputePipeline, y as ShadowsHighlights, yt as pinNodeToLandmark } from "./effects-4t4qk-BR.mjs";
10
- import { a as HeadlessWebGPURenderer, i as HeadlessMediaRenderer, n as renderFrameGrid, o as renderSemaphore, r as resolveSamplePoints, t as computeGridLayout } from "./renderer-DVi31fSv.mjs";
2
+ import { $ as DataTypes, $t as frameArraySignal, At as TextOperationSchema, B as BaseMediaOperationPropsSchema, Bt as VideoTimingPropsSchema, C as preloadFont, Cn as timeSignal, Ct as SignalDataSchema, D as useCurrentFrame, Dt as SingleOutputGenericSchema, E as springCalculation, Et as SignalStatsSchema, Ft as VideoAnimationSchema, G as ConfigHandleSchema, Gt as computed, H as CAPTION_LAYER_DEFAULTS, Ht as appendOperation, It as VideoLayerTypeSchema, J as DEFAULT_DURATION_MS, Jt as createVirtualMedia, K as ConfigSchemaRegistry, Kt as cosineSignal, L as AnimationTypeSchema, Lt as VideoSpatialPropsSchema, Mt as TimelineTransformSchema, Nt as TransitionSchema, O as useVideoConfig, Ot as SourceOperationSchema, Pt as TransitionTypeSchema, Q as DataTypeVal, Qt as findSourceAsset, R as AnyOutputUnionSchema, Rt as VideoStylePropsSchema, S as parseColorToRgb, Sn as takeRenderDiagnostics, St as SignalChannelMetaSchema, T as spring, Tt as SignalMathDataSchema, U as COMPOSITE_OPERATIONS, Ut as checkNodeResultCache, V as BaseVideoLayerPropsSchema, Vt as VirtualMediaDataSchema, W as COMPOSITOR_DEFAULTS, Wt as computeVideoCropRenderProps, X as DEFAULT_MEDIA_DIMENSION, Xt as deserializeSignalData, Y as DEFAULT_FPS, Yt as dataTypeColors, Z as DataType, Zt as extractSvgDimensions, _ as interpolate, _n as serializeSignalData, _t as NodeResultSchema, a as mixAudioTracks, an as getLeafMediaType, at as GeneratorSignalDataSchema, b as measureText, bn as sineSignal, bt as ProgrammaticSignal, c as LIGHT_UNIFORM_SIZE_BYTES, cn as hasOnlySingleSource, ct as JsonValueSchema, d as PlaybackContext, dn as isVirtualMediaData, dt as MediaOperationSchema, en as frameSignal, et as Effect$1, f as PlaybackProvider, fn as programmaticSignal, ft as MediaSourceSchema, g as hasDelayRender, gn as resolveMediaMimeType, gt as NodeMetadataSchema, h as computeStrokeRect, hn as reportRenderDiagnostic, ht as MultiOutputGenericSchema, in as getFingerprint, it as FileDataSchema, jt as TimelineSegmentSchema, k as ColorSchema, kt as TEXT_LAYER_DEFAULTS, l as MAX_LIGHTS, ln as isEqual, lt as MIME_TYPES, m as bezier, mn as registerSignalDependency, mt as ModerationUnrefundableError, nn as getActiveMediaMetadata, nt as ExtendedLayerSchema, on as getMediaType, ot as GlobalCompositeOperation, p as Vector3Math, pn as progressSignal, pt as ModerationError, q as DATA_TYPE_EXTENSIONS, qt as createOutputItemSchema, rn as getFileDataMetadata, rt as FileAssetSchema, s as Easing, sn as getRenderFingerprint, st as HandleTypeVal, tn as generateId, tt as ExportResultSchema, u as Matrix4Math, un as isSignal, ut as MediaMetadataSchema, v as mapBlendModeToSkia, vn as signal, vt as NodeVisualConfigSchema, w as requiresIsolation, wn as updateClockSignals, wt as SignalGateDataSchema, x as measureTextAsync, xn as stampResult, xt as Signal, y as measureSpring, yn as signalBuilder, yt as OutputItemSchema, z as AudioExtractorSignalDataSchema, zt as VideoTextPropsSchema } from "./dist-B0vCkDzJ.mjs";
3
+ import { $ as parseMTL, B as ensureDevice, D as chartBridgeCache, G as inputStore, J as loadOBJ, K as loadFBX, M as drawChartNode, Q as parseFBX, S as SlugFontCache, V as generateExtrudedTextGeometry, X as mediaDecoderCache, Y as lutStore, _ as Renderer2D, a as Camera3D, b as ShadowPipeline, c as GlassPipeline, d as HeadlessGPUCanvasContextMock, et as parseOBJ, f as Light3D, h as Path3D, it as textureCache, l as HeadlessChartCanvasElementMock, n as AudioLatentTrackCache, nt as shaderStore, o as ChartGPUEngineBridge, p as MotionBlurPipeline, q as loadModel3D, r as AudioMeshDeformPipeline, rt as signalRegistry, s as EffectPipeline, t as AudioLatentEngine, u as HeadlessChartContainerMock, v as Renderer3D, w as SlugPipeline, y as SSAOPipeline } from "./dist-8vbhZYqX.mjs";
4
+ import "./renderers-CLJQRPVU-DuQ7-PaC.mjs";
5
+ import "./signals-CLaCq092.mjs";
6
+ import { t as AudioSignal } from "./audio-sZdRh_qg.mjs";
7
+ import { t as FontManager } from "./fonts-dn-pl4Pe.mjs";
8
+ import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "./audio-DvL7gQQ8.mjs";
9
+ import { Ct as OpticalFlowComputePipeline, D as Vignette, E as ColorKey, S as Vision, St as DepthNormalsComputePipeline, T as ColorBalance, Tt as TensorPipeline, _ as SelectiveColor, _t as pinNodeToLandmark, a as CustomEffect, b as TileOffset, bt as CannyComputePipeline, c as GradientMap, ct as COCO17_KEYPOINT_NAMES, d as Levels, dt as SpatialLandmarkTransformer, f as Modulate, ft as TemporalObjectTracker, g as SSAO, gt as analyzeSequence, h as Relight3D, ht as VisionRunner, i as Curves, l as HalftoneScreen, lt as PoseSkeletonRenderer, m as PBRGlass, mt as VisionNode, n as AudioSignalExtractor, o as DepthOfField, ot as COCO17_BONES, p as MotionBlur, pt as VisionBundle, r as Crop, s as FilmGrain, st as COCO17_KEYPOINTS, t as ApplyLUT, u as HighPass, ut as SegmentationTexturePool, v as ShadowsHighlights, vt as pinNodeToObject, w as Blur, wt as TemporalDeflickerPipeline, x as UnsharpMask, xt as ControlNetMultiplexer, y as TemporalDeflicker, yt as COCO_CLASSES } from "./effects-C3nV-k4T.mjs";
10
+ import { a as HeadlessWebGPURenderer, i as HeadlessMediaRenderer, n as renderFrameGrid, o as formatQaReport, r as resolveSamplePoints, s as renderSemaphore, t as computeGridLayout } from "./renderer-CMDIVxhv.mjs";
11
11
  import "./dist-cjs-Bsz2eGzl.mjs";
12
12
  import { z } from "zod";
13
13
  import path from "node:path";
14
14
  import fs from "node:fs/promises";
15
15
  import { loadYoga } from "yoga-layout/load";
16
16
 
17
+ //#region src/ids.ts
18
+ /**
19
+ * Default ids for nodes created without one. A counter per prefix rather than
20
+ * a random suffix: the same composition script builds the same ids on every
21
+ * run and in every render worker, so specs, caches and diffs stay stable.
22
+ */
23
+ const counters = /* @__PURE__ */ new Map();
24
+ function autoId(prefix) {
25
+ const n = (counters.get(prefix) ?? 0) + 1;
26
+ counters.set(prefix, n);
27
+ return `${prefix}-auto-${n}`;
28
+ }
29
+
30
+ //#endregion
17
31
  //#region src/rich-text.ts
18
32
  /**
19
33
  * Tagged template literal for authoring rich, multi-style text runs.
@@ -334,7 +348,8 @@ function containerStyle(node) {
334
348
  wrap
335
349
  };
336
350
  }
337
- function isAbsolutePositioned(node) {
351
+ function isAbsolutePositioned(layoutNode) {
352
+ const node = layoutNode;
338
353
  return node.position === "absolute" || node.position === void 0 && (node.x !== void 0 || node.y !== void 0);
339
354
  }
340
355
  /** Flow children (non-absolute). */
@@ -346,7 +361,8 @@ function absoluteChildren(node) {
346
361
  if ("children" in node && node.children) return node.children.filter((c) => isAbsolutePositioned(c));
347
362
  return [];
348
363
  }
349
- function buildYogaNode(yoga, node, parentExtent, measure, parentDir) {
364
+ function buildYogaNode(yoga, layoutNode, parentExtent, measure, parentDir) {
365
+ const node = layoutNode;
350
366
  const yn = yoga.Node.create();
351
367
  const dir = dirOf(node);
352
368
  const isContainer = dir !== null;
@@ -661,6 +677,10 @@ var LayerAnimation = class LayerAnimation$1 {
661
677
  static fromTo(prop, fromValue, toValue, options = {}) {
662
678
  return new LayerAnimation$1().fromTo(prop, fromValue, toValue, options);
663
679
  }
680
+ /** A track from a list of `[frame, value, ease?]` keyframes; see {@link LayerAnimation.keys}. */
681
+ static keys(prop, keyframes) {
682
+ return new LayerAnimation$1().keys(prop, keyframes);
683
+ }
664
684
  static signal(prop, signalOrHandleId, options = {}) {
665
685
  return new LayerAnimation$1().signal(prop, signalOrHandleId, options);
666
686
  }
@@ -764,6 +784,15 @@ var LayerAnimation = class LayerAnimation$1 {
764
784
  return this;
765
785
  }
766
786
  /**
787
+ * Adds several keyframes to prop's track at once:
788
+ * `.keys("scale", [[0, 0], [12, 1.1, "back.out"], [20, 1]])`.
789
+ * Frames are rounded to whole frames, so beat math can be passed straight in.
790
+ */
791
+ keys(prop, keyframes) {
792
+ for (const [frame, value, ease] of keyframes) this.keyframe(prop, Math.round(frame), value, ease);
793
+ return this;
794
+ }
795
+ /**
767
796
  * Animates opacity from 0 to 1 between startFrame and endFrame.
768
797
  */
769
798
  fadeIn(startFrame = 0, endFrame = 20, ease = "power2.out") {
@@ -2173,6 +2202,7 @@ const ExtendedGlyphPropertiesSchema = z.object({
2173
2202
  rotationX: z.number().optional(),
2174
2203
  rotationY: z.number().optional(),
2175
2204
  rotationZ: z.number().optional(),
2205
+ formation: VolumetricFormationConfigSchema.optional(),
2176
2206
  skew: z.number().optional(),
2177
2207
  skewAxis: z.number().optional(),
2178
2208
  tracking: z.number().optional(),
@@ -4449,7 +4479,7 @@ const BaseNodeFields = {
4449
4479
  fresnelPower: z.number().min(1).max(10).optional(),
4450
4480
  envIntensity: z.number().min(0).max(10).optional(),
4451
4481
  animation: LayerAnimationSchema.default({ tracks: [] }),
4452
- yolo: z.unknown().optional(),
4482
+ vision: z.unknown().optional(),
4453
4483
  relighting: z.unknown().optional()
4454
4484
  };
4455
4485
  const TextShadowSchema = z.object({
@@ -5087,11 +5117,12 @@ const CompositorProgramSchema = z.object({
5087
5117
  volume: z.number().min(0).max(1).default(1),
5088
5118
  fps: z.number().int().min(1).max(120).default(24),
5089
5119
  mode: z.enum(["Video", "Image"]).default("Video"),
5120
+ antialias3d: z.boolean().optional(),
5090
5121
  layout: z.array(LayoutNodeSchema).default([]),
5091
5122
  fonts: z.array(z.string()).optional(),
5092
5123
  signals: z.record(z.string(), z.unknown()).optional(),
5093
5124
  effects: z.array(z.unknown()).optional(),
5094
- yolo: z.unknown().optional(),
5125
+ vision: z.unknown().optional(),
5095
5126
  onRequestFrame: z.custom().optional()
5096
5127
  }).strict();
5097
5128
  /**
@@ -5152,7 +5183,8 @@ const SceneDefinitionSchema = z.object({
5152
5183
  ]).default("left")
5153
5184
  }).default({
5154
5185
  type: "cut",
5155
- durationFrames: 0
5186
+ durationFrames: 0,
5187
+ whipDirection: "left"
5156
5188
  })
5157
5189
  }).passthrough();
5158
5190
  function computeCarrierContinuity(stateAtCut, targetInitialState) {
@@ -5349,16 +5381,16 @@ function nodeToVirtualMedia(node, resolveMedia, fps, inheritedOffset = 0, compDu
5349
5381
  children: [media]
5350
5382
  };
5351
5383
  }
5352
- if (media && node.yolo) {
5353
- const yoloRaw = node.yolo;
5354
- const yoloOp = typeof yoloRaw.toOperation === "function" ? yoloRaw.toOperation() : yoloRaw;
5384
+ if (media && node.vision) {
5385
+ const visionRaw = node.vision;
5386
+ const visionOp = typeof visionRaw.toOperation === "function" ? visionRaw.toOperation() : visionRaw;
5355
5387
  media = {
5356
5388
  metadata: { ...media.metadata },
5357
5389
  operation: {
5358
- op: "Yolo",
5390
+ op: "Vision",
5359
5391
  id: node.id,
5360
- effect: yoloRaw,
5361
- ...yoloOp,
5392
+ effect: visionRaw,
5393
+ ...visionOp,
5362
5394
  dataType: media.operation.dataType
5363
5395
  },
5364
5396
  children: [media]
@@ -5389,7 +5421,7 @@ function nodeToVirtualMedia(node, resolveMedia, fps, inheritedOffset = 0, compDu
5389
5421
  let dur = typeof node.durationFrames === "number" && Number.isFinite(node.durationFrames) && node.durationFrames > 0 ? Math.round(node.durationFrames) : void 0;
5390
5422
  const defaultCompDuration = inheritedDurationFrames ?? Math.round((compDurationMs ?? 1e4) / 1e3 * fps);
5391
5423
  if (isContainer && children.length > 0) {
5392
- if (node.durationFrames === void 0) {
5424
+ if (dur === void 0) {
5393
5425
  const childEnds = children.map((c) => (c.operation?.startFrame ?? 0) + (c.operation?.durationFrames ?? defaultCompDuration));
5394
5426
  dur = Math.max(1, Math.max(...childEnds) - startFrame);
5395
5427
  }
@@ -5432,6 +5464,7 @@ function compositorToProgram(config, options) {
5432
5464
  fps,
5433
5465
  mode: config.mode ?? "Video",
5434
5466
  backgroundColor: config.backgroundColor,
5467
+ ...config.antialias3d !== void 0 && { antialias3d: config.antialias3d },
5435
5468
  volume: config.volume ?? 1,
5436
5469
  dataType: isVideoMode ? "Video" : "Image",
5437
5470
  layout: config.layout,
@@ -5452,14 +5485,14 @@ function compositorToProgram(config, options) {
5452
5485
  children: [rootMedia]
5453
5486
  };
5454
5487
  }
5455
- const yoloRaw = config.yolo ?? options.yolo;
5456
- if (yoloRaw) {
5457
- const yoloOp = typeof yoloRaw.toOperation === "function" ? yoloRaw.toOperation() : yoloRaw;
5488
+ const visionRaw = config.vision ?? options.vision;
5489
+ if (visionRaw) {
5490
+ const visionOp = typeof visionRaw.toOperation === "function" ? visionRaw.toOperation() : visionRaw;
5458
5491
  rootMedia = {
5459
5492
  metadata: { ...rootMedia.metadata },
5460
5493
  operation: {
5461
- op: "Yolo",
5462
- ...yoloOp,
5494
+ op: "Vision",
5495
+ ...visionOp,
5463
5496
  dataType: rootMedia.operation.dataType
5464
5497
  },
5465
5498
  children: [rootMedia]
@@ -5480,6 +5513,12 @@ function collectNodeOps(nodes) {
5480
5513
 
5481
5514
  //#endregion
5482
5515
  //#region src/shapes3d.ts
5516
+ /** Largest initial scale of an extruded text node along its outline's axes. */
5517
+ function extrudedTextScale(options) {
5518
+ const scale = options.scale ?? 1;
5519
+ const s = Math.max(Math.abs(scale * (options.scaleX ?? 1)), Math.abs(scale * (options.scaleY ?? 1)));
5520
+ return s > 0 ? s : 1;
5521
+ }
5483
5522
  const Layer3D = {
5484
5523
  cube(options) {
5485
5524
  const size$1 = options.size;
@@ -5589,7 +5628,7 @@ const Layer3D = {
5589
5628
  })
5590
5629
  ];
5591
5630
  const container = Layer.box({
5592
- id: options.id ?? "cube-" + Math.random().toString(36).slice(2, 9),
5631
+ id: options.id ?? autoId("cube"),
5593
5632
  position: "absolute",
5594
5633
  x: options.x ?? 0,
5595
5634
  y: options.y ?? 0,
@@ -5633,7 +5672,7 @@ const Layer3D = {
5633
5672
  return node;
5634
5673
  });
5635
5674
  const container = Layer.box({
5636
- id: options.id ?? "carousel-" + Math.random().toString(36).slice(2, 9),
5675
+ id: options.id ?? autoId("carousel"),
5637
5676
  position: "absolute",
5638
5677
  x: options.x ?? 0,
5639
5678
  y: options.y ?? 0,
@@ -5684,7 +5723,7 @@ const Layer3D = {
5684
5723
  }));
5685
5724
  }
5686
5725
  const container = Layer.box({
5687
- id: options.id ?? "prism-" + Math.random().toString(36).slice(2, 9),
5726
+ id: options.id ?? autoId("prism"),
5688
5727
  position: "absolute",
5689
5728
  x: options.x ?? 0,
5690
5729
  y: options.y ?? 0,
@@ -5709,7 +5748,7 @@ const Layer3D = {
5709
5748
  },
5710
5749
  plane(options) {
5711
5750
  return Layer.box({
5712
- id: options.id ?? "plane-" + Math.random().toString(36).slice(2, 9),
5751
+ id: options.id ?? autoId("plane"),
5713
5752
  position: "absolute",
5714
5753
  width: options.width,
5715
5754
  height: options.height,
@@ -5729,7 +5768,7 @@ const Layer3D = {
5729
5768
  },
5730
5769
  grid(options) {
5731
5770
  const { width, height } = options;
5732
- const id = options.id ?? "grid-" + Math.random().toString(36).slice(2, 9);
5771
+ const id = options.id ?? autoId("grid");
5733
5772
  const divisions = Math.max(1, Math.round(options.divisions ?? 10));
5734
5773
  const lineWidth = options.lineWidth ?? 2;
5735
5774
  const color$1 = options.color ?? "rgba(59, 130, 246, 0.5)";
@@ -5784,11 +5823,10 @@ const Layer3D = {
5784
5823
  text(options) {
5785
5824
  if (options.extrusionDepth && options.extrusionDepth > 0) return Layer3D.extrudedText({
5786
5825
  ...options,
5787
- depth: options.extrusionDepth,
5788
- slices: options.extrusionSteps
5826
+ depth: options.extrusionDepth
5789
5827
  });
5790
5828
  return Layer.text(options.text, {
5791
- id: options.id ?? "text3d-" + Math.random().toString(36).slice(2, 9),
5829
+ id: options.id ?? autoId("text3d"),
5792
5830
  position: "absolute",
5793
5831
  x: options.x ?? 0,
5794
5832
  y: options.y ?? 0,
@@ -5824,6 +5862,7 @@ const Layer3D = {
5824
5862
  extrudedText(options) {
5825
5863
  const { depth, text, fill = "#ffffff", bevelColor } = options;
5826
5864
  let modelData;
5865
+ const curveTolerance = (options.curveTolerance ?? .1) / extrudedTextScale(options);
5827
5866
  const parsedFont = (options.fontFamily ? SlugFontCache.getParsed(options.fontFamily) : null) ?? SlugFontCache.getParsed("Inter") ?? SlugFontCache.getParsed("Unbounded") ?? SlugFontCache.getFirstParsed();
5828
5867
  if (parsedFont) modelData = generateExtrudedTextGeometry({
5829
5868
  text,
@@ -5832,19 +5871,18 @@ const Layer3D = {
5832
5871
  depth,
5833
5872
  fill,
5834
5873
  bevelColor,
5835
- curveSegments: options.curveSegments ?? 5,
5874
+ curveSegments: options.curveSegments,
5875
+ curveTolerance,
5836
5876
  align: options.align,
5837
5877
  verticalAlign: options.verticalAlign,
5838
5878
  letterSpacing: options.letterSpacing,
5839
- material: options.material,
5879
+ material: options.material === "lit" || options.material === "unlit" || options.material === "toon" ? options.material : void 0,
5840
5880
  shininess: options.shininess,
5841
5881
  roughness: options.roughness,
5842
- specularIntensity: options.specularIntensity,
5843
- ambientIntensity: options.ambientIntensity,
5844
5882
  metallic: options.metallic
5845
5883
  }).modelData;
5846
5884
  const modelNode = Layer.model({
5847
- id: options.id ?? `extruded-text-${Math.random().toString(36).slice(2, 9)}`,
5885
+ id: options.id ?? autoId("extruded-text"),
5848
5886
  modelData,
5849
5887
  is3D: true,
5850
5888
  x: options.x ?? 0,
@@ -5865,7 +5903,10 @@ const Layer3D = {
5865
5903
  ambientIntensity: options.ambientIntensity ?? 1,
5866
5904
  metallic: options.metallic,
5867
5905
  twoSided: options.twoSided ?? true,
5868
- text3dOptions: options
5906
+ text3dOptions: {
5907
+ ...options,
5908
+ curveTolerance
5909
+ }
5869
5910
  });
5870
5911
  return Object.assign(modelNode, {
5871
5912
  faces: [modelNode],
@@ -5947,9 +5988,9 @@ function decorateTrackSignals(track, source) {
5947
5988
  });
5948
5989
  return track;
5949
5990
  }
5950
- const origYoloAttach = YoloNode$1.attach;
5951
- YoloNode$1.attach = function(source, config, bundleOptions) {
5952
- const bundle = origYoloAttach.call(this, source, config, bundleOptions);
5991
+ const origVisionAttach = VisionNode.attach;
5992
+ VisionNode.attach = function(source, config, bundleOptions) {
5993
+ const bundle = origVisionAttach.call(this, source, config, bundleOptions);
5953
5994
  if (bundle?.objects) {
5954
5995
  const src = source;
5955
5996
  const origGet = bundle.objects.get.bind(bundle.objects);
@@ -6052,67 +6093,60 @@ var Composition = class Composition {
6052
6093
  fps;
6053
6094
  durationMs;
6054
6095
  backgroundColor;
6096
+ antialias3d;
6055
6097
  fonts;
6056
6098
  children = [];
6057
6099
  audioTracks = [];
6058
6100
  signals = {};
6059
6101
  _frameHooks = [];
6060
- _yoloConfig;
6061
- _yoloBundle;
6102
+ _visionConfig;
6103
+ _visionBundle;
6062
6104
  _effects = [];
6063
6105
  /**
6064
6106
  * Applies a whole-composition post-processing effect or vision pipeline.
6065
6107
  */
6066
6108
  apply(effect) {
6067
- if (effect && typeof effect === "object" && (effect.op === "MediaPipe" || effect.op === "Yolo")) {
6068
- this.withYolo(effect);
6109
+ if (effect instanceof Vision) {
6110
+ this.withVision(effect);
6069
6111
  return this;
6070
6112
  }
6071
6113
  this._effects.push(effect);
6072
6114
  return this;
6073
6115
  }
6074
6116
  /**
6075
- * @deprecated Use `withYolo`. Alias that maps the legacy MediaPipe config onto the YOLO
6076
- * engine; the legacy option shape (`enablePoseLandmarks`, `enableSegmentation`, …) is accepted.
6117
+ * Runs vision on the whole composition — the rendered frame (composition, blur, crop,
6118
+ * anything upstream) is the inference input. Models are LAZY: nothing downloads until
6119
+ * the first frame actually runs a task.
6120
+ * Returns the reactive VisionBundle (objects / masks / pose / classes signals).
6077
6121
  */
6078
- withMediaPipe(config = {}) {
6079
- const props = config instanceof MediaPipe ? config.config : config;
6080
- return this.withYolo(new MediaPipe(props));
6081
- }
6082
- /**
6083
- * Attaches YOLO11 on top of the whole composition in one go — the rendered frame
6084
- * (composition, blur, modulate, crop — anything upstream) is the inference input.
6085
- * Models are LAZY: nothing downloads until the first frame actually runs a task.
6086
- * Returns a reactive YoloVisionBundle (objects / masks / pose / classes signals).
6087
- */
6088
- withYolo(config = {}) {
6089
- if (!this._yoloBundle) this._yoloBundle = new YoloVisionBundle({
6122
+ withVision(config = {}) {
6123
+ this._visionBundle ??= new VisionBundle({
6090
6124
  width: this.width,
6091
6125
  height: this.height,
6092
6126
  fps: this.fps
6093
6127
  });
6094
- this._yoloConfig = {
6095
- ...config instanceof Yolo ? config.config : config,
6096
- visionBundle: this._yoloBundle
6128
+ this._visionConfig = {
6129
+ ...config instanceof Vision ? config.config : config,
6130
+ visionBundle: this._visionBundle
6097
6131
  };
6098
- return this._yoloBundle;
6132
+ return this._visionBundle;
6099
6133
  }
6100
6134
  /**
6101
- * One-shot, ffmpeg-free vision analysis of a media source (specs/yolov4plan.ts §Phase C).
6135
+ * One-shot, ffmpeg-free vision analysis of a media source.
6102
6136
  *
6103
6137
  * Decodes frames through the same mediabunny pipeline the renderer uses, runs the requested
6104
- * YOLO tasks lazily (only those models download), temporally tracks detections, and returns
6105
- * a zod-serializable report. The decoder is released and the runner closed on completion.
6138
+ * tasks lazily (only those models download), temporally tracks detections, and returns a
6139
+ * zod-serializable report. The decoder is released and the runner closed on completion.
6106
6140
  */
6107
6141
  async analyzeVisionSequence(source, options = {}) {
6108
6142
  const fps = options.fps ?? this.fps;
6109
6143
  const durationMs = this.durationMs ?? await this.computeDuration();
6110
6144
  const totalFrames = options.totalFrames ?? Math.max(1, Math.round(durationMs / 1e3 * fps));
6111
- const runner = YoloVisionRunner.create({
6112
- ...options.modelsDir !== void 0 ? { modelsDir: options.modelsDir } : {},
6113
- ...options.baseUrl !== void 0 ? { baseUrl: options.baseUrl } : {},
6145
+ const runner = VisionRunner.create({
6146
+ modelsDir: options.modelsDir,
6147
+ baseUrl: options.baseUrl,
6114
6148
  ...options.confidence !== void 0 ? { confidence: options.confidence } : {},
6115
- ...options.iouThreshold !== void 0 ? { iouThreshold: options.iouThreshold } : {}
6149
+ ...options.variant !== void 0 ? { variant: options.variant } : {}
6116
6150
  });
6117
6151
  const decoder = mediaDecoderCache.getVideo(source, true);
6118
6152
  async function* frameSource() {
@@ -6158,6 +6192,7 @@ var Composition = class Composition {
6158
6192
  this.fps = options.fps ?? 60;
6159
6193
  this.durationMs = options.durationMs ?? (options.durationFrames !== void 0 ? options.durationFrames / this.fps * 1e3 : void 0);
6160
6194
  this.backgroundColor = options.backgroundColor ?? "#000000";
6195
+ this.antialias3d = options.antialias3d;
6161
6196
  this.fonts = options.fonts ?? [];
6162
6197
  this.signals = options.signals ?? {};
6163
6198
  }
@@ -6170,7 +6205,7 @@ var Composition = class Composition {
6170
6205
  }
6171
6206
  add(layerOrFirst, ...rest) {
6172
6207
  if (layerOrFirst instanceof TensorPipeline) this.children.push(layerOrFirst.toNode());
6173
- else if (layerOrFirst instanceof YoloNode$1) this.children.push(layerOrFirst.toNode());
6208
+ else if (layerOrFirst instanceof VisionNode) this.children.push(layerOrFirst.toNode());
6174
6209
  else if (layerOrFirst && typeof layerOrFirst === "object" && "node" in layerOrFirst) {
6175
6210
  this.add(layerOrFirst.node, ...rest);
6176
6211
  return this;
@@ -6200,7 +6235,7 @@ var Composition = class Composition {
6200
6235
  * 3. Top Layer: Subject cutout video with continuous matte alpha registered at identical coordinates
6201
6236
  */
6202
6237
  addSubjectSandwich(options) {
6203
- const src = typeof options.source === "string" ? options.source : options.source.src ?? "";
6238
+ const src = typeof options.source === "string" ? options.source : options.source.inputHandleId ?? "";
6204
6239
  const fit = options.fit ?? "cover";
6205
6240
  const feather = options.feather ?? 4;
6206
6241
  const featherVal = feather > 1 ? feather / 100 : feather;
@@ -6226,7 +6261,7 @@ var Composition = class Composition {
6226
6261
  fit,
6227
6262
  muted: true,
6228
6263
  volume: 0
6229
- }).withYolo({
6264
+ }).withVision({
6230
6265
  mode: "matte",
6231
6266
  enableSegmentation: true,
6232
6267
  variant,
@@ -6244,7 +6279,7 @@ var Composition = class Composition {
6244
6279
  * tracked subject with smooth camera physics and lead headroom.
6245
6280
  */
6246
6281
  addSmartFraming(options) {
6247
- const src = typeof options.source === "string" ? options.source : options.source.src ?? "";
6282
+ const src = typeof options.source === "string" ? options.source : options.source.inputHandleId ?? "";
6248
6283
  const damping = Math.max(0, Math.min(.99, options.damping ?? .8));
6249
6284
  const headroom = options.leadHeadroom ?? .18;
6250
6285
  const compW = this.width;
@@ -6336,7 +6371,7 @@ var Composition = class Composition {
6336
6371
  muted: options.muted ?? false,
6337
6372
  volume: options.muted ? 0 : options.volume ?? 1
6338
6373
  });
6339
- container.children.push(videoPlate);
6374
+ (container.children ??= []).push(videoPlate);
6340
6375
  this.add(container);
6341
6376
  return this;
6342
6377
  }
@@ -6353,7 +6388,7 @@ var Composition = class Composition {
6353
6388
  fps: this.fps,
6354
6389
  label: "outline_pulse"
6355
6390
  }) : 1;
6356
- const src = typeof options.source === "string" ? options.source : options.source?.src ?? "";
6391
+ const src = typeof options.source === "string" ? options.source : options.source?.inputHandleId ?? "";
6357
6392
  const outlineLayer = Layer.box({
6358
6393
  width: compW,
6359
6394
  height: compH,
@@ -6372,11 +6407,11 @@ var Composition = class Composition {
6372
6407
  fit: "cover",
6373
6408
  muted: true,
6374
6409
  volume: 0
6375
- }).withYolo({
6410
+ }).withVision({
6376
6411
  mode: "mask",
6377
6412
  enableSegmentation: true
6378
6413
  });
6379
- outlineLayer.children.push(maskVideo);
6414
+ (outlineLayer.children ??= []).push(maskVideo);
6380
6415
  }
6381
6416
  outlineLayer.apply(new Blur({
6382
6417
  strength: blur,
@@ -6469,11 +6504,12 @@ var Composition = class Composition {
6469
6504
  fps: this.fps,
6470
6505
  mode: "Video",
6471
6506
  backgroundColor: this.backgroundColor,
6507
+ ...this.antialias3d !== void 0 && { antialias3d: this.antialias3d },
6472
6508
  layout: layoutItems,
6473
6509
  fonts: mergedFonts,
6474
6510
  signals: this.signals,
6475
6511
  ...this._effects.length > 0 && { effects: this._effects },
6476
- ...this._yoloConfig && { yolo: this._yoloConfig },
6512
+ ...this._visionConfig && { vision: this._visionConfig },
6477
6513
  ...this._frameHooks.length > 0 && { onRequestFrame: (ctx) => this.notifyFrame(ctx) }
6478
6514
  };
6479
6515
  }
@@ -6487,7 +6523,7 @@ var Composition = class Composition {
6487
6523
  durationMs: options.durationMs ?? this.durationMs,
6488
6524
  signals: options.signals ?? this.signals,
6489
6525
  ...this._effects.length > 0 && { effects: this._effects },
6490
- ...this._yoloConfig && { yolo: this._yoloConfig },
6526
+ ...this._visionConfig && { vision: this._visionConfig },
6491
6527
  ...options
6492
6528
  });
6493
6529
  }
@@ -6503,7 +6539,7 @@ var Composition = class Composition {
6503
6539
  durationMs,
6504
6540
  signals: options.signals ?? this.signals,
6505
6541
  ...this._effects.length > 0 && { effects: this._effects },
6506
- ...this._yoloConfig && { yolo: this._yoloConfig },
6542
+ ...this._visionConfig && { vision: this._visionConfig },
6507
6543
  ...options
6508
6544
  });
6509
6545
  }
@@ -6586,16 +6622,6 @@ function withAnimation(node) {
6586
6622
  writable: true,
6587
6623
  configurable: true
6588
6624
  });
6589
- Object.defineProperty(target, "driveBlendshapes", {
6590
- value: (blendshapes) => {
6591
- target.blendshapes = blendshapes;
6592
- target.hasBlendshapes = true;
6593
- return target;
6594
- },
6595
- enumerable: false,
6596
- writable: true,
6597
- configurable: true
6598
- });
6599
6625
  Object.defineProperty(target, "withMask", {
6600
6626
  value: (mask) => {
6601
6627
  target.mask = mask;
@@ -6632,18 +6658,9 @@ function withAnimation(node) {
6632
6658
  writable: true,
6633
6659
  configurable: true
6634
6660
  });
6635
- Object.defineProperty(target, "withMediaPipe", {
6636
- value: (config) => {
6637
- target.yolo = config instanceof MediaPipe ? config : new MediaPipe(config);
6638
- return target;
6639
- },
6640
- enumerable: false,
6641
- writable: true,
6642
- configurable: true
6643
- });
6644
- Object.defineProperty(target, "withYolo", {
6661
+ Object.defineProperty(target, "withVision", {
6645
6662
  value: (config) => {
6646
- target.yolo = config instanceof Yolo ? config : new Yolo(config);
6663
+ target.vision = config instanceof Vision ? config : new Vision(config);
6647
6664
  return target;
6648
6665
  },
6649
6666
  enumerable: false,
@@ -6744,7 +6761,7 @@ function withAnimation(node) {
6744
6761
  }
6745
6762
  const Layer = {
6746
6763
  video: (src, options = {}) => withAnimation({
6747
- id: options.id ?? "video-" + Math.random().toString(36).slice(2, 9),
6764
+ id: options.id ?? autoId("video"),
6748
6765
  kind: "media",
6749
6766
  inputHandleId: src,
6750
6767
  dataType: "Video",
@@ -6752,7 +6769,7 @@ const Layer = {
6752
6769
  ...options
6753
6770
  }),
6754
6771
  image: (src, options = {}) => withAnimation({
6755
- id: options.id ?? "img-" + Math.random().toString(36).slice(2, 9),
6772
+ id: options.id ?? autoId("img"),
6756
6773
  kind: "media",
6757
6774
  inputHandleId: src,
6758
6775
  dataType: "Image",
@@ -6760,7 +6777,7 @@ const Layer = {
6760
6777
  ...options
6761
6778
  }),
6762
6779
  svg: (src, options = {}) => withAnimation({
6763
- id: options.id ?? "svg-" + Math.random().toString(36).slice(2, 9),
6780
+ id: options.id ?? autoId("svg"),
6764
6781
  kind: "media",
6765
6782
  inputHandleId: src,
6766
6783
  dataType: "SVG",
@@ -6768,7 +6785,7 @@ const Layer = {
6768
6785
  ...options
6769
6786
  }),
6770
6787
  lottie: (src, options = {}) => withAnimation({
6771
- id: options.id ?? "lottie-" + Math.random().toString(36).slice(2, 9),
6788
+ id: options.id ?? autoId("lottie"),
6772
6789
  kind: "media",
6773
6790
  inputHandleId: src,
6774
6791
  dataType: "Lottie",
@@ -6776,7 +6793,7 @@ const Layer = {
6776
6793
  ...options
6777
6794
  }),
6778
6795
  audio: (src, options = {}) => withAnimation({
6779
- id: options.id ?? "audio-" + Math.random().toString(36).slice(2, 9),
6796
+ id: options.id ?? autoId("audio"),
6780
6797
  kind: "media",
6781
6798
  inputHandleId: src,
6782
6799
  dataType: "Audio",
@@ -6797,7 +6814,7 @@ const Layer = {
6797
6814
  else textContent = options.text ?? "";
6798
6815
  else textContent = typeof contentOrOptions === "string" ? contentOrOptions : String(contentOrOptions ?? "");
6799
6816
  return withAnimation({
6800
- id: options.id ?? "text-" + Math.random().toString(36).slice(2, 9),
6817
+ id: options.id ?? autoId("text"),
6801
6818
  kind: "text",
6802
6819
  fontFamily: options.fontFamily ?? FontManager.getAll()[0]?.family ?? "Inter",
6803
6820
  fontSize: options.fontSize ?? 48,
@@ -6808,7 +6825,7 @@ const Layer = {
6808
6825
  });
6809
6826
  },
6810
6827
  caption: (src, options = {}) => withAnimation({
6811
- id: options.id ?? "caption-" + Math.random().toString(36).slice(2, 9),
6828
+ id: options.id ?? autoId("caption"),
6812
6829
  kind: "media",
6813
6830
  inputHandleId: src,
6814
6831
  dataType: options.dataType ?? "Caption",
@@ -6818,21 +6835,21 @@ const Layer = {
6818
6835
  ...options
6819
6836
  }),
6820
6837
  shape: (shapeType = "rect", options = {}) => withAnimation({
6821
- id: options.id ?? "shape-" + Math.random().toString(36).slice(2, 9),
6838
+ id: options.id ?? autoId("shape"),
6822
6839
  kind: "shape",
6823
6840
  shapeType: options.shapeType ?? shapeType,
6824
6841
  fillColor: options.fillColor ?? "#3b82f6",
6825
6842
  ...options
6826
6843
  }),
6827
6844
  flex: (options = {}) => withAnimation({
6828
- id: options.id ?? "flex-" + Math.random().toString(36).slice(2, 9),
6845
+ id: options.id ?? autoId("flex"),
6829
6846
  kind: "flex",
6830
6847
  dir: options.dir ?? "column",
6831
6848
  children: options.children ?? [],
6832
6849
  ...options
6833
6850
  }),
6834
6851
  box: (options = {}) => withAnimation({
6835
- id: options.id ?? "box-" + Math.random().toString(36).slice(2, 9),
6852
+ id: options.id ?? autoId("box"),
6836
6853
  kind: "box",
6837
6854
  background: options.background ?? "transparent",
6838
6855
  children: options.children ?? [],
@@ -6873,7 +6890,7 @@ const Layer = {
6873
6890
  const boxWidth = target ? target.bounds.screenWidth.add(padding * 2) : opts.width !== void 0 ? opts.width : compW;
6874
6891
  const boxHeight = target ? target.bounds.screenHeight.add(padding * 2) : opts.height !== void 0 ? opts.height : compH;
6875
6892
  const boxChildren = [innerMedia, ...opts.children ?? []];
6876
- const boxId = opts.id ?? (target ? `section-track-${target.trackId}-${Math.random().toString(36).slice(2, 8)}` : `section-${Math.random().toString(36).slice(2, 8)}`);
6893
+ const boxId = opts.id ?? (target ? autoId(`section-track-${target.trackId}`) : autoId("section"));
6877
6894
  let box = Layer.box({
6878
6895
  id: boxId,
6879
6896
  position: opts.position ?? "absolute",
@@ -6947,13 +6964,13 @@ const Layer = {
6947
6964
  });
6948
6965
  },
6949
6966
  chart: (options, props = {}) => withAnimation({
6950
- id: props.id ?? "chart-" + Math.random().toString(36).slice(2, 9),
6967
+ id: props.id ?? autoId("chart"),
6951
6968
  kind: "chart",
6952
6969
  chartOptions: options,
6953
6970
  ...props
6954
6971
  }),
6955
6972
  camera: (options = {}) => withAnimation({
6956
- id: options.id ?? "camera-" + Math.random().toString(36).slice(2, 9),
6973
+ id: options.id ?? autoId("camera"),
6957
6974
  kind: "camera",
6958
6975
  mode: options.mode ?? "lookAt",
6959
6976
  pitch: options.pitch ?? 0,
@@ -6962,7 +6979,7 @@ const Layer = {
6962
6979
  ...options
6963
6980
  }),
6964
6981
  light: (options = {}) => withAnimation({
6965
- id: options.id ?? "light-" + Math.random().toString(36).slice(2, 9),
6982
+ id: options.id ?? autoId("light"),
6966
6983
  kind: "light",
6967
6984
  lightType: options.lightType ?? "point",
6968
6985
  color: options.color ?? "#ffffff",
@@ -6978,7 +6995,7 @@ const Layer = {
6978
6995
  plane3d: (options) => Layer3D.plane(options),
6979
6996
  prism3d: (options) => Layer3D.prism(options),
6980
6997
  model: (options = {}) => withAnimation({
6981
- id: options.id ?? "model3d-" + Math.random().toString(36).slice(2, 9),
6998
+ id: options.id ?? autoId("model3d"),
6982
6999
  kind: "model3d",
6983
7000
  is3D: options.is3D ?? true,
6984
7001
  modelFormat: options.modelFormat ?? "auto",
@@ -7038,7 +7055,7 @@ const Layer = {
7038
7055
  };
7039
7056
  const Light = {
7040
7057
  ambient: (color$1 = "#ffffff", intensity = .5, options = {}) => withAnimation({
7041
- id: options.id ?? "light-ambient-" + Math.random().toString(36).slice(2, 9),
7058
+ id: options.id ?? autoId("light-ambient"),
7042
7059
  kind: "light",
7043
7060
  lightType: "ambient",
7044
7061
  color: color$1,
@@ -7046,7 +7063,7 @@ const Light = {
7046
7063
  ...options
7047
7064
  }),
7048
7065
  directional: (options = {}) => withAnimation({
7049
- id: options.id ?? "light-directional-" + Math.random().toString(36).slice(2, 9),
7066
+ id: options.id ?? autoId("light-directional"),
7050
7067
  kind: "light",
7051
7068
  lightType: "directional",
7052
7069
  color: options.color ?? "#ffffff",
@@ -7060,7 +7077,7 @@ const Light = {
7060
7077
  ...options
7061
7078
  }),
7062
7079
  point: (options = {}) => withAnimation({
7063
- id: options.id ?? "light-point-" + Math.random().toString(36).slice(2, 9),
7080
+ id: options.id ?? autoId("light-point"),
7064
7081
  kind: "light",
7065
7082
  lightType: "point",
7066
7083
  color: options.color ?? "#ffffff",
@@ -7073,7 +7090,7 @@ const Light = {
7073
7090
  ...options
7074
7091
  }),
7075
7092
  spot: (options = {}) => withAnimation({
7076
- id: options.id ?? "light-spot-" + Math.random().toString(36).slice(2, 9),
7093
+ id: options.id ?? autoId("light-spot"),
7077
7094
  kind: "light",
7078
7095
  lightType: "spot",
7079
7096
  color: options.color ?? "#ffffff",
@@ -7122,8 +7139,7 @@ const Effect = Object.assign(Effect$1, {
7122
7139
  pbrGlass: (config) => new PBRGlass(config),
7123
7140
  depthOfField: (config) => new DepthOfField(config),
7124
7141
  crop: (config) => new Crop(config),
7125
- mediaPipe: (config) => new MediaPipe(config),
7126
- yolo: (config) => new Yolo(config),
7142
+ vision: (config) => new Vision(config),
7127
7143
  relight3d: (config) => new Relight3D(config),
7128
7144
  modulate: (config) => new Modulate(config),
7129
7145
  deflicker: (config) => new TemporalDeflicker(config),
@@ -7131,5 +7147,5 @@ const Effect = Object.assign(Effect$1, {
7131
7147
  });
7132
7148
 
7133
7149
  //#endregion
7134
- export { AETextAnimatorSchema, AdvancedTextAnimatorBuilder, AdvancedTextAnimatorSchema, AnchorGroupingSchema, AnchorPresetSchema, AnimatableGlyphPropsSchema, AnimationTypeSchema, AnyOutputUnionSchema, ApplyLUT, AudioExtractorSignalDataSchema, AudioLatentEngine, AudioLatentTrackCache, AudioMeshDeformPipeline, AudioSignal, AudioSignalExtractor, AudioSpectrumTypographySchema, BaseMediaOperationPropsSchema, BaseVideoLayerPropsSchema, Blur, BoxNodeSchema, CAPTION_LAYER_DEFAULTS, COMPOSITE_OPERATIONS, COMPOSITOR_DEFAULTS, Camera3D, CameraAnimation, CameraNodeSchema, CannyComputePipeline, CarrierHandoffConfigSchema, ChartAreaStyleSchema, ChartAxisSchema, ChartDataPoint2DSchema, ChartDataPointOHLCSchema, ChartGPUEngineBridge, ChartGPUOptionsSchema, ChartLineStyleSchema, ChartNodeSchema, ChartPointStyleSchema, ChartSeriesSchema, ChartSeriesTypeSchema, ChromaticGlitchConfigSchema, ColorBalance, ColorKey, ColorStopSchema, Composition, CompositionChartNodeSchema, CompositorProgramSchema, ConfigHandleSchema, ConfigSchemaRegistry, ControlNetMultiplexer, Crop, CubicBezierSegmentSchema, Curves, CustomEffect, DATA_TYPE_EXTENSIONS, DEFAULT_DURATION_MS, DEFAULT_FPS, DEFAULT_MEDIA_DIMENSION, DataType, DataTypeVal, DataTypes, DepthNormalsComputePipeline, DepthOfField, DynamicStrokePropertiesSchema, Easing, Effect, EffectPipeline, EnhancedTextNodeSchema, ExportResultSchema, ExpressionSelectorSchema, ExtendedGlyphPropertiesSchema, ExtendedLayerSchema, FileAssetSchema, FileDataSchema, FilmGrain, FlexNodeSchema, FontManager, GeneratorSignalDataSchema, GlassPipeline, GlobalCompositeOperation, GlyphAnchorGroupingSchema, GlyphAnchorPointSchema, GradientMap, HalftoneScreen, HandleTypeVal, HeadlessChartCanvasElementMock, HeadlessChartContainerMock, HeadlessGPUCanvasContextMock, HeadlessMediaRenderer, HeadlessWebGPURenderer, HighPass, JsonValueSchema, KineticMarqueeConfigSchema, LIGHT_UNIFORM_SIZE_BYTES, Layer, Layer3D, LayerAnimation, LayoutNodeSchema, Levels, Light, Light3D, LightNodeSchema, LightTypeSchema, LineSpacingDynamicsSchema, LongShadowConfigSchema, MAX_LIGHTS, MEDIAPIPE_TO_YOLO_POSE_INDEX, MIME_TYPES, MaterialTypeSchema, Matrix4Math, Media, MediaMetadataSchema, MediaNodeSchema, MediaOperationSchema, MediaPipe, MediaSourceSchema, Model3DNodeSchema, ModerationError, ModerationUnrefundableError, Modulate, MotionBlur, MotionBlurPipeline, MultiOutputGenericSchema, NodeMetadataSchema, NodeResultSchema, NodeVisualConfigSchema, OpticalFlowComputePipeline, OutputItemSchema, PBRGlass, POSE_LANDMARKS_YOLO, ParticleDissolveConfigSchema, Path3D, PlaybackContext, PlaybackProvider, PoseSkeletonRenderer, ProgrammaticSignal, Relight3D, Renderer2D, Renderer3D, SSAO, SSAOPipeline, Scene, SceneDefinitionSchema, SceneTransitionTypeSchema, SegmentationTexturePool, SelectiveColor, SelectorBasedOnSchema, SelectorModeSchema, SelectorShapeSchema, SelectorUnitsSchema, Sequence, ShadowPipeline, ShadowsHighlights, ShapeNodeSchema, Signal, SignalChannelMetaSchema, SignalDataSchema, SignalGateDataSchema, SignalMathDataSchema, SignalStatsSchema, SingleOutputGenericSchema, SkewPropertiesSchema, SlugFontCache, SlugPipeline, SourceOperationSchema, Spatial3DPropertiesSchema, SpatialLandmarkTransformer, SpringPhysicsSchema, TEXT_LAYER_DEFAULTS, TemporalDeflicker, TemporalDeflickerPipeline, TemporalObjectTracker, TensorPipeline, TextAnchorConfigSchema, TextAnimator, TextAnimatorBuilder, TextAnimatorSchema, TextCursorConfigSchema, TextCursorStyleSchema, TextNodeSchema, TextOperationSchema, TextPathBuilder, TextPathOptionsSchema, TextPathSourceSchema, TextRangeSelectorSchema, TextScrambleConfigSchema, TextSelectorSchema, TextSignalSelectorSchema, TextSpanMarkSchema, TextSpanSchema, TextWigglySelectorSchema, TileOffset, TimelineSegmentSchema, TimelineTransformSchema, TransitionSchema, TransitionTypeSchema, TypewriterAnimatorSchema, TypingCadenceSchema, UnsharpMask, VariableFontAxesSchema, Vec2Schema, Vector3Math, VideoAnimationSchema, VideoLayerTypeSchema, VideoSpatialPropsSchema, VideoStylePropsSchema, VideoTextPropsSchema, VideoTimingPropsSchema, Vignette, VirtualMediaDataSchema, VolumetricFormationConfigSchema, VolumetricFormationModeSchema, YOLO_COCO17_BONES, YOLO_POSE_KEYPOINT_NAMES, Yolo, YoloNode$1 as YoloNode, YoloVisionBundle, YoloVisionRunner, accent, analyzeSequence, appendOperation, applyStaggerToChildren, bezier, blurRegion, bold, buildPathLUT, calculateSequenceTimeline, chartBridgeCache, checkNodeResultCache, code, collectNodeOps, color, compositorToProgram, computeAnchorPivotOffset, computeCarrierContinuity, computeGridLayout, computeLayout, computeLayoutSync, computeLineLeadingDisplacement, computeRangeSelectorWeight, computeStaggerDelay, computeStrokeRect, computeVideoCropRenderProps, computed, cosineSignal, createOutputItemSchema, createVirtualMedia, dataTypeColors, deserializeSignalData, deterministicWigglyNoise, distanceToCurveParameter, drawChartNode, editTrackedRegion, ellipseToCubicBeziers, encodeStereoWav, ensureDevice, evaluateAnimationAtFrame, evaluateCubicBezier, evaluateCubicBezierDerivative, evaluateExpressionSelector, evaluateMarqueeOffset, evaluateSelectorCombination, evaluateSkewMatrix, evaluateSpringProgress, evaluateTrackAtFrame, evaluateTypewriterState, evaluateVolumetricFormation, extractSvgDimensions, findSourceAsset, frameArraySignal, frameSignal, generateArcLengthLUT, generateId, generatePathSegments, getActiveMediaMetadata, getFileDataMetadata, getFingerprint, getLeafMediaType, getMediaType, getRenderFingerprint, getScramblePool, getShuffledOrder, hasDelayRender, hasOnlySingleSource, inputStore, interpolate, isEqual, isSignal, isVirtualMediaData, italic, loadFBX, loadModel3D, loadOBJ, lutStore, mapBlendModeToSkia, mark, measureSpring, measureText, measureTextAsync, mixAudioTracks, mixSfxInto, normalizeTextSpans, parseColorToRgb, parseFBX, parseMTL, parseMarkup, parseOBJ, parseSvgPathToCubicBeziers, pinNodeToLandmark, pinNodeToObject, preloadFont, programmaticSignal, progressSignal, registerSignalDependency, renderFrameGrid, renderSemaphore, renderSfx, requiresIsolation, resolveMediaMimeType, resolveSamplePoints, rich, sampleAudioSpectrumScale, sampleCurveGeometry, samplePathChainGeometry, section, serializeSignalData, shaderStore, signal, signalBuilder, signalRegistry, sineSignal, size, softLimit, span, spring, springCalculation, stampResult, sub, sup, textureCache, timeSignal, updateClockSignals, useCurrentFrame, useVideoConfig, waveToCubicBeziers };
7150
+ export { AETextAnimatorSchema, AdvancedTextAnimatorBuilder, AdvancedTextAnimatorSchema, AnchorGroupingSchema, AnchorPresetSchema, AnimatableGlyphPropsSchema, AnimationTypeSchema, AnyOutputUnionSchema, ApplyLUT, AudioExtractorSignalDataSchema, AudioLatentEngine, AudioLatentTrackCache, AudioMeshDeformPipeline, AudioSignal, AudioSignalExtractor, AudioSpectrumTypographySchema, BaseMediaOperationPropsSchema, BaseVideoLayerPropsSchema, Blur, BoxNodeSchema, CAPTION_LAYER_DEFAULTS, COCO17_BONES, COCO17_KEYPOINTS, COCO17_KEYPOINT_NAMES, COCO_CLASSES, COMPOSITE_OPERATIONS, COMPOSITOR_DEFAULTS, Camera3D, CameraAnimation, CameraNodeSchema, CannyComputePipeline, CarrierHandoffConfigSchema, ChartAreaStyleSchema, ChartAxisSchema, ChartDataPoint2DSchema, ChartDataPointOHLCSchema, ChartGPUEngineBridge, ChartGPUOptionsSchema, ChartLineStyleSchema, ChartNodeSchema, ChartPointStyleSchema, ChartSeriesSchema, ChartSeriesTypeSchema, ChromaticGlitchConfigSchema, ColorBalance, ColorKey, ColorStopSchema, Composition, CompositionChartNodeSchema, CompositorProgramSchema, ConfigHandleSchema, ConfigSchemaRegistry, ControlNetMultiplexer, Crop, CubicBezierSegmentSchema, Curves, CustomEffect, DATA_TYPE_EXTENSIONS, DEFAULT_DURATION_MS, DEFAULT_FPS, DEFAULT_MEDIA_DIMENSION, DataType, DataTypeVal, DataTypes, DepthNormalsComputePipeline, DepthOfField, DynamicStrokePropertiesSchema, Easing, Effect, EffectPipeline, EnhancedTextNodeSchema, ExportResultSchema, ExpressionSelectorSchema, ExtendedGlyphPropertiesSchema, ExtendedLayerSchema, FileAssetSchema, FileDataSchema, FilmGrain, FlexNodeSchema, FontManager, GeneratorSignalDataSchema, GlassPipeline, GlobalCompositeOperation, GlyphAnchorGroupingSchema, GlyphAnchorPointSchema, GradientMap, HalftoneScreen, HandleTypeVal, HeadlessChartCanvasElementMock, HeadlessChartContainerMock, HeadlessGPUCanvasContextMock, HeadlessMediaRenderer, HeadlessWebGPURenderer, HighPass, JsonValueSchema, KineticMarqueeConfigSchema, LIGHT_UNIFORM_SIZE_BYTES, Layer, Layer3D, LayerAnimation, LayoutNodeSchema, Levels, Light, Light3D, LightNodeSchema, LightTypeSchema, LineSpacingDynamicsSchema, LongShadowConfigSchema, MAX_LIGHTS, MIME_TYPES, MaterialTypeSchema, Matrix4Math, Media, MediaMetadataSchema, MediaNodeSchema, MediaOperationSchema, MediaSourceSchema, Model3DNodeSchema, ModerationError, ModerationUnrefundableError, Modulate, MotionBlur, MotionBlurPipeline, MultiOutputGenericSchema, NodeMetadataSchema, NodeResultSchema, NodeVisualConfigSchema, OpticalFlowComputePipeline, OutputItemSchema, PBRGlass, ParticleDissolveConfigSchema, Path3D, PlaybackContext, PlaybackProvider, PoseSkeletonRenderer, ProgrammaticSignal, Relight3D, Renderer2D, Renderer3D, SSAO, SSAOPipeline, Scene, SceneDefinitionSchema, SceneTransitionTypeSchema, SegmentationTexturePool, SelectiveColor, SelectorBasedOnSchema, SelectorModeSchema, SelectorShapeSchema, SelectorUnitsSchema, Sequence, ShadowPipeline, ShadowsHighlights, ShapeNodeSchema, Signal, SignalChannelMetaSchema, SignalDataSchema, SignalGateDataSchema, SignalMathDataSchema, SignalStatsSchema, SingleOutputGenericSchema, SkewPropertiesSchema, SlugFontCache, SlugPipeline, SourceOperationSchema, Spatial3DPropertiesSchema, SpatialLandmarkTransformer, SpringPhysicsSchema, TEXT_LAYER_DEFAULTS, TemporalDeflicker, TemporalDeflickerPipeline, TemporalObjectTracker, TensorPipeline, TextAnchorConfigSchema, TextAnimator, TextAnimatorBuilder, TextAnimatorSchema, TextCursorConfigSchema, TextCursorStyleSchema, TextNodeSchema, TextOperationSchema, TextPathBuilder, TextPathOptionsSchema, TextPathSourceSchema, TextRangeSelectorSchema, TextScrambleConfigSchema, TextSelectorSchema, TextSignalSelectorSchema, TextSpanMarkSchema, TextSpanSchema, TextWigglySelectorSchema, TileOffset, TimelineSegmentSchema, TimelineTransformSchema, TransitionSchema, TransitionTypeSchema, TypewriterAnimatorSchema, TypingCadenceSchema, UnsharpMask, VariableFontAxesSchema, Vec2Schema, Vector3Math, VideoAnimationSchema, VideoLayerTypeSchema, VideoSpatialPropsSchema, VideoStylePropsSchema, VideoTextPropsSchema, VideoTimingPropsSchema, Vignette, VirtualMediaDataSchema, Vision, VisionBundle, VisionNode, VisionRunner, VolumetricFormationConfigSchema, VolumetricFormationModeSchema, accent, analyzeSequence, appendOperation, applyStaggerToChildren, bezier, blurRegion, bold, buildPathLUT, calculateSequenceTimeline, chartBridgeCache, checkNodeResultCache, code, collectNodeOps, color, compositorToProgram, computeAnchorPivotOffset, computeCarrierContinuity, computeGridLayout, computeLayout, computeLayoutSync, computeLineLeadingDisplacement, computeRangeSelectorWeight, computeStaggerDelay, computeStrokeRect, computeVideoCropRenderProps, computed, cosineSignal, createOutputItemSchema, createVirtualMedia, dataTypeColors, deserializeSignalData, deterministicWigglyNoise, distanceToCurveParameter, drawChartNode, editTrackedRegion, ellipseToCubicBeziers, encodeStereoWav, ensureDevice, evaluateAnimationAtFrame, evaluateCubicBezier, evaluateCubicBezierDerivative, evaluateExpressionSelector, evaluateMarqueeOffset, evaluateSelectorCombination, evaluateSkewMatrix, evaluateSpringProgress, evaluateTrackAtFrame, evaluateTypewriterState, evaluateVolumetricFormation, extractSvgDimensions, findSourceAsset, formatQaReport, frameArraySignal, frameSignal, generateArcLengthLUT, generateId, generatePathSegments, getActiveMediaMetadata, getFileDataMetadata, getFingerprint, getLeafMediaType, getMediaType, getRenderFingerprint, getScramblePool, getShuffledOrder, hasDelayRender, hasOnlySingleSource, inputStore, interpolate, isEqual, isSignal, isVirtualMediaData, italic, loadFBX, loadModel3D, loadOBJ, lutStore, mapBlendModeToSkia, mark, measureSpring, measureText, measureTextAsync, mixAudioTracks, mixSfxInto, normalizeTextSpans, parseColorToRgb, parseFBX, parseMTL, parseMarkup, parseOBJ, parseSvgPathToCubicBeziers, pinNodeToLandmark, pinNodeToObject, preloadFont, programmaticSignal, progressSignal, registerSignalDependency, renderFrameGrid, renderSemaphore, renderSfx, reportRenderDiagnostic, requiresIsolation, resolveMediaMimeType, resolveSamplePoints, rich, sampleAudioSpectrumScale, sampleCurveGeometry, samplePathChainGeometry, section, serializeSignalData, shaderStore, signal, signalBuilder, signalRegistry, sineSignal, size, softLimit, span, spring, springCalculation, stampResult, sub, sup, takeRenderDiagnostics, textureCache, timeSignal, updateClockSignals, useCurrentFrame, useVideoConfig, waveToCubicBeziers };
7135
7151
  //# sourceMappingURL=index.mjs.map