@remotion/effects 4.0.540 → 4.0.542

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 (133) hide show
  1. package/THIRD_PARTY_LICENSES.md +10 -0
  2. package/dist/esm/lightning.mjs +603 -0
  3. package/dist/esm/magnify.mjs +403 -0
  4. package/dist/esm/preview/barrel-distortion.mjs +303 -0
  5. package/dist/esm/preview/bevel-alpha.mjs +525 -0
  6. package/dist/esm/preview/blur.mjs +435 -0
  7. package/dist/esm/preview/brightness.mjs +95 -0
  8. package/dist/esm/preview/burlap.mjs +481 -0
  9. package/dist/esm/preview/checkerboard.mjs +8 -0
  10. package/dist/esm/preview/chromatic-aberration.mjs +308 -0
  11. package/dist/esm/preview/color-correction.mjs +522 -0
  12. package/dist/esm/preview/color-key.mjs +440 -0
  13. package/dist/esm/preview/contour-lines.mjs +608 -0
  14. package/dist/esm/preview/contrast.mjs +95 -0
  15. package/dist/esm/preview/corner-pin.mjs +6 -0
  16. package/dist/esm/preview/curves.mjs +357 -0
  17. package/dist/esm/preview/cylinder.mjs +273 -0
  18. package/dist/esm/preview/dot-grid.mjs +333 -0
  19. package/dist/esm/preview/drop-shadow.mjs +607 -0
  20. package/dist/esm/preview/duotone.mjs +344 -0
  21. package/dist/esm/preview/emboss.mjs +479 -0
  22. package/dist/esm/preview/evolve.mjs +485 -0
  23. package/dist/esm/preview/exposure.mjs +264 -0
  24. package/dist/esm/preview/film-burn.mjs +298 -0
  25. package/dist/esm/preview/fisheye.mjs +422 -0
  26. package/dist/esm/preview/flannel.mjs +401 -0
  27. package/dist/esm/preview/fractal-noise.mjs +642 -0
  28. package/dist/esm/preview/glow.mjs +598 -0
  29. package/dist/esm/preview/grayscale.mjs +86 -0
  30. package/dist/esm/preview/gridlines.mjs +8 -0
  31. package/dist/esm/preview/halftone-linear-gradient.mjs +523 -0
  32. package/dist/esm/preview/halftone.mjs +552 -0
  33. package/dist/esm/preview/hue.mjs +83 -0
  34. package/dist/esm/preview/index-00v3hr66.mjs +299 -0
  35. package/dist/esm/preview/index-0w4eqht8.mjs +351 -0
  36. package/dist/esm/preview/index-18y0zcy2.mjs +440 -0
  37. package/dist/esm/preview/index-1m1b1ad7.mjs +520 -0
  38. package/dist/esm/preview/index-34fxm3ax.mjs +518 -0
  39. package/dist/esm/preview/index-4fvp93ps.mjs +32 -0
  40. package/dist/esm/preview/index-4scpn12x.mjs +224 -0
  41. package/dist/esm/preview/index-4z6pt3ka.mjs +104 -0
  42. package/dist/esm/preview/index-618ky75w.mjs +51 -0
  43. package/dist/esm/preview/index-6agxdrvr.mjs +411 -0
  44. package/dist/esm/preview/index-6jkps947.mjs +120 -0
  45. package/dist/esm/preview/index-8agtsbw4.mjs +617 -0
  46. package/dist/esm/preview/index-8jx11jyn.mjs +29 -0
  47. package/dist/esm/preview/index-8p04sssx.mjs +123 -0
  48. package/dist/esm/preview/index-afdtmrh2.mjs +596 -0
  49. package/dist/esm/preview/index-b86qstcs.mjs +18 -0
  50. package/dist/esm/preview/index-cb77qg3g.mjs +587 -0
  51. package/dist/esm/preview/index-cdp7tr8x.mjs +122 -0
  52. package/dist/esm/preview/index-evy8hyah.mjs +55 -0
  53. package/dist/esm/preview/index-gnsce796.mjs +6 -0
  54. package/dist/esm/preview/index-kkvzt8b7.mjs +199 -0
  55. package/dist/esm/preview/index-r0v18b2n.mjs +425 -0
  56. package/dist/esm/preview/index-rswpzmm5.mjs +926 -0
  57. package/dist/esm/preview/index-s9mrx750.mjs +97 -0
  58. package/dist/esm/preview/index-tvfexb7s.mjs +164 -0
  59. package/dist/esm/preview/index-vp56k1gj.mjs +215 -0
  60. package/dist/esm/preview/index-wxhvgv2s.mjs +79 -0
  61. package/dist/esm/preview/index-wy95a41r.mjs +407 -0
  62. package/dist/esm/preview/index-ysnwfc4t.mjs +306 -0
  63. package/dist/esm/preview/index.mjs +51 -0
  64. package/dist/esm/preview/invert.mjs +84 -0
  65. package/dist/esm/preview/iris-wipe.mjs +315 -0
  66. package/dist/esm/preview/lens-blur.mjs +563 -0
  67. package/dist/esm/preview/levels.mjs +400 -0
  68. package/dist/esm/preview/light-leak.mjs +8 -0
  69. package/dist/esm/preview/light-trail.mjs +516 -0
  70. package/dist/esm/preview/lightning.mjs +603 -0
  71. package/dist/esm/preview/linear-gradient-tint.mjs +6 -0
  72. package/dist/esm/preview/linear-gradient.mjs +6 -0
  73. package/dist/esm/preview/linear-progressive-blur.mjs +516 -0
  74. package/dist/esm/preview/linear-progressive-pixelate.mjs +176 -0
  75. package/dist/esm/preview/lines.mjs +536 -0
  76. package/dist/esm/preview/liquid-contours.mjs +512 -0
  77. package/dist/esm/preview/long-shadows.mjs +437 -0
  78. package/dist/esm/preview/lut.mjs +601 -0
  79. package/dist/esm/preview/magnify.mjs +403 -0
  80. package/dist/esm/preview/mirror.mjs +341 -0
  81. package/dist/esm/preview/noise-displacement.mjs +584 -0
  82. package/dist/esm/preview/noise.mjs +318 -0
  83. package/dist/esm/preview/outline.mjs +725 -0
  84. package/dist/esm/preview/page-turn.mjs +302 -0
  85. package/dist/esm/preview/paper.mjs +1249 -0
  86. package/dist/esm/preview/pattern.mjs +6 -0
  87. package/dist/esm/preview/pixel-dissolve.mjs +360 -0
  88. package/dist/esm/preview/pixelate.mjs +249 -0
  89. package/dist/esm/preview/radial-progressive-blur.mjs +582 -0
  90. package/dist/esm/preview/radial-progressive-pixelate.mjs +220 -0
  91. package/dist/esm/preview/radial-wipe.mjs +224 -0
  92. package/dist/esm/preview/rain-fall.mjs +114 -0
  93. package/dist/esm/preview/region-blur.mjs +500 -0
  94. package/dist/esm/preview/rings.mjs +8 -0
  95. package/dist/esm/preview/roughen-edges.mjs +590 -0
  96. package/dist/esm/preview/saturation.mjs +86 -0
  97. package/dist/esm/preview/scale.mjs +109 -0
  98. package/dist/esm/preview/scanlines.mjs +362 -0
  99. package/dist/esm/preview/shadows-highlights.mjs +284 -0
  100. package/dist/esm/preview/shatter.mjs +868 -0
  101. package/dist/esm/preview/shine.mjs +368 -0
  102. package/dist/esm/preview/shrinkwrap.mjs +769 -0
  103. package/dist/esm/preview/skew.mjs +300 -0
  104. package/dist/esm/preview/snow-fall.mjs +170 -0
  105. package/dist/esm/preview/speckle.mjs +356 -0
  106. package/dist/esm/preview/sphere.mjs +252 -0
  107. package/dist/esm/preview/starburst.mjs +8 -0
  108. package/dist/esm/preview/tear.mjs +375 -0
  109. package/dist/esm/preview/thermal-vision.mjs +387 -0
  110. package/dist/esm/preview/tile.mjs +7 -0
  111. package/dist/esm/preview/tint.mjs +125 -0
  112. package/dist/esm/preview/translate.mjs +151 -0
  113. package/dist/esm/preview/turbulent-displace.mjs +613 -0
  114. package/dist/esm/preview/tv-signal-off.mjs +308 -0
  115. package/dist/esm/preview/venetian-blinds.mjs +341 -0
  116. package/dist/esm/preview/vibrance.mjs +254 -0
  117. package/dist/esm/preview/vignette.mjs +458 -0
  118. package/dist/esm/preview/wave.mjs +384 -0
  119. package/dist/esm/preview/waves.mjs +599 -0
  120. package/dist/esm/preview/white-balance.mjs +280 -0
  121. package/dist/esm/preview/white-noise.mjs +244 -0
  122. package/dist/esm/preview/zigzag.mjs +8 -0
  123. package/dist/esm/preview/zoom-blur.mjs +389 -0
  124. package/dist/lightning/geometry.d.ts +10 -0
  125. package/dist/lightning/index.d.ts +4 -0
  126. package/dist/lightning/mask.d.ts +2 -0
  127. package/dist/lightning/params.d.ts +259 -0
  128. package/dist/lightning/shaders.d.ts +2 -0
  129. package/dist/lightning.d.ts +2 -0
  130. package/dist/magnify/shader.d.ts +1 -0
  131. package/dist/magnify/webgpu-shader.d.ts +1 -0
  132. package/dist/magnify.d.ts +28 -0
  133. package/package.json +30 -6
