pixi-effects 0.26.3 → 0.27.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 (67) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +8 -10
  3. package/ai/CHAT.md +1 -1
  4. package/ai/chat-template.html +4 -6
  5. package/dist/{Base-CpdDs4HT.d.ts → Base-CVezIEdo.d.ts} +2 -4
  6. package/dist/{Base-TbBhHPrG.d.cts → Base-DzC3i919.d.cts} +2 -4
  7. package/dist/Composition-4TYDRRRY.js +7 -0
  8. package/dist/{Composition-3O7L2VL5.js.map → Composition-4TYDRRRY.js.map} +1 -1
  9. package/dist/Composition-QCOWQSDB.cjs +16 -0
  10. package/dist/{Composition-EE3KEE2L.cjs.map → Composition-QCOWQSDB.cjs.map} +1 -1
  11. package/dist/Controller.d.cts +2 -3
  12. package/dist/Controller.d.ts +2 -3
  13. package/dist/{Movie-BkP82KXS.d.ts → Movie-CQ0Nz62a.d.cts} +2 -3
  14. package/dist/{Movie-BWLLWRRe.d.cts → Movie-M9dKm9dI.d.ts} +2 -3
  15. package/dist/Presenter.d.cts +2 -3
  16. package/dist/Presenter.d.ts +2 -3
  17. package/dist/{blendModes-YV43K6E7.cjs → blendModes-HDOP6R7T.cjs} +5 -5
  18. package/dist/{blendModes-YV43K6E7.cjs.map → blendModes-HDOP6R7T.cjs.map} +1 -1
  19. package/dist/{blendModes-G3NOAU3T.js → blendModes-PAVTW3BO.js} +4 -4
  20. package/dist/{blendModes-G3NOAU3T.js.map → blendModes-PAVTW3BO.js.map} +1 -1
  21. package/dist/{chunk-TLYTYBWX.js → chunk-45QKLD6M.js} +9 -11
  22. package/dist/chunk-45QKLD6M.js.map +1 -0
  23. package/dist/{chunk-WMMZDPWK.js → chunk-CKTS6G6I.js} +7 -11
  24. package/dist/chunk-CKTS6G6I.js.map +1 -0
  25. package/dist/{chunk-IIDBEYQH.cjs → chunk-NDR2VQFV.cjs} +91 -95
  26. package/dist/chunk-NDR2VQFV.cjs.map +1 -0
  27. package/dist/{chunk-3DLYAPK7.cjs → chunk-P4GY3Z4G.cjs} +5 -5
  28. package/dist/{chunk-3DLYAPK7.cjs.map → chunk-P4GY3Z4G.cjs.map} +1 -1
  29. package/dist/{chunk-A225HYSY.cjs → chunk-RQMI7EJT.cjs} +968 -256
  30. package/dist/chunk-RQMI7EJT.cjs.map +1 -0
  31. package/dist/{chunk-FXAHNPBP.js → chunk-TGJACVLD.js} +948 -239
  32. package/dist/chunk-TGJACVLD.js.map +1 -0
  33. package/dist/{chunk-AXZUKNXF.js → chunk-TYWFKCPY.js} +4 -4
  34. package/dist/{chunk-AXZUKNXF.js.map → chunk-TYWFKCPY.js.map} +1 -1
  35. package/dist/{chunk-ECA2WNRX.cjs → chunk-ZMAD3KJU.cjs} +9 -11
  36. package/dist/chunk-ZMAD3KJU.cjs.map +1 -0
  37. package/dist/index.cjs +74 -95
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +16 -14
  40. package/dist/index.d.ts +16 -14
  41. package/dist/index.js +20 -23
  42. package/dist/index.js.map +1 -1
  43. package/dist/loader.css +1 -1
  44. package/dist/three.cjs +6 -6
  45. package/dist/three.d.cts +2 -3
  46. package/dist/three.d.ts +2 -3
  47. package/dist/three.js +2 -2
  48. package/dist/{types-DSGwN5w1.d.cts → types-DUVefWiB.d.cts} +128 -3
  49. package/dist/{types-DSGwN5w1.d.ts → types-DUVefWiB.d.ts} +128 -3
  50. package/docs/api.md +5 -1
  51. package/docs/dsl.md +13 -15
  52. package/llms-full.txt +24 -22
  53. package/llms.txt +1 -1
  54. package/package.json +3 -4
  55. package/skills/pixi-effects/SKILL.md +1 -1
  56. package/skills/pixi-effects/reference/cheatsheet.md +1 -1
  57. package/skills/pixi-effects/reference/pitfalls.md +3 -3
  58. package/skills/pixi-effects/reference/recipes.md +1 -1
  59. package/skills/pixi-effects/template.html +6 -8
  60. package/dist/Composition-3O7L2VL5.js +0 -7
  61. package/dist/Composition-EE3KEE2L.cjs +0 -16
  62. package/dist/chunk-A225HYSY.cjs.map +0 -1
  63. package/dist/chunk-ECA2WNRX.cjs.map +0 -1
  64. package/dist/chunk-FXAHNPBP.js.map +0 -1
  65. package/dist/chunk-IIDBEYQH.cjs.map +0 -1
  66. package/dist/chunk-TLYTYBWX.js.map +0 -1
  67. package/dist/chunk-WMMZDPWK.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,41 +1,19 @@
