pixi-effects 0.28.2 → 0.29.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 (91) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +10 -10
  3. package/ai/chat-template.html +5 -5
  4. package/ai/tools/check.mjs +18 -3
  5. package/ai/tools/pixi-effects.mjs +1 -1
  6. package/ai/tools/render.mjs +14 -9
  7. package/ai/tools/view.mjs +6 -2
  8. package/dist/Base-CB1_FPZD.d.cts +60 -0
  9. package/dist/Base-Ne74ztNl.d.ts +60 -0
  10. package/dist/Composition-MUKR3FYD.cjs +16 -0
  11. package/dist/{Composition-K6B3APM5.cjs.map → Composition-MUKR3FYD.cjs.map} +1 -1
  12. package/dist/Composition-RJGA7KDU.js +7 -0
  13. package/dist/{Composition-H7UNR5F5.js.map → Composition-RJGA7KDU.js.map} +1 -1
  14. package/dist/Controller.cjs +73 -45
  15. package/dist/Controller.cjs.map +1 -1
  16. package/dist/Controller.d.cts +16 -22
  17. package/dist/Controller.d.ts +16 -22
  18. package/dist/Controller.js +74 -40
  19. package/dist/Controller.js.map +1 -1
  20. package/dist/{Movie-CHcM8HNB.d.ts → Movie-C2rZFkrO.d.ts} +227 -119
  21. package/dist/{Movie-Cx5ozUGb.d.cts → Movie-DdnpLpw1.d.cts} +227 -119
  22. package/dist/{blendModes-HDOP6R7T.cjs → blendModes-ETMYWATF.cjs} +5 -5
  23. package/dist/{blendModes-HDOP6R7T.cjs.map → blendModes-ETMYWATF.cjs.map} +1 -1
  24. package/dist/{blendModes-PAVTW3BO.js → blendModes-RIVZXL5A.js} +4 -4
  25. package/dist/{blendModes-PAVTW3BO.js.map → blendModes-RIVZXL5A.js.map} +1 -1
  26. package/dist/{chunk-P4GY3Z4G.cjs → chunk-2DXPTKQZ.cjs} +6 -6
  27. package/dist/chunk-2DXPTKQZ.cjs.map +1 -0
  28. package/dist/{chunk-TYWFKCPY.js → chunk-4KB3GUEK.js} +5 -5
  29. package/dist/chunk-4KB3GUEK.js.map +1 -0
  30. package/dist/{chunk-5MZWXVTT.js → chunk-A3Q3SDSH.js} +35 -28
  31. package/dist/chunk-A3Q3SDSH.js.map +1 -0
  32. package/dist/chunk-CRQFDY7E.js +4182 -0
  33. package/dist/chunk-CRQFDY7E.js.map +1 -0
  34. package/dist/chunk-HREBQAY4.cjs +4206 -0
  35. package/dist/chunk-HREBQAY4.cjs.map +1 -0
  36. package/dist/{chunk-ZMAD3KJU.cjs → chunk-LYOKH7KE.cjs} +22 -3
  37. package/dist/chunk-LYOKH7KE.cjs.map +1 -0
  38. package/dist/{chunk-45QKLD6M.js → chunk-RCVZX2JP.js} +22 -3
  39. package/dist/chunk-RCVZX2JP.js.map +1 -0
  40. package/dist/{chunk-KBH33IQX.cjs → chunk-WHNADXXG.cjs} +121 -114
  41. package/dist/chunk-WHNADXXG.cjs.map +1 -0
  42. package/dist/{chunk-7VN2KI3U.js → chunk-ZAXYPXKW.js} +14 -6
  43. package/dist/chunk-ZAXYPXKW.js.map +1 -0
  44. package/dist/{chunk-MJW7KILM.cjs → chunk-ZVUO325O.cjs} +32 -24
  45. package/dist/chunk-ZVUO325O.cjs.map +1 -0
  46. package/dist/index.cjs +106 -4482
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.cts +15 -60
  49. package/dist/index.d.ts +15 -60
  50. package/dist/index.js +6 -4457
  51. package/dist/index.js.map +1 -1
  52. package/dist/loader.css +1 -1
  53. package/dist/{Presenter.cjs → present.cjs} +370 -31
  54. package/dist/present.cjs.map +1 -0
  55. package/dist/present.d.cts +278 -0
  56. package/dist/present.d.ts +278 -0
  57. package/dist/{Presenter.js → present.js} +358 -32
  58. package/dist/present.js.map +1 -0
  59. package/dist/three.cjs +6 -6
  60. package/dist/three.d.cts +2 -2
  61. package/dist/three.d.ts +2 -2
  62. package/dist/three.js +2 -2
  63. package/dist/{types-DpK1vwcl.d.ts → types-BzIB65Vk.d.cts} +11 -265
  64. package/dist/{types-DpK1vwcl.d.cts → types-BzIB65Vk.d.ts} +11 -265
  65. package/docs/api.md +44 -77
  66. package/docs/dsl.md +16 -14
  67. package/llms-full.txt +86 -115
  68. package/llms.txt +1 -1
  69. package/package.json +5 -5
  70. package/skills/pixi-effects/SKILL.md +5 -5
  71. package/skills/pixi-effects/reference/cheatsheet.md +9 -9
  72. package/skills/pixi-effects/reference/direction.md +2 -0
  73. package/skills/pixi-effects/reference/pitfalls.md +6 -6
  74. package/skills/pixi-effects/reference/recipes.md +4 -4
  75. package/skills/pixi-effects/template.html +7 -7
  76. package/dist/Base-C6f0fE8j.d.ts +0 -109
  77. package/dist/Base-DI1FCGcH.d.cts +0 -109
  78. package/dist/Composition-H7UNR5F5.js +0 -7
  79. package/dist/Composition-K6B3APM5.cjs +0 -16
  80. package/dist/Presenter.cjs.map +0 -1
  81. package/dist/Presenter.d.cts +0 -122
  82. package/dist/Presenter.d.ts +0 -122
  83. package/dist/Presenter.js.map +0 -1
  84. package/dist/chunk-45QKLD6M.js.map +0 -1
  85. package/dist/chunk-5MZWXVTT.js.map +0 -1
  86. package/dist/chunk-7VN2KI3U.js.map +0 -1
  87. package/dist/chunk-KBH33IQX.cjs.map +0 -1
  88. package/dist/chunk-MJW7KILM.cjs.map +0 -1
  89. package/dist/chunk-P4GY3Z4G.cjs.map +0 -1
  90. package/dist/chunk-TYWFKCPY.js.map +0 -1
  91. package/dist/chunk-ZMAD3KJU.cjs.map +0 -1
