pixi-effects 0.32.0 → 0.34.0

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 (60) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +5 -5
  3. package/ai/chat-template.html +3 -3
  4. package/ai/tools/lookup.mjs +29 -6
  5. package/ai/tools/pixi-effects.mjs +1 -1
  6. package/dist/Composition-NDXKQHB4.js +7 -0
  7. package/dist/{Composition-RF7QOEXT.js.map → Composition-NDXKQHB4.js.map} +1 -1
  8. package/dist/Composition-OLH7RC5Z.cjs +16 -0
  9. package/dist/{Composition-LNMKWXSL.cjs.map → Composition-OLH7RC5Z.cjs.map} +1 -1
  10. package/dist/{Spans-SDXABOV6.js → Spans-QHHWC2PB.js} +6 -6
  11. package/dist/{Spans-SDXABOV6.js.map → Spans-QHHWC2PB.js.map} +1 -1
  12. package/dist/{Spans-NQGKVMR5.cjs → Spans-QRMN2EZO.cjs} +11 -11
  13. package/dist/{Spans-NQGKVMR5.cjs.map → Spans-QRMN2EZO.cjs.map} +1 -1
  14. package/dist/{blendModes-MVRLG3T7.js → blendModes-PP5NPBXY.js} +4 -4
  15. package/dist/{blendModes-MVRLG3T7.js.map → blendModes-PP5NPBXY.js.map} +1 -1
  16. package/dist/{blendModes-VTKDXWEN.cjs → blendModes-WIUCYIMC.cjs} +5 -5
  17. package/dist/{blendModes-VTKDXWEN.cjs.map → blendModes-WIUCYIMC.cjs.map} +1 -1
  18. package/dist/{chunk-CRUDOKSD.cjs → chunk-5IJENZOG.cjs} +91 -91
  19. package/dist/{chunk-CRUDOKSD.cjs.map → chunk-5IJENZOG.cjs.map} +1 -1
  20. package/dist/{chunk-FCMOREIS.js → chunk-67LG7MN5.js} +48 -15
  21. package/dist/chunk-67LG7MN5.js.map +1 -0
  22. package/dist/{chunk-K3MAEKFM.cjs → chunk-FVZEBYLW.cjs} +78 -45
  23. package/dist/chunk-FVZEBYLW.cjs.map +1 -0
  24. package/dist/{chunk-FCGYJCVO.cjs → chunk-GL2AQFLQ.cjs} +23 -5
  25. package/dist/chunk-GL2AQFLQ.cjs.map +1 -0
  26. package/dist/{chunk-Z437UWI4.cjs → chunk-IMQJVRMT.cjs} +5 -5
  27. package/dist/{chunk-Z437UWI4.cjs.map → chunk-IMQJVRMT.cjs.map} +1 -1
  28. package/dist/{chunk-C5BNHVKK.js → chunk-ITDYFBB6.js} +23 -5
  29. package/dist/chunk-ITDYFBB6.js.map +1 -0
  30. package/dist/{chunk-QHDN6TF5.cjs → chunk-LEECUCTG.cjs} +44 -25
  31. package/dist/chunk-LEECUCTG.cjs.map +1 -0
  32. package/dist/{chunk-QFNS6BFL.js → chunk-RTJD3ZSW.js} +4 -4
  33. package/dist/{chunk-QFNS6BFL.js.map → chunk-RTJD3ZSW.js.map} +1 -1
  34. package/dist/{chunk-D5BFQVKL.js → chunk-XV4L72FW.js} +5 -5
  35. package/dist/{chunk-D5BFQVKL.js.map → chunk-XV4L72FW.js.map} +1 -1
  36. package/dist/{chunk-AW5NPDE4.js → chunk-Y253JQOH.js} +24 -7
  37. package/dist/chunk-Y253JQOH.js.map +1 -0
  38. package/dist/index.cjs +33 -33
  39. package/dist/index.js +5 -5
  40. package/dist/loader.css +1 -1
  41. package/dist/present.cjs +5 -5
  42. package/dist/present.js +5 -5
  43. package/dist/three.cjs +6 -6
  44. package/dist/three.js +2 -2
  45. package/docs/dsl.md +9 -2
  46. package/llms-full.txt +19 -7
  47. package/package.json +1 -1
  48. package/skills/pixi-effects/SKILL.md +1 -1
  49. package/skills/pixi-effects/reference/pitfalls.md +5 -1
  50. package/skills/pixi-effects/reference/quickstart.md +3 -2
  51. package/skills/pixi-effects/reference/recipes.md +1 -1
  52. package/skills/pixi-effects/template.html +6 -6
  53. package/dist/Composition-LNMKWXSL.cjs +0 -16
  54. package/dist/Composition-RF7QOEXT.js +0 -7
  55. package/dist/chunk-AW5NPDE4.js.map +0 -1
  56. package/dist/chunk-C5BNHVKK.js.map +0 -1
  57. package/dist/chunk-FCGYJCVO.cjs.map +0 -1
  58. package/dist/chunk-FCMOREIS.js.map +0 -1
  59. package/dist/chunk-K3MAEKFM.cjs.map +0 -1
  60. package/dist/chunk-QHDN6TF5.cjs.map +0 -1
