@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,425 @@
1
+ import {
2
+ publicUvToShaderUv
3
+ } from "./index-gnsce796.mjs";
4
+ import {
5
+ WEBGPU_SINGLE_PASS_VERTEX,
6
+ setupWebGpuSinglePass,
7
+ cleanupWebGpuSinglePass,
8
+ applyWebGpuSinglePass
9
+ } from "./index-tvfexb7s.mjs";
10
+ import {
11
+ assertEffectParamsObject
12
+ } from "./index-4fvp93ps.mjs";
13
+
14
+ // src/corner-pin/index.ts
15
+ import { Internals as Internals2 } from "remotion";
16
+
17
+ // src/corner-pin/corner-pin-runtime.ts
18
+ import { Internals } from "remotion";
19
+
20
+ // src/corner-pin/corner-pin-shaders.ts
21
+ var CORNER_PIN_VS = `#version 300 es
22
+ layout(location = 0) in vec2 aPos;
23
+ layout(location = 1) in vec2 aUv;
24
+ out vec2 vUv;
25
+
26
+ void main() {
27
+ vUv = aUv;
28
+ gl_Position = vec4(aPos, 0.0, 1.0);
29
+ }
30
+ `;
31
+ var CORNER_PIN_FS = `#version 300 es
32
+ precision highp float;
33
+
34
+ in vec2 vUv;
35
+ out vec4 fragColor;
36
+
37
+ uniform sampler2D uSource;
38
+ uniform vec2 uTopLeft;
39
+ uniform vec2 uTopRight;
40
+ uniform vec2 uBottomRight;
41
+ uniform vec2 uBottomLeft;
42
+
43
+ bool solveProjectiveInverse(vec2 p, out vec2 uv) {
44
+ vec2 p0 = uBottomLeft;
45
+ vec2 p1 = uBottomRight;
46
+ vec2 p2 = uTopRight;
47
+ vec2 p3 = uTopLeft;
48
+
49
+ vec2 dx1 = p1 - p2;
50
+ vec2 dx2 = p3 - p2;
51
+ vec2 dx3 = p0 - p1 + p2 - p3;
52
+
53
+ float g = 0.0;
54
+ float h = 0.0;
55
+
56
+ if (abs(dx3.x) > 0.000001 || abs(dx3.y) > 0.000001) {
57
+ float denominator = dx1.x * dx2.y - dx2.x * dx1.y;
58
+ if (abs(denominator) < 0.000001) {
59
+ return false;
60
+ }
61
+
62
+ g = (dx3.x * dx2.y - dx2.x * dx3.y) / denominator;
63
+ h = (dx1.x * dx3.y - dx3.x * dx1.y) / denominator;
64
+ }
65
+
66
+ float a = p1.x - p0.x + g * p1.x;
67
+ float b = p3.x - p0.x + h * p3.x;
68
+ float c = p0.x;
69
+ float d = p1.y - p0.y + g * p1.y;
70
+ float e = p3.y - p0.y + h * p3.y;
71
+ float f = p0.y;
72
+
73
+ float inverseX =
74
+ (e - f * h) * p.x +
75
+ (c * h - b) * p.y +
76
+ (b * f - c * e);
77
+ float inverseY =
78
+ (f * g - d) * p.x +
79
+ (a - c * g) * p.y +
80
+ (c * d - a * f);
81
+ float inverseW =
82
+ (d * h - e * g) * p.x +
83
+ (b * g - a * h) * p.y +
84
+ (a * e - b * d);
85
+
86
+ if (abs(inverseW) < 0.000001) {
87
+ return false;
88
+ }
89
+
90
+ uv = vec2(inverseX / inverseW, inverseY / inverseW);
91
+ return true;
92
+ }
93
+
94
+ void main() {
95
+ vec2 sourceUv;
96
+ if (!solveProjectiveInverse(vUv, sourceUv)) {
97
+ fragColor = vec4(0.0);
98
+ return;
99
+ }
100
+
101
+ if (
102
+ sourceUv.x < 0.0 ||
103
+ sourceUv.x > 1.0 ||
104
+ sourceUv.y < 0.0 ||
105
+ sourceUv.y > 1.0
106
+ ) {
107
+ fragColor = vec4(0.0);
108
+ return;
109
+ }
110
+
111
+ fragColor = texture(uSource, sourceUv);
112
+ }
113
+ `;
114
+
115
+ // src/corner-pin/corner-pin-runtime.ts
116
+ var { createWebGL2ContextError } = Internals;
117
+ var compileShader = (gl, type, source) => {
118
+ const shader = gl.createShader(type);
119
+ if (!shader) {
120
+ throw new Error("Failed to create WebGL shader");
121
+ }
122
+ gl.shaderSource(shader, source);
123
+ gl.compileShader(shader);
124
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
125
+ const log = gl.getShaderInfoLog(shader);
126
+ gl.deleteShader(shader);
127
+ throw new Error(`Shader compile failed: ${log ?? "(no log)"}`);
128
+ }
129
+ return shader;
130
+ };
131
+ var linkProgram = (gl, vs, fs) => {
132
+ const program = gl.createProgram();
133
+ if (!program) {
134
+ throw new Error("Failed to create WebGL program");
135
+ }
136
+ gl.attachShader(program, vs);
137
+ gl.attachShader(program, fs);
138
+ gl.linkProgram(program);
139
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
140
+ const log = gl.getProgramInfoLog(program);
141
+ gl.deleteProgram(program);
142
+ throw new Error(`Program link failed: ${log ?? "(no log)"}`);
143
+ }
144
+ return program;
145
+ };
146
+ var createProgram = (gl, vertexSource, fragmentSource) => {
147
+ const vs = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
148
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
149
+ const program = linkProgram(gl, vs, fs);
150
+ gl.deleteShader(vs);
151
+ gl.deleteShader(fs);
152
+ return program;
153
+ };
154
+ var createRgbaTexture = (gl) => {
155
+ const texture = gl.createTexture();
156
+ if (!texture) {
157
+ throw new Error("Failed to create WebGL texture");
158
+ }
159
+ gl.bindTexture(gl.TEXTURE_2D, texture);
160
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
161
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
162
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
163
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
164
+ gl.bindTexture(gl.TEXTURE_2D, null);
165
+ return texture;
166
+ };
167
+ var setupCornerPin = (target) => {
168
+ const gl = target.getContext("webgl2", {
169
+ premultipliedAlpha: true,
170
+ alpha: true,
171
+ preserveDrawingBuffer: true
172
+ });
173
+ if (!gl) {
174
+ throw createWebGL2ContextError("corner pin effect");
175
+ }
176
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
177
+ const program = createProgram(gl, CORNER_PIN_VS, CORNER_PIN_FS);
178
+ const vao = gl.createVertexArray();
179
+ if (!vao) {
180
+ throw new Error("Failed to create WebGL vertex array");
181
+ }
182
+ gl.bindVertexArray(vao);
183
+ const data = new Float32Array([
184
+ -1,
185
+ -1,
186
+ 0,
187
+ 0,
188
+ 1,
189
+ -1,
190
+ 1,
191
+ 0,
192
+ -1,
193
+ 1,
194
+ 0,
195
+ 1,
196
+ 1,
197
+ 1,
198
+ 1,
199
+ 1
200
+ ]);
201
+ const vbo = gl.createBuffer();
202
+ if (!vbo) {
203
+ throw new Error("Failed to create WebGL buffer");
204
+ }
205
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
206
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
207
+ gl.enableVertexAttribArray(0);
208
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 16, 0);
209
+ gl.enableVertexAttribArray(1);
210
+ gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 16, 8);
211
+ gl.bindVertexArray(null);
212
+ const textureSource = createRgbaTexture(gl);
213
+ return {
214
+ gl,
215
+ program,
216
+ vao,
217
+ vbo,
218
+ textureSource,
219
+ uniforms: {
220
+ uSource: gl.getUniformLocation(program, "uSource"),
221
+ uTopLeft: gl.getUniformLocation(program, "uTopLeft"),
222
+ uTopRight: gl.getUniformLocation(program, "uTopRight"),
223
+ uBottomRight: gl.getUniformLocation(program, "uBottomRight"),
224
+ uBottomLeft: gl.getUniformLocation(program, "uBottomLeft")
225
+ }
226
+ };
227
+ };
228
+ var cleanupCornerPin = (state) => {
229
+ const { gl, program, vao, vbo, textureSource } = state;
230
+ gl.deleteTexture(textureSource);
231
+ gl.deleteBuffer(vbo);
232
+ gl.deleteProgram(program);
233
+ gl.deleteVertexArray(vao);
234
+ };
235
+ var drawFullscreenQuad = (state) => {
236
+ const { gl, vao } = state;
237
+ gl.bindVertexArray(vao);
238
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
239
+ gl.bindVertexArray(null);
240
+ };
241
+ var setUvUniform = (gl, location, uv) => {
242
+ if (!location) {
243
+ return;
244
+ }
245
+ const shaderUv = publicUvToShaderUv(uv);
246
+ gl.uniform2f(location, shaderUv[0], shaderUv[1]);
247
+ };
248
+ var applyCornerPin = ({
249
+ state,
250
+ source,
251
+ width,
252
+ height,
253
+ topLeft,
254
+ topRight,
255
+ bottomRight,
256
+ bottomLeft,
257
+ flipSourceY
258
+ }) => {
259
+ const { gl, program, textureSource, uniforms } = state;
260
+ gl.viewport(0, 0, width, height);
261
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
262
+ gl.bindTexture(gl.TEXTURE_2D, textureSource);
263
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
264
+ gl.bindTexture(gl.TEXTURE_2D, null);
265
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
266
+ gl.clearColor(0, 0, 0, 0);
267
+ gl.clear(gl.COLOR_BUFFER_BIT);
268
+ gl.useProgram(program);
269
+ if (uniforms.uSource)
270
+ gl.uniform1i(uniforms.uSource, 0);
271
+ setUvUniform(gl, uniforms.uTopLeft, topLeft);
272
+ setUvUniform(gl, uniforms.uTopRight, topRight);
273
+ setUvUniform(gl, uniforms.uBottomRight, bottomRight);
274
+ setUvUniform(gl, uniforms.uBottomLeft, bottomLeft);
275
+ gl.activeTexture(gl.TEXTURE0);
276
+ gl.bindTexture(gl.TEXTURE_2D, textureSource);
277
+ drawFullscreenQuad(state);
278
+ gl.bindTexture(gl.TEXTURE_2D, null);
279
+ gl.useProgram(null);
280
+ };
281
+
282
+ // src/corner-pin/webgpu-shader.ts
283
+ var CORNER_PIN_WEBGPU_SHADER = `
284
+ ${WEBGPU_SINGLE_PASS_VERTEX}
285
+ @group(0) @binding(0) var source: texture_2d<f32>;
286
+ @group(0) @binding(1) var sourceSampler: sampler;
287
+ @group(0) @binding(2) var<uniform> params: Params;
288
+ struct Params {top: vec4f, bottom: vec4f,}
289
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
290
+ let p0 = params.bottom.zw; let p1 = params.bottom.xy;
291
+ let p2 = params.top.zw; let p3 = params.top.xy;
292
+ let dx1 = p1 - p2; let dx2 = p3 - p2; let dx3 = p0 - p1 + p2 - p3;
293
+ var g = 0.0; var h = 0.0;
294
+ if (abs(dx3.x) > 0.000001 || abs(dx3.y) > 0.000001) {
295
+ let denominator = dx1.x * dx2.y - dx2.x * dx1.y;
296
+ if (abs(denominator) < 0.000001) {return vec4f(0);}
297
+ g = (dx3.x * dx2.y - dx2.x * dx3.y) / denominator;
298
+ h = (dx1.x * dx3.y - dx3.x * dx1.y) / denominator;
299
+ }
300
+ let a = p1.x - p0.x + g * p1.x; let b = p3.x - p0.x + h * p3.x; let c = p0.x;
301
+ let d = p1.y - p0.y + g * p1.y; let e = p3.y - p0.y + h * p3.y; let f = p0.y;
302
+ let p = input.uv;
303
+ let x = (e-f*h)*p.x + (c*h-b)*p.y + (b*f-c*e);
304
+ let y = (f*g-d)*p.x + (a-c*g)*p.y + (c*d-a*f);
305
+ let w = (d*h-e*g)*p.x + (b*g-a*h)*p.y + (a*e-b*d);
306
+ if (abs(w) < 0.000001) {return vec4f(0);}
307
+ let uv = vec2f(x/w, 1.0-y/w);
308
+ if (any(uv < vec2f(0)) || any(uv > vec2f(1))) {return vec4f(0);}
309
+ return textureSampleLevel(source, sourceSampler, uv, 0);
310
+ }
311
+ `;
312
+
313
+ // src/corner-pin/index.ts
314
+ var { createEffect } = Internals2;
315
+ var DEFAULT_TOP_LEFT = [0, 0];
316
+ var DEFAULT_TOP_RIGHT = [1, 0];
317
+ var DEFAULT_BOTTOM_RIGHT = [1, 1];
318
+ var DEFAULT_BOTTOM_LEFT = [0, 1];
319
+ var cornerSchema = (defaultValue) => ({
320
+ type: "uv-coordinate",
321
+ min: -1,
322
+ max: 2,
323
+ step: 0.01,
324
+ default: defaultValue,
325
+ description: "Corner"
326
+ });
327
+ var cornerPinSchema = {
328
+ topLeft: {
329
+ ...cornerSchema(DEFAULT_TOP_LEFT),
330
+ description: "Top left"
331
+ },
332
+ topRight: {
333
+ ...cornerSchema(DEFAULT_TOP_RIGHT),
334
+ description: "Top right"
335
+ },
336
+ bottomRight: {
337
+ ...cornerSchema(DEFAULT_BOTTOM_RIGHT),
338
+ description: "Bottom right"
339
+ },
340
+ bottomLeft: {
341
+ ...cornerSchema(DEFAULT_BOTTOM_LEFT),
342
+ description: "Bottom left"
343
+ }
344
+ };
345
+ var resolve = (p) => ({
346
+ topLeft: [...p.topLeft ?? DEFAULT_TOP_LEFT],
347
+ topRight: [...p.topRight ?? DEFAULT_TOP_RIGHT],
348
+ bottomRight: [
349
+ ...p.bottomRight ?? DEFAULT_BOTTOM_RIGHT
350
+ ],
351
+ bottomLeft: [
352
+ ...p.bottomLeft ?? DEFAULT_BOTTOM_LEFT
353
+ ]
354
+ });
355
+ var assertOptionalUvCoordinate = (value, name) => {
356
+ if (value === undefined) {
357
+ return;
358
+ }
359
+ if (!Array.isArray(value) || value.length !== 2 || value.some((item) => typeof item !== "number" || !Number.isFinite(item))) {
360
+ throw new TypeError(`"${name}" must be a [number, number] tuple`);
361
+ }
362
+ };
363
+ var validateCornerPinParams = (params) => {
364
+ assertEffectParamsObject(params, "Corner pin");
365
+ assertOptionalUvCoordinate(params.topLeft, "topLeft");
366
+ assertOptionalUvCoordinate(params.topRight, "topRight");
367
+ assertOptionalUvCoordinate(params.bottomRight, "bottomRight");
368
+ assertOptionalUvCoordinate(params.bottomLeft, "bottomLeft");
369
+ };
370
+ var cornerPin2 = createEffect({
371
+ type: "dev.remotion.effects.cornerPin",
372
+ label: "cornerPin()",
373
+ documentationLink: "https://www.remotion.dev/docs/effects/corner-pin",
374
+ calculateKey: (params) => {
375
+ const r = resolve(params);
376
+ return `corner-pin-${r.topLeft.join(":")}-${r.topRight.join(":")}-${r.bottomRight.join(":")}-${r.bottomLeft.join(":")}`;
377
+ },
378
+ implementations: {
379
+ webgpu: Internals2.createEffectImplementation({
380
+ setup: (target) => setupWebGpuSinglePass(target, "corner-pin"),
381
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
382
+ if (!gpuDevice)
383
+ throw new Error("A WebGPU device is required for this effect");
384
+ const r = resolve(params);
385
+ applyWebGpuSinglePass({
386
+ state,
387
+ source,
388
+ width,
389
+ height,
390
+ device: gpuDevice,
391
+ shader: CORNER_PIN_WEBGPU_SHADER,
392
+ uniformData: new Float32Array([
393
+ ...r.topLeft,
394
+ ...r.topRight,
395
+ ...r.bottomRight,
396
+ ...r.bottomLeft
397
+ ])
398
+ });
399
+ },
400
+ cleanup: cleanupWebGpuSinglePass
401
+ }),
402
+ webgl2: Internals2.createEffectImplementation({
403
+ setup: (target) => setupCornerPin(target),
404
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
405
+ const r = resolve(params);
406
+ applyCornerPin({
407
+ state,
408
+ source,
409
+ width,
410
+ height,
411
+ topLeft: r.topLeft,
412
+ topRight: r.topRight,
413
+ bottomRight: r.bottomRight,
414
+ bottomLeft: r.bottomLeft,
415
+ flipSourceY
416
+ });
417
+ },
418
+ cleanup: (state) => cleanupCornerPin(state)
419
+ })
420
+ },
421
+ schema: cornerPinSchema,
422
+ validateParams: validateCornerPinParams
423
+ });
424
+
425
+ export { cornerPin2 };