@@ -1,128 +1,3 @@
1
- type EaseFn = (p: number) => number;
2
-
3
- /**
4
- * A timeline that is a pure function of time (spike: see docs/superpowers/specs/2026-10-10-pure-timeline-design.md).
5
- *
6
- * For every (target, property) it keeps the segments that write it, ordered by start time. The value at `t`
7
- * is the value of the last segment that has started, computed from `t` alone; nothing is remembered between
8
- * two calls except the start values captured when the segment was built. GSAP is the oracle: the rules below
9
- * were taken from black-box probes of `gsap.timeline` and are checked against it by tests/core/pure/timelineParity.test.ts.
10
- */
11
- interface PureVars {
12
- duration?: number;
13
- ease?: string | EaseFn;
14
- repeat?: number;
15
- yoyo?: boolean;
16
- repeatDelay?: number;
17
- onUpdate?: () => void;
18
- /** The Pixi plugin's shorthands: `scale`, `anchor`, `rotation` (degrees), `tint`, `autoAlpha` ... */
19
- pixi?: Record<string, unknown>;
20
- [prop: string]: unknown;
21
- }
22
- /** One thing a timeline writes: see `segments()`. */
23
- interface SegmentInfo {
24
- target: object;
25
- /** The property (`'alpha'`, `'scale.x'`, `'fill'`). */
26
- id: string;
27
- start: number;
28
- duration: number;
29
- repeat: number;
30
- yoyo: boolean;
31
- repeatDelay: number;
32
- kind: 'set' | 'to' | 'from' | 'fromTo';
33
- }
34
- /** A marker that only lengthens a timeline (what `gsap.to({}, { duration })` is used for). */
35
- interface Spacer {
36
- readonly spacer: true;
37
- readonly duration: number;
38
- }
39
- declare class PureTimeline {
40
- private readonly defaultEase;
41
- private readonly channels;
42
- private readonly channelList;
43
- private readonly children;
44
- private spans;
45
- private now;
46
- private order;
47
- private killed;
48
- private prepared;
49
- constructor(opts?: {
50
- paused?: boolean;
51
- defaults?: {
52
- ease?: string | EaseFn;
53
- };
54
- });
55
- /** Adds a child timeline (played with its local time) or a spacer that lengthens this one. */
56
- add(child: PureTimeline | Spacer, at?: number): this;
57
- set(target: object, vars: PureVars, at?: number): this;
58
- to(target: object, vars: PureVars, at?: number): this;
59
- from(target: object, vars: PureVars, at?: number): this;
60
- fromTo(target: object, fromVars: PureVars, toVars: PureVars, at?: number): this;
61
- private build;
62
- private channel;
63
- /**
64
- * A property moved by a function of the caller (a colour in OKLab, a gradient): `to` and `from` say how to get the two ends from
65
- * the value before the segment, `make` the interpolator between them. The value is only written while the segment is the last
66
- * one that has started, so nothing is read or kept between two frames.
67
- */
68
- tweenValue<T>(spec: {
69
- holder: object;
70
- id: string;
71
- get(): T;
72
- set(v: T): void;
73
- from?: (prev: T) => T;
74
- to: (start: T, prev: T, base: T) => T;
75
- make: (a: T, b: T) => (p: number) => T;
76
- duration: number;
77
- ease: string | EaseFn;
78
- at: number;
79
- repeat?: number;
80
- yoyo?: boolean;
81
- repeatDelay?: number;
82
- }): this;
83
- /**
84
- * A write that is undone when time goes back before it: the property is `value` from `at` on, and what it was before otherwise.
85
- * `holder` and `id` name the property, so a set and the tweens of the same property are one channel; `write` is the way the caller
86
- * writes it (it may do more than assign: redraw), and runs again whenever this set is what the property shows.
87
- */
88
- setValue<T>(holder: object, id: string, at: number, read: () => T, write: (v: T) => void, value: T): this;
89
- /** What the timeline will write, for tools and tests: every segment of this timeline and of the ones under it, starts in this timeline's time. */
90
- segments(offset?: number): SegmentInfo[];
91
- /** How many timelines are directly under this one. */
92
- timelines(): number;
93
- duration(): number;
94
- time(): number;
95
- time(value: number): this;
96
- /** GSAP's name for `time(t)`. */
97
- seek(t: number): this;
98
- progress(): number;
99
- progress(p: number): this;
100
- kill(): void;
101
- /**
102
- * What GSAP ended up with once it had been played to the end and back (what Movie used to do at build), as rules that depend
103
- * on the segments of a property only:
104
- * - a `from` / `fromTo` shows its start from the moment it is built, so a `to` that comes first starts at the start of the
105
- * `from` built last, else at the property's own value;
106
- * - a `to` (and a `set`) starts where the segment before it ended;
107
- * - a `from` ends where the segment before it ended, or, with none before, where the property was when it was built;
108
- * - before the first segment the property shows that segment's start.
109
- */
110
- private prepare;
111
- /** Every channel of this timeline and of its children reads the property it starts from before any of them writes. */
112
- private prepareDeep;
113
- /** How many channels write each (target, property) in this timeline and everything under it. */
114
- private countChannels;
115
- private isExclusive;
116
- private markExclusive;
117
- private evaluate;
118
- }
119
-
120
- /**
121
- * The timeline of the library and the few things around it: a timeline is a pure function of time (a value at a time is computed from the
122
- * script and the time alone, never from the way the playhead came), see docs/superpowers/specs/2026-10-10-pure-timeline-design.md.
123
- */
124
- type Timeline = PureTimeline;
125
-
126
1
  /** What an author writes in `composition.stops`: a time in seconds, or an object. */