@@ -0,0 +1,642 @@
1
+ import {
2
+ VALUE_NOISE_SHADER,
3
+ VALUE_NOISE_WEBGPU_SHADER
4
+ } from "./index-4z6pt3ka.mjs";
5
+ import {
6
+ assertOptionalFiniteNumber,
7
+ validateUnitInterval,
8
+ validateNonNegative
9
+ } from "./index-wxhvgv2s.mjs";
10
+ import {
11
+ WEBGPU_SINGLE_PASS_VERTEX,
12
+ setupWebGpuSinglePass,
13
+ cleanupWebGpuSinglePass,
14
+ applyWebGpuSinglePass
15
+ } from "./index-tvfexb7s.mjs";
16
+ import {
17
+ assertEffectParamsObject,
18
+ assertOptionalBoolean
19
+ } from "./index-4fvp93ps.mjs";
20
+
21
+ // src/fractal-noise/index.ts
22
+ import { Internals } from "remotion";
23
+
24
+ // src/fractal-noise/shader.ts
25
+ var FRACTAL_NOISE_FRAGMENT_SHADER = `#version 300 es
26
+ precision highp float;
27
+ precision highp int;
28
+
29
+ in vec2 vUv;
30
+ out vec4 fragColor;
31
+ uniform sampler2D uSource;
32
+ uniform vec2 uResolution;
33
+ uniform vec2 uOffset;
34
+ uniform float uScale;
35
+ uniform float uComplexity;
36
+ uniform float uEvolution;
37
+ uniform float uSubInfluence;
38
+ uniform float uSubScaling;
39
+ uniform float uContrast;
40
+ uniform float uBrightness;
41
+ uniform float uAmount;
42
+ uniform float uCycle;
43
+ uniform uint uSeed;
44
+ uniform int uFractalType;
45
+ uniform int uNoiseType;
46
+ uniform bool uInvert;
47
+ uniform bool uCycleEvolution;
48
+
49
+ ${VALUE_NOISE_SHADER}
50
+
51
+ float layer(vec2 p, float z, uint seed) {
52
+ if (!uCycleEvolution) return valueNoise(vec3(p, uEvolution + z), seed);
53
+ float t = mod(uEvolution, uCycle);
54
+ return mix(valueNoise(vec3(p, t + z), seed), valueNoise(vec3(p, t - uCycle + z), seed), t / uCycle);
55
+ }
56
+
57
+ float shape(float n) {
58
+ float s = 2.0 * n - 1.0;
59
+ if (uFractalType == 1) return 1.0 - s * s;
60
+ if (uFractalType == 2) return 1.0 - abs(s);
61
+ if (uFractalType == 3) return (1.0 - abs(s)) * (1.0 - abs(s));
62
+ if (uFractalType == 8) {
63
+ float distance = clamp(abs(s) / 0.12, 0.0, 1.0);
64
+ return 1.0 - distance * distance;
65
+ }
66
+ return n;
67
+ }
68
+
69
+ void main() {
70
+ vec4 source = texture(uSource, vUv);
71
+ if (source.a == 0.0 || uAmount == 0.0) {
72
+ fragColor = source;
73
+ return;
74
+ }
75
+ // Use exact pixel centers so block noise stays stable at cell boundaries.
76
+ vec2 pixel = vec2(gl_FragCoord.x, uResolution.y - gl_FragCoord.y);
77
+ vec2 base = (pixel - uResolution * 0.5 - uOffset) / uScale;
78
+ float sum = 0.0;
79
+ float norm = 0.0;
80
+ float amplitude = 1.0;
81
+ float frequency = 1.0;
82
+ float best = 0.0;
83
+ for (int octave = 0; octave < 20; octave++) {
84
+ float weight = clamp(uComplexity - float(octave), 0.0, 1.0);
85
+ if (weight == 0.0 || amplitude == 0.0) break;
86
+ vec2 p = base * frequency;
87
+ float z = float(octave) * 7.31;
88
+ uint seed = (uSeed ^ 0x51edu) + uint(octave);
89
+ if (uFractalType >= 4 && uFractalType <= 6) {
90
+ float a = layer(p * 0.5, z + 3.1, seed ^ 0x55u) - 0.5;
91
+ if (uFractalType == 5) {
92
+ float angle = a * 3.0;
93
+ p = mat2(cos(angle), sin(angle), -sin(angle), cos(angle)) * p;
94
+ } else {
95
+ float b = layer(p * 0.5, z + 5.7, seed ^ 0xaau) - 0.5;
96
+ float strength = uFractalType == 6 ? 0.5 + float(octave) * 0.35 : 1.0;
97
+ p += vec2(a, b) * 1.5 * strength;
98
+ }
99
+ }
100
+ float n = shape(layer(p, z, seed));
101
+ // Fade fractional octaves in for Max too, so animating complexity is continuous.
102
+ best = max(best, n * amplitude * weight);
103
+ sum += n * amplitude * weight;
104
+ norm += amplitude * weight;
105
+ amplitude *= uSubInfluence;
106
+ frequency /= uSubScaling;
107
+ }
108
+ float noise = uFractalType == 7 ? best : sum / norm;
109
+ noise = clamp((noise - 0.5) * uContrast + 0.5 + uBrightness, 0.0, 1.0);
110
+ if (uInvert) noise = 1.0 - noise;
111
+ fragColor = vec4(mix(source.rgb, vec3(noise) * source.a, uAmount), source.a);
112
+ }
113
+ `;
114
+
115
+ // src/fractal-noise/webgpu-shader.ts
116
+ var FRACTAL_NOISE_WEBGPU_SHADER = `
117
+ ${WEBGPU_SINGLE_PASS_VERTEX}
118
+ @group(0) @binding(0) var source: texture_2d<f32>;
119
+ @group(0) @binding(1) var sourceSampler: sampler;
120
+ @group(0) @binding(2) var<uniform> params: Params;
121
+
122
+ struct Params { size: vec2f, offset: vec2f, scale: f32, complexity: f32, evolution: f32, subInfluence: f32, subScaling: f32, contrast: f32, brightness: f32, amount: f32, cycle: f32, seed: u32, fractalType: f32, noiseType: f32, invert: f32, cycleEvolution: f32, }
123
+ fn noiseType() -> i32 { return i32(params.noiseType); }
124
+ ${VALUE_NOISE_WEBGPU_SHADER}
125
+ fn layer(p: vec2f,z: f32,seed: u32) -> f32 {
126
+ if(params.cycleEvolution==0.0) { return valueNoise(vec3f(p,params.evolution+z),seed); }
127
+ let t=params.evolution-floor(params.evolution/params.cycle)*params.cycle;
128
+ return mix(valueNoise(vec3f(p,t+z),seed),valueNoise(vec3f(p,t-params.cycle+z),seed),t/params.cycle);
129
+ }
130
+ fn shape(n: f32) -> f32 {
131
+ let s=2.0*n-1.0;
132
+ if(params.fractalType==1.0) { return 1.0-s*s; }
133
+ if(params.fractalType==2.0) { return 1.0-abs(s); }
134
+ if(params.fractalType==3.0) { return (1.0-abs(s))*(1.0-abs(s)); }
135
+ if(params.fractalType==8.0) { let distance=clamp(abs(s)/0.12,0.0,1.0); return 1.0-distance*distance; }
136
+ return n;
137
+ }
138
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
139
+ let color=textureSampleLevel(source,sourceSampler,input.uv,0);
140
+ if(color.a==0.0 || params.amount==0.0) { return color; }
141
+ let pixel=input.position.xy;
142
+ let base=(pixel-params.size*0.5-params.offset)/params.scale;
143
+ var sum=0.0; var norm=0.0; var amplitude=1.0; var frequency=1.0; var best=0.0;
144
+ for(var octave=0;octave<20;octave++) {
145
+ let weight=clamp(params.complexity-f32(octave),0.0,1.0);
146
+ if(weight==0.0 || amplitude==0.0) { break; }
147
+ var p=base*frequency;
148
+ let z=f32(octave)*7.31;
149
+ let seed=(params.seed ^ 0x51edu)+u32(octave);
150
+ if(params.fractalType>=4.0 && params.fractalType<=6.0) {
151
+ let a=layer(p*0.5,z+3.1,seed ^ 0x55u)-0.5;
152
+ if(params.fractalType==5.0) {
153
+ let angle=a*3.0;
154
+ p=mat2x2f(vec2f(cos(angle),sin(angle)),vec2f(-sin(angle),cos(angle)))*p;
155
+ } else {
156
+ let b=layer(p*0.5,z+5.7,seed ^ 0xaau)-0.5;
157
+ let strength=select(1.0,0.5+f32(octave)*0.35,params.fractalType==6.0);
158
+ p += vec2f(a,b)*1.5*strength;
159
+ }
160
+ }
161
+ let n=shape(layer(p,z,seed));
162
+ best=max(best,n*amplitude*weight); sum += n*amplitude*weight; norm += amplitude*weight;
163
+ amplitude *= params.subInfluence; frequency /= params.subScaling;
164
+ }
165
+ var noise=select(sum/norm,best,params.fractalType==7.0);
166
+ noise=clamp((noise-0.5)*params.contrast+0.5+params.brightness,0.0,1.0);
167
+ if(params.invert!=0.0) { noise=1.0-noise; }
168
+ return vec4f(mix(color.rgb,vec3f(noise)*color.a,params.amount),color.a);
169
+ }
170
+
171
+ `;
172
+
173
+ // src/fractal-noise/index.ts
174
+ var { createEffect, createWebGL2ContextError } = Internals;
175
+ var DEFAULT_FRACTAL_TYPE = "basic";
176
+ var DEFAULT_NOISE_TYPE = "soft-linear";
177
+ var DEFAULT_SCALE = 100;
178
+ var DEFAULT_COMPLEXITY = 6;
179
+ var DEFAULT_EVOLUTION = 0;
180
+ var DEFAULT_CONTRAST = 1;
181
+ var DEFAULT_BRIGHTNESS = 0;
182
+ var DEFAULT_OFFSET_X = 0;
183
+ var DEFAULT_OFFSET_Y = 0;
184
+ var DEFAULT_SUB_INFLUENCE = 0.7;
185
+ var DEFAULT_SUB_SCALING = 0.56;
186
+ var DEFAULT_CYCLE_EVOLUTION = false;
187
+ var DEFAULT_CYCLE = 1;
188
+ var DEFAULT_SEED = 0;
189
+ var DEFAULT_INVERT = false;
190
+ var DEFAULT_AMOUNT = 1;
191
+ var FRACTAL_TYPES = [
192
+ "basic",
193
+ "turbulent-smooth",
194
+ "turbulent-basic",
195
+ "turbulent-sharp",
196
+ "dynamic",
197
+ "dynamic-twist",
198
+ "dynamic-progressive",
199
+ "max",
200
+ "strings"
201
+ ];
202
+ var NOISE_TYPES = ["block", "linear", "soft-linear", "spline"];
203
+ var fractalNoiseSchema = {
204
+ fractalType: {
205
+ type: "enum",
206
+ variants: {
207
+ basic: {},
208
+ "turbulent-smooth": {},
209
+ "turbulent-basic": {},
210
+ "turbulent-sharp": {},
211
+ dynamic: {},
212
+ "dynamic-twist": {},
213
+ "dynamic-progressive": {},
214
+ max: {},
215
+ strings: {}
216
+ },
217
+ default: DEFAULT_FRACTAL_TYPE,
218
+ description: "Fractal type"
219
+ },
220
+ noiseType: {
221
+ type: "enum",
222
+ variants: {
223
+ block: {},
224
+ linear: {},
225
+ "soft-linear": {},
226
+ spline: {}
227
+ },
228
+ default: DEFAULT_NOISE_TYPE,
229
+ description: "Noise type"
230
+ },
231
+ scale: {
232
+ type: "number",
233
+ min: 1,
234
+ max: 1000,
235
+ step: 1,
236
+ default: DEFAULT_SCALE,
237
+ description: "Scale",
238
+ hiddenFromList: false
239
+ },
240
+ complexity: {
241
+ type: "number",
242
+ min: 1,
243
+ max: 20,
244
+ step: 0.1,
245
+ default: DEFAULT_COMPLEXITY,
246
+ description: "Complexity",
247
+ hiddenFromList: false
248
+ },
249
+ evolution: {
250
+ type: "rotation-degrees",
251
+ step: 1,
252
+ default: DEFAULT_EVOLUTION,
253
+ description: "Evolution"
254
+ },
255
+ contrast: {
256
+ type: "number",
257
+ min: 0,
258
+ max: 10,
259
+ step: 0.01,
260
+ default: DEFAULT_CONTRAST,
261
+ description: "Contrast",
262
+ hiddenFromList: false
263
+ },
264
+ brightness: {
265
+ type: "number",
266
+ min: -1,
267
+ max: 1,
268
+ step: 0.01,
269
+ default: DEFAULT_BRIGHTNESS,
270
+ description: "Brightness",
271
+ hiddenFromList: false
272
+ },
273
+ offsetX: {
274
+ type: "number",
275
+ step: 1,
276
+ default: DEFAULT_OFFSET_X,
277
+ description: "Offset X",
278
+ hiddenFromList: false
279
+ },
280
+ offsetY: {
281
+ type: "number",
282
+ step: 1,
283
+ default: DEFAULT_OFFSET_Y,
284
+ description: "Offset Y",
285
+ hiddenFromList: false
286
+ },
287
+ subInfluence: {
288
+ type: "number",
289
+ min: 0,
290
+ max: 1,
291
+ step: 0.01,
292
+ default: DEFAULT_SUB_INFLUENCE,
293
+ description: "Sub influence",
294
+ hiddenFromList: false
295
+ },
296
+ subScaling: {
297
+ type: "number",
298
+ min: 0.1,
299
+ max: 1,
300
+ step: 0.01,
301
+ default: DEFAULT_SUB_SCALING,
302
+ description: "Sub scaling",
303
+ hiddenFromList: false
304
+ },
305
+ cycleEvolution: {
306
+ type: "boolean",
307
+ default: DEFAULT_CYCLE_EVOLUTION,
308
+ description: "Cycle evolution"
309
+ },
310
+ cycle: {
311
+ type: "number",
312
+ min: 1,
313
+ max: 100,
314
+ step: 1,
315
+ integer: true,
316
+ default: DEFAULT_CYCLE,
317
+ description: "Cycle length",
318
+ hiddenFromList: false
319
+ },
320
+ seed: {
321
+ type: "number",
322
+ min: 0,
323
+ max: 4294967295,
324
+ step: 1,
325
+ integer: true,
326
+ default: DEFAULT_SEED,
327
+ description: "Seed",
328
+ hiddenFromList: false
329
+ },
330
+ invert: {
331
+ type: "boolean",
332
+ default: DEFAULT_INVERT,
333
+ description: "Invert"
334
+ },
335
+ amount: {
336
+ type: "number",
337
+ min: 0,
338
+ max: 1,
339
+ step: 0.01,
340
+ default: DEFAULT_AMOUNT,
341
+ description: "Amount",
342
+ hiddenFromList: false
343
+ }
344
+ };
345
+ var resolve = (params) => ({
346
+ fractalType: params.fractalType ?? DEFAULT_FRACTAL_TYPE,
347
+ noiseType: params.noiseType ?? DEFAULT_NOISE_TYPE,
348
+ scale: params.scale ?? DEFAULT_SCALE,
349
+ complexity: params.complexity ?? DEFAULT_COMPLEXITY,
350
+ evolution: params.evolution ?? DEFAULT_EVOLUTION,
351
+ contrast: params.contrast ?? DEFAULT_CONTRAST,
352
+ brightness: params.brightness ?? DEFAULT_BRIGHTNESS,
353
+ offsetX: params.offsetX ?? DEFAULT_OFFSET_X,
354
+ offsetY: params.offsetY ?? DEFAULT_OFFSET_Y,
355
+ subInfluence: params.subInfluence ?? DEFAULT_SUB_INFLUENCE,
356
+ subScaling: params.subScaling ?? DEFAULT_SUB_SCALING,
357
+ cycleEvolution: params.cycleEvolution ?? DEFAULT_CYCLE_EVOLUTION,
358
+ cycle: params.cycle ?? DEFAULT_CYCLE,
359
+ seed: params.seed ?? DEFAULT_SEED,
360
+ invert: params.invert ?? DEFAULT_INVERT,
361
+ amount: params.amount ?? DEFAULT_AMOUNT
362
+ });
363
+ var validateFractalNoiseParams = (params) => {
364
+ assertEffectParamsObject(params, "Fractal noise");
365
+ assertOptionalFiniteNumber(params.scale, "scale");
366
+ assertOptionalFiniteNumber(params.complexity, "complexity");
367
+ assertOptionalFiniteNumber(params.evolution, "evolution");
368
+ assertOptionalFiniteNumber(params.contrast, "contrast");
369
+ assertOptionalFiniteNumber(params.brightness, "brightness");
370
+ assertOptionalFiniteNumber(params.offsetX, "offsetX");
371
+ assertOptionalFiniteNumber(params.offsetY, "offsetY");
372
+ assertOptionalFiniteNumber(params.subInfluence, "subInfluence");
373
+ assertOptionalFiniteNumber(params.subScaling, "subScaling");
374
+ assertOptionalBoolean(params.cycleEvolution, "cycleEvolution");
375
+ assertOptionalFiniteNumber(params.cycle, "cycle");
376
+ assertOptionalFiniteNumber(params.seed, "seed");
377
+ assertOptionalBoolean(params.invert, "invert");
378
+ assertOptionalFiniteNumber(params.amount, "amount");
379
+ const r = resolve(params);
380
+ if (params.fractalType !== undefined && !FRACTAL_TYPES.includes(params.fractalType)) {
381
+ throw new TypeError("Invalid fractalType: " + JSON.stringify(params.fractalType));
382
+ }
383
+ if (params.noiseType !== undefined && !NOISE_TYPES.includes(params.noiseType)) {
384
+ throw new TypeError("Invalid noiseType: " + JSON.stringify(params.noiseType));
385
+ }
386
+ if (r.scale < 1)
387
+ throw new TypeError('"scale" must be at least 1');
388
+ if (r.complexity < 1 || r.complexity > 20)
389
+ throw new TypeError('"complexity" must be between 1 and 20');
390
+ if (r.subScaling < 0.1 || r.subScaling > 1)
391
+ throw new TypeError('"subScaling" must be between 0.1 and 1');
392
+ if (!Number.isInteger(r.cycle) || r.cycle < 1 || r.cycle > 65535)
393
+ throw new TypeError('"cycle" must be an integer between 1 and 65535');
394
+ if (!Number.isInteger(r.seed) || r.seed < 0 || r.seed > 4294967295)
395
+ throw new TypeError('"seed" must be an unsigned 32-bit integer');
396
+ validateNonNegative(r.contrast, "contrast");
397
+ validateUnitInterval(r.subInfluence, "subInfluence");
398
+ validateUnitInterval(r.amount, "amount");
399
+ };
400
+ var VERTEX_SHADER = `#version 300 es
401
+ in vec2 aPos;
402
+ in vec2 aUv;
403
+ out vec2 vUv;
404
+
405
+ void main() {
406
+ vUv = aUv;
407
+ gl_Position = vec4(aPos, 0.0, 1.0);
408
+ }
409
+ `;
410
+ var compileShader = (gl, type, source) => {
411
+ const shader = gl.createShader(type);
412
+ if (!shader) {
413
+ throw new Error("Failed to create WebGL shader");
414
+ }
415
+ gl.shaderSource(shader, source);
416
+ gl.compileShader(shader);
417
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
418
+ const log = gl.getShaderInfoLog(shader);
419
+ gl.deleteShader(shader);
420
+ throw new Error(`FractalNoise shader compile failed: ${log ?? "(no log)"}`);
421
+ }
422
+ return shader;
423
+ };
424
+ var linkProgram = (gl, vs, fs) => {
425
+ const program = gl.createProgram();
426
+ if (!program) {
427
+ throw new Error("Failed to create WebGL program");
428
+ }
429
+ gl.attachShader(program, vs);
430
+ gl.attachShader(program, fs);
431
+ gl.linkProgram(program);
432
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
433
+ const log = gl.getProgramInfoLog(program);
434
+ gl.deleteProgram(program);
435
+ throw new Error(`FractalNoise program link failed: ${log ?? "(no log)"}`);
436
+ }
437
+ return program;
438
+ };
439
+ var setupFractalNoise = (target) => {
440
+ const gl = target.getContext("webgl2", {
441
+ premultipliedAlpha: true,
442
+ alpha: true,
443
+ preserveDrawingBuffer: true
444
+ });
445
+ if (!gl) {
446
+ throw createWebGL2ContextError("fractal noise effect");
447
+ }
448
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
449
+ const vs = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
450
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, FRACTAL_NOISE_FRAGMENT_SHADER);
451
+ const program = linkProgram(gl, vs, fs);
452
+ gl.deleteShader(vs);
453
+ gl.deleteShader(fs);
454
+ const vao = gl.createVertexArray();
455
+ if (!vao) {
456
+ throw new Error("Failed to create WebGL vertex array");
457
+ }
458
+ gl.bindVertexArray(vao);
459
+ const data = new Float32Array([
460
+ -1,
461
+ -1,
462
+ 0,
463
+ 0,
464
+ 1,
465
+ -1,
466
+ 1,
467
+ 0,
468
+ -1,
469
+ 1,
470
+ 0,
471
+ 1,
472
+ 1,
473
+ 1,
474
+ 1,
475
+ 1
476
+ ]);
477
+ const vbo = gl.createBuffer();
478
+ if (!vbo) {
479
+ throw new Error("Failed to create WebGL buffer");
480
+ }
481
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
482
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
483
+ const aPos = gl.getAttribLocation(program, "aPos");
484
+ const aUv = gl.getAttribLocation(program, "aUv");
485
+ gl.enableVertexAttribArray(aPos);
486
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
487
+ gl.enableVertexAttribArray(aUv);
488
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
489
+ gl.bindVertexArray(null);
490
+ const texture = gl.createTexture();
491
+ if (!texture) {
492
+ throw new Error("Failed to create WebGL texture");
493
+ }
494
+ gl.bindTexture(gl.TEXTURE_2D, texture);
495
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
496
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
497
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
498
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
499
+ gl.bindTexture(gl.TEXTURE_2D, null);
500
+ return {
501
+ gl,
502
+ program,
503
+ vao,
504
+ vbo,
505
+ texture,
506
+ uSource: gl.getUniformLocation(program, "uSource"),
507
+ uResolution: gl.getUniformLocation(program, "uResolution"),
508
+ uOffset: gl.getUniformLocation(program, "uOffset"),
509
+ uFractalType: gl.getUniformLocation(program, "uFractalType"),
510
+ uNoiseType: gl.getUniformLocation(program, "uNoiseType"),
511
+ uScale: gl.getUniformLocation(program, "uScale"),
512
+ uComplexity: gl.getUniformLocation(program, "uComplexity"),
513
+ uEvolution: gl.getUniformLocation(program, "uEvolution"),
514
+ uContrast: gl.getUniformLocation(program, "uContrast"),
515
+ uBrightness: gl.getUniformLocation(program, "uBrightness"),
516
+ uSubInfluence: gl.getUniformLocation(program, "uSubInfluence"),
517
+ uSubScaling: gl.getUniformLocation(program, "uSubScaling"),
518
+ uCycleEvolution: gl.getUniformLocation(program, "uCycleEvolution"),
519
+ uCycle: gl.getUniformLocation(program, "uCycle"),
520
+ uSeed: gl.getUniformLocation(program, "uSeed"),
521
+ uInvert: gl.getUniformLocation(program, "uInvert"),
522
+ uAmount: gl.getUniformLocation(program, "uAmount")
523
+ };
524
+ };
525
+ var fractalNoise = createEffect({
526
+ type: "remotion/fractal-noise",
527
+ label: "fractalNoise()",
528
+ documentationLink: "https://www.remotion.dev/docs/effects/fractal-noise",
529
+ calculateKey: (params) => {
530
+ const r = resolve(params);
531
+ return `fractal-noise-${JSON.stringify(r)}`;
532
+ },
533
+ implementations: {
534
+ webgpu: Internals.createEffectImplementation({
535
+ setup: (target) => setupWebGpuSinglePass(target, "index"),
536
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
537
+ if (!gpuDevice)
538
+ throw new Error("A WebGPU device is required for the index effect");
539
+ const r = resolve(params);
540
+ const uniformData = new Float32Array([
541
+ width,
542
+ height,
543
+ r.offsetX,
544
+ r.offsetY,
545
+ r.scale,
546
+ r.complexity,
547
+ r.evolution / 360,
548
+ r.subInfluence,
549
+ r.subScaling,
550
+ r.contrast,
551
+ r.brightness,
552
+ r.amount,
553
+ r.cycle,
554
+ 0,
555
+ FRACTAL_TYPES.indexOf(r.fractalType),
556
+ NOISE_TYPES.indexOf(r.noiseType),
557
+ r.invert ? 1 : 0,
558
+ r.cycleEvolution ? 1 : 0,
559
+ 0,
560
+ 0
561
+ ]);
562
+ new Uint32Array(uniformData.buffer)[13] = r.seed;
563
+ applyWebGpuSinglePass({
564
+ state,
565
+ source,
566
+ width,
567
+ height,
568
+ device: gpuDevice,
569
+ shader: FRACTAL_NOISE_WEBGPU_SHADER,
570
+ uniformData
571
+ });
572
+ },
573
+ cleanup: cleanupWebGpuSinglePass
574
+ }),
575
+ webgl2: Internals.createEffectImplementation({
576
+ setup: (target) => setupFractalNoise(target),
577
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
578
+ const r = resolve(params);
579
+ const { gl, program, texture, vao } = state;
580
+ gl.viewport(0, 0, width, height);
581
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
582
+ gl.clearColor(0, 0, 0, 0);
583
+ gl.clear(gl.COLOR_BUFFER_BIT);
584
+ gl.activeTexture(gl.TEXTURE0);
585
+ gl.bindTexture(gl.TEXTURE_2D, texture);
586
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
587
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
588
+ gl.useProgram(program);
589
+ if (state.uSource)
590
+ gl.uniform1i(state.uSource, 0);
591
+ if (state.uResolution)
592
+ gl.uniform2f(state.uResolution, width, height);
593
+ if (state.uOffset)
594
+ gl.uniform2f(state.uOffset, r.offsetX, r.offsetY);
595
+ if (state.uFractalType)
596
+ gl.uniform1i(state.uFractalType, FRACTAL_TYPES.indexOf(r.fractalType));
597
+ if (state.uNoiseType)
598
+ gl.uniform1i(state.uNoiseType, NOISE_TYPES.indexOf(r.noiseType));
599
+ if (state.uScale)
600
+ gl.uniform1f(state.uScale, r.scale);
601
+ if (state.uComplexity)
602
+ gl.uniform1f(state.uComplexity, r.complexity);
603
+ if (state.uEvolution)
604
+ gl.uniform1f(state.uEvolution, r.evolution / 360);
605
+ if (state.uContrast)
606
+ gl.uniform1f(state.uContrast, r.contrast);
607
+ if (state.uBrightness)
608
+ gl.uniform1f(state.uBrightness, r.brightness);
609
+ if (state.uSubInfluence)
610
+ gl.uniform1f(state.uSubInfluence, r.subInfluence);
611
+ if (state.uSubScaling)
612
+ gl.uniform1f(state.uSubScaling, r.subScaling);
613
+ if (state.uCycleEvolution)
614
+ gl.uniform1i(state.uCycleEvolution, r.cycleEvolution ? 1 : 0);
615
+ if (state.uCycle)
616
+ gl.uniform1f(state.uCycle, r.cycle);
617
+ if (state.uSeed)
618
+ gl.uniform1ui(state.uSeed, r.seed);
619
+ if (state.uInvert)
620
+ gl.uniform1i(state.uInvert, r.invert ? 1 : 0);
621
+ if (state.uAmount)
622
+ gl.uniform1f(state.uAmount, r.amount);
623
+ gl.bindVertexArray(vao);
624
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
625
+ gl.bindVertexArray(null);
626
+ gl.bindTexture(gl.TEXTURE_2D, null);
627
+ gl.useProgram(null);
628
+ },
629
+ cleanup: ({ gl, program, vao, vbo, texture }) => {
630
+ gl.deleteTexture(texture);
631
+ gl.deleteBuffer(vbo);
632
+ gl.deleteProgram(program);
633
+ gl.deleteVertexArray(vao);
634
+ }
635
+ })
636
+ },
637
+ schema: fractalNoiseSchema,
638
+ validateParams: validateFractalNoiseParams
639
+ });
640
+ export {
641
+ fractalNoise
642
+ };