@remotion/effects 4.0.478 → 4.0.479

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 (49) hide show
  1. package/dist/burlap.d.ts +15 -0
  2. package/dist/esm/barrel-distortion.mjs +1 -1
  3. package/dist/esm/blur.mjs +1 -1
  4. package/dist/esm/brightness.mjs +1 -1
  5. package/dist/esm/burlap.mjs +454 -0
  6. package/dist/esm/chromatic-aberration.mjs +1 -1
  7. package/dist/esm/color-key.mjs +1 -1
  8. package/dist/esm/contour-lines.mjs +1 -1
  9. package/dist/esm/contrast.mjs +1 -1
  10. package/dist/esm/dot-grid.mjs +1 -1
  11. package/dist/esm/drop-shadow.mjs +1 -1
  12. package/dist/esm/duotone.mjs +1 -1
  13. package/dist/esm/evolve.mjs +1 -1
  14. package/dist/esm/fisheye.mjs +1 -1
  15. package/dist/esm/glow.mjs +1 -1
  16. package/dist/esm/grayscale.mjs +1 -1
  17. package/dist/esm/halftone-linear-gradient.mjs +1 -1
  18. package/dist/esm/halftone.mjs +20 -1
  19. package/dist/esm/hue.mjs +1 -1
  20. package/dist/esm/index.mjs +3 -3
  21. package/dist/esm/invert.mjs +1 -1
  22. package/dist/esm/linear-progressive-blur.mjs +1 -1
  23. package/dist/esm/lines.mjs +1 -1
  24. package/dist/esm/mirror.mjs +1 -1
  25. package/dist/esm/noise-displacement.mjs +1 -1
  26. package/dist/esm/noise.mjs +1 -1
  27. package/dist/esm/pattern.mjs +1 -1
  28. package/dist/esm/pixel-dissolve.mjs +1 -1
  29. package/dist/esm/pixelate.mjs +306 -0
  30. package/dist/esm/rings.mjs +1 -1
  31. package/dist/esm/saturation.mjs +1 -1
  32. package/dist/esm/scale.mjs +1 -1
  33. package/dist/esm/scanlines.mjs +1 -1
  34. package/dist/esm/shine.mjs +1 -1
  35. package/dist/esm/shrinkwrap.mjs +606 -0
  36. package/dist/esm/speckle.mjs +1 -1
  37. package/dist/esm/thermal-vision.mjs +404 -0
  38. package/dist/esm/tint.mjs +1 -1
  39. package/dist/esm/translate.mjs +2 -2
  40. package/dist/esm/tv-signal-off.mjs +1 -1
  41. package/dist/esm/vignette.mjs +1 -1
  42. package/dist/esm/wave.mjs +1 -1
  43. package/dist/esm/waves.mjs +1 -1
  44. package/dist/esm/white-noise.mjs +1 -1
  45. package/dist/esm/zigzag.mjs +1 -1
  46. package/dist/pixelate.d.ts +6 -0
  47. package/dist/shrinkwrap.d.ts +19 -0
  48. package/dist/thermal-vision.d.ts +31 -0
  49. package/package.json +35 -3
@@ -428,7 +428,7 @@ var linkProgram = (gl, vs, fs) => {
428
428
  return program;
429
429
  };