1
1
  'use strict';
2
2
 
3
- var chunkIIDBEYQH_cjs = require('./chunk-IIDBEYQH.cjs');
4
- var chunkA225HYSY_cjs = require('./chunk-A225HYSY.cjs');
5
- var chunk3DLYAPK7_cjs = require('./chunk-3DLYAPK7.cjs');
6
- var chunkECA2WNRX_cjs = require('./chunk-ECA2WNRX.cjs');
3
+ var chunkNDR2VQFV_cjs = require('./chunk-NDR2VQFV.cjs');
4
+ var chunkRQMI7EJT_cjs = require('./chunk-RQMI7EJT.cjs');
5
+ var chunkP4GY3Z4G_cjs = require('./chunk-P4GY3Z4G.cjs');
6
+ var chunkZMAD3KJU_cjs = require('./chunk-ZMAD3KJU.cjs');
7
7
  var chunkTWZNOUM7_cjs = require('./chunk-TWZNOUM7.cjs');
8
- var PIXI = require('pixi.js');
9
- var gsap = require('gsap');
10
- var PixiPlugin = require('gsap/PixiPlugin');
8
+ var pixi_js = require('pixi.js');
11
9
  var mediabunny = require('mediabunny');
12
10
 
13
- function _interopNamespace(e) {
14
- if (e && e.__esModule) return e;
15
- var n = Object.create(null);
16
- if (e) {
17
- Object.keys(e).forEach(function (k) {
18
- if (k !== 'default') {
19
- var d = Object.getOwnPropertyDescriptor(e, k);
20
- Object.defineProperty(n, k, d.get ? d : {
21
- enumerable: true,
22
- get: function () { return e[k]; }
23
- });
24
- }
25
- });
26
- }
27
- n.default = e;
28
- return Object.freeze(n);
29
- }
30
-
31
- var PIXI__namespace = /*#__PURE__*/_interopNamespace(PIXI);
32
-
33
11
  var registered = false;