127
2
  interface StopSpec {
128
3
  /** Where playback stops, in seconds (negative counts back from the end). */
@@ -154,97 +29,6 @@ interface Stop {
154
29
  advance?: number;
155
30
  pdf?: boolean;
156
31
  }
157
- /**
158
- * The stops of a composition, checked and in order. Numbers are stops; with no `page` anywhere every stop is a page of its
159
- * own, otherwise only the stops that say `page` start one (the first stop always does). Negative times count back from the end;
160
- * two stops on the same frame are one; anything outside the movie or not a number is dropped, with a warning that names it.
161
- */
162
- declare function normalizeStops(raw: ReadonlyArray<number | StopSpec> | undefined, duration: number, frameRate: number): Stop[];
163
- /**
164
- * The stops whose pictures stand for the pages (`which: 'pages'`, default) or for every stop. A page's picture is, in order: the stop flagged
165
- * `pdf: true` (the last such one, or the first with `pick: 'first'`), else the last (or first) stop not flagged `pdf: false`, else, for a page
166
- * list, its last (or first) stop, and for a PDF (`pdf: true` here) nothing: the page is left out. With `which: 'stops'` a PDF leaves out the
167
- * stops flagged `pdf: false`.
168
- */
169
- declare function pictureStops(stops: readonly Stop[], opts?: {
170
- which?: 'pages' | 'stops';
171
- pick?: 'last' | 'first';
172
- pdf?: boolean;
173
- }): Stop[];
174
-
175
- /** One note or chord of a track, as a score reader sees it. */
176
- interface MusicNote {
177
- /** Where it starts: beats from the start, and the same moment in seconds (the tempo map applied; swing and humanize are not). */
178
- beat: number;
179
- time: number;
180
- /** How long it is held, in beats and in seconds. */
181
- duration: number;
182
- seconds: number;
183
- /** The bar it starts in (1-based, from `meter`) and its beat inside that bar (1 = the downbeat, 1.5 = the "and" of 1). */
184
- bar: number;
185
- beatInBar: number;
186
- /** The audible MIDI notes (`music.transpose` and the track's `transpose` are in). */
187
- midi: number[];
188
- /** What the score called it: `Am7`, `c4`, `[c4 e4 g4]`. */
189
- name: string;
190
- /** More than one note at once. */
191
- chord: boolean;
192
- /** 0–1 (0.8 normal, 1 accented with `!`, 0.55 soft with `,`). */
193
- velocity: number;
194
- }
195
- interface MusicTrackEvents {
196
- inst: string;
197
- /** The track's length in beats and in bars (not a whole number when a bar is short: that is what to look for). */
198
- beats: number;
199
- bars: number;
200
- notes: MusicNote[];
201
- }
202
- interface MusicDrumHit {
203
- beat: number;
204
- time: number;
205
- bar: number;
206
- beatInBar: number;
207
- velocity: number;
208
- }
209
- interface MusicDrumEvents {
210
- kind: string;
211
- hits: MusicDrumHit[];
212
- }
213
- interface MusicEvents {
214
- /** The tempo at the start. */
215
- bpm: number;
216
- meter: number;
217
- beats: number;
218
- bars: number;
219
- /** The music without its reverb tail. */
220
- seconds: number;
221
- tracks: MusicTrackEvents[];
222
- /** Every drum that is hit, over all sections, with every hit written out. */
223
- drums: MusicDrumEvents[];
224
- }
225
- /** What the `check` tool prints about a music layer: lengths in bars (a short track shows), what starts in each bar, where the drums play. */
226
- interface MusicSummary {
227
- bpm: number;
228
- meter: number;
229
- /** The score set `meter`; when false 4 is only assumed. */
230
- meterSet: boolean;
231
- beats: number;
232
- bars: number;
233
- seconds: number;
234
- tail: number;
235
- tracks: Array<{
236
- inst: string;
237
- beats: number;
238
- bars: number;
239
- events: number;
240
- perBar: string[];
241
- }>;
242
- drums: Array<{
243
- from: number;
244
- to: number;
245
- kinds: string[];
246
- }>;
247
- }
248
32
 
249
33
  /**
250
34
  * pixi-effects public DSL types.
@@ -325,7 +109,7 @@ interface ChromaKeyFilterSpec {
325
109
  /**
326
110
  * A filter by name: `{ type: 'glow', outerStrength: 3, color: '#ffd166' }`. The type is the filter's class name without
327
111
  * `Filter` in camelCase (case does not matter); every other key is the filter's own option. `blur`, `noise`, `alpha` and
328
- * `colorMatrix` (`preset: 'sepia' | 'grayscale' | …` or a 20-number `matrix`) come from pixi.js; the rest are the filters of
112
+ * `colorMatrix` (`preset: 'sepia' | 'grayscale' | …` or a 20-number `matrix`) come from pixi.js; `grain` and `warp` are this library's own, the rest are the filters of
329
113
  * the `pixi-filters` package (add it to the import map, or `npm i pixi-filters`), loaded on first use. Animate an option with
330
114
  * `'filters.<name>.<option>'` like any other filter.
331
115
  */
@@ -334,7 +118,7 @@ interface NamedFilterSpec {
334
118
  name?: string;
335
119
  [option: string]: unknown;
336
120
  }
337
- type NamedFilterType = 'blur' | 'noise' | 'alpha' | 'colorMatrix' | 'grain' | 'adjustment' | 'advancedBloom' | 'ascii' | 'backdropBlur' | 'bevel' | 'bloom' | 'bulgePinch' | 'colorGradient' | 'colorMap' | 'colorOverlay' | 'colorReplace' | 'convolution' | 'crossHatch' | 'crt' | 'dot' | 'dropShadow' | 'emboss' | 'glitch' | 'glow' | 'godray' | 'grayscale' | 'hslAdjustment' | 'kawaseBlur' | 'motionBlur' | 'multiColorReplace' | 'oldFilm' | 'outline' | 'pixelate' | 'radialBlur' | 'reflection' | 'rgbSplit' | 'shockwave' | 'simpleLightmap' | 'simplexNoise' | 'tiltShift' | 'tiltShiftAxis' | 'twist' | 'zoomBlur';
121
+ type NamedFilterType = 'blur' | 'noise' | 'alpha' | 'colorMatrix' | 'grain' | 'warp' | 'adjustment' | 'advancedBloom' | 'ascii' | 'backdropBlur' | 'bevel' | 'bloom' | 'bulgePinch' | 'colorGradient' | 'colorMap' | 'colorOverlay' | 'colorReplace' | 'convolution' | 'crossHatch' | 'crt' | 'dot' | 'dropShadow' | 'emboss' | 'glitch' | 'glow' | 'godray' | 'grayscale' | 'hslAdjustment' | 'kawaseBlur' | 'motionBlur' | 'multiColorReplace' | 'oldFilm' | 'outline' | 'pixelate' | 'radialBlur' | 'reflection' | 'rgbSplit' | 'shockwave' | 'simpleLightmap' | 'simplexNoise' | 'tiltShift' | 'tiltShiftAxis' | 'twist' | 'zoomBlur';
338
122
  type FilterSpec = ChromaKeyFilterSpec | CustomFilterSpec | NamedFilterSpec;
339
123
  interface TransitionCommon {
340
124
  /** Sibling sequence's `name` — the outgoing scene. */
@@ -407,9 +191,12 @@ interface LumaTransition extends TransitionCommon {
407
191
  type TransitionSpec = CrossfadeTransition | WipeTransition | IrisTransition | SlideTransition | DipTransition | ZoomTransition | DissolveTransition | LumaTransition;
408
192
  /** How a layer blends with what is behind it: the CSS `mix-blend-mode` names, plus `add` and `linear-burn`. */
409
193
  type BlendModeName = 'normal' | 'add' | 'screen' | 'multiply' | 'overlay' | 'soft-light' | 'hard-light' | 'color-dodge' | 'color-burn' | 'darken' | 'lighten' | 'difference' | 'exclusion' | 'hue' | 'saturation' | 'color' | 'luminosity' | 'linear-burn';
410
- /** A matte given by name: another layer of the same composition. `channel` is how it is read (`'alpha'` by default, or `'luma'`: its brightness); `invert` uses 1 − matte. */
194
+ /**
195
+ * A matte with options: `layer` is another layer of the same composition by name, or a layer written in place. `channel` is how it is read (`'alpha'` by
196
+ * default, or `'luma'`: its brightness); `invert` uses 1 − matte (a hole instead of a crop). A layer written in place cannot go inside a list.
197
+ */
411
198
  interface MatteRefSpec {
412
- layer: string;
199
+ layer: string | SequenceSpec;
413
200
  channel?: 'alpha' | 'luma';
414
201
  invert?: boolean;
415
202
  }
@@ -457,18 +244,10 @@ interface SequenceCommon {
457
244
  * geometric reveals.
458
245
  *
459
246
  * Instead of a layer written in place, `mask` can name another layer of the same composition (a matte: it is not drawn, and several
460
- * layers can share it), `{ layer, channel, invert }`, or a list of those (all of them must let the layer through: intersect; subtract
461
- * with `invert: true`).
247
+ * layers can share it), `{ layer, channel, invert }` (`layer` is a name, or a layer written in place), or a list of names and `{ layer: name }`
248
+ * (all of them must let the layer through: intersect; subtract with `invert: true`). A hole instead of a crop: `mask: { layer: { …the shape… }, invert: true }`.
462
249
  */
463
250
  mask?: SequenceSpec | MaskRefSpec | MaskRefSpec[];
464
- /**
465
- * When true, the mask is inverted: pixels inside the mask shape become
466
- * transparent and pixels outside become visible. Useful for "knockout"
467
- * effects (cut a hole through an image / panel). Default false.
468
- *
469
- * Routed through PIXI's native `setMask({ inverse: true })`.
470
- */
471
- maskInverted?: boolean;
472
251
  /**
473
252
  * How this layer blends with what is behind it (everything drawn below it). `'add'` and `'screen'` brighten (glows, light
474
253
  * leaks, overlapping halos add up instead of covering each other), `'multiply'` darkens; `'overlay'`, `'soft-light'`,
@@ -899,7 +678,7 @@ interface CompositionSpec extends SequenceCommon {
899
678
  transitions?: TransitionSpec[];
900
679
  /**
901
680
  * Where a presentation pauses: seconds, or `{ at, page?, notes?, advance? }` (see `StopSpec`). A stop with `page` begins a page, the others
902
- * are steps of it; with no `page` anywhere each stop is a page. Nothing changes for an ordinary player: `Presenter` (and `movie.next()`)
681
+ * are steps of it; with no `page` anywhere each stop is a page. Nothing changes for an ordinary player: `Presenter` (and `next(movie)`, from `pixi-effects/present`)
903
682
  * stop at them, `Controller` shows them as marks on the seek bar.
904
683
  */
905
684
  stops?: Array<number | StopSpec>;
@@ -914,38 +693,5 @@ interface CompositionShape {
914
693
  /** Called after each layer is built (the root shape only): feeds `loadprogress` and lets the page paint now and then. */
915
694
  onLayerBuilt?: () => void | Promise<void>;
916
695
  }
917
- /** Audio descriptor pushed to the mixdown queue by AudioSequence/VideoSequence. */
918
- interface AudioDescriptor {
919
- /** Decoded audio (a file or a video's soundtrack). Exactly one of `buffer` / `synth` is set. */
920
- buffer?: AudioBuffer;
921
- /** Stereo samples (left, right) made on demand at the mix's sample rate (a synthesised sfx). Equal keys render equal samples. */
922
- synth?: {
923
- key: string;
924
- render: (sampleRate: number) => [Float32Array, Float32Array];
925
- /** The same samples in slices: `pace(done)` (0..1) runs between them and may wait, so a long piece does not freeze the page. */
926
- renderAsync?: (sampleRate: number, pace?: (done: number) => Promise<void> | void) => Promise<[Float32Array, Float32Array]>;
927
- };
928
- /** Who made it, for warnings and inspectAudio: `layer "pop-1"`. */
929
- layer?: string;
930
- /** What it plays: `sfx "pop"`, `asset "bgm"`, `video "green"`. */
931
- source?: string;
932
- /** A music layer's score read back: bars per track, what starts in each bar, the drum spans (for `movie.inspectAudio()` and the `check` tool). */
933
- music?: MusicSummary;
934
- loop: boolean;
935
- start: number;
936
- end: number;
937
- initialVolume: number;
938
- volumeKeyframes: {
939
- time: number;
940
- value: number;
941
- }[];
942
- /**
943
- * Time remap. `warp` maps the movie's time to the time `start` / `end` / `volumeKeyframes` are measured in (a remapped composition's
944
- * local time), NaN where it is silent. `sourceMap` maps that time to a position in the sound (the layer's own speed / `time`); absent:
945
- * the sound plays straight from `start`. The mixer resamples through them, so a speed other than 1 changes the pitch.
946
- */
947
- warp?: (t: number) => number;
948
- sourceMap?: (u: number) => number;
949
- }
950
696
 
951
- export { type SfxPreset as $, type ArcShapeSpec as A, type BlendModeName as B, type CompositionShape as C, type DipTransition as D, type EllipseShapeSpec as E, type FilterSpec as F, type GradientSpec as G, type MusicInstrument as H, type ImageSequenceSpec as I, type MusicLevel as J, type Keyframe as K, type LightSequenceSpec as L, type MusicOptions as M, type MusicNote as N, type MusicSummary as O, type Props as P, type MusicTrack as Q, type MusicTrackEvents as R, type SequenceSpec as S, type TextSequenceSpec as T, type NullSequenceSpec as U, type PathShapeSpec as V, type PolygonShapeSpec as W, type PropValue as X, type RectShapeSpec as Y, type SfxKnobs as Z, type SfxOptions as _, type CameraSequenceSpec as a, type SfxVoice as a0, type ShaderSequenceSpec as a1, type ShapeSequenceSpec as a2, type SlideTransition as a3, type Stop as a4, type StopSpec as a5, type TransitionCommon as a6, type VideoSequenceSpec as a7, type WipeTransition as a8, type ZoomTransition as a9, normalizeStops as aa, pictureStops as ab, type Timeline as ac, type AudioDescriptor as ad, type MusicEvents as b, type TransitionSpec as c, type CompositionSpec as d, type SequenceCommon as e, type AssetSpec as f, type AudioAssetSpec as g, type AudioMusicSpec as h, type AudioSequenceSpec as i, type AudioSfxSpec as j, type ChromaKeyFilterSpec as k, type CircleShapeSpec as l, type CompositionSequenceSpec as m, type CrossfadeTransition as n, type CustomFilterSpec as o, type DissolveTransition as p, type Expr as q, type IrisTransition as r, type LineShapeSpec as s, type LumaTransition as t, type MaskRefSpec as u, type MatteRefSpec as v, type MusicDrum as w, type MusicDrumEvents as x, type MusicDrumHit as y, type MusicDrums as z };
697
+ export type { TransitionCommon as $, ArcShapeSpec as A, BlendModeName as B, CompositionShape as C, DipTransition as D, EllipseShapeSpec as E, FilterSpec as F, GradientSpec as G, PropValue as H, ImageSequenceSpec as I, Props as J, Keyframe as K, LightSequenceSpec as L, MusicOptions as M, NullSequenceSpec as N, SfxKnobs as O, PathShapeSpec as P, SfxOptions as Q, RectShapeSpec as R, SequenceSpec as S, TextSequenceSpec as T, SfxPreset as U, SfxVoice as V, ShaderSequenceSpec as W, ShapeSequenceSpec as X, SlideTransition as Y, Stop as Z, StopSpec as _, CameraSequenceSpec as a, TransitionSpec as a0, VideoSequenceSpec as a1, WipeTransition as a2, ZoomTransition as a3, SequenceCommon as b, AssetSpec as c, AudioAssetSpec as d, AudioMusicSpec as e, AudioSequenceSpec as f, AudioSfxSpec as g, ChromaKeyFilterSpec as h, CircleShapeSpec as i, CompositionSequenceSpec as j, CompositionSpec as k, CrossfadeTransition as l, CustomFilterSpec as m, DissolveTransition as n, Expr as o, IrisTransition as p, LineShapeSpec as q, LumaTransition as r, MaskRefSpec as s, MatteRefSpec as t, MusicDrum as u, MusicDrums as v, MusicInstrument as w, MusicLevel as x, MusicTrack as y, PolygonShapeSpec as z };