@remotion/effects 4.0.541 → 4.0.543

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,500 @@
1
+ import {
2
+ WEBGPU_MULTIPASS_BINDINGS,
3
+ setupWebGpuMultipass,
4
+ cleanupWebGpuMultipass,
5
+ applyWebGpuMultipass
6
+ } from "./index-kkvzt8b7.mjs";
7
+ import {
8
+ GAUSSIAN_BLUR_WEBGPU_SHADER
9
+ } from "./index-618ky75w.mjs";
10
+ import {
11
+ BLUR_VS,
12
+ BLUR_FS_HORIZONTAL,
13
+ BLUR_FS_VERTICAL
14
+ } from "./index-b86qstcs.mjs";
15
+ import {
16
+ publicUvToShaderUv
17
+ } from "./index-gnsce796.mjs";
18
+ import {
19
+ assertOptionalFiniteNumber,
20
+ validateUnitInterval,
21
+ validateNonNegative
22
+ } from "./index-wxhvgv2s.mjs";
23
+ import {
24
+ assertEffectParamsObject
25
+ } from "./index-4fvp93ps.mjs";
26
+
27
+ // src/region-blur/index.ts
28
+ import { Internals as Internals2 } from "remotion";
29
+
30
+ // src/region-blur/region-blur-runtime.ts
31
+ import { Internals } from "remotion";
32
+ var { createWebGL2ContextError } = Internals;
33
+ var COMPOSITE_FRAGMENT_SHADER = `#version 300 es
34
+ precision highp float;
35
+
36
+ in vec2 vUv;
37
+ out vec4 fragColor;
38
+
39
+ uniform sampler2D uSource;
40
+ uniform sampler2D uBlurred;
41
+ uniform vec2 uResolution;
42
+ uniform vec2 uTopLeft;
43
+ uniform vec2 uBottomRight;
44
+ uniform float uFeather;
45
+ uniform float uRoundness;
46
+
47
+ float roundedBoxDistance(vec2 point, vec2 center, vec2 halfSize, float radius) {
48
+ vec2 offset = abs(point - center) - halfSize + vec2(radius);
49
+ return length(max(offset, vec2(0.0))) + min(max(offset.x, offset.y), 0.0) - radius;
50
+ }
51
+
52
+ void main() {
53
+ vec2 minimum = vec2(uTopLeft.x, uBottomRight.y) * uResolution;
54
+ vec2 maximum = vec2(uBottomRight.x, uTopLeft.y) * uResolution;
55
+ vec2 halfSize = (maximum - minimum) * 0.5;
56
+ vec2 center = (minimum + maximum) * 0.5;
57
+ float cornerRadius = min(halfSize.x, halfSize.y) * uRoundness;
58
+ float distanceToRegion = roundedBoxDistance(
59
+ vUv * uResolution,
60
+ center,
61
+ halfSize,
62
+ cornerRadius
63
+ );
64
+ float mask = uFeather <= 0.0
65
+ ? (distanceToRegion <= 0.0 ? 1.0 : 0.0)
66
+ : 1.0 - smoothstep(-uFeather * 0.5, uFeather * 0.5, distanceToRegion);
67
+
68
+ fragColor = mix(texture(uSource, vUv), texture(uBlurred, vUv), mask);
69
+ }
70
+ `;
71
+ var compileShader = (gl, type, source) => {
72
+ const shader = gl.createShader(type);
73
+ if (!shader) {
74
+ throw new Error("Failed to create WebGL shader");
75
+ }
76
+ gl.shaderSource(shader, source);
77
+ gl.compileShader(shader);
78
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
79
+ const log = gl.getShaderInfoLog(shader);
80
+ gl.deleteShader(shader);
81
+ throw new Error(`Shader compile failed: ${log ?? "(no log)"}`);
82
+ }
83
+ return shader;
84
+ };
85
+ var createProgram = (gl, vertexSource, fragmentSource) => {
86
+ const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
87
+ const fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
88
+ const program = gl.createProgram();
89
+ if (!program) {
90
+ throw new Error("Failed to create WebGL program");
91
+ }
92
+ gl.attachShader(program, vertexShader);
93
+ gl.attachShader(program, fragmentShader);
94
+ gl.linkProgram(program);
95
+ gl.deleteShader(vertexShader);
96
+ gl.deleteShader(fragmentShader);
97
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
98
+ const log = gl.getProgramInfoLog(program);
99
+ gl.deleteProgram(program);
100
+ throw new Error(`Program link failed: ${log ?? "(no log)"}`);
101
+ }
102
+ return program;
103
+ };
104
+ var createTexture = (gl) => {
105
+ const texture = gl.createTexture();
106
+ if (!texture) {
107
+ throw new Error("Failed to create WebGL texture");
108
+ }
109
+ gl.bindTexture(gl.TEXTURE_2D, texture);
110
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
111
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
112
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
113
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
114
+ gl.bindTexture(gl.TEXTURE_2D, null);
115
+ return texture;
116
+ };
117
+ var getBlurUniforms = (gl, program) => ({
118
+ source: gl.getUniformLocation(program, "uSource"),
119
+ radius: gl.getUniformLocation(program, "uRadius"),
120
+ texelSize: gl.getUniformLocation(program, "uTexelSize")
121
+ });
122
+ var setupRegionBlur = (target) => {
123
+ const gl = target.getContext("webgl2", {
124
+ premultipliedAlpha: true,
125
+ alpha: true,
126
+ preserveDrawingBuffer: true
127
+ });
128
+ if (!gl) {
129
+ throw createWebGL2ContextError("region blur effect");
130
+ }
131
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
132
+ const horizontalProgram = createProgram(gl, BLUR_VS, BLUR_FS_HORIZONTAL);
133
+ const verticalProgram = createProgram(gl, BLUR_VS, BLUR_FS_VERTICAL);
134
+ const compositeProgram = createProgram(gl, BLUR_VS, COMPOSITE_FRAGMENT_SHADER);
135
+ const vao = gl.createVertexArray();
136
+ const vbo = gl.createBuffer();
137
+ const framebuffer = gl.createFramebuffer();
138
+ if (!vao || !vbo || !framebuffer) {
139
+ throw new Error("Failed to create region blur WebGL resources");
140
+ }
141
+ gl.bindVertexArray(vao);
142
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
143
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]), gl.STATIC_DRAW);
144
+ gl.enableVertexAttribArray(0);
145
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 16, 0);
146
+ gl.enableVertexAttribArray(1);
147
+ gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 16, 8);
148
+ gl.bindVertexArray(null);
149
+ return {
150
+ gl,
151
+ horizontalProgram,
152
+ verticalProgram,
153
+ compositeProgram,
154
+ vao,
155
+ vbo,
156
+ sourceTexture: createTexture(gl),
157
+ horizontalTexture: createTexture(gl),
158
+ blurredTexture: createTexture(gl),
159
+ framebuffer,
160
+ horizontalUniforms: getBlurUniforms(gl, horizontalProgram),
161
+ verticalUniforms: getBlurUniforms(gl, verticalProgram),
162
+ compositeUniforms: {
163
+ source: gl.getUniformLocation(compositeProgram, "uSource"),
164
+ blurred: gl.getUniformLocation(compositeProgram, "uBlurred"),
165
+ resolution: gl.getUniformLocation(compositeProgram, "uResolution"),
166
+ topLeft: gl.getUniformLocation(compositeProgram, "uTopLeft"),
167
+ bottomRight: gl.getUniformLocation(compositeProgram, "uBottomRight"),
168
+ feather: gl.getUniformLocation(compositeProgram, "uFeather"),
169
+ roundness: gl.getUniformLocation(compositeProgram, "uRoundness")
170
+ }
171
+ };
172
+ };
173
+ var draw = (state) => {
174
+ state.gl.bindVertexArray(state.vao);
175
+ state.gl.drawArrays(state.gl.TRIANGLE_STRIP, 0, 4);
176
+ state.gl.bindVertexArray(null);
177
+ };
178
+ var allocateTexture = (gl, texture, width, height) => {
179
+ gl.bindTexture(gl.TEXTURE_2D, texture);
180
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
181
+ };
182
+ var renderBlurPass = ({
183
+ state,
184
+ program,
185
+ uniforms,
186
+ input,
187
+ output,
188
+ width,
189
+ height,
190
+ radius
191
+ }) => {
192
+ const { gl } = state;
193
+ gl.bindFramebuffer(gl.FRAMEBUFFER, state.framebuffer);
194
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, output, 0);
195
+ if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
196
+ throw new Error("Region blur framebuffer is incomplete");
197
+ }
198
+ gl.clear(gl.COLOR_BUFFER_BIT);
199
+ gl.activeTexture(gl.TEXTURE0);
200
+ gl.bindTexture(gl.TEXTURE_2D, input);
201
+ gl.useProgram(program);
202
+ if (uniforms.source)
203
+ gl.uniform1i(uniforms.source, 0);
204
+ if (uniforms.radius)
205
+ gl.uniform1f(uniforms.radius, radius);
206
+ if (uniforms.texelSize) {
207
+ gl.uniform2f(uniforms.texelSize, 1 / width, 1 / height);
208
+ }
209
+ draw(state);
210
+ };
211
+ var applyRegionBlur = ({
212
+ state,
213
+ source,
214
+ width,
215
+ height,
216
+ flipSourceY,
217
+ topLeft,
218
+ bottomRight,
219
+ blurRadius,
220
+ feather,
221
+ roundness
222
+ }) => {
223
+ const { gl } = state;
224
+ gl.viewport(0, 0, width, height);
225
+ gl.clearColor(0, 0, 0, 0);
226
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
227
+ gl.bindTexture(gl.TEXTURE_2D, state.sourceTexture);
228
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
229
+ allocateTexture(gl, state.horizontalTexture, width, height);
230
+ allocateTexture(gl, state.blurredTexture, width, height);
231
+ renderBlurPass({
232
+ state,
233
+ program: state.horizontalProgram,
234
+ uniforms: state.horizontalUniforms,
235
+ input: state.sourceTexture,
236
+ output: state.horizontalTexture,
237
+ width,
238
+ height,
239
+ radius: blurRadius
240
+ });
241
+ renderBlurPass({
242
+ state,
243
+ program: state.verticalProgram,
244
+ uniforms: state.verticalUniforms,
245
+ input: state.horizontalTexture,
246
+ output: state.blurredTexture,
247
+ width,
248
+ height,
249
+ radius: blurRadius
250
+ });
251
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
252
+ gl.clear(gl.COLOR_BUFFER_BIT);
253
+ gl.useProgram(state.compositeProgram);
254
+ gl.activeTexture(gl.TEXTURE0);
255
+ gl.bindTexture(gl.TEXTURE_2D, state.sourceTexture);
256
+ gl.activeTexture(gl.TEXTURE1);
257
+ gl.bindTexture(gl.TEXTURE_2D, state.blurredTexture);
258
+ const topLeftShader = publicUvToShaderUv(topLeft);
259
+ const bottomRightShader = publicUvToShaderUv(bottomRight);
260
+ const uniforms = state.compositeUniforms;
261
+ if (uniforms.source)
262
+ gl.uniform1i(uniforms.source, 0);
263
+ if (uniforms.blurred)
264
+ gl.uniform1i(uniforms.blurred, 1);
265
+ if (uniforms.resolution)
266
+ gl.uniform2f(uniforms.resolution, width, height);
267
+ if (uniforms.topLeft) {
268
+ gl.uniform2f(uniforms.topLeft, topLeftShader[0], topLeftShader[1]);
269
+ }
270
+ if (uniforms.bottomRight) {
271
+ gl.uniform2f(uniforms.bottomRight, bottomRightShader[0], bottomRightShader[1]);
272
+ }
273
+ if (uniforms.feather)
274
+ gl.uniform1f(uniforms.feather, feather);
275
+ if (uniforms.roundness)
276
+ gl.uniform1f(uniforms.roundness, roundness);
277
+ draw(state);
278
+ gl.activeTexture(gl.TEXTURE1);
279
+ gl.bindTexture(gl.TEXTURE_2D, null);
280
+ gl.activeTexture(gl.TEXTURE0);
281
+ gl.bindTexture(gl.TEXTURE_2D, null);
282
+ gl.useProgram(null);
283
+ };
284
+ var cleanupRegionBlur = (state) => {
285
+ const { gl } = state;
286
+ gl.deleteFramebuffer(state.framebuffer);
287
+ gl.deleteTexture(state.sourceTexture);
288
+ gl.deleteTexture(state.horizontalTexture);
289
+ gl.deleteTexture(state.blurredTexture);
290
+ gl.deleteBuffer(state.vbo);
291
+ gl.deleteVertexArray(state.vao);
292
+ gl.deleteProgram(state.horizontalProgram);
293
+ gl.deleteProgram(state.verticalProgram);
294
+ gl.deleteProgram(state.compositeProgram);
295
+ };
296
+
297
+ // src/region-blur/webgpu-shader.ts
298
+ var REGION_BLUR_WEBGPU_SHADER = `
299
+ ${WEBGPU_MULTIPASS_BINDINGS}
300
+ struct Params {resolution: vec2f, feather: f32, roundness: f32, corners: vec4f,}
301
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
302
+ let minimum = params.corners.xy * params.resolution;
303
+ let maximum = params.corners.zw * params.resolution;
304
+ let halfSize = (maximum - minimum) * 0.5;
305
+ let center = (minimum + maximum) * 0.5;
306
+ let radius = min(halfSize.x, halfSize.y) * params.roundness;
307
+ let offset = abs(input.uv * params.resolution - center) - halfSize + vec2f(radius);
308
+ let distance = length(max(offset, vec2f(0))) + min(max(offset.x, offset.y), 0.0) - radius;
309
+ var mask = select(0.0, 1.0, distance <= 0.0);
310
+ if (params.feather > 0.0) {mask = 1.0 - smoothstep(-params.feather * 0.5, params.feather * 0.5, distance);}
311
+ return mix(textureSampleLevel(source, sourceSampler, input.uv, 0), textureSampleLevel(secondary, sourceSampler, input.uv, 0), mask);
312
+ }
313
+ `;
314
+
315
+ // src/region-blur/index.ts
316
+ var { createEffect } = Internals2;
317
+ var DEFAULT_BLUR_RADIUS = 40;
318
+ var DEFAULT_FEATHER = 0;
319
+ var DEFAULT_ROUNDNESS = 0;
320
+ var regionBlurSchema = {
321
+ topLeft: {
322
+ type: "uv-coordinate",
323
+ min: -1,
324
+ max: 2,
325
+ step: 0.01,
326
+ default: undefined,
327
+ description: "Top left"
328
+ },
329
+ bottomRight: {
330
+ type: "uv-coordinate",
331
+ min: -1,
332
+ max: 2,
333
+ step: 0.01,
334
+ default: undefined,
335
+ description: "Bottom right"
336
+ },
337
+ blurRadius: {
338
+ type: "number",
339
+ min: 0,
340
+ max: 200,
341
+ step: 1,
342
+ default: DEFAULT_BLUR_RADIUS,
343
+ description: "Blur radius",
344
+ hiddenFromList: false
345
+ },
346
+ feather: {
347
+ type: "number",
348
+ min: 0,
349
+ max: 200,
350
+ step: 1,
351
+ default: DEFAULT_FEATHER,
352
+ description: "Feather",
353
+ hiddenFromList: false
354
+ },
355
+ roundness: {
356
+ type: "number",
357
+ min: 0,
358
+ max: 1,
359
+ step: 0.01,
360
+ default: DEFAULT_ROUNDNESS,
361
+ description: "Roundness",
362
+ hiddenFromList: false
363
+ }
364
+ };
365
+ var resolve = (params) => ({
366
+ topLeft: [...params.topLeft],
367
+ bottomRight: [...params.bottomRight],
368
+ blurRadius: params.blurRadius ?? DEFAULT_BLUR_RADIUS,
369
+ feather: params.feather ?? DEFAULT_FEATHER,
370
+ roundness: params.roundness ?? DEFAULT_ROUNDNESS
371
+ });
372
+ var assertRequiredUvCoordinate = (value, name) => {
373
+ if (!Array.isArray(value) || value.length !== 2 || value.some((item) => typeof item !== "number" || !Number.isFinite(item))) {
374
+ throw new TypeError(`"${name}" must be a [number, number] tuple`);
375
+ }
376
+ };
377
+ var validateRegionBlurParams = (params) => {
378
+ assertEffectParamsObject(params, "Region blur");
379
+ assertRequiredUvCoordinate(params.topLeft, "topLeft");
380
+ assertRequiredUvCoordinate(params.bottomRight, "bottomRight");
381
+ assertOptionalFiniteNumber(params.blurRadius, "blurRadius");
382
+ assertOptionalFiniteNumber(params.feather, "feather");
383
+ assertOptionalFiniteNumber(params.roundness, "roundness");
384
+ const resolved = resolve(params);
385
+ validateNonNegative(resolved.blurRadius, "blurRadius");
386
+ validateNonNegative(resolved.feather, "feather");
387
+ validateUnitInterval(resolved.roundness, "roundness");
388
+ if (resolved.topLeft[0] >= resolved.bottomRight[0] || resolved.topLeft[1] >= resolved.bottomRight[1]) {
389
+ throw new TypeError('"topLeft" must be above and to the left of "bottomRight"');
390
+ }
391
+ };
392
+ var regionBlur = createEffect({
393
+ type: "remotion/region-blur",
394
+ label: "regionBlur()",
395
+ documentationLink: "https://www.remotion.dev/docs/effects/region-blur",
396
+ calculateKey: (params) => {
397
+ const resolved = resolve(params);
398
+ return `region-blur-${resolved.topLeft.join(":")}-${resolved.bottomRight.join(":")}-${resolved.blurRadius}-${resolved.feather}-${resolved.roundness}`;
399
+ },
400
+ implementations: {
401
+ webgpu: Internals2.createEffectImplementation({
402
+ setup: (target) => setupWebGpuMultipass(target, "region-blur"),
403
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
404
+ if (!gpuDevice)
405
+ throw new Error("A WebGPU device is required for this effect");
406
+ const r = resolve(params);
407
+ applyWebGpuMultipass({
408
+ auxiliarySource: null,
409
+ state,
410
+ source,
411
+ width,
412
+ height,
413
+ device: gpuDevice,
414
+ passes: [
415
+ {
416
+ shader: GAUSSIAN_BLUR_WEBGPU_SHADER,
417
+ uniforms: new Float32Array([
418
+ width,
419
+ height,
420
+ 1,
421
+ 0,
422
+ r.blurRadius,
423
+ 0,
424
+ 0,
425
+ 0,
426
+ 0,
427
+ 0,
428
+ 0,
429
+ 0,
430
+ 0,
431
+ 0,
432
+ 0,
433
+ 0
434
+ ]),
435
+ source: -1,
436
+ secondary: -1
437
+ },
438
+ {
439
+ shader: GAUSSIAN_BLUR_WEBGPU_SHADER,
440
+ uniforms: new Float32Array([
441
+ width,
442
+ height,
443
+ 0,
444
+ 1,
445
+ r.blurRadius,
446
+ 0,
447
+ 0,
448
+ 0,
449
+ 0,
450
+ 0,
451
+ 0,
452
+ 0,
453
+ 0,
454
+ 0,
455
+ 0,
456
+ 0
457
+ ]),
458
+ source: 0,
459
+ secondary: -1
460
+ },
461
+ {
462
+ shader: REGION_BLUR_WEBGPU_SHADER,
463
+ uniforms: new Float32Array([
464
+ width,
465
+ height,
466
+ r.feather,
467
+ r.roundness,
468
+ ...r.topLeft,
469
+ ...r.bottomRight
470
+ ]),
471
+ source: -1,
472
+ secondary: 1
473
+ }
474
+ ]
475
+ });
476
+ },
477
+ cleanup: cleanupWebGpuMultipass
478
+ }),
479
+ webgl2: Internals2.createEffectImplementation({
480
+ setup: (target) => setupRegionBlur(target),
481
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
482
+ const resolved = resolve(params);
483
+ applyRegionBlur({
484
+ state,
485
+ source,
486
+ width,
487
+ height,
488
+ flipSourceY,
489
+ ...resolved
490
+ });
491
+ },
492
+ cleanup: (state) => cleanupRegionBlur(state)
493
+ })
494
+ },
495
+ schema: regionBlurSchema,
496
+ validateParams: validateRegionBlurParams
497
+ });
498
+ export {
499
+ regionBlur
500
+ };
@@ -0,0 +1,8 @@
1
+ import {
2
+ ringsSchema2,
3
+ rings2
4
+ } from "./index-34fxm3ax.mjs";
5
+ export {
6
+ rings2 as rings,
7
+ ringsSchema2 as ringsSchema
8
+ };