430
430
  var pattern = createEffect({
431
- type: "remotion/pattern",
431
+ type: "dev.remotion.effects.pattern",
432
432
  label: "pattern()",
433
433
  documentationLink: "https://www.remotion.dev/docs/effects/pattern",
434
434
  backend: "webgl2",
@@ -901,7 +901,7 @@ var updatePalette = (state, colors) => {
901
901
  return true;
902
902
  };
903
903
  var rings = createEffect2({
904
- type: "remotion/rings",
904
+ type: "dev.remotion.effects.rings",
905
905
  label: "rings()",
906
906
  documentationLink: "https://www.remotion.dev/docs/effects/rings",
907
907
  backend: "webgl2",
@@ -1357,7 +1357,7 @@ var updatePalette2 = (state, colors) => {
1357
1357
  return true;
1358
1358
  };
1359
1359
  var zigzag = createEffect3({
1360
- type: "remotion/zigzag",
1360
+ type: "dev.remotion.effects.zigzag",
1361
1361
  label: "zigzag()",
1362
1362
  documentationLink: "https://www.remotion.dev/docs/effects/zigzag",
1363
1363
  backend: "webgl2",
@@ -121,7 +121,7 @@ var validateInvertParams = (params) => {
121
121
  validateUnitInterval(amount, "amount");
122
122
  };
123
123
  var invert = createEffect({
124
- type: "remotion/invert",
124
+ type: "dev.remotion.effects.invert",
125
125
  label: "invert()",
126
126
  documentationLink: "https://www.remotion.dev/docs/effects/invert",
127
127
  backend: "2d",
@@ -510,7 +510,7 @@ var validateLinearProgressiveBlurParams = (params) => {
510
510
  assertOptionalFiniteNumber(params.endBlur, "endBlur");
511
511
  };
512
512
  var linearProgressiveBlur = createEffect({
513
- type: "remotion/linear-progressive-blur",
513
+ type: "dev.remotion.effects.linearProgressiveBlur",
514
514
  label: "linearProgressiveBlur()",
515
515
  documentationLink: "https://www.remotion.dev/docs/effects/linear-progressive-blur",
516
516
  backend: "webgl2",
@@ -457,7 +457,7 @@ var updatePalette = (state, colors) => {
457
457
  return true;
458
458
  };
459
459
  var lines = createEffect({
460
- type: "remotion/lines",
460
+ type: "dev.remotion.effects.lines",
461
461
  label: "lines()",
462
462
  documentationLink: "https://www.remotion.dev/docs/effects/lines",
463
463
  backend: "webgl2",
@@ -352,7 +352,7 @@ var validateMirrorParams = (params) => {
352
352
  validateUnitInterval(position, "position");
353
353
  };
354
354
  var mirror = createEffect({
355
- type: "remotion/mirror",
355
+ type: "dev.remotion.effects.mirror",
356
356
  label: "mirror()",
357
357
  documentationLink: "https://www.remotion.dev/docs/effects/mirror",
358
358
  backend: "webgl2",
@@ -513,7 +513,7 @@ var setupNoiseDisplacement = (target) => {
513
513
  };
514
514
  };
515
515
  var noiseDisplacement = createEffect({
516
- type: "remotion/noise-displacement",
516
+ type: "dev.remotion.effects.noiseDisplacement",
517
517
  label: "noiseDisplacement()",
518
518
  documentationLink: "https://www.remotion.dev/docs/effects/noise-displacement",
519
519
  backend: "webgl2",
@@ -303,7 +303,7 @@ var setupNoise = (target) => {
303
303
  };
304
304
  };
305
305
  var noise = createEffect({
306
- type: "remotion/noise",
306
+ type: "dev.remotion.effects.noise",
307
307
  label: "noise()",
308
308
  documentationLink: "https://www.remotion.dev/docs/effects/noise",
309
309
  backend: "webgl2",
@@ -428,7 +428,7 @@ var linkProgram = (gl, vs, fs) => {
428
428
  return program;
429
429
  };
430
430
  var pattern = createEffect({
431
- type: "remotion/pattern",
431
+ type: "dev.remotion.effects.pattern",
432
432
  label: "pattern()",
433
433
  documentationLink: "https://www.remotion.dev/docs/effects/pattern",
434
434
  backend: "webgl2",
@@ -288,7 +288,7 @@ var createFullscreenQuad = (gl) => {
288
288
  return { vao, vbo };
289
289
  };
290
290
  var pixelDissolve = createEffect({
291
- type: "remotion/pixel-dissolve",
291
+ type: "dev.remotion.effects.pixelDissolve",
292
292
  label: "pixelDissolve()",
293
293
  documentationLink: "https://www.remotion.dev/docs/effects/pixel-dissolve",
294
294
  backend: "webgl2",
@@ -0,0 +1,306 @@
1
+ // src/pixelate.ts
2
+ import { Internals } from "remotion";
3
+
4
+ // src/validate-effect-param.ts
5
+ var assertEffectParamsObject = (params, effectLabel) => {
6
+ if (params === null || typeof params !== "object") {
7
+ throw new TypeError(`${effectLabel} effect requires a parameters object, but got ${JSON.stringify(params)}`);
8
+ }
9
+ };
10
+ var assertRequiredFiniteNumber = (value, name) => {
11
+ if (typeof value !== "number" || !Number.isFinite(value)) {
12
+ throw new TypeError(`"${name}" must be a finite number, but got ${JSON.stringify(value)}`);
13
+ }
14
+ };
15
+ var assertRequiredColor = (value, name) => {
16
+ if (typeof value !== "string" || value.length === 0) {
17
+ throw new TypeError(`"${name}" must be a non-empty string, but got ${JSON.stringify(value)}`);
18
+ }
19
+ };
20
+ var assertOptionalColor = (value, name) => {
21
+ if (value === undefined) {
22
+ return;
23
+ }
24
+ assertRequiredColor(value, name);
25
+ };
26
+ var assertOptionalBoolean = (value, name) => {
27
+ if (value === undefined) {
28
+ return;
29
+ }
30
+ if (typeof value !== "boolean") {
31
+ throw new TypeError(`"${name}" must be a boolean, but got ${JSON.stringify(value)}`);
32
+ }
33
+ };
34
+
35
+ // src/color-utils.ts
36
+ var DEFAULT_AMOUNT = 1;
37
+ var DEFAULT_BRIGHTNESS_AMOUNT = 0;
38
+ var DEFAULT_HUE_DEGREES = 0;
39
+ var colorAmountSchema = {
40
+ type: "number",
41
+ min: 0,
42
+ max: 1,
43
+ step: 0.01,
44
+ default: DEFAULT_AMOUNT,
45
+ description: "Amount",
46
+ hiddenFromList: false
47
+ };
48
+ var colorMultiplierSchema = {
49
+ type: "number",
50
+ min: 0,
51
+ step: 0.01,
52
+ default: DEFAULT_AMOUNT,
53
+ description: "Amount",
54
+ hiddenFromList: false
55
+ };
56
+ var brightnessAmountSchema = {
57
+ type: "number",
58
+ min: -1,
59
+ max: 1,
60
+ step: 0.01,
61
+ default: DEFAULT_BRIGHTNESS_AMOUNT,
62
+ description: "Amount",
63
+ hiddenFromList: false
64
+ };
65
+ var hueDegreesSchema = {
66
+ type: "rotation-degrees",
67
+ step: 1,
68
+ default: DEFAULT_HUE_DEGREES,
69
+ description: "Degrees"
70
+ };
71
+ var assertOptionalFiniteNumber = (value, name) => {
72
+ if (value === undefined) {
73
+ return;
74
+ }
75
+ assertRequiredFiniteNumber(value, name);
76
+ };
77
+ var validateUnitInterval = (value, name) => {
78
+ if (value < 0) {
79
+ throw new TypeError(`"${name}" must be >= 0, but got ${JSON.stringify(value)}`);
80
+ }
81
+ if (value > 1) {
82
+ throw new TypeError(`"${name}" must be <= 1, but got ${JSON.stringify(value)}`);
83
+ }
84
+ };
85
+ var validateNonNegative = (value, name) => {
86
+ if (value < 0) {
87
+ throw new TypeError(`"${name}" must be >= 0, but got ${JSON.stringify(value)}`);
88
+ }
89
+ };
90
+ var validateSignedUnitInterval = (value, name) => {
91
+ if (value < -1) {
92
+ throw new TypeError(`"${name}" must be >= -1, but got ${JSON.stringify(value)}`);
93
+ }
94
+ if (value > 1) {
95
+ throw new TypeError(`"${name}" must be <= 1, but got ${JSON.stringify(value)}`);
96
+ }
97
+ };
98
+ var clampColorChannel = (value) => {
99
+ return Math.max(0, Math.min(255, value));
100
+ };
101
+ var parseColorRgba = (ctx, color) => {
102
+ ctx.clearRect(0, 0, 1, 1);
103
+ ctx.fillStyle = color;
104
+ ctx.fillRect(0, 0, 1, 1);
105
+ const { data } = ctx.getImageData(0, 0, 1, 1);
106
+ return [data[0], data[1], data[2], data[3]];
107
+ };
108
+
109
+ // src/pixelate.ts
110
+ var { createEffect, createWebGL2ContextError } = Internals;
111
+ var DEFAULT_BLOCK_SIZE = 20;
112
+ var pixelateSchema = {
113
+ blockSize: {
114
+ type: "number",
115
+ min: 1,
116
+ max: 200,
117
+ step: 1,
118
+ default: DEFAULT_BLOCK_SIZE,
119
+ description: "Block size",
120
+ hiddenFromList: false
121
+ }
122
+ };
123
+ var resolve = (p) => ({
124
+ blockSize: p.blockSize ?? DEFAULT_BLOCK_SIZE
125
+ });
126
+ var validatePixelateParams = (params) => {
127
+ assertEffectParamsObject(params, "Pixelate");
128
+ assertOptionalFiniteNumber(params.blockSize, "blockSize");
129
+ if ((params.blockSize ?? DEFAULT_BLOCK_SIZE) < 1) {
130
+ throw new Error('"blockSize" must be >= 1');
131
+ }
132
+ };
133
+ var VERTEX_SHADER = `#version 300 es
134
+
135
+ in vec2 aPos;
136
+ in vec2 aUv;
137
+ out vec2 vUv;
138
+
139
+ void main() {
140
+ vUv = aUv;
141
+ gl_Position = vec4(aPos, 0.0, 1.0);
142
+ }
143
+ `;
144
+ var FRAGMENT_SHADER = `#version 300 es
145
+ precision highp float;
146
+
147
+ in vec2 vUv;
148
+ out vec4 fragColor;
149
+ uniform sampler2D uSource;
150
+ uniform float uBlockSize;
151
+ uniform vec2 uResolution;
152
+
153
+ void main() {
154
+ vec2 pixelSizeUv = vec2(uBlockSize) / uResolution;
155
+ vec2 blockUv = floor(vUv / pixelSizeUv) * pixelSizeUv + pixelSizeUv * 0.5;
156
+ fragColor = texture(uSource, blockUv);
157
+ }
158
+ `;
159
+ var compileShader = (gl, type, source) => {
160
+ const shader = gl.createShader(type);
161
+ if (!shader) {
162
+ throw new Error("Failed to create WebGL shader");
163
+ }
164
+ gl.shaderSource(shader, source);
165
+ gl.compileShader(shader);
166
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
167
+ const log = gl.getShaderInfoLog(shader);
168
+ gl.deleteShader(shader);
169
+ throw new Error(`Pixelate shader compile failed: ${log ?? "(no log)"}`);
170
+ }
171
+ return shader;
172
+ };
173
+ var linkProgram = (gl, vs, fs) => {
174
+ const program = gl.createProgram();
175
+ if (!program) {
176
+ throw new Error("Failed to create WebGL program");
177
+ }
178
+ gl.attachShader(program, vs);
179
+ gl.attachShader(program, fs);
180
+ gl.linkProgram(program);
181
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
182
+ const log = gl.getProgramInfoLog(program);
183
+ gl.deleteProgram(program);
184
+ throw new Error(`Pixelate program link failed: ${log ?? "(no log)"}`);
185
+ }
186
+ return program;
187
+ };
188
+ var createPixelateState = (gl) => {
189
+ const vs = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
190
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
191
+ const program = linkProgram(gl, vs, fs);
192
+ gl.deleteShader(vs);
193
+ gl.deleteShader(fs);
194
+ const vao = gl.createVertexArray();
195
+ if (!vao) {
196
+ throw new Error("Failed to create WebGL vertex array");
197
+ }
198
+ gl.bindVertexArray(vao);
199
+ const data = new Float32Array([
200
+ -1,
201
+ -1,
202
+ 0,
203
+ 0,
204
+ 1,
205
+ -1,
206
+ 1,
207
+ 0,
208
+ -1,
209
+ 1,
210
+ 0,
211
+ 1,
212
+ 1,
213
+ 1,
214
+ 1,
215
+ 1
216
+ ]);
217
+ const vbo = gl.createBuffer();
218
+ if (!vbo) {
219
+ throw new Error("Failed to create WebGL buffer");
220
+ }
221
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
222
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
223
+ const aPos = gl.getAttribLocation(program, "aPos");
224
+ const aUv = gl.getAttribLocation(program, "aUv");
225
+ gl.enableVertexAttribArray(aPos);
226
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
227
+ gl.enableVertexAttribArray(aUv);
228
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
229
+ gl.bindVertexArray(null);
230
+ const texture = gl.createTexture();
231
+ if (!texture) {
232
+ throw new Error("Failed to create WebGL texture");
233
+ }
234
+ gl.bindTexture(gl.TEXTURE_2D, texture);
235
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
236
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
237
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
238
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
239
+ gl.bindTexture(gl.TEXTURE_2D, null);
240
+ return {
241
+ gl,
242
+ program,
243
+ vao,
244
+ vbo,
245
+ texture,
246
+ uSource: gl.getUniformLocation(program, "uSource"),
247
+ uResolution: gl.getUniformLocation(program, "uResolution"),
248
+ uBlockSize: gl.getUniformLocation(program, "uBlockSize")
249
+ };
250
+ };
251
+ var pixelate = createEffect({
252
+ type: "dev.remotion.effects.pixelate",
253
+ label: "pixelate()",
254
+ documentationLink: "https://www.remotion.dev/docs/effects/pixelate",
255
+ backend: "webgl2",
256
+ calculateKey: (params) => {
257
+ const r = resolve(params);
258
+ return `pixelate-${r.blockSize}`;
259
+ },
260
+ setup: (target) => {
261
+ const gl = target.getContext("webgl2", {
262
+ premultipliedAlpha: true,
263
+ alpha: true,
264
+ preserveDrawingBuffer: true
265
+ });
266
+ if (!gl) {
267
+ throw createWebGL2ContextError("pixelate effect");
268
+ }
269
+ return createPixelateState(gl);
270
+ },
271
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
272
+ const r = resolve(params);
273
+ state.gl.viewport(0, 0, width, height);
274
+ state.gl.clearColor(0, 0, 0, 0);
275
+ state.gl.clear(state.gl.COLOR_BUFFER_BIT);
276
+ state.gl.useProgram(state.program);
277
+ state.gl.bindVertexArray(state.vao);
278
+ state.gl.bindFramebuffer(state.gl.FRAMEBUFFER, null);
279
+ state.gl.activeTexture(state.gl.TEXTURE0);
280
+ state.gl.bindTexture(state.gl.TEXTURE_2D, state.texture);
281
+ state.gl.pixelStorei(state.gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
282
+ state.gl.pixelStorei(state.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
283
+ state.gl.texImage2D(state.gl.TEXTURE_2D, 0, state.gl.RGBA, state.gl.RGBA, state.gl.UNSIGNED_BYTE, source);
284
+ if (state.uSource)
285
+ state.gl.uniform1i(state.uSource, 0);
286
+ if (state.uBlockSize)
287
+ state.gl.uniform1f(state.uBlockSize, r.blockSize);
288
+ if (state.uResolution)
289
+ state.gl.uniform2f(state.uResolution, width, height);
290
+ state.gl.drawArrays(state.gl.TRIANGLE_STRIP, 0, 4);
291
+ state.gl.bindVertexArray(null);
292
+ state.gl.bindTexture(state.gl.TEXTURE_2D, null);
293
+ state.gl.useProgram(null);
294
+ },
295
+ cleanup: ({ gl, program, vao, vbo, texture }) => {
296
+ gl.deleteTexture(texture);
297
+ gl.deleteBuffer(vbo);
298
+ gl.deleteProgram(program);
299
+ gl.deleteVertexArray(vao);
300
+ },
301
+ schema: pixelateSchema,
302
+ validateParams: validatePixelateParams
303
+ });
304
+ export {
305
+ pixelate
306
+ };
@@ -440,7 +440,7 @@ var updatePalette = (state, colors) => {
440
440
  return true;
441
441
  };
442
442
  var rings = createEffect({
443
- type: "remotion/rings",
443
+ type: "dev.remotion.effects.rings",
444
444
  label: "rings()",
445
445
  documentationLink: "https://www.remotion.dev/docs/effects/rings",
446
446
  backend: "webgl2",
@@ -121,7 +121,7 @@ var validateSaturationParams = (params) => {
121
121
  validateNonNegative(amount, "amount");
122
122
  };
123
123
  var saturation = createEffect({
124
- type: "remotion/saturation",
124
+ type: "dev.remotion.effects.saturation",
125
125
  label: "saturation()",
126
126
  documentationLink: "https://www.remotion.dev/docs/effects/saturation",
127
127
  backend: "2d",
@@ -75,7 +75,7 @@ var validateScaleParams = (params) => {
75
75
  }
76
76
  };
77
77
  var scale = createEffect({
78
- type: "remotion/scale",
78
+ type: "dev.remotion.effects.scale",
79
79
  label: "scale()",
80
80
  documentationLink: "https://www.remotion.dev/docs/effects/scale",
81
81
  backend: "2d",
@@ -343,7 +343,7 @@ var setupScanlines = (target) => {
343
343
  };
344
344
  };
345
345
  var scanlines = createEffect({
346
- type: "remotion/scanlines",
346
+ type: "dev.remotion.effects.scanlines",
347
347
  label: "scanlines()",
348
348
  documentationLink: "https://www.remotion.dev/docs/effects/scanlines",
349
349
  backend: "webgl2",
@@ -264,7 +264,7 @@ var linkProgram = (gl, vs, fs) => {
264
264
  return program;
265
265
  };
266
266
  var shine = createEffect({
267
- type: "remotion/shine",
267
+ type: "dev.remotion.effects.shine",
268
268
  label: "shine()",
269
269
  documentationLink: "https://www.remotion.dev/docs/effects/shine",
270
270
  backend: "webgl2",