@@ -1,9 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkCRUDOKSD_cjs = require('./chunk-CRUDOKSD.cjs');
4
- var chunkQHDN6TF5_cjs = require('./chunk-QHDN6TF5.cjs');
5
- var chunkZ437UWI4_cjs = require('./chunk-Z437UWI4.cjs');
6
- var chunkFCGYJCVO_cjs = require('./chunk-FCGYJCVO.cjs');
3
+ var chunk5IJENZOG_cjs = require('./chunk-5IJENZOG.cjs');
4
+ var chunkLEECUCTG_cjs = require('./chunk-LEECUCTG.cjs');
5
+ var chunkIMQJVRMT_cjs = require('./chunk-IMQJVRMT.cjs');
7
6
  var chunkTWZNOUM7_cjs = require('./chunk-TWZNOUM7.cjs');
8
7
  var pixi_js = require('pixi.js');
9
8
  var mediabunny = require('mediabunny');
@@ -477,6 +476,7 @@ function analyzeAudio(mix, sources, stats, movieDuration, opts = {}) {
477
476
  const b = s.buffer;
478
477
  return measure(Array.from({ length: b.numberOfChannels }, (_, c) => b.getChannelData(c)), b.sampleRate);
479
478
  };
479
+ const scoreNotes = [];
480
480
  const list = [...sources].sort((a, b) => a.start - b.start).map((s) => {
481
481
  const layer = s.layer ?? "an audio layer";
482
482
  const source = s.source ?? "audio";
@@ -499,13 +499,18 @@ function analyzeAudio(mix, sources, stats, movieDuration, opts = {}) {
499
499
  issues.push(`${layer} (${source}) is cut off by the end of the movie at ${movieDuration}s (it runs to ${s.end.toFixed(2)}s)`);
500
500
  }
501
501
  }
502
+ if (s.music && !s.loop && s.start < movieDuration && !clock) {
503
+ const plays = Math.min(s.end, movieDuration) - s.start;
504
+ const over = s.music.seconds - plays;
505
+ if (over > 2 && over / s.music.seconds > 0.15) scoreNotes.push(`${layer} (${source}): the score is ${Math.round(s.music.seconds * 10) / 10}s long but only ${Math.round(plays * 100) / 100}s of it play, so it is cut off mid-phrase. Write fewer bars (or a faster tempo) so it ends with the movie`);
506
+ }
502
507
  return { layer, source, start: s.start, end: s.end, peakDb, sound, ...s.music ? { music: s.music } : {} };
503
508
  });
504
509
  const whole = measureLoudness(chans, sr);
505
510
  const silences = findSilences(chans, sr, { minLength: 1 });
506
511
  if (whole.clippedSamples > 0) issues.push(`${whole.clippedSamples} sample(s) of the mix are at full scale (clipped) \u2014 lower the volume of the layers that play loudest`);
507
512
  if (whole.truePeakDb > 0) issues.push(`the mix's true peak is ${whole.truePeakDb} dBTP: it will distort when the video is encoded \u2014 lower the volume`);
