@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,401 @@
1
+ import {
2
+ setupWebGpuColors,
3
+ getWebGpuColors
4
+ } from "./index-8jx11jyn.mjs";
5
+ import {
6
+ assertOptionalFiniteNumber,
7
+ validateUnitInterval,
8
+ parseColorRgba
9
+ } from "./index-wxhvgv2s.mjs";
10
+ import {
11
+ WEBGPU_SINGLE_PASS_VERTEX,
12
+ cleanupWebGpuSinglePass,
13
+ applyWebGpuSinglePass
14
+ } from "./index-tvfexb7s.mjs";
15
+ import {
16
+ assertEffectParamsObject,
17
+ assertOptionalColor
18
+ } from "./index-4fvp93ps.mjs";
19
+
20
+ // src/flannel.ts
21
+ import { Internals } from "remotion";
22
+
23
+ // src/flannel-webgpu-shader.ts
24
+ var FLANNEL_WEBGPU_SHADER = `
25
+ ${WEBGPU_SINGLE_PASS_VERTEX}
26
+ @group(0) @binding(0) var sourceTexture: texture_2d<f32>;
27
+ @group(0) @binding(1) var sourceSampler: sampler;
28
+ @group(0) @binding(2) var<uniform> params: Params;
29
+ struct Params {
30
+ geometry: vec4f,
31
+ values: vec4f,
32
+ base: vec4f,
33
+ stripe: vec4f,
34
+ }
35
+ fn sampleSource(uv: vec2f) -> vec4f {
36
+ return textureSampleLevel(sourceTexture, sourceSampler, vec2f(uv.x, 1.0 - uv.y), 0);
37
+ }
38
+ fn stripe(coordinate: f32, center: f32, width: f32, softness: f32) -> f32 {
39
+ let distanceFromCenter = abs(fract(coordinate) - center);
40
+ let halfWidth = width * 0.5;
41
+ return 1.0 - smoothstep(halfWidth, halfWidth + softness, distanceFromCenter);
42
+ }
43
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
44
+ let vUv = vec2f(input.uv.x, 1.0 - input.uv.y);
45
+
46
+ let source = sampleSource(vUv);
47
+ if (source.a <= 0.001 || params.geometry.z <= 0.0) { return source; }
48
+ let pixel = vec2f(input.position.x, params.geometry.y - input.position.y);
49
+ let plaid = pixel / max(params.geometry.w, 0.001);
50
+ let edge = mix(0.002, 0.08, params.values.x);
51
+ let verticalWide = stripe(plaid.x, 0.5, 0.34, edge);
52
+ let horizontalWide = stripe(plaid.y, 0.5, 0.34, edge);
53
+ let verticalFine = stripe(plaid.x * 2.0, 0.5, 0.07, edge * 0.5);
54
+ let horizontalFine = stripe(plaid.y * 2.0, 0.5, 0.07, edge * 0.5);
55
+ let bands = max(max(verticalWide, horizontalWide), max(verticalFine, horizontalFine) * 0.72);
56
+ let crossing = max(verticalWide * horizontalWide, verticalFine * horizontalFine);
57
+ let threadX = 0.5 + 0.5 * sin(pixel.x * 3.14159265);
58
+ let threadY = 0.5 + 0.5 * sin(pixel.y * 3.14159265);
59
+ let weave = (threadX - 0.5) * (threadY - 0.5) * 0.12;
60
+ let sourceRgb = source.rgb / source.a;
61
+ let luminance = dot(sourceRgb, vec3f(0.2126, 0.7152, 0.0722));
62
+ var plaidColor = mix(params.base.rgb, params.stripe.rgb, bands * params.stripe.a);
63
+ plaidColor = mix(plaidColor, params.stripe.rgb * 0.72, crossing * params.stripe.a);
64
+ plaidColor *= mix(0.58, 1.18, luminance) + weave;
65
+ let result = mix(sourceRgb, clamp(plaidColor, vec3f(0), vec3f(1)), params.geometry.z);
66
+ return vec4f(result * source.a, source.a);
67
+
68
+ }
69
+ `;
70
+
71
+ // src/flannel.ts
72
+ var { createEffect, createWebGL2ContextError } = Internals;
73
+ var DEFAULT_AMOUNT = 0.7;
74
+ var DEFAULT_SIZE = 96;
75
+ var DEFAULT_SOFTNESS = 0.18;
76
+ var DEFAULT_BASE_COLOR = "#c92f3d";
77
+ var DEFAULT_STRIPE_COLOR = "#241015";
78
+ var flannelSchema = {
79
+ amount: {
80
+ type: "number",
81
+ min: 0,
82
+ max: 1,
83
+ step: 0.01,
84
+ default: DEFAULT_AMOUNT,
85
+ description: "Amount",
86
+ hiddenFromList: false
87
+ },
88
+ size: {
89
+ type: "number",
90
+ min: 1,
91
+ max: 500,
92
+ step: 1,
93
+ default: DEFAULT_SIZE,
94
+ description: "Pattern size",
95
+ hiddenFromList: false
96
+ },
97
+ softness: {
98
+ type: "number",
99
+ min: 0,
100
+ max: 1,
101
+ step: 0.01,
102
+ default: DEFAULT_SOFTNESS,
103
+ description: "Softness",
104
+ hiddenFromList: false
105
+ },
106
+ baseColor: {
107
+ type: "color",
108
+ default: DEFAULT_BASE_COLOR,
109
+ description: "Base color"
110
+ },
111
+ stripeColor: {
112
+ type: "color",
113
+ default: DEFAULT_STRIPE_COLOR,
114
+ description: "Stripe color"
115
+ }
116
+ };
117
+ var resolve = (params) => ({
118
+ amount: params.amount ?? DEFAULT_AMOUNT,
119
+ size: params.size ?? DEFAULT_SIZE,
120
+ softness: params.softness ?? DEFAULT_SOFTNESS,
121
+ baseColor: params.baseColor ?? DEFAULT_BASE_COLOR,
122
+ stripeColor: params.stripeColor ?? DEFAULT_STRIPE_COLOR
123
+ });
124
+ var validateFlannelParams = (params) => {
125
+ assertEffectParamsObject(params, "Flannel");
126
+ assertOptionalFiniteNumber(params.amount, "amount");
127
+ assertOptionalFiniteNumber(params.size, "size");
128
+ assertOptionalFiniteNumber(params.softness, "softness");
129
+ assertOptionalColor(params.baseColor, "baseColor");
130
+ assertOptionalColor(params.stripeColor, "stripeColor");
131
+ const resolved = resolve(params);
132
+ validateUnitInterval(resolved.amount, "amount");
133
+ validateUnitInterval(resolved.softness, "softness");
134
+ if (resolved.size <= 0) {
135
+ throw new TypeError(`"size" must be greater than 0, but got ${JSON.stringify(resolved.size)}`);
136
+ }
137
+ };
138
+ var FLANNEL_VS = `#version 300 es
139
+ in vec2 aPos;
140
+ in vec2 aUv;
141
+ out vec2 vUv;
142
+
143
+ void main() {
144
+ vUv = aUv;
145
+ gl_Position = vec4(aPos, 0.0, 1.0);
146
+ }
147
+ `;
148
+ var FLANNEL_FS = `#version 300 es
149
+ precision highp float;
150
+
151
+ in vec2 vUv;
152
+ out vec4 fragColor;
153
+
154
+ uniform sampler2D uSource;
155
+ uniform vec2 uResolution;
156
+ uniform float uAmount;
157
+ uniform float uSize;
158
+ uniform float uSoftness;
159
+ uniform vec4 uBaseColor;
160
+ uniform vec4 uStripeColor;
161
+
162
+ float stripe(float coordinate, float center, float width, float softness) {
163
+ float distanceFromCenter = abs(fract(coordinate) - center);
164
+ float halfWidth = width * 0.5;
165
+ return 1.0 - smoothstep(halfWidth, halfWidth + softness, distanceFromCenter);
166
+ }
167
+
168
+ void main() {
169
+ vec4 source = texture(uSource, vUv);
170
+ if (source.a <= 0.001 || uAmount <= 0.0) {
171
+ fragColor = source;
172
+ return;
173
+ }
174
+
175
+ vec2 pixel = gl_FragCoord.xy;
176
+ vec2 plaid = pixel / max(uSize, 0.001);
177
+ float edge = mix(0.002, 0.08, uSoftness);
178
+
179
+ float verticalWide = stripe(plaid.x, 0.5, 0.34, edge);
180
+ float horizontalWide = stripe(plaid.y, 0.5, 0.34, edge);
181
+ float verticalFine = stripe(plaid.x * 2.0, 0.5, 0.07, edge * 0.5);
182
+ float horizontalFine = stripe(plaid.y * 2.0, 0.5, 0.07, edge * 0.5);
183
+ float bands = max(max(verticalWide, horizontalWide), max(verticalFine, horizontalFine) * 0.72);
184
+ float crossing = max(verticalWide * horizontalWide, verticalFine * horizontalFine);
185
+
186
+ float threadX = 0.5 + 0.5 * sin(pixel.x * 3.14159265);
187
+ float threadY = 0.5 + 0.5 * sin(pixel.y * 3.14159265);
188
+ float weave = (threadX - 0.5) * (threadY - 0.5) * 0.12;
189
+
190
+ vec3 sourceRgb = source.rgb / source.a;
191
+ float luminance = dot(sourceRgb, vec3(0.2126, 0.7152, 0.0722));
192
+ vec3 plaidColor = mix(uBaseColor.rgb, uStripeColor.rgb, bands * uStripeColor.a);
193
+ plaidColor = mix(plaidColor, uStripeColor.rgb * 0.72, crossing * uStripeColor.a);
194
+ plaidColor *= mix(0.58, 1.18, luminance) + weave;
195
+ vec3 result = mix(sourceRgb, clamp(plaidColor, 0.0, 1.0), uAmount);
196
+
197
+ fragColor = vec4(result * source.a, source.a);
198
+ }
199
+ `;
200
+ var compileShader = (gl, type, source) => {
201
+ const shader = gl.createShader(type);
202
+ if (!shader) {
203
+ throw new Error("Failed to create WebGL shader");
204
+ }
205
+ gl.shaderSource(shader, source);
206
+ gl.compileShader(shader);
207
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
208
+ const log = gl.getShaderInfoLog(shader);
209
+ gl.deleteShader(shader);
210
+ throw new Error(`Flannel shader compile failed: ${log ?? "(no log)"}`);
211
+ }
212
+ return shader;
213
+ };
214
+ var setupFlannel = (target) => {
215
+ const gl = target.getContext("webgl2", {
216
+ premultipliedAlpha: true,
217
+ alpha: true,
218
+ preserveDrawingBuffer: true
219
+ });
220
+ if (!gl) {
221
+ throw createWebGL2ContextError("flannel effect");
222
+ }
223
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
224
+ const vertexShader = compileShader(gl, gl.VERTEX_SHADER, FLANNEL_VS);
225
+ const fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, FLANNEL_FS);
226
+ const program = gl.createProgram();
227
+ if (!program) {
228
+ throw new Error("Failed to create WebGL program");
229
+ }
230
+ gl.attachShader(program, vertexShader);
231
+ gl.attachShader(program, fragmentShader);
232
+ gl.linkProgram(program);
233
+ gl.deleteShader(vertexShader);
234
+ gl.deleteShader(fragmentShader);
235
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
236
+ const log = gl.getProgramInfoLog(program);
237
+ gl.deleteProgram(program);
238
+ throw new Error(`Flannel program link failed: ${log ?? "(no log)"}`);
239
+ }
240
+ const vao = gl.createVertexArray();
241
+ const vbo = gl.createBuffer();
242
+ if (!vao || !vbo) {
243
+ throw new Error("Failed to create WebGL geometry");
244
+ }
245
+ gl.bindVertexArray(vao);
246
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
247
+ 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);
248
+ const aPos = gl.getAttribLocation(program, "aPos");
249
+ const aUv = gl.getAttribLocation(program, "aUv");
250
+ gl.enableVertexAttribArray(aPos);
251
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
252
+ gl.enableVertexAttribArray(aUv);
253
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
254
+ gl.bindVertexArray(null);
255
+ const texture = gl.createTexture();
256
+ if (!texture) {
257
+ throw new Error("Failed to create WebGL texture");
258
+ }
259
+ gl.bindTexture(gl.TEXTURE_2D, texture);
260
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
261
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
262
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
263
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
264
+ gl.bindTexture(gl.TEXTURE_2D, null);
265
+ const colorCanvas = document.createElement("canvas");
266
+ colorCanvas.width = 1;
267
+ colorCanvas.height = 1;
268
+ const colorCtx = colorCanvas.getContext("2d", { willReadFrequently: true });
269
+ if (!colorCtx) {
270
+ throw new Error("Failed to acquire 2D context for color parsing");
271
+ }
272
+ return {
273
+ gl,
274
+ program,
275
+ vao,
276
+ vbo,
277
+ texture,
278
+ uSource: gl.getUniformLocation(program, "uSource"),
279
+ uResolution: gl.getUniformLocation(program, "uResolution"),
280
+ uAmount: gl.getUniformLocation(program, "uAmount"),
281
+ uSize: gl.getUniformLocation(program, "uSize"),
282
+ uSoftness: gl.getUniformLocation(program, "uSoftness"),
283
+ uBaseColor: gl.getUniformLocation(program, "uBaseColor"),
284
+ uStripeColor: gl.getUniformLocation(program, "uStripeColor"),
285
+ colorCtx,
286
+ cachedBaseColor: "",
287
+ cachedBaseColorRgba: [0, 0, 0, 255],
288
+ cachedStripeColor: "",
289
+ cachedStripeColorRgba: [0, 0, 0, 255]
290
+ };
291
+ };
292
+ var normalizedRgba = (color) => [
293
+ color[0] / 255,
294
+ color[1] / 255,
295
+ color[2] / 255,
296
+ color[3] / 255
297
+ ];
298
+ var flannel = createEffect({
299
+ type: "dev.remotion.effects.flannel",
300
+ label: "flannel()",
301
+ documentationLink: "https://www.remotion.dev/docs/effects/flannel",
302
+ calculateKey: (params) => {
303
+ const resolved = resolve(params);
304
+ return `flannel-${resolved.amount}-${resolved.size}-${resolved.softness}-${resolved.baseColor}-${resolved.stripeColor}`;
305
+ },
306
+ implementations: {
307
+ webgpu: Internals.createEffectImplementation({
308
+ setup: (target) => setupWebGpuColors(target, "flannel"),
309
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
310
+ if (!gpuDevice)
311
+ throw new Error("A WebGPU device is required for the flannel effect");
312
+ const r = resolve(params);
313
+ const colors = getWebGpuColors(state, [r.baseColor, r.stripeColor]);
314
+ const uniformData = new Float32Array([
315
+ width,
316
+ height,
317
+ r.amount,
318
+ r.size,
319
+ r.softness,
320
+ 0,
321
+ 0,
322
+ 0,
323
+ colors[0] / 255,
324
+ colors[1] / 255,
325
+ colors[2] / 255,
326
+ colors[3] / 255,
327
+ colors[4] / 255,
328
+ colors[5] / 255,
329
+ colors[6] / 255,
330
+ colors[7] / 255
331
+ ]);
332
+ applyWebGpuSinglePass({
333
+ state,
334
+ source,
335
+ width,
336
+ height,
337
+ device: gpuDevice,
338
+ shader: FLANNEL_WEBGPU_SHADER,
339
+ uniformData
340
+ });
341
+ },
342
+ cleanup: cleanupWebGpuSinglePass
343
+ }),
344
+ webgl2: Internals.createEffectImplementation({
345
+ setup: setupFlannel,
346
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
347
+ const resolved = resolve(params);
348
+ if (state.cachedBaseColor !== resolved.baseColor) {
349
+ state.cachedBaseColor = resolved.baseColor;
350
+ state.cachedBaseColorRgba = parseColorRgba(state.colorCtx, resolved.baseColor);
351
+ }
352
+ if (state.cachedStripeColor !== resolved.stripeColor) {
353
+ state.cachedStripeColor = resolved.stripeColor;
354
+ state.cachedStripeColorRgba = parseColorRgba(state.colorCtx, resolved.stripeColor);
355
+ }
356
+ const base = normalizedRgba(state.cachedBaseColorRgba);
357
+ const stripe = normalizedRgba(state.cachedStripeColorRgba);
358
+ const { gl } = state;
359
+ gl.viewport(0, 0, width, height);
360
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
361
+ gl.clearColor(0, 0, 0, 0);
362
+ gl.clear(gl.COLOR_BUFFER_BIT);
363
+ gl.useProgram(state.program);
364
+ gl.bindVertexArray(state.vao);
365
+ gl.activeTexture(gl.TEXTURE0);
366
+ gl.bindTexture(gl.TEXTURE_2D, state.texture);
367
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
368
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
369
+ if (state.uSource)
370
+ gl.uniform1i(state.uSource, 0);
371
+ if (state.uResolution)
372
+ gl.uniform2f(state.uResolution, width, height);
373
+ if (state.uAmount)
374
+ gl.uniform1f(state.uAmount, resolved.amount);
375
+ if (state.uSize)
376
+ gl.uniform1f(state.uSize, resolved.size);
377
+ if (state.uSoftness)
378
+ gl.uniform1f(state.uSoftness, resolved.softness);
379
+ if (state.uBaseColor)
380
+ gl.uniform4f(state.uBaseColor, ...base);
381
+ if (state.uStripeColor)
382
+ gl.uniform4f(state.uStripeColor, ...stripe);
383
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
384
+ gl.bindVertexArray(null);
385
+ gl.bindTexture(gl.TEXTURE_2D, null);
386
+ gl.useProgram(null);
387
+ },
388
+ cleanup: ({ gl, program, vao, vbo, texture }) => {
389
+ gl.deleteTexture(texture);
390
+ gl.deleteBuffer(vbo);
391
+ gl.deleteProgram(program);
392
+ gl.deleteVertexArray(vao);
393
+ }
394
+ })
395
+ },
396
+ schema: flannelSchema,
397
+ validateParams: validateFlannelParams
398
+ });
399
+ export {
400
+ flannel
401
+ };