34
12
  function ensureLoadersRegistered(audioContext) {
35
13
  if (registered) return;
36
14
  registered = true;
37
- PIXI.extensions.add({
38
- extension: { type: PIXI.ExtensionType.LoadParser, name: "pixi-effects-audio" },
15
+ pixi_js.extensions.add({
16
+ extension: { type: pixi_js.ExtensionType.LoadParser, name: "pixi-effects-audio" },
39
17
  test: (url) => /\.(mp3|wav|ogg)$/i.test(url),
40
18
  async load(url) {
41
19
  const res = await fetch(url);
@@ -45,8 +23,8 @@ function ensureLoadersRegistered(audioContext) {
45
23
  return { audioBuffer, duration: audioBuffer.duration };
46
24
  }
47
25
  });
48
- PIXI.extensions.add({
49
- extension: { type: PIXI.ExtensionType.LoadParser, name: "pixi-effects-video", priority: 1 },
26
+ pixi_js.extensions.add({
27
+ extension: { type: pixi_js.ExtensionType.LoadParser, name: "pixi-effects-video", priority: 1 },
50
28
  test: (url) => /\.(mp4|webm|mov|mkv)$/i.test(url),
51
29
  async load(url) {
52
30
  const blob = await fetch(url).then((r) => r.blob());
@@ -83,8 +61,8 @@ function ensureLoadersRegistered(audioContext) {
83
61
  async function loadAssetBundle(assets, audioContext, onProgress) {
84
62
  ensureLoadersRegistered(audioContext);
85
63
  const bundle = assets.map((a) => ({ alias: a.name, src: a.src }));
86
- PIXI.Assets.addBundle("pixi-effects", bundle);
87
- return await PIXI.Assets.loadBundle("pixi-effects", onProgress);
64
+ pixi_js.Assets.addBundle("pixi-effects", bundle);
65
+ return await pixi_js.Assets.loadBundle("pixi-effects", onProgress);
88
66
  }
89
67
 
90
68
  // src/core/audioRemap.ts
@@ -1267,7 +1245,7 @@ fn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {
1267
1245
  return raw * reveal;
1268
1246
  }
1269
1247
  `;
1270
- var TransitionMaskFilter = class extends PIXI.Filter {
1248
+ var TransitionMaskFilter = class extends pixi_js.Filter {
1271
1249
  constructor(options = {}) {
1272
1250
  const mode = options.mode ?? "wipe-left";
1273
1251
  const smoothing = options.smoothing ?? 0.02;
@@ -1276,17 +1254,17 @@ var TransitionMaskFilter = class extends PIXI.Filter {
1276
1254
  const scale = options.scale ?? 30;
1277
1255
  const seed = options.seed ?? 0;
1278
1256
  super({
1279
- glProgram: PIXI.GlProgram.from({
1280
- vertex: PIXI.defaultFilterVert,
1257
+ glProgram: pixi_js.GlProgram.from({
1258
+ vertex: pixi_js.defaultFilterVert,
1281
1259
  fragment: GL_FRAGMENT,
1282
1260
  name: "transition-mask-filter"
1283
1261
  }),
1284
- gpuProgram: PIXI.GpuProgram.from({
1262
+ gpuProgram: pixi_js.GpuProgram.from({
1285
1263
  vertex: { source: WGSL_SOURCE, entryPoint: "mainVertex" },
1286
1264
  fragment: { source: WGSL_SOURCE, entryPoint: "mainFragment" }
1287
1265
  }),
1288
1266
  resources: {
1289
- transitionUniforms: new PIXI.UniformGroup({
1267
+ transitionUniforms: new pixi_js.UniformGroup({
1290
1268
  uProgress: { value: progress, type: "f32" },
1291
1269
  uMode: { value: MODE_CODES[mode], type: "f32" },
1292
1270
  uSmoothing: { value: smoothing, type: "f32" },
@@ -1413,19 +1391,19 @@ fn mainFragment(@location(0) uv : vec2<f32>) -> @location(0) vec4<f32> {
1413
1391
  if (lumaUniforms.uInvert > 0.5) { reveal = 1.0 - step(0.99, reveal); }
1414
1392
  return raw * reveal;
1415
1393
  }`;
1416
- var LumaWipeFilter = class extends PIXI.Filter {
1394
+ var LumaWipeFilter = class extends pixi_js.Filter {
1417
1395
  _mapName;
1418
1396
  _builtIn;
1419
1397
  _resolved = false;
1420
1398
  _warned = false;
1421
1399
  constructor({ map, softness = 0.1, progress = 0, invert = false, flip = false }) {
1422
- const t = PIXI.Texture.WHITE;
1400
+ const t = pixi_js.Texture.WHITE;
1423
1401
  const mode = LUMA_MAPS.indexOf(map) + 1;
1424
1402
  super({
1425
- glProgram: PIXI.GlProgram.from({ vertex: PIXI.defaultFilterVert, fragment: GL, name: "pe-luma-wipe" }),
1426
- gpuProgram: PIXI.GpuProgram.from({ vertex: { source: WGSL, entryPoint: "mainVertex" }, fragment: { source: WGSL, entryPoint: "mainFragment" } }),
1403
+ glProgram: pixi_js.GlProgram.from({ vertex: pixi_js.defaultFilterVert, fragment: GL, name: "pe-luma-wipe" }),
1404
+ gpuProgram: pixi_js.GpuProgram.from({ vertex: { source: WGSL, entryPoint: "mainVertex" }, fragment: { source: WGSL, entryPoint: "mainFragment" } }),
1427
1405
  resources: {
1428
- lumaUniforms: new PIXI.UniformGroup({
1406
+ lumaUniforms: new pixi_js.UniformGroup({
1429
1407
  uProgress: { value: progress, type: "f32" },
1430
1408
  uSoftness: { value: softness, type: "f32" },
1431
1409
  uInvert: { value: invert ? 1 : 0, type: "f32" },
@@ -1447,7 +1425,7 @@ var LumaWipeFilter = class extends PIXI.Filter {
1447
1425
  }
1448
1426
  apply(fm, input, output, clear) {
1449
1427
  if (!this._builtIn && !this._resolved) {
1450
- const t = PIXI.Assets.get(this._mapName);
1428
+ const t = pixi_js.Assets.get(this._mapName);
1451
1429
  if (t) {
1452
1430
  this.resources.uMap = t.source;
1453
1431
  this.resources.uMapSampler = t.source.style;
@@ -1501,8 +1479,8 @@ function expandTransitions(spec) {
1501
1479
  }
1502
1480
  const transitions = out.transitions;
1503
1481
  const sequences = out.sequences ?? [];
1504
- const remap = out.duration !== void 0 ? chunkA225HYSY_cjs.timeRemapOf(out) : null;
1505
- const parentDuration = remap ? chunkA225HYSY_cjs.contentLength(remap, out.duration) : out.duration ?? Infinity;
1482
+ const remap = out.duration !== void 0 ? chunkRQMI7EJT_cjs.timeRemapOf(out) : null;
1483
+ const parentDuration = remap ? chunkRQMI7EJT_cjs.contentLength(remap, out.duration) : out.duration ?? Infinity;
1506
1484
  const compW = out.width;
1507
1485
  const compH = out.height;
1508
1486
  const threeDByName = new Set(sequences.filter((s) => s.name && s.threeD).map((s) => s.name));
@@ -1570,16 +1548,16 @@ function expandTransitions(spec) {
1570
1548
  if (toUses > 1) {
1571
1549
  throw new Error(`pixi-effects: ${tag} sequence "${t.to}" is used as \`to\` in more than one transition`);
1572
1550
  }
1573
- const tStart = chunkA225HYSY_cjs.resolveAt(t.at, parentDuration);
1551
+ const tStart = chunkRQMI7EJT_cjs.resolveAt(t.at, parentDuration);
1574
1552
  const tEnd = tStart + t.duration;
1575
1553
  const fromSeq = fromEntry.seq;
1576
- const fromStart = chunkA225HYSY_cjs.resolveAt(fromSeq.at, parentDuration);
1554
+ const fromStart = chunkRQMI7EJT_cjs.resolveAt(fromSeq.at, parentDuration);
1577
1555
  const fromEnd = fromStart + (fromSeq.duration ?? parentDuration);
1578
1556
  if (tStart < fromStart - EPS || tEnd > fromEnd + EPS) {
1579
1557
  throw new Error(`pixi-effects: ${tag} window [${tStart}, ${tEnd}] is not covered by \`from\` "${t.from}" (lives [${fromStart}, ${fromEnd}], so it ends at ${fromEnd})`);
1580
1558
  }
1581
1559
  const toSeq = toEntry.seq;
1582
- const toStart = chunkA225HYSY_cjs.resolveAt(toSeq.at, parentDuration);
1560
+ const toStart = chunkRQMI7EJT_cjs.resolveAt(toSeq.at, parentDuration);
1583
1561
  const toEnd = toStart + (toSeq.duration ?? parentDuration);
1584
1562
  if (tStart < toStart - EPS || tEnd > toEnd + EPS) {
1585
1563
  throw new Error(`pixi-effects: ${tag} window [${tStart}, ${tEnd}] is not covered by \`to\` "${t.to}" (lives [${toStart}, ${toEnd}], so it starts at ${toStart})`);
@@ -1639,7 +1617,7 @@ function wrapAsFullComposition(seq, compW, compH) {
1639
1617
  delete inner.at;
1640
1618
  delete inner.duration;
1641
1619
  const m = inner.mask;
1642
- const carriesMatte = m !== void 0 && chunkIIDBEYQH_cjs.maskSourceOf(m).kind === "refs";
1620
+ const carriesMatte = m !== void 0 && chunkNDR2VQFV_cjs.maskSourceOf(m).kind === "refs";
1643
1621
  if (carriesMatte) delete inner.mask;
1644
1622
  return {
1645
1623
  ...carriesMatte ? { mask: m } : {},
@@ -1941,9 +1919,9 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
1941
1919
  onCanvas = inter === 0 && area > 0 ? "none" : inter >= area - 1e-6 ? "full" : "partial";
1942
1920
  if (area === 0) onCanvas = "none";
1943
1921
  }
1944
- const keys = chunkECA2WNRX_cjs.collectPropKeys(seq.spec);
1922
+ const keys = chunkZMAD3KJU_cjs.collectPropKeys(seq.spec);
1945
1923
  const carried = carriers.some((c) => {
1946
- const k = chunkECA2WNRX_cjs.collectPropKeys(c.spec);
1924
+ const k = chunkZMAD3KJU_cjs.collectPropKeys(c.spec);
1947
1925
  return (c.spec.keyframes ?? []).length > 0 && (k.has("x") || k.has("y") || k.has("rotation") || k.has("scale"));
1948
1926
  });
1949
1927
  const moving = parentMoving || carried || (seq.spec.keyframes ?? []).length > 0 && (keys.has("x") || keys.has("y"));
@@ -1966,7 +1944,7 @@ function inspectScene(root, frame, time, canvas, opts = {}) {
1966
1944
  const group = parentScene ?? (name !== void 0 && blending.has(name) ? name : void 0);
1967
1945
  if (group) scene.set(info, group);
1968
1946
  if (zero || seq.showsNothingYet) scaledToNothing.add(info);
1969
- if (seq instanceof chunkIIDBEYQH_cjs.CompositionSequence) walk2(seq, prefix + label + "/", insideThreeD || threeD, visible, group, moving, zero);
1947
+ if (seq instanceof chunkNDR2VQFV_cjs.CompositionSequence) walk2(seq, prefix + label + "/", insideThreeD || threeD, visible, group, moving, zero);
1970
1948
  });
1971
1949
  };
1972
1950
  walk2(root, "", false, true);
@@ -2027,10 +2005,10 @@ function walk(comp, parentStart, parentEnd, depth, prefix, rows, transitions, lo
2027
2005
  const start = parentStart + (seq.at ?? 0);
2028
2006
  const end = Math.min(parentEnd, seq.duration !== void 0 ? start + seq.duration : parentEnd);
2029
2007
  const span = end - start;
2030
- const keys = (seq.spec.keyframes ?? []).map((kf) => round(start + chunkA225HYSY_cjs.resolveAt(kf.at, span))).sort((a, b) => a - b).slice(0, MAX_KEYS);
2008
+ const keys = (seq.spec.keyframes ?? []).map((kf) => round(start + chunkRQMI7EJT_cjs.resolveAt(kf.at, span))).sort((a, b) => a - b).slice(0, MAX_KEYS);
2031
2009
  const row = { path: prefix + name, name, type: seq.spec.type, depth, start: round(start), end: round(end), keys, detail: detailOf(seq), ...local ? { local } : {} };
2032
2010
  const inner = [];
2033
- const isComp = seq instanceof chunkIIDBEYQH_cjs.CompositionSequence;
2011
+ const isComp = seq instanceof chunkNDR2VQFV_cjs.CompositionSequence;
2034
2012
  if (isComp) {
2035
2013
  const label = seq.remapLabel();
2036
2014
  walk(seq, label ? 0 : start, label ? seq.contentSpan : end, depth + 1, prefix + name + "/", inner, transitions, label ? `${name} ${label}` : local);
@@ -2542,9 +2520,7 @@ function setLoaderProgress(loader, state) {
2542
2520
  }
2543
2521
 
2544
2522
  // src/core/Movie.ts
2545
- PIXI.extensions.add(PIXI.CullerPlugin);
2546
- gsap.gsap.registerPlugin(PixiPlugin.PixiPlugin);
2547
- PixiPlugin.PixiPlugin.registerPIXI(PIXI__namespace);
2523
+ pixi_js.extensions.add(pixi_js.CullerPlugin);
2548
2524
  var Movie = class {
2549
2525
  _events = {};
2550
2526
  _initState = "idle";
@@ -2680,8 +2656,8 @@ var Movie = class {
2680
2656
  this.stops = normalizeStops(options.composition?.stops, this.duration, this.frameRate);
2681
2657
  this._posterFrame = poster.frame;
2682
2658
  this.background = options.background ?? "#000000";
2683
- this.timeline = gsap.gsap.timeline({ paused: true, defaults: { ease: "none" } });
2684
- this.timeline.add(gsap.gsap.to({}, { duration: this.duration }));
2659
+ this.timeline = chunkRQMI7EJT_cjs.createTimeline({ paused: true, defaults: { ease: "none" } });
2660
+ chunkRQMI7EJT_cjs.lengthen(this.timeline, this.duration);
2685
2661
  const baseAppOptions = {
2686
2662
  width: this.width,
2687
2663
  height: this.height,
@@ -2692,19 +2668,19 @@ var Movie = class {
2692
2668
  preserveDrawingBuffer: true,
2693
2669
  canvas: options.canvas
2694
2670
  };
2695
- this.app = new PIXI.Application();
2671
+ this.app = new pixi_js.Application();
2696
2672
  try {
2697
2673
  await this.app.init({ ...baseAppOptions, preference: "webgpu" });
2698
2674
  } catch (err) {
2699
2675
  console.warn("pixi-effects: WebGPU init failed, falling back to WebGL \u2014", err);
2700
- this.app = new PIXI.Application();
2676
+ this.app = new pixi_js.Application();
2701
2677
  await this.app.init({ ...baseAppOptions, preference: "webgl" });
2702
2678
  }
2703
- if (chunk3DLYAPK7_cjs.usesAdvancedBlend(options.composition)) await chunk3DLYAPK7_cjs.enableAdvancedBlend(this.app.renderer);
2704
- const root = new PIXI.Container();
2679
+ if (chunkP4GY3Z4G_cjs.usesAdvancedBlend(options.composition)) await chunkP4GY3Z4G_cjs.enableAdvancedBlend(this.app.renderer);
2680
+ const root = new pixi_js.Container();
2705
2681
  root.cullable = true;
2706
2682
  root.cullableChildren = true;
2707
- root.cullArea = new PIXI.Rectangle(0, 0, this.width, this.height);
2683
+ root.cullArea = new pixi_js.Rectangle(0, 0, this.width, this.height);
2708
2684
  this.app.stage.addChild(root);
2709
2685
  this._rootContainer = root;
2710
2686
  const audioContext = this._ensureAudioContext();
@@ -2740,7 +2716,7 @@ var Movie = class {
2740
2716
  height: options.composition.height ?? this.height,
2741
2717
  duration: options.composition.duration ?? this.duration
2742
2718
  } : void 0;
2743
- await chunkA225HYSY_cjs.ensureFilterLibrary(seededComposition);
2719
+ await chunkRQMI7EJT_cjs.ensureFilterLibrary(seededComposition);
2744
2720
  const userComposition = seededComposition ? expandTransitions(seededComposition) : void 0;
2745
2721
  const rootSeqSpec = {
2746
2722
  type: "composition",
@@ -2750,7 +2726,7 @@ var Movie = class {
2750
2726
  ...userComposition
2751
2727
  };
2752
2728
  if (userComposition) carryTransitionWindows(userComposition, rootSeqSpec);
2753
- const composition = new chunkIIDBEYQH_cjs.CompositionSequence(rootSeqSpec, null, rootShape);
2729
+ const composition = new chunkNDR2VQFV_cjs.CompositionSequence(rootSeqSpec, null, rootShape);
2754
2730
  lp.begin("build", countLayers(rootSeqSpec));
2755
2731
  await composition.build();
2756
2732
  this._rootSequence = composition;
@@ -2766,8 +2742,8 @@ var Movie = class {
2766
2742
  if (this.audioBuffer) this._mixStats = limitMix(this.audioBuffer, audios);
2767
2743
  }
2768
2744
  this._audioSources = audios;
2769
- this.timeline.progress(1).progress(0);
2770
2745
  lp.begin("frames", 0);
2746
+ this.timeline.time(this._timeOf(0));
2771
2747
  await this._awaitVideoFrames();
2772
2748
  this._updateSpace();
2773
2749
  this._renderNow();
@@ -3102,7 +3078,7 @@ var Movie = class {
3102
3078
  if (!this._synced) this._rootSequence?.syncFrame();
3103
3079
  this._synced = false;
3104
3080
  this._feedTimeFilters();
3105
- PIXI.Culler.shared.cull(app.stage, app.renderer.screen, false);
3081
+ pixi_js.Culler.shared.cull(app.stage, app.renderer.screen, false);
3106
3082
  app.renderer.render({ container: app.stage });
3107
3083
  }
3108
3084
  _requireReady(what) {
@@ -3423,9 +3399,9 @@ function countLayers(spec) {
3423
3399
  }
3424
3400
  var BY = ["chars", "words", "lines"];
3425
3401
  var ALIGN = ["left", "center", "right"];
3426
- var widthOf = (text, style) => PIXI.CanvasTextMetrics.measureText(text, style).width;
3402
+ var widthOf = (text, style) => pixi_js.CanvasTextMetrics.measureText(text, style).width;
3427
3403
  function measureText(text, style = {}) {
3428
- const m = PIXI.CanvasTextMetrics.measureText(text, new PIXI.TextStyle(style));
3404
+ const m = pixi_js.CanvasTextMetrics.measureText(text, new pixi_js.TextStyle(style));
3429
3405
  return { width: m.width, height: m.height, lines: text.split("\n").length };
3430
3406
  }
3431
3407
  function splitText(text, style = {}, opts = {}) {
@@ -3447,8 +3423,8 @@ function splitText(text, style = {}, opts = {}) {
3447
3423
  if (typeof v !== "number" || !Number.isFinite(v)) throw new Error(`splitText(): ${n} must be a number of pixels (e.g. ${n}: 640), got ${JSON.stringify(v)}: the pieces are placed by measuring, so an expression such as 'GW/2' cannot be used here. \`y\` is the top of the line.`);
3448
3424
  }
3449
3425
  if (text === "") return [];
3450
- const ts = new PIXI.TextStyle(style);
3451
- const lineHeight = PIXI.CanvasTextMetrics.measureText("M", ts).lineHeight ?? PIXI.CanvasTextMetrics.measureText("M", ts).height;
3426
+ const ts = new pixi_js.TextStyle(style);
3427
+ const lineHeight = pixi_js.CanvasTextMetrics.measureText("M", ts).lineHeight ?? pixi_js.CanvasTextMetrics.measureText("M", ts).height;
3452
3428
  const sentinel = widthOf("|", ts);
3453
3429
  const out = [];
3454
3430
  text.split("\n").forEach((line, lineNo) => {
@@ -3472,6 +3448,12 @@ function splitText(text, style = {}, opts = {}) {
3472
3448
  return out;
3473
3449
  }
3474
3450
 
3451
+ // src/presets/_ease.ts
3452
+ function parseEase2(name) {
3453
+ chunkRQMI7EJT_cjs.checkEase(name, "a preset");
3454
+ return chunkRQMI7EJT_cjs.parseEase(name);
3455
+ }
3456
+
3475
3457
  // src/presets/kenBurns.ts
3476
3458
  var KEN_BURNS_KEYS = ["asset", "name", "at", "duration", "fit", "ease", "motion", "origin", "zoom", "direction", "angle", "from", "to"];
3477
3459
  function kenBurns(opts) {
@@ -3584,10 +3566,6 @@ function kenBurns(opts) {
3584
3566
  function clamp(v, lo, hi) {
3585
3567
  return Math.max(lo, Math.min(hi, v));
3586
3568
  }
3587
- function parseEase(name) {
3588
- chunkA225HYSY_cjs.checkEase(name, "a preset");
3589
- return gsap.gsap.parseEase(name);
3590
- }
3591
3569
 
3592
3570
  // src/presets/orbit.ts
3593
3571
  var ORBIT_KEYS = ["duration", "degrees", "start", "radius", "center", "width", "height", "fov", "ease", "dollyZoom", "at", "name", "stepsPerSecond"];
@@ -3608,17 +3586,17 @@ function orbit(opts) {
3608
3586
  throw new Error("pixi-effects: orbit() cannot combine `radius` with `dollyZoom` \u2014 the radius follows the animated fov");
3609
3587
  }
3610
3588
  const [cx, cy] = opts.center ?? [width / 2, height / 2];
3611
- const fixedR = opts.radius ?? chunkA225HYSY_cjs.homeDistance(height, fov ?? chunkA225HYSY_cjs.DEFAULT_FOV);
3589
+ const fixedR = opts.radius ?? chunkRQMI7EJT_cjs.homeDistance(height, fov ?? chunkRQMI7EJT_cjs.DEFAULT_FOV);
3612
3590
  const start = opts.start ?? -degrees / 2;
3613
3591
  const steps = Math.max(1, Math.round(duration * stepsPerSecond));
3614
- const easeFn = parseEase(ease);
3615
- const dollyEase = dolly ? parseEase(dolly.ease ?? ease) : null;
3592
+ const easeFn = parseEase2(ease);
3593
+ const dollyEase = dolly ? parseEase2(dolly.ease ?? ease) : null;
3616
3594
  const pos = (i) => {
3617
3595
  const p = i / steps;
3618
- const a = (start + degrees * easeFn(p)) * chunkA225HYSY_cjs.DEG;
3596
+ const a = (start + degrees * easeFn(p)) * chunkRQMI7EJT_cjs.DEG;
3619
3597
  if (!dolly) return { x: cx + fixedR * Math.sin(a), z: fixedR * Math.cos(a) };
3620
3598
  const f = dolly.from + (dolly.to - dolly.from) * dollyEase(p);
3621
- const R = chunkA225HYSY_cjs.homeDistance(height, f);
3599
+ const R = chunkRQMI7EJT_cjs.homeDistance(height, f);
3622
3600
  return { x: cx + R * Math.sin(a), z: R * Math.cos(a), fov: f };
3623
3601
  };
3624
3602
  const keyframes = [];
@@ -3673,7 +3651,7 @@ function particles(opts) {
3673
3651
  const round3 = (v) => Math.round(v * 1e6) / 1e6;
3674
3652
  const out = [];
3675
3653
  for (let i = 0; i < count; i++) {
3676
- const r = chunkA225HYSY_cjs.random(seed * 1000003 + i * 7919 + 17);
3654
+ const r = chunkRQMI7EJT_cjs.random(seed * 1000003 + i * 7919 + 17);
3677
3655
  const pick = ([a2, b]) => a2 + r() * (b - a2);
3678
3656
  const born = at + r() * emit;
3679
3657
  const lifetime = pick(life);
@@ -3686,7 +3664,7 @@ function particles(opts) {
3686
3664
  const turn = spin ? pick(spin) : 0;
3687
3665
  const startAngle = spin ? r() * 360 : 0;
3688
3666
  const swayAmp = sway?.amp ?? 0, swayFreq = sway?.freq ?? 1;
3689
- const n0 = sway ? chunkA225HYSY_cjs.noise(0, seed * 1000003 + i) : 0;
3667
+ const n0 = sway ? chunkRQMI7EJT_cjs.noise(0, seed * 1000003 + i) : 0;
3690
3668
  const at_ = (t) => {
3691
3669
  const axis = (p0, v0, acc) => {
3692
3670
  if (drag > 0) {
@@ -3695,7 +3673,7 @@ function particles(opts) {
3695
3673
  }
3696
3674
  return p0 + v0 * t + 0.5 * acc * t * t;
3697
3675
  };
3698
- const sw = sway ? swayAmp * (chunkA225HYSY_cjs.noise(t * swayFreq, seed * 1000003 + i) - n0) : 0;
3676
+ const sw = sway ? swayAmp * (chunkRQMI7EJT_cjs.noise(t * swayFreq, seed * 1000003 + i) - n0) : 0;
3699
3677
  return { x: axis(x0, vx, wind) + sw, y: axis(y0, vy, gravity) };
3700
3678
  };
3701
3679
  const kfs = [];
@@ -3757,7 +3735,7 @@ function followPath(opts) {
3757
3735
  if (steps > MAX_STEPS) throw new Error(`followPath(): ${steps} samples is too many (max ${MAX_STEPS}); lower frameRate or duration`);
3758
3736
  const segments = [];
3759
3737
  let total = 0;
3760
- for (const line of chunkA225HYSY_cjs.flattenSvgPath(d)) {
3738
+ for (const line of chunkRQMI7EJT_cjs.flattenSvgPath(d)) {
3761
3739
  const p = line.closed ? [...line.pts, line.pts[0], line.pts[1]] : line.pts;
3762
3740
  for (let i = 2; i < p.length; i += 2) {
3763
3741
  const len = Math.hypot(p[i] - p[i - 2], p[i + 1] - p[i - 1]);
@@ -3782,7 +3760,7 @@ function followPath(opts) {
3782
3760
  const t = Math.min(Math.max((s - g.start) / g.len, 0), 1);
3783
3761
  return { x: g.x0 + (g.x1 - g.x0) * t, y: g.y0 + (g.y1 - g.y0) * t, heading: Math.atan2(g.y1 - g.y0, g.x1 - g.x0) * 180 / Math.PI };
3784
3762
  };
3785
- const shape = parseEase(ease);
3763
+ const shape = parseEase2(ease);
3786
3764
  const round3 = (v) => Math.round(v * 1e6) / 1e6;
3787
3765
  let turn = 0;
3788
3766
  const sample = (k) => {
@@ -3859,7 +3837,7 @@ function cameraPath(opts) {
3859
3837
  const a = curve[i], b = curve[i + 1];
3860
3838
  return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];
3861
3839
  };
3862
- const shape = parseEase(ease);
3840
+ const shape = parseEase2(ease);
3863
3841
  const round3 = (v) => Math.round(v * 1e6) / 1e6;
3864
3842
  const sample = (k) => {
3865
3843
  const p = from + (to - from) * shape(k / steps);
@@ -3901,7 +3879,7 @@ function stagger(items, options = {}) {
3901
3879
  const dist2 = distances(n, from, grid, seed);
3902
3880
  const max = dist2.reduce((m, d) => Math.max(m, d), 0);
3903
3881
  const total = amount !== void 0 ? amount : (each ?? 0.1) * max;
3904
- const shape = parseEase(ease);
3882
+ const shape = parseEase2(ease);
3905
3883
  const clamp01 = (v) => Math.min(1, Math.max(0, v));
3906
3884
  const delays = dist2.map((d) => max === 0 ? 0 : Math.round(total * clamp01(shape(d / max)) * 1e6) / 1e6);
3907
3885
  if (isCount) return delays;
@@ -3911,7 +3889,7 @@ function distances(n, from, grid, seed) {
3911
3889
  if (n === 0) return [];
3912
3890
  if (from === "random") {
3913
3891
  const order = Array.from({ length: n }, (_, i) => i);
3914
- const r = chunkA225HYSY_cjs.random(seed);
3892
+ const r = chunkRQMI7EJT_cjs.random(seed);
3915
3893
  for (let i = n - 1; i > 0; i--) {
3916
3894
  const j = Math.floor(r() * (i + 1));
3917
3895
  [order[i], order[j]] = [order[j], order[i]];
@@ -3973,7 +3951,7 @@ function wiggle(opts) {
3973
3951
  to[n] = p.around;
3974
3952
  return;
3975
3953
  }
3976
- const off = (chunkA225HYSY_cjs.rand(seed * 7919 + pi * 104729 + s * 31 + 1) * 2 - 1) * p.amp;
3954
+ const off = (chunkRQMI7EJT_cjs.rand(seed * 7919 + pi * 104729 + s * 31 + 1) * 2 - 1) * p.amp;
3977
3955
  to[n] = typeof p.around === "number" ? p.around + off : `(${p.around}) ${off < 0 ? "-" : "+"} ${Math.abs(off)}`;
3978
3956
  });
3979
3957
  out.push({ at: at + s * stepLen, to, duration: stepLen, ease });
@@ -4448,19 +4426,19 @@ function withFade(spec, opts) {
4448
4426
 
4449
4427
  Object.defineProperty(exports, "noise", {
4450
4428
  enumerable: true,
4451
- get: function () { return chunkA225HYSY_cjs.noise; }
4429
+ get: function () { return chunkRQMI7EJT_cjs.noise; }
4452
4430
  });
4453
4431
  Object.defineProperty(exports, "rand", {
4454
4432
  enumerable: true,
4455
- get: function () { return chunkA225HYSY_cjs.rand; }
4433
+ get: function () { return chunkRQMI7EJT_cjs.rand; }
4456
4434
  });
4457
4435
  Object.defineProperty(exports, "random", {
4458
4436
  enumerable: true,
4459
- get: function () { return chunkA225HYSY_cjs.random; }
4437
+ get: function () { return chunkRQMI7EJT_cjs.random; }
4460
4438
  });
4461
4439
  Object.defineProperty(exports, "registerSequenceType", {
4462
4440
  enumerable: true,
4463
- get: function () { return chunkA225HYSY_cjs.registerSequenceType; }
4441
+ get: function () { return chunkRQMI7EJT_cjs.registerSequenceType; }
4464
4442
  });
4465
4443
  exports.Movie = Movie;
4466
4444
  exports.animateText = animateText;
@@ -4470,6 +4448,7 @@ exports.cameraPath = cameraPath;
4470
4448
  exports.computeEnvelope = computeEnvelope;
4471
4449
  exports.deck = deck;
4472
4450
  exports.dismissLoader = dismissLoader;
4451
+ exports.ease = parseEase2;
4473
4452
  exports.failLoader = failLoader;
4474
4453
  exports.followPath = followPath;
4475
4454
  exports.kenBurns = kenBurns;