508
- const notes = [];
513
+ const notes = [...scoreNotes];
509
514
  if (whole.integratedLufs !== null) {
510
515
  if (whole.integratedLufs < LOUDNESS_NOTES.quietBelow) notes.push(`the mix is quiet for web video: ${whole.integratedLufs} LUFS (typical \u221214 to \u221216); raise the volume if that is not on purpose`);
511
516
  else if (whole.integratedLufs > LOUDNESS_NOTES.loudAbove) notes.push(`the mix is loud: ${whole.integratedLufs} LUFS (typical web video \u221214 to \u221216)`);
@@ -1485,8 +1490,8 @@ function expandTransitions(spec) {
1485
1490
  }
1486
1491
  const transitions = out.transitions;
1487
1492
  const sequences = out.sequences ?? [];
1488
- const remap = out.duration !== void 0 ? chunkQHDN6TF5_cjs.timeRemapOf(out) : null;
1489
- const parentDuration = remap ? chunkQHDN6TF5_cjs.contentLength(remap, out.duration) : out.duration ?? Infinity;
1493
+ const remap = out.duration !== void 0 ? chunkLEECUCTG_cjs.timeRemapOf(out) : null;
1494
+ const parentDuration = remap ? chunkLEECUCTG_cjs.contentLength(remap, out.duration) : out.duration ?? Infinity;
1490
1495
  const compW = out.width;
1491
1496
  const compH = out.height;
1492
1497
  const threeDByName = new Set(sequences.filter((s) => s.name && s.threeD).map((s) => s.name));
@@ -1554,16 +1559,16 @@ function expandTransitions(spec) {
1554
1559
  if (toUses > 1) {
1555
1560
  throw new Error(`pixi-effects: ${tag} sequence "${t.to}" is used as \`to\` in more than one transition`);
1556
1561
  }
1557
- const tStart = chunkQHDN6TF5_cjs.resolveAt(t.at, parentDuration);
1562
+ const tStart = chunkLEECUCTG_cjs.resolveAt(t.at, parentDuration);
1558
1563
  const tEnd = tStart + t.duration;
1559
1564
  const fromSeq = fromEntry.seq;
1560
- const fromStart = chunkQHDN6TF5_cjs.resolveAt(fromSeq.at, parentDuration);
1565
+ const fromStart = chunkLEECUCTG_cjs.resolveAt(fromSeq.at, parentDuration);
1561
1566
  const fromEnd = fromStart + (fromSeq.duration ?? parentDuration);
1562
1567
  if (tStart < fromStart - EPS || tEnd > fromEnd + EPS) {
1563
1568
  throw new Error(`pixi-effects: ${tag} window [${tStart}, ${tEnd}] is not covered by \`from\` "${t.from}" (lives [${fromStart}, ${fromEnd}], so it ends at ${fromEnd})`);
1564
1569
  }
1565
1570
  const toSeq = toEntry.seq;
1566
- const toStart = chunkQHDN6TF5_cjs.resolveAt(toSeq.at, parentDuration);
1571
+ const toStart = chunkLEECUCTG_cjs.resolveAt(toSeq.at, parentDuration);
1567
1572
  const toEnd = toStart + (toSeq.duration ?? parentDuration);
1568
1573
  if (tStart < toStart - EPS || tEnd > toEnd + EPS) {
1569
1574
  throw new Error(`pixi-effects: ${tag} window [${tStart}, ${tEnd}] is not covered by \`to\` "${t.to}" (lives [${toStart}, ${toEnd}], so it starts at ${toStart})`);
@@ -1623,7 +1628,7 @@ function wrapAsFullComposition(seq, compW, compH) {
1623
1628
  delete inner.at;
1624
1629
  delete inner.duration;
1625
1630
  const m = inner.mask;
1626
- const carriesMatte = m !== void 0 && chunkCRUDOKSD_cjs.maskSourceOf(m).kind === "refs";
1631
+ const carriesMatte = m !== void 0 && chunk5IJENZOG_cjs.maskSourceOf(m).kind === "refs";
1627
1632
  if (carriesMatte) delete inner.mask;
1628
1633
  return {
1629
1634
  ...carriesMatte ? { mask: m } : {},
@@ -1890,15 +1895,42 @@ var clip = (a, b) => {
1890
1895
  const w = Math.min(a.x + a.width, b.x + b.width) - x, h = Math.min(a.y + a.height, b.y + b.height) - y;
1891
1896
  return w > 0 && h > 0 ? { x, y, width: w, height: h } : null;
1892
1897
  };
1898
+ var GEOMETRY = /* @__PURE__ */ new Set(["x", "y", "z", "scale", "scaleX", "scaleY", "rotation", "rotationX", "rotationY", "skewX", "skewY", "positionX", "positionY", "pivotX", "pivotY", "anchorX", "anchorY"]);
1899
+ var NO_MOTION = { running: false, ever: false };
1900
+ var either = (a, b) => ({ running: a.running || b.running, ever: a.ever || b.ever });
1901
+ var TRANSLATION = /* @__PURE__ */ new Set(["x", "y", "z", "positionX", "positionY"]);
1902
+ function motionOf(keyframes, local, lives, keys = (k) => GEOMETRY.has(k)) {
1903
+ let running = false, ever = false;
1904
+ for (const kf of keyframes ?? []) {
1905
+ const names = [kf.set, kf.to, kf.from].flatMap((bag) => bag ? Object.keys(bag) : []);
1906
+ if (!names.some(keys)) continue;
1907
+ let length = 0;
1908
+ if (typeof kf.duration === "number") length = kf.duration;
1909
+ else if (kf.duration === "auto") {
1910
+ const sp = chunkLEECUCTG_cjs.parseSpring(kf.ease);
1911
+ length = sp ? Math.round(chunkLEECUCTG_cjs.springDuration(sp) * 1e3) / 1e3 : 0.5;
1912
+ }
1913
+ if (!(length > 0)) continue;
1914
+ const kat = kf.at ?? 0;
1915
+ const start = kat < 0 ? lives + kat : kat;
1916
+ const repeats = kf.repeat ?? 0;
1917
+ const end = start + length * (repeats + 1) + (kf.repeatDelay ?? 0) * repeats;
1918
+ if (names.some((k) => TRANSLATION.has(k))) ever = true;
1919
+ if (local >= start - 1e-6 && local <= end + 1e-6) running = true;
1920
+ }
1921
+ return { running, ever };
1922
+ }
1893
1923
  function inspectScene(root, frame, time, canvas, opts = {}) {
1894
1924
  const layers = [];
1895
1925
  const view = { x: 0, y: 0, width: canvas.width, height: canvas.height };
1896
1926
  const seen = /* @__PURE__ */ new Map();
1897
1927
  const scene = /* @__PURE__ */ new Map();
1898
1928
  const scaledToNothing = /* @__PURE__ */ new Set();
1899
- const walk2 = (comp, prefix, insideThreeD, parentVisible, parentScene, parentMoving = false, parentZero = false) => {
1929
+ const hasMotion = /* @__PURE__ */ new Set();
1930
+ const walk2 = (comp, prefix, insideThreeD, parentVisible, parentScene, parentMotion = NO_MOTION, parentZero = false) => {
1900
1931
  const blending = /* @__PURE__ */ new Set();
1901
1932
  const now = comp.childTime(time);
1933
+ const cameraMotion = (comp.spec.sequences ?? []).filter((q) => q.type === "camera").reduce((m, q) => either(m, motionOf(q.keyframes, now - comp.childBase - (q.at ?? 0), q.duration ?? comp.duration ?? Infinity, () => true)), NO_MOTION);
1902
1934
  for (const w of transitionWindowsOf(comp.spec)) {
1903
1935
  const start = comp.childBase + w.start, end = comp.childBase + w.end;
1904
1936
  if (now >= start - 1e-9 && now <= end + 1e-9) {
@@ -1925,12 +1957,11 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
1925
1957
  onCanvas = inter === 0 && area > 0 ? "none" : inter >= area - 1e-6 ? "full" : "partial";
1926
1958
  if (area === 0) onCanvas = "none";
1927
1959
  }
1928
- const keys = chunkFCGYJCVO_cjs.collectPropKeys(seq.spec);
1929
- const carried = carriers.some((c) => {
1930
- const k = chunkFCGYJCVO_cjs.collectPropKeys(c.spec);
1931
- return (c.spec.keyframes ?? []).length > 0 && (k.has("x") || k.has("y") || k.has("rotation") || k.has("scale"));
1932
- });
1933
- const moving = parentMoving || carried || (seq.spec.keyframes ?? []).length > 0 && (keys.has("x") || keys.has("y"));
1960
+ const localOf = (q) => now - comp.childBase - q.at;
1961
+ let motion = either(parentMotion, motionOf(seq.spec.keyframes, localOf(seq), seq.duration ?? Infinity));
1962
+ for (const c of carriers) motion = either(motion, motionOf(c.spec.keyframes, localOf(c), c.duration ?? Infinity));
1963
+ if (threeD) motion = either(motion, cameraMotion);
1964
+ const moving = motion.running;
1934
1965
  const zeroScale = (o) => {
1935
1966
  const s = o?.scale;
1936
1967
  return !!s && (s.x === 0 || s.y === 0);
@@ -1940,9 +1971,10 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
1940
1971
  if (threeD) info.depthBlur = Number(depthBlur.toFixed(2));
1941
1972
  if (threeD && light !== void 0) info.light = Number(light.toFixed(2));
1942
1973
  layers.push(info);
1974
+ if (motion.ever) hasMotion.add(info);
1943
1975
  let shown = bounds ? clip(bounds, view) : null;
1944
1976
  const maskTarget = seq.maskSequence?.target;
1945
- const maskSrc = chunkCRUDOKSD_cjs.maskSourceOf(seq.spec.mask);
1977
+ const maskSrc = chunk5IJENZOG_cjs.maskSourceOf(seq.spec.mask);
1946
1978
  if (shown && maskTarget && !(maskSrc.kind === "inline" && maskSrc.invert)) {
1947
1979
  const m = maskTarget.getBounds();
1948
1980
  shown = clip(shown, { x: m.x, y: m.y, width: m.width, height: m.height });
@@ -1951,7 +1983,7 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
1951
1983
  const group = parentScene ?? (name !== void 0 && blending.has(name) ? name : void 0);
1952
1984
  if (group) scene.set(info, group);
1953
1985
  if (zero || seq.showsNothingYet) scaledToNothing.add(info);
1954
- if (seq instanceof chunkCRUDOKSD_cjs.CompositionSequence) walk2(seq, prefix + label + "/", insideThreeD || threeD, visible, group, moving, zero);
1986
+ if (seq instanceof chunk5IJENZOG_cjs.CompositionSequence) walk2(seq, prefix + label + "/", insideThreeD || threeD, visible, group, motion, zero);
1955
1987
  });
1956
1988
  };
1957
1989
  walk2(root, "", false, true);
@@ -1964,6 +1996,7 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
1964
1996
  if (scaledToNothing.has(l)) continue;
1965
1997
  issues.push(`${who} has no size (empty text, or not drawn yet)`);
1966
1998
  } else if (l.moving || scene.has(l)) ; else if (l.onCanvas === "none") {
1999
+ if (hasMotion.has(l)) continue;
1967
2000
  issues.push(`${who} is entirely outside the canvas (at ${Math.round(b.x)},${Math.round(b.y)}, ${Math.round(b.width)}\xD7${Math.round(b.height)})`);
1968
2001
  } else if (l.onCanvas === "partial") {
1969
2002
  const over = [];
@@ -1998,7 +2031,7 @@ var round = (n) => Math.round(n * 1e6) / 1e6;
1998
2031
  var family = (name) => name.replace(/\d+/g, "#");
1999
2032
  function detailOf(seq) {
2000
2033
  const s = seq.spec;
2001
- const spans = chunkQHDN6TF5_cjs.spansMeta.get(seq.spec)?.preview;
2034
+ const spans = chunkLEECUCTG_cjs.spansMeta.get(seq.spec)?.preview;
2002
2035
  if (spans) return spans.length > 60 ? spans.slice(0, 57) + "\u2026" : spans;
2003
2036
  if (typeof s.text === "string") return s.text.length > 60 ? s.text.slice(0, 57) + "\u2026" : s.text;
2004
2037
  if (typeof s.asset === "string") return `asset \u201C${s.asset}\u201D`;
@@ -2014,10 +2047,10 @@ function walk(comp, parentStart, parentEnd, depth, prefix, rows, transitions, lo
2014
2047
  const start = parentStart + (seq.at ?? 0);
2015
2048
  const end = Math.min(parentEnd, seq.duration !== void 0 ? start + seq.duration : parentEnd);
2016
2049
  const span = end - start;
2017
- const keys = (seq.spec.keyframes ?? []).map((kf) => round(start + chunkQHDN6TF5_cjs.resolveAt(kf.at, span))).sort((a, b) => a - b).slice(0, MAX_KEYS);
2050
+ const keys = (seq.spec.keyframes ?? []).map((kf) => round(start + chunkLEECUCTG_cjs.resolveAt(kf.at, span))).sort((a, b) => a - b).slice(0, MAX_KEYS);
2018
2051
  const row = { path: prefix + name, name, type: seq.spec.type, depth, start: round(start), end: round(end), keys, detail: detailOf(seq), ...local ? { local } : {} };
2019
2052
  const inner = [];
2020
- const isComp = seq instanceof chunkCRUDOKSD_cjs.CompositionSequence;
2053
+ const isComp = seq instanceof chunk5IJENZOG_cjs.CompositionSequence;
2021
2054
  if (isComp) {
2022
2055
  const label = seq.remapLabel();
2023
2056
  walk(seq, label ? 0 : start, label ? seq.contentSpan : end, depth + 1, prefix + name + "/", inner, transitions, label ? `${name} ${label}` : local);
@@ -2176,7 +2209,7 @@ function sheetLayout(n, columns, cellW, srcW, srcH, labelH) {
2176
2209
  }
2177
2210
 
2178
2211
  // src/core/vars.ts
2179
- var RESERVED_NAMES = ["w", "h", "W", "H", "GW", "GH", "t", "d", "T", "contain", "cover", "value", ...chunkQHDN6TF5_cjs.EXPRESSION_NAMES];
2212
+ var RESERVED_NAMES = ["w", "h", "W", "H", "GW", "GH", "t", "d", "T", "contain", "cover", "value", ...chunkLEECUCTG_cjs.EXPRESSION_NAMES];
2180
2213
  var NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
2181
2214
  var isPlain = (v) => !!v && typeof v === "object" && (Object.getPrototypeOf(v) === Object.prototype || Object.getPrototypeOf(v) === null);
2182
2215
  function normalizeVars(raw, where, warn = (m) => console.warn(m)) {
@@ -2709,8 +2742,8 @@ var Movie = class {
2709
2742
  this.stops = normalizeStops(applyVars(options.composition, this._vars)?.stops, this.duration, this.frameRate);
2710
2743
  this._posterFrame = poster.frame;
2711
2744
  this.background = options.background ?? "#000000";
2712
- this.timeline = chunkQHDN6TF5_cjs.createTimeline({ paused: true, defaults: { ease: "none" } });
2713
- chunkQHDN6TF5_cjs.lengthen(this.timeline, this.duration);
2745
+ this.timeline = chunkLEECUCTG_cjs.createTimeline({ paused: true, defaults: { ease: "none" } });
2746
+ chunkLEECUCTG_cjs.lengthen(this.timeline, this.duration);
2714
2747
  const baseAppOptions = {
2715
2748
  width: this.width,
2716
2749
  height: this.height,
@@ -2804,8 +2837,8 @@ var Movie = class {
2804
2837
  height: sizeWins ? height : spec.height ?? height,
2805
2838
  duration: spec.duration ?? this.duration
2806
2839
  } : void 0;
2807
- await chunkQHDN6TF5_cjs.ensureFilterLibrary(seededComposition);
2808
- if (chunkZ437UWI4_cjs.usesAdvancedBlend(seededComposition)) await chunkZ437UWI4_cjs.enableAdvancedBlend(this.app.renderer);
2840
+ await chunkLEECUCTG_cjs.ensureFilterLibrary(seededComposition);
2841
+ if (chunkIMQJVRMT_cjs.usesAdvancedBlend(seededComposition)) await chunkIMQJVRMT_cjs.enableAdvancedBlend(this.app.renderer);
2809
2842
  const userComposition = seededComposition ? expandTransitions(seededComposition) : void 0;
2810
2843
  const rootSeqSpec = {
2811
2844
  type: "composition",
@@ -2815,7 +2848,7 @@ var Movie = class {
2815
2848
  ...userComposition
2816
2849
  };
2817
2850
  if (userComposition) carryTransitionWindows(userComposition, rootSeqSpec);
2818
- const sequence = new chunkCRUDOKSD_cjs.CompositionSequence(rootSeqSpec, null, rootShape);
2851
+ const sequence = new chunk5IJENZOG_cjs.CompositionSequence(rootSeqSpec, null, rootShape);
2819
2852
  lp?.begin("build", countLayers(rootSeqSpec));
2820
2853
  try {
2821
2854
  await sequence.build();
@@ -2951,8 +2984,8 @@ var Movie = class {
2951
2984
  if (!changed) return { reason, ms: 0, audio: "none", frame: this.currentFrame, playing: this.isPlaying, unchanged: true };
2952
2985
  sequence = await this._construct(composition, vars, width, height, void 0, this._resized || sizeChanged);
2953
2986
  alive();
2954
- const timeline = chunkQHDN6TF5_cjs.createTimeline({ paused: true, defaults: { ease: "none" } });
2955
- chunkQHDN6TF5_cjs.lengthen(timeline, this.duration);
2987
+ const timeline = chunkLEECUCTG_cjs.createTimeline({ paused: true, defaults: { ease: "none" } });
2988
+ chunkLEECUCTG_cjs.lengthen(timeline, this.duration);
2956
2989
  sequence.bindTimeline(timeline);
2957
2990
  const hadSound = this.audioBuffer !== null;
2958
2991
  const audio = await this._mixSound(sequence, this._ensureAudioContext());
@@ -3594,7 +3627,7 @@ function countLayers(spec) {
3594
3627
  n += 1 + countLayers(s);
3595
3628
  const spans = s.spans;
3596
3629
  if (Array.isArray(spans)) n += spans.length;
3597
- const src = chunkCRUDOKSD_cjs.maskSourceOf(mask);
3630
+ const src = chunk5IJENZOG_cjs.maskSourceOf(mask);
3598
3631
  if (src.kind === "inline") n += 1 + countLayers(src.spec);
3599
3632
  }
3600
3633
  return n;
@@ -3652,8 +3685,8 @@ function splitText(text, style = {}, opts = {}) {
3652
3685
 
3653
3686
  // src/presets/_ease.ts
3654
3687
  function parseEase2(name) {
3655
- chunkQHDN6TF5_cjs.checkEase(name, "a preset");
3656
- return chunkQHDN6TF5_cjs.parseEase(name);
3688
+ chunkLEECUCTG_cjs.checkEase(name, "a preset");
3689
+ return chunkLEECUCTG_cjs.parseEase(name);
3657
3690
  }
3658
3691
 
3659
3692
  // src/presets/kenBurns.ts
@@ -3788,17 +3821,17 @@ function orbit(opts) {
3788
3821
  throw new Error("pixi-effects: orbit() cannot combine `radius` with `dollyZoom` \u2014 the radius follows the animated fov");
3789
3822
  }
3790
3823
  const [cx, cy] = opts.center ?? [width / 2, height / 2];
3791
- const fixedR = opts.radius ?? chunkQHDN6TF5_cjs.homeDistance(height, fov ?? chunkQHDN6TF5_cjs.DEFAULT_FOV);
3824
+ const fixedR = opts.radius ?? chunkLEECUCTG_cjs.homeDistance(height, fov ?? chunkLEECUCTG_cjs.DEFAULT_FOV);
3792
3825
  const start = opts.start ?? -degrees / 2;
3793
3826
  const steps = Math.max(1, Math.round(duration * stepsPerSecond));
3794
3827
  const easeFn = parseEase2(ease);
3795
3828
  const dollyEase = dolly ? parseEase2(dolly.ease ?? ease) : null;
3796
3829
  const pos = (i) => {
3797
3830
  const p = i / steps;
3798
- const a = (start + degrees * easeFn(p)) * chunkQHDN6TF5_cjs.DEG;
3831
+ const a = (start + degrees * easeFn(p)) * chunkLEECUCTG_cjs.DEG;
3799
3832
  if (!dolly) return { x: cx + fixedR * Math.sin(a), z: fixedR * Math.cos(a) };
3800
3833
  const f = dolly.from + (dolly.to - dolly.from) * dollyEase(p);
3801
- const R = chunkQHDN6TF5_cjs.homeDistance(height, f);
3834
+ const R = chunkLEECUCTG_cjs.homeDistance(height, f);
3802
3835
  return { x: cx + R * Math.sin(a), z: R * Math.cos(a), fov: f };
3803
3836
  };
3804
3837
  const keyframes = [];
@@ -3853,7 +3886,7 @@ function particles(opts) {
3853
3886
  const round2 = (v) => Math.round(v * 1e6) / 1e6;
3854
3887
  const out = [];
3855
3888
  for (let i = 0; i < count; i++) {
3856
- const r = chunkQHDN6TF5_cjs.random(seed * 1000003 + i * 7919 + 17);
3889
+ const r = chunkLEECUCTG_cjs.random(seed * 1000003 + i * 7919 + 17);
3857
3890
  const pick = ([a2, b]) => a2 + r() * (b - a2);
3858
3891
  const born = at + r() * emit;
3859
3892
  const lifetime = pick(life);
@@ -3866,7 +3899,7 @@ function particles(opts) {
3866
3899
  const turn = spin ? pick(spin) : 0;
3867
3900
  const startAngle = spin ? r() * 360 : 0;
3868
3901
  const swayAmp = sway?.amp ?? 0, swayFreq = sway?.freq ?? 1;
3869
- const n0 = sway ? chunkQHDN6TF5_cjs.noise(0, seed * 1000003 + i) : 0;
3902
+ const n0 = sway ? chunkLEECUCTG_cjs.noise(0, seed * 1000003 + i) : 0;
3870
3903
  const at_ = (t) => {
3871
3904
  const axis = (p0, v0, acc) => {
3872
3905
  if (drag > 0) {
@@ -3875,7 +3908,7 @@ function particles(opts) {
3875
3908
  }
3876
3909
  return p0 + v0 * t + 0.5 * acc * t * t;
3877
3910
  };
3878
- const sw = sway ? swayAmp * (chunkQHDN6TF5_cjs.noise(t * swayFreq, seed * 1000003 + i) - n0) : 0;
3911
+ const sw = sway ? swayAmp * (chunkLEECUCTG_cjs.noise(t * swayFreq, seed * 1000003 + i) - n0) : 0;
3879
3912
  return { x: axis(x0, vx, wind) + sw, y: axis(y0, vy, gravity) };
3880
3913
  };
3881
3914
  const kfs = [];
@@ -3937,7 +3970,7 @@ function followPath(opts) {
3937
3970
  if (steps > MAX_STEPS) throw new Error(`followPath(): ${steps} samples is too many (max ${MAX_STEPS}); lower frameRate or duration`);
3938
3971
  const segments = [];
3939
3972
  let total = 0;
3940
- for (const line of chunkQHDN6TF5_cjs.flattenSvgPath(d)) {
3973
+ for (const line of chunkLEECUCTG_cjs.flattenSvgPath(d)) {
3941
3974
  const p = line.closed ? [...line.pts, line.pts[0], line.pts[1]] : line.pts;
3942
3975
  for (let i = 2; i < p.length; i += 2) {
3943
3976
  const len = Math.hypot(p[i] - p[i - 2], p[i + 1] - p[i - 1]);
@@ -4091,7 +4124,7 @@ function distances(n, from, grid, seed) {
4091
4124
  if (n === 0) return [];
4092
4125
  if (from === "random") {
4093
4126
  const order = Array.from({ length: n }, (_, i) => i);
4094
- const r = chunkQHDN6TF5_cjs.random(seed);
4127
+ const r = chunkLEECUCTG_cjs.random(seed);
4095
4128
  for (let i = n - 1; i > 0; i--) {
4096
4129
  const j = Math.floor(r() * (i + 1));
4097
4130
  [order[i], order[j]] = [order[j], order[i]];
@@ -4153,7 +4186,7 @@ function wiggle(opts) {
4153
4186
  to[n] = p.around;
4154
4187
  return;
4155
4188
  }
4156
- const off = (chunkQHDN6TF5_cjs.rand(seed * 7919 + pi * 104729 + s * 31 + 1) * 2 - 1) * p.amp;
4189
+ const off = (chunkLEECUCTG_cjs.rand(seed * 7919 + pi * 104729 + s * 31 + 1) * 2 - 1) * p.amp;
4157
4190
  to[n] = typeof p.around === "number" ? p.around + off : `(${p.around}) ${off < 0 ? "-" : "+"} ${Math.abs(off)}`;
4158
4191
  });
4159
4192
  out.push({ at: at + s * stepLen, to, duration: stepLen, ease });
@@ -4611,5 +4644,5 @@ exports.splitText = splitText;
4611
4644
  exports.stagger = stagger;
4612
4645
  exports.wiggle = wiggle;
4613
4646
  exports.withFade = withFade;
4614
- //# sourceMappingURL=chunk-K3MAEKFM.cjs.map
4615
- //# sourceMappingURL=chunk-K3MAEKFM.cjs.map
4647
+ //# sourceMappingURL=chunk-FVZEBYLW.cjs.map
4648
+ //# sourceMappingURL=chunk-FVZEBYLW.cjs.map