@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,485 @@
1
+ import {
2
+ assertOptionalFiniteNumber,
3
+ validateUnitInterval,
4
+ validateNonNegative
5
+ } from "./index-wxhvgv2s.mjs";
6
+ import {
7
+ WEBGPU_SINGLE_PASS_VERTEX,
8
+ setupWebGpuSinglePass,
9
+ cleanupWebGpuSinglePass,
10
+ applyWebGpuSinglePass
11
+ } from "./index-tvfexb7s.mjs";
12
+ import {
13
+ assertEffectParamsObject
14
+ } from "./index-4fvp93ps.mjs";
15
+
16
+ // src/evolve.ts
17
+ import { Internals } from "remotion";
18
+ var { createEffect, createWebGL2ContextError } = Internals;
19
+ var EVOLVE_DIRECTIONS = ["left", "right", "top", "bottom", "angle"];
20
+ var EVOLVE_FEATHER_UNITS = ["relative", "pixels"];
21
+ var DIRECTION_VECTORS = {
22
+ left: [1, 0],
23
+ right: [-1, 0],
24
+ top: [0, 1],
25
+ bottom: [0, -1]
26
+ };
27
+ var DEFAULT_PROGRESS = 0.5;
28
+ var DEFAULT_FEATHER = 0.1;
29
+ var DEFAULT_DIRECTION = "left";
30
+ var DEFAULT_ANGLE = 90;
31
+ var DEFAULT_FEATHER_UNIT = "relative";
32
+ var DEFAULT_FEATHER_PIXELS = 0;
33
+ var evolveSchema = {
34
+ progress: {
35
+ type: "number",
36
+ min: 0,
37
+ max: 1,
38
+ step: 0.01,
39
+ default: DEFAULT_PROGRESS,
40
+ description: "Progress",
41
+ hiddenFromList: false
42
+ },
43
+ direction: {
44
+ type: "enum",
45
+ variants: {
46
+ left: {},
47
+ right: {},
48
+ top: {},
49
+ bottom: {},
50
+ angle: {
51
+ angle: {
52
+ type: "rotation-degrees",
53
+ step: 1,
54
+ default: DEFAULT_ANGLE,
55
+ description: "Angle"
56
+ }
57
+ }
58
+ },
59
+ default: DEFAULT_DIRECTION,
60
+ description: "Direction"
61
+ },
62
+ featherUnit: {
63
+ type: "enum",
64
+ variants: {
65
+ relative: {
66
+ feather: {
67
+ type: "number",
68
+ min: 0,
69
+ max: 1,
70
+ step: 0.01,
71
+ default: DEFAULT_FEATHER,
72
+ description: "Feather",
73
+ hiddenFromList: false
74
+ }
75
+ },
76
+ pixels: {
77
+ featherPixels: {
78
+ type: "number",
79
+ min: 0,
80
+ max: 500,
81
+ step: 1,
82
+ default: DEFAULT_FEATHER_PIXELS,
83
+ description: "Feather in pixels",
84
+ hiddenFromList: false
85
+ }
86
+ }
87
+ },
88
+ default: DEFAULT_FEATHER_UNIT,
89
+ description: "Feather unit"
90
+ }
91
+ };
92
+ var formatEnum = (variants) => {
93
+ if (variants.length === 2) {
94
+ return `"${variants[0]}" or "${variants[1]}"`;
95
+ }
96
+ return `${variants.slice(0, -1).map((variant) => `"${variant}"`).join(", ")} or "${variants[variants.length - 1]}"`;
97
+ };
98
+ var assertOptionalEnum = (value, name, variants) => {
99
+ if (value === undefined) {
100
+ return;
101
+ }
102
+ if (!variants.includes(value)) {
103
+ throw new TypeError(`"${name}" must be ${formatEnum(variants)}, but got ${JSON.stringify(value)}`);
104
+ }
105
+ };
106
+ var resolve = (p) => ({
107
+ progress: p.progress ?? DEFAULT_PROGRESS,
108
+ direction: p.direction ?? DEFAULT_DIRECTION,
109
+ feather: p.feather ?? DEFAULT_FEATHER,
110
+ angle: p.angle ?? DEFAULT_ANGLE,
111
+ featherUnit: p.featherUnit ?? DEFAULT_FEATHER_UNIT,
112
+ featherPixels: p.featherPixels ?? DEFAULT_FEATHER_PIXELS
113
+ });
114
+ var validateEvolveParams = (params) => {
115
+ assertEffectParamsObject(params, "Evolve");
116
+ assertOptionalFiniteNumber(params.progress, "progress");
117
+ assertOptionalFiniteNumber(params.feather, "feather");
118
+ assertOptionalFiniteNumber(params.angle, "angle");
119
+ assertOptionalFiniteNumber(params.featherPixels, "featherPixels");
120
+ assertOptionalEnum(params.featherUnit, "featherUnit", EVOLVE_FEATHER_UNITS);
121
+ assertOptionalEnum(params.direction, "direction", EVOLVE_DIRECTIONS);
122
+ const r = resolve(params);
123
+ validateUnitInterval(r.progress, "progress");
124
+ validateUnitInterval(r.feather, "feather");
125
+ validateNonNegative(r.featherPixels, "featherPixels");
126
+ };
127
+ var EVOLVE_VS = `#version 300 es
128
+ in vec2 aPos;
129
+ in vec2 aUv;
130
+ out vec2 vUv;
131
+
132
+ void main() {
133
+ vUv = aUv;
134
+ gl_Position = vec4(aPos, 0.0, 1.0);
135
+ }
136
+ `;
137
+ var EVOLVE_FS = `#version 300 es
138
+ precision highp float;
139
+
140
+ in vec2 vUv;
141
+ out vec4 fragColor;
142
+
143
+ uniform sampler2D uSource;
144
+ uniform float uProgress;
145
+ uniform float uFeather;
146
+ uniform int uDirection;
147
+ uniform vec2 uResolution;
148
+ uniform vec2 uTravelDirection;
149
+ uniform bool uUsePixelFeather;
150
+ uniform float uFeatherPixels;
151
+
152
+ float getT(vec2 uv) {
153
+ // 0: left, 1: right, 2: top, 3: bottom
154
+ if (uDirection == 0) {
155
+ return uv.x;
156
+ }
157
+
158
+ if (uDirection == 1) {
159
+ return 1.0 - uv.x;
160
+ }
161
+
162
+ if (uDirection == 2) {
163
+ // vUv.y is bottom-to-top; top reveal starts at y=1
164
+ return 1.0 - uv.y;
165
+ }
166
+
167
+ return uv.y;
168
+ }
169
+
170
+ float maskValue(float t, float progress, float feather) {
171
+ float p = clamp(progress, 0.0, 1.0);
172
+ float f = max(feather, 0.0);
173
+
174
+ if (p <= 0.000001) {
175
+ return 0.0;
176
+ }
177
+
178
+ if (p >= 0.999999) {
179
+ return 1.0;
180
+ }
181
+
182
+ if (f <= 0.0001) {
183
+ return step(t, p);
184
+ }
185
+
186
+ return 1.0 - smoothstep(p, min(p + f, 1.0), t);
187
+ }
188
+
189
+ void main() {
190
+ vec4 source = texture(uSource, vUv);
191
+ float t = getT(vUv);
192
+ float mask;
193
+ if (uDirection == 4 || uUsePixelFeather) {
194
+ vec2 extent = uResolution * uTravelDirection;
195
+ float low = min(0.0, extent.x) + min(0.0, extent.y);
196
+ float high = max(0.0, extent.x) + max(0.0, extent.y);
197
+ vec2 position = vec2(vUv.x, 1.0 - vUv.y) * uResolution;
198
+ float projection = dot(position, uTravelDirection);
199
+ if (uUsePixelFeather) {
200
+ // Adapted from EffectCraft's linear_wipe(), under the MIT license:
201
+ // https://github.com/storytold/effectcraft/blob/eb5108786b90bf994a6abe4e6c0b2614c6aeaa29/crates/effects/src/misc.rs
202
+ // See ../THIRD_PARTY_LICENSES.md. Increasing progress reveals the source.
203
+ float edge = mix(low - uFeatherPixels, high + uFeatherPixels, uProgress);
204
+ mask = uFeatherPixels > 0.0
205
+ ? clamp((edge - projection) / uFeatherPixels + 0.5, 0.0, 1.0)
206
+ : step(projection, edge);
207
+ if (uProgress <= 0.0) mask = 0.0;
208
+ if (uProgress >= 1.0) mask = 1.0;
209
+ } else {
210
+ t = (projection - low) / (high - low);
211
+ mask = maskValue(t, uProgress, uFeather);
212
+ }
213
+ } else {
214
+ mask = maskValue(t, uProgress, uFeather);
215
+ }
216
+ fragColor = vec4(source.rgb * mask, source.a * mask);
217
+ }
218
+ `;
219
+ var compileShader = (gl, type, source) => {
220
+ const shader = gl.createShader(type);
221
+ if (!shader) {
222
+ throw new Error("Failed to create WebGL shader");
223
+ }
224
+ gl.shaderSource(shader, source);
225
+ gl.compileShader(shader);
226
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
227
+ const log = gl.getShaderInfoLog(shader);
228
+ gl.deleteShader(shader);
229
+ throw new Error(`Evolve shader compile failed: ${log ?? "(no log)"}`);
230
+ }
231
+ return shader;
232
+ };
233
+ var linkProgram = (gl, vs, fs) => {
234
+ const program = gl.createProgram();
235
+ if (!program) {
236
+ throw new Error("Failed to create WebGL program");
237
+ }
238
+ gl.attachShader(program, vs);
239
+ gl.attachShader(program, fs);
240
+ gl.linkProgram(program);
241
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
242
+ const log = gl.getProgramInfoLog(program);
243
+ gl.deleteProgram(program);
244
+ throw new Error(`Evolve program link failed: ${log ?? "(no log)"}`);
245
+ }
246
+ return program;
247
+ };
248
+ var createRgbaTexture = (gl) => {
249
+ const texture = gl.createTexture();
250
+ if (!texture) {
251
+ throw new Error("Failed to create WebGL texture");
252
+ }
253
+ gl.bindTexture(gl.TEXTURE_2D, texture);
254
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
255
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
256
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
257
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
258
+ gl.bindTexture(gl.TEXTURE_2D, null);
259
+ return texture;
260
+ };
261
+ var setupEvolve = (target) => {
262
+ const gl = target.getContext("webgl2", {
263
+ premultipliedAlpha: true,
264
+ alpha: true,
265
+ preserveDrawingBuffer: true
266
+ });
267
+ if (!gl) {
268
+ throw createWebGL2ContextError("evolve effect");
269
+ }
270
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
271
+ const vs = compileShader(gl, gl.VERTEX_SHADER, EVOLVE_VS);
272
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, EVOLVE_FS);
273
+ const program = linkProgram(gl, vs, fs);
274
+ gl.deleteShader(vs);
275
+ gl.deleteShader(fs);
276
+ const vao = gl.createVertexArray();
277
+ if (!vao) {
278
+ throw new Error("Failed to create WebGL vertex array");
279
+ }
280
+ gl.bindVertexArray(vao);
281
+ const data = new Float32Array([
282
+ -1,
283
+ -1,
284
+ 0,
285
+ 0,
286
+ 1,
287
+ -1,
288
+ 1,
289
+ 0,
290
+ -1,
291
+ 1,
292
+ 0,
293
+ 1,
294
+ 1,
295
+ 1,
296
+ 1,
297
+ 1
298
+ ]);
299
+ const vbo = gl.createBuffer();
300
+ if (!vbo) {
301
+ throw new Error("Failed to create WebGL buffer");
302
+ }
303
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
304
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
305
+ const aPos = gl.getAttribLocation(program, "aPos");
306
+ const aUv = gl.getAttribLocation(program, "aUv");
307
+ gl.enableVertexAttribArray(aPos);
308
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
309
+ gl.enableVertexAttribArray(aUv);
310
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
311
+ gl.bindVertexArray(null);
312
+ const textureSource = createRgbaTexture(gl);
313
+ return {
314
+ gl,
315
+ program,
316
+ vao,
317
+ vbo,
318
+ textureSource,
319
+ uniforms: {
320
+ uSource: gl.getUniformLocation(program, "uSource"),
321
+ uProgress: gl.getUniformLocation(program, "uProgress"),
322
+ uDirection: gl.getUniformLocation(program, "uDirection"),
323
+ uFeather: gl.getUniformLocation(program, "uFeather"),
324
+ uResolution: gl.getUniformLocation(program, "uResolution"),
325
+ uTravelDirection: gl.getUniformLocation(program, "uTravelDirection"),
326
+ uUsePixelFeather: gl.getUniformLocation(program, "uUsePixelFeather"),
327
+ uFeatherPixels: gl.getUniformLocation(program, "uFeatherPixels")
328
+ }
329
+ };
330
+ };
331
+ var directionToInt = (direction) => {
332
+ switch (direction) {
333
+ case "left":
334
+ return 0;
335
+ case "right":
336
+ return 1;
337
+ case "top":
338
+ return 2;
339
+ case "bottom":
340
+ return 3;
341
+ case "angle":
342
+ return 4;
343
+ default: {
344
+ const exhaustiveCheck = direction;
345
+ return exhaustiveCheck;
346
+ }
347
+ }
348
+ };
349
+ var WEBGPU_SHADER = `
350
+ ${WEBGPU_SINGLE_PASS_VERTEX}
351
+ struct Params { resolutionTravel: vec4f, controls: vec4f, featherPixels: vec4f, }
352
+ @group(0) @binding(0) var source: texture_2d<f32>;
353
+ @group(0) @binding(1) var sourceSampler: sampler;
354
+ @group(0) @binding(2) var<uniform> params: Params;
355
+ fn maskValue(t: f32, progress: f32, feather: f32) -> f32 {
356
+ let p = clamp(progress, 0.0, 1.0);
357
+ let f = max(feather, 0.0);
358
+ if (p <= 0.000001) { return 0.0; }
359
+ if (p >= 0.999999) { return 1.0; }
360
+ if (f <= 0.0001) { return step(t, p); }
361
+ return 1.0 - smoothstep(p, min(p + f, 1.0), t);
362
+ }
363
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
364
+ let color = textureSampleLevel(source, sourceSampler, input.uv, 0);
365
+ let progress = params.controls.x;
366
+ let direction = params.controls.z;
367
+ let usePixelFeather = params.controls.w != 0.0;
368
+ var t = input.uv.x;
369
+ if (direction == 1.0) { t = 1.0 - input.uv.x; }
370
+ if (direction == 2.0) { t = input.uv.y; }
371
+ if (direction == 3.0) { t = 1.0 - input.uv.y; }
372
+ var mask: f32;
373
+ if (direction == 4.0 || usePixelFeather) {
374
+ let extent = params.resolutionTravel.xy * params.resolutionTravel.zw;
375
+ let low = min(0.0, extent.x) + min(0.0, extent.y);
376
+ let high = max(0.0, extent.x) + max(0.0, extent.y);
377
+ let position = input.uv * params.resolutionTravel.xy;
378
+ let projection = dot(position, params.resolutionTravel.zw);
379
+ if (usePixelFeather) {
380
+ let feather = params.featherPixels.x;
381
+ let edge = mix(low - feather, high + feather, progress);
382
+ mask = step(projection, edge);
383
+ if (feather > 0.0) { mask = clamp((edge - projection) / feather + 0.5, 0.0, 1.0); }
384
+ if (progress <= 0.0) { mask = 0.0; }
385
+ if (progress >= 1.0) { mask = 1.0; }
386
+ } else {
387
+ t = (projection - low) / (high - low);
388
+ mask = maskValue(t, progress, params.controls.y);
389
+ }
390
+ } else { mask = maskValue(t, progress, params.controls.y); }
391
+ return color * mask;
392
+ }
393
+ `;
394
+ var evolve = createEffect({
395
+ type: "dev.remotion.effects.evolve",
396
+ label: "evolve()",
397
+ documentationLink: "https://www.remotion.dev/docs/effects/evolve",
398
+ calculateKey: (params) => {
399
+ const r = resolve(params);
400
+ return `evolve-${r.progress}-${r.direction}-${r.feather}-${r.angle}-${r.featherUnit}-${r.featherPixels}`;
401
+ },
402
+ implementations: {
403
+ webgpu: Internals.createEffectImplementation({
404
+ setup: (target) => setupWebGpuSinglePass(target, "evolve"),
405
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
406
+ if (!gpuDevice) {
407
+ throw new Error("A WebGPU device is required for the evolve effect");
408
+ }
409
+ const r = resolve(params);
410
+ const radians = r.angle % 360 * Math.PI / 180;
411
+ const travelDirection = r.direction === "angle" ? [Math.sin(radians), -Math.cos(radians)] : DIRECTION_VECTORS[r.direction];
412
+ applyWebGpuSinglePass({
413
+ source,
414
+ width,
415
+ height,
416
+ state,
417
+ device: gpuDevice,
418
+ shader: WEBGPU_SHADER,
419
+ uniformData: new Float32Array([
420
+ width,
421
+ height,
422
+ travelDirection[0],
423
+ travelDirection[1],
424
+ r.progress,
425
+ r.feather,
426
+ directionToInt(r.direction),
427
+ r.featherUnit === "pixels" ? 1 : 0,
428
+ r.featherPixels,
429
+ 0,
430
+ 0,
431
+ 0
432
+ ])
433
+ });
434
+ },
435
+ cleanup: cleanupWebGpuSinglePass
436
+ }),
437
+ webgl2: Internals.createEffectImplementation({
438
+ setup: (target) => setupEvolve(target),
439
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
440
+ const r = resolve(params);
441
+ const { gl, program, textureSource, uniforms, vao } = state;
442
+ gl.viewport(0, 0, width, height);
443
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
444
+ gl.clearColor(0, 0, 0, 0);
445
+ gl.clear(gl.COLOR_BUFFER_BIT);
446
+ gl.activeTexture(gl.TEXTURE0);
447
+ gl.bindTexture(gl.TEXTURE_2D, textureSource);
448
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
449
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
450
+ gl.useProgram(program);
451
+ if (uniforms.uSource)
452
+ gl.uniform1i(uniforms.uSource, 0);
453
+ if (uniforms.uProgress)
454
+ gl.uniform1f(uniforms.uProgress, r.progress);
455
+ if (uniforms.uFeather)
456
+ gl.uniform1f(uniforms.uFeather, r.feather);
457
+ if (uniforms.uDirection)
458
+ gl.uniform1i(uniforms.uDirection, directionToInt(r.direction));
459
+ gl.uniform2f(uniforms.uResolution, width, height);
460
+ const radians = r.angle % 360 * Math.PI / 180;
461
+ const travelDirection = r.direction === "angle" ? [Math.sin(radians), -Math.cos(radians)] : DIRECTION_VECTORS[r.direction];
462
+ gl.uniform2f(uniforms.uTravelDirection, travelDirection[0], travelDirection[1]);
463
+ gl.uniform1i(uniforms.uUsePixelFeather, r.featherUnit === "pixels" ? 1 : 0);
464
+ gl.uniform1f(uniforms.uFeatherPixels, r.featherPixels);
465
+ gl.bindVertexArray(vao);
466
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
467
+ gl.bindVertexArray(null);
468
+ gl.bindTexture(gl.TEXTURE_2D, null);
469
+ gl.useProgram(null);
470
+ },
471
+ cleanup: ({ gl, program, vao, vbo, textureSource }) => {
472
+ gl.deleteTexture(textureSource);
473
+ gl.deleteBuffer(vbo);
474
+ gl.deleteProgram(program);
475
+ gl.deleteVertexArray(vao);
476
+ }
477
+ })
478
+ },
479
+ schema: evolveSchema,
480
+ validateParams: validateEvolveParams
481
+ });
482
+ export {
483
+ evolve,
484
+ evolveSchema
485
+ };