@remotion/effects 4.0.507 → 4.0.509

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.
@@ -0,0 +1,384 @@
1
+ // src/white-balance.ts
2
+ import { Internals } from "remotion";
3
+
4
+ // src/color-correction-shader-utils.ts
5
+ var COLOR_SPACE_GLSL = `
6
+ vec3 srgbToLinear(vec3 color) {
7
+ vec3 lower = color / 12.92;
8
+ vec3 upper = pow((color + 0.055) / 1.055, vec3(2.4));
9
+ return mix(lower, upper, step(vec3(0.04045), color));
10
+ }
11
+
12
+ vec3 linearToSrgb(vec3 color) {
13
+ vec3 nonNegative = max(color, vec3(0.0));
14
+ vec3 lower = nonNegative * 12.92;
15
+ vec3 upper = 1.055 * pow(nonNegative, vec3(1.0 / 2.4)) - 0.055;
16
+ return mix(lower, upper, step(vec3(0.0031308), nonNegative));
17
+ }
18
+ `;
19
+ var WHITE_BALANCE_GLSL = `
20
+ vec3 applyWhiteBalanceLinear(vec3 linear, float temperature, float tint) {
21
+ vec3 temperatureOffset = vec3(0.3, 0.0, -0.3) * temperature;
22
+ vec3 tintOffset = vec3(0.15, -0.3, 0.15) * tint;
23
+ vec3 gains = exp2(temperatureOffset + tintOffset);
24
+ float luminanceGain = dot(gains, vec3(0.2126, 0.7152, 0.0722));
25
+ return linear * gains / luminanceGain;
26
+ }
27
+ `;
28
+ var SHADOWS_HIGHLIGHTS_GLSL = `
29
+ float getShadowsHighlightsStops(
30
+ vec3 color,
31
+ float shadows,
32
+ float highlights
33
+ ) {
34
+ float luminance = dot(color, vec3(0.2126, 0.7152, 0.0722));
35
+ float shadowWeight = 1.0 - smoothstep(0.0, 0.6, luminance);
36
+ float highlightWeight = smoothstep(0.4, 1.0, luminance);
37
+ shadowWeight *= shadowWeight;
38
+ highlightWeight *= highlightWeight;
39
+ return shadows * shadowWeight + highlights * highlightWeight;
40
+ }
41
+ `;
42
+ var VIBRANCE_GLSL = `
43
+ vec3 applyVibrance(vec3 color, float amount) {
44
+ float maximum = max(max(color.r, color.g), color.b);
45
+ float minimum = min(min(color.r, color.g), color.b);
46
+ float lightness = (maximum + minimum) * 0.5;
47
+ float chroma = maximum - minimum;
48
+ float saturationDenominator = 1.0 - abs(2.0 * lightness - 1.0);
49
+ float saturation = saturationDenominator <= 0.0
50
+ ? 0.0
51
+ : chroma / saturationDenominator;
52
+
53
+ if (saturation <= 0.000001) {
54
+ return color;
55
+ }
56
+
57
+ float targetSaturation = amount >= 0.0
58
+ ? saturation + amount * (1.0 - saturation)
59
+ : saturation * (1.0 + amount);
60
+ return clamp(
61
+ vec3(lightness) +
62
+ (color - vec3(lightness)) * (targetSaturation / saturation),
63
+ 0.0,
64
+ 1.0
65
+ );
66
+ }
67
+ `;
68
+
69
+ // src/validate-effect-param.ts
70
+ var assertEffectParamsObject = (params, effectLabel) => {
71
+ if (params === null || typeof params !== "object") {
72
+ throw new TypeError(`${effectLabel} effect requires a parameters object, but got ${JSON.stringify(params)}`);
73
+ }
74
+ };
75
+ var assertRequiredFiniteNumber = (value, name) => {
76
+ if (typeof value !== "number" || !Number.isFinite(value)) {
77
+ throw new TypeError(`"${name}" must be a finite number, but got ${JSON.stringify(value)}`);
78
+ }
79
+ };
80
+ var assertRequiredColor = (value, name) => {
81
+ if (typeof value !== "string" || value.length === 0) {
82
+ throw new TypeError(`"${name}" must be a non-empty string, but got ${JSON.stringify(value)}`);
83
+ }
84
+ };
85
+ var assertOptionalColor = (value, name) => {
86
+ if (value === undefined) {
87
+ return;
88
+ }
89
+ assertRequiredColor(value, name);
90
+ };
91
+ var assertOptionalBoolean = (value, name) => {
92
+ if (value === undefined) {
93
+ return;
94
+ }
95
+ if (typeof value !== "boolean") {
96
+ throw new TypeError(`"${name}" must be a boolean, but got ${JSON.stringify(value)}`);
97
+ }
98
+ };
99
+
100
+ // src/color-utils.ts
101
+ var DEFAULT_AMOUNT = 1;
102
+ var DEFAULT_BRIGHTNESS_AMOUNT = 0;
103
+ var DEFAULT_HUE_DEGREES = 0;
104
+ var colorAmountSchema = {
105
+ type: "number",
106
+ min: 0,
107
+ max: 1,
108
+ step: 0.01,
109
+ default: DEFAULT_AMOUNT,
110
+ description: "Amount",
111
+ hiddenFromList: false
112
+ };
113
+ var colorMultiplierSchema = {
114
+ type: "number",
115
+ min: 0,
116
+ step: 0.01,
117
+ default: DEFAULT_AMOUNT,
118
+ description: "Amount",
119
+ hiddenFromList: false
120
+ };
121
+ var brightnessAmountSchema = {
122
+ type: "number",
123
+ min: -1,
124
+ max: 1,
125
+ step: 0.01,
126
+ default: DEFAULT_BRIGHTNESS_AMOUNT,
127
+ description: "Amount",
128
+ hiddenFromList: false
129
+ };
130
+ var hueDegreesSchema = {
131
+ type: "rotation-degrees",
132
+ step: 1,
133
+ default: DEFAULT_HUE_DEGREES,
134
+ description: "Degrees"
135
+ };
136
+ var assertOptionalFiniteNumber = (value, name) => {
137
+ if (value === undefined) {
138
+ return;
139
+ }
140
+ assertRequiredFiniteNumber(value, name);
141
+ };
142
+ var validateUnitInterval = (value, name) => {
143
+ if (value < 0) {
144
+ throw new TypeError(`"${name}" must be >= 0, but got ${JSON.stringify(value)}`);
145
+ }
146
+ if (value > 1) {
147
+ throw new TypeError(`"${name}" must be <= 1, but got ${JSON.stringify(value)}`);
148
+ }
149
+ };
150
+ var validateNonNegative = (value, name) => {
151
+ if (value < 0) {
152
+ throw new TypeError(`"${name}" must be >= 0, but got ${JSON.stringify(value)}`);
153
+ }
154
+ };
155
+ var validateSignedUnitInterval = (value, name) => {
156
+ if (value < -1) {
157
+ throw new TypeError(`"${name}" must be >= -1, but got ${JSON.stringify(value)}`);
158
+ }
159
+ if (value > 1) {
160
+ throw new TypeError(`"${name}" must be <= 1, but got ${JSON.stringify(value)}`);
161
+ }
162
+ };
163
+ var clampColorChannel = (value) => {
164
+ return Math.max(0, Math.min(255, value));
165
+ };
166
+ var parseColorRgba = (ctx, color) => {
167
+ ctx.clearRect(0, 0, 1, 1);
168
+ ctx.fillStyle = color;
169
+ ctx.fillRect(0, 0, 1, 1);
170
+ const { data } = ctx.getImageData(0, 0, 1, 1);
171
+ return [data[0], data[1], data[2], data[3]];
172
+ };
173
+
174
+ // src/white-balance.ts
175
+ var { createEffect, createWebGL2ContextError } = Internals;
176
+ var DEFAULT_TEMPERATURE = 0;
177
+ var DEFAULT_TINT = 0;
178
+ var whiteBalanceSchema = {
179
+ temperature: {
180
+ type: "number",
181
+ min: -1,
182
+ max: 1,
183
+ step: 0.01,
184
+ default: DEFAULT_TEMPERATURE,
185
+ description: "Temperature",
186
+ hiddenFromList: false
187
+ },
188
+ tint: {
189
+ type: "number",
190
+ min: -1,
191
+ max: 1,
192
+ step: 0.01,
193
+ default: DEFAULT_TINT,
194
+ description: "Tint",
195
+ hiddenFromList: false
196
+ }
197
+ };
198
+ var resolve = (params) => ({
199
+ temperature: params.temperature ?? DEFAULT_TEMPERATURE,
200
+ tint: params.tint ?? DEFAULT_TINT
201
+ });
202
+ var validateWhiteBalanceParams = (params) => {
203
+ assertEffectParamsObject(params, "White balance");
204
+ assertOptionalFiniteNumber(params.temperature, "temperature");
205
+ assertOptionalFiniteNumber(params.tint, "tint");
206
+ const { temperature, tint } = resolve(params);
207
+ validateSignedUnitInterval(temperature, "temperature");
208
+ validateSignedUnitInterval(tint, "tint");
209
+ };
210
+ var VERTEX_SHADER = `#version 300 es
211
+ in vec2 aPos;
212
+ in vec2 aUv;
213
+ out vec2 vUv;
214
+
215
+ void main() {
216
+ vUv = aUv;
217
+ gl_Position = vec4(aPos, 0.0, 1.0);
218
+ }
219
+ `;
220
+ var FRAGMENT_SHADER = `#version 300 es
221
+ precision highp float;
222
+
223
+ in vec2 vUv;
224
+ out vec4 fragColor;
225
+
226
+ uniform sampler2D uSource;
227
+ uniform float uTemperature;
228
+ uniform float uTint;
229
+
230
+ ${COLOR_SPACE_GLSL}
231
+ ${WHITE_BALANCE_GLSL}
232
+
233
+ void main() {
234
+ vec4 sourceColor = texture(uSource, vUv);
235
+ float alpha = sourceColor.a;
236
+
237
+ if (alpha <= 0.0) {
238
+ fragColor = vec4(0.0);
239
+ return;
240
+ }
241
+
242
+ vec3 unpremultiplied = sourceColor.rgb / alpha;
243
+ vec3 linear = srgbToLinear(unpremultiplied);
244
+ vec3 balanced = applyWhiteBalanceLinear(linear, uTemperature, uTint);
245
+ vec3 corrected = linearToSrgb(balanced);
246
+
247
+ fragColor = vec4(corrected * alpha, alpha);
248
+ }
249
+ `;
250
+ var compileShader = (gl, type, source) => {
251
+ const shader = gl.createShader(type);
252
+ if (!shader) {
253
+ throw new Error("Failed to create white balance shader");
254
+ }
255
+ gl.shaderSource(shader, source);
256
+ gl.compileShader(shader);
257
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
258
+ const log = gl.getShaderInfoLog(shader);
259
+ gl.deleteShader(shader);
260
+ throw new Error(`White balance shader compile failed: ${log ?? "(no log)"}`);
261
+ }
262
+ return shader;
263
+ };
264
+ var createProgram = (gl) => {
265
+ const vertexShader = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
266
+ const fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
267
+ const program = gl.createProgram();
268
+ if (!program) {
269
+ throw new Error("Failed to create white balance shader program");
270
+ }
271
+ gl.attachShader(program, vertexShader);
272
+ gl.attachShader(program, fragmentShader);
273
+ gl.linkProgram(program);
274
+ gl.deleteShader(vertexShader);
275
+ gl.deleteShader(fragmentShader);
276
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
277
+ const log = gl.getProgramInfoLog(program);
278
+ gl.deleteProgram(program);
279
+ throw new Error(`White balance shader link failed: ${log ?? "(no log)"}`);
280
+ }
281
+ return program;
282
+ };
283
+ var createTexture = (gl) => {
284
+ const texture = gl.createTexture();
285
+ if (!texture) {
286
+ throw new Error("Failed to create white balance texture");
287
+ }
288
+ gl.bindTexture(gl.TEXTURE_2D, texture);
289
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
290
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
291
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
292
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
293
+ gl.bindTexture(gl.TEXTURE_2D, null);
294
+ return texture;
295
+ };
296
+ var setupWhiteBalance = (target) => {
297
+ const gl = target.getContext("webgl2", {
298
+ premultipliedAlpha: true,
299
+ alpha: true,
300
+ preserveDrawingBuffer: true
301
+ });
302
+ if (!gl) {
303
+ throw createWebGL2ContextError("white balance effect");
304
+ }
305
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
306
+ const program = createProgram(gl);
307
+ const vao = gl.createVertexArray();
308
+ if (!vao) {
309
+ throw new Error("Failed to create white balance vertex array");
310
+ }
311
+ const vbo = gl.createBuffer();
312
+ if (!vbo) {
313
+ throw new Error("Failed to create white balance vertex buffer");
314
+ }
315
+ gl.bindVertexArray(vao);
316
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
317
+ 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);
318
+ const aPos = gl.getAttribLocation(program, "aPos");
319
+ const aUv = gl.getAttribLocation(program, "aUv");
320
+ gl.enableVertexAttribArray(aPos);
321
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
322
+ gl.enableVertexAttribArray(aUv);
323
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
324
+ gl.bindVertexArray(null);
325
+ return {
326
+ gl,
327
+ program,
328
+ vao,
329
+ vbo,
330
+ textureSource: createTexture(gl),
331
+ uniforms: {
332
+ uSource: gl.getUniformLocation(program, "uSource"),
333
+ uTemperature: gl.getUniformLocation(program, "uTemperature"),
334
+ uTint: gl.getUniformLocation(program, "uTint")
335
+ }
336
+ };
337
+ };
338
+ var whiteBalance = createEffect({
339
+ type: "remotion/white-balance",
340
+ label: "whiteBalance()",
341
+ documentationLink: "https://www.remotion.dev/docs/effects/white-balance",
342
+ backend: "webgl2",
343
+ calculateKey: (params) => {
344
+ const { temperature, tint } = resolve(params);
345
+ return `white-balance-${temperature}-${tint}`;
346
+ },
347
+ setup: setupWhiteBalance,
348
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
349
+ const { temperature, tint } = resolve(params);
350
+ const { gl, program, textureSource, uniforms, vao } = state;
351
+ gl.viewport(0, 0, width, height);
352
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
353
+ gl.clearColor(0, 0, 0, 0);
354
+ gl.clear(gl.COLOR_BUFFER_BIT);
355
+ gl.activeTexture(gl.TEXTURE0);
356
+ gl.bindTexture(gl.TEXTURE_2D, textureSource);
357
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
358
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
359
+ gl.useProgram(program);
360
+ if (uniforms.uSource)
361
+ gl.uniform1i(uniforms.uSource, 0);
362
+ if (uniforms.uTemperature) {
363
+ gl.uniform1f(uniforms.uTemperature, temperature);
364
+ }
365
+ if (uniforms.uTint)
366
+ gl.uniform1f(uniforms.uTint, tint);
367
+ gl.bindVertexArray(vao);
368
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
369
+ gl.bindVertexArray(null);
370
+ gl.bindTexture(gl.TEXTURE_2D, null);
371
+ gl.useProgram(null);
372
+ },
373
+ cleanup: ({ gl, program, vao, vbo, textureSource }) => {
374
+ gl.deleteTexture(textureSource);
375
+ gl.deleteBuffer(vbo);
376
+ gl.deleteProgram(program);
377
+ gl.deleteVertexArray(vao);
378
+ },
379
+ schema: whiteBalanceSchema,
380
+ validateParams: validateWhiteBalanceParams
381
+ });
382
+ export {
383
+ whiteBalance
384
+ };
@@ -0,0 +1,7 @@
1
+ export type ExposureParams = {
2
+ /** Exposure adjustment in stops, from `-5` to `5`. Defaults to `0`. */
3
+ readonly stops?: number;
4
+ };
5
+ export declare const exposure: (params?: (ExposureParams & {
6
+ readonly disabled?: boolean | undefined;
7
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
@@ -0,0 +1,11 @@
1
+ export type LevelsParams = {
2
+ /** Input value mapped to black, from `0` to `1`. Defaults to `0`. */
3
+ readonly blackPoint?: number;
4
+ /** Input value mapped to white, from `0` to `1`. Defaults to `1`. */
5
+ readonly whitePoint?: number;
6
+ /** Midtone gamma from `0.01` to `10`. Defaults to `1`. */
7
+ readonly gamma?: number;
8
+ };
9
+ export declare const levels: (params?: (LevelsParams & {
10
+ readonly disabled?: boolean | undefined;
11
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
@@ -0,0 +1,9 @@
1
+ export type ShadowsHighlightsParams = {
2
+ /** Shadow adjustment from `-1` to `1`. Defaults to `0`. */
3
+ readonly shadows?: number;
4
+ /** Highlight adjustment from `-1` to `1`. Defaults to `0`. */
5
+ readonly highlights?: number;
6
+ };
7
+ export declare const shadowsHighlights: (params?: (ShadowsHighlightsParams & {
8
+ readonly disabled?: boolean | undefined;
9
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
@@ -0,0 +1,7 @@
1
+ export type VibranceParams = {
2
+ /** Vibrance adjustment from `-1` to `1`. Defaults to `0`. */
3
+ readonly amount?: number;
4
+ };
5
+ export declare const vibrance: (params?: (VibranceParams & {
6
+ readonly disabled?: boolean | undefined;
7
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
@@ -0,0 +1,9 @@
1
+ export type WhiteBalanceParams = {
2
+ /** Blue-to-amber temperature adjustment from `-1` to `1`. Defaults to `0`. */
3
+ readonly temperature?: number;
4
+ /** Green-to-magenta tint adjustment from `-1` to `1`. Defaults to `0`. */
5
+ readonly tint?: number;
6
+ };
7
+ export declare const whiteBalance: (params?: (WhiteBalanceParams & {
8
+ readonly disabled?: boolean | undefined;
9
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/effects",
3
- "version": "4.0.507",
3
+ "version": "4.0.509",
4
4
  "description": "Effects that can be applied to Remotion-based canvas components",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  "url": "https://github.com/remotion-dev/remotion/issues"
27
27
  },
28
28
  "dependencies": {
29
- "remotion": "4.0.507"
29
+ "remotion": "4.0.509"
30
30
  },
31
31
  "exports": {
32
32
  ".": {
@@ -69,6 +69,11 @@
69
69
  "module": "./dist/esm/color-key.mjs",
70
70
  "import": "./dist/esm/color-key.mjs"
71
71
  },
72
+ "./color-correction": {
73
+ "types": "./dist/color-correction.d.ts",
74
+ "module": "./dist/esm/color-correction.mjs",
75
+ "import": "./dist/esm/color-correction.mjs"
76
+ },
72
77
  "./brightness": {
73
78
  "types": "./dist/brightness.d.ts",
74
79
  "module": "./dist/esm/brightness.mjs",
@@ -104,6 +109,11 @@
104
109
  "module": "./dist/esm/evolve.mjs",
105
110
  "import": "./dist/esm/evolve.mjs"
106
111
  },
112
+ "./exposure": {
113
+ "types": "./dist/exposure.d.ts",
114
+ "module": "./dist/esm/exposure.mjs",
115
+ "import": "./dist/esm/exposure.mjs"
116
+ },
107
117
  "./fisheye": {
108
118
  "types": "./dist/fisheye.d.ts",
109
119
  "module": "./dist/esm/fisheye.mjs",
@@ -189,6 +199,11 @@
189
199
  "module": "./dist/esm/linear-progressive-pixelate.mjs",
190
200
  "import": "./dist/esm/linear-progressive-pixelate.mjs"
191
201
  },
202
+ "./levels": {
203
+ "types": "./dist/levels.d.ts",
204
+ "module": "./dist/esm/levels.mjs",
205
+ "import": "./dist/esm/levels.mjs"
206
+ },
192
207
  "./light-leak": {
193
208
  "types": "./dist/light-leak.d.ts",
194
209
  "module": "./dist/esm/light-leak.mjs",
@@ -269,6 +284,11 @@
269
284
  "module": "./dist/esm/scale.mjs",
270
285
  "import": "./dist/esm/scale.mjs"
271
286
  },
287
+ "./shadows-highlights": {
288
+ "types": "./dist/shadows-highlights.d.ts",
289
+ "module": "./dist/esm/shadows-highlights.mjs",
290
+ "import": "./dist/esm/shadows-highlights.mjs"
291
+ },
272
292
  "./shine": {
273
293
  "types": "./dist/shine.d.ts",
274
294
  "module": "./dist/esm/shine.mjs",
@@ -319,6 +339,11 @@
319
339
  "module": "./dist/esm/venetian-blinds.mjs",
320
340
  "import": "./dist/esm/venetian-blinds.mjs"
321
341
  },
342
+ "./vibrance": {
343
+ "types": "./dist/vibrance.d.ts",
344
+ "module": "./dist/esm/vibrance.mjs",
345
+ "import": "./dist/esm/vibrance.mjs"
346
+ },
322
347
  "./vignette": {
323
348
  "types": "./dist/vignette.d.ts",
324
349
  "module": "./dist/esm/vignette.mjs",
@@ -334,6 +359,11 @@
334
359
  "module": "./dist/esm/waves.mjs",
335
360
  "import": "./dist/esm/waves.mjs"
336
361
  },
362
+ "./white-balance": {
363
+ "types": "./dist/white-balance.d.ts",
364
+ "module": "./dist/esm/white-balance.mjs",
365
+ "import": "./dist/esm/white-balance.mjs"
366
+ },
337
367
  "./white-noise": {
338
368
  "types": "./dist/white-noise.d.ts",
339
369
  "module": "./dist/esm/white-noise.mjs",
@@ -374,6 +404,9 @@
374
404
  "color-key": [
375
405
  "dist/color-key.d.ts"
376
406
  ],
407
+ "color-correction": [
408
+ "dist/color-correction.d.ts"
409
+ ],
377
410
  "brightness": [
378
411
  "dist/brightness.d.ts"
379
412
  ],
@@ -395,6 +428,9 @@
395
428
  "evolve": [
396
429
  "dist/evolve.d.ts"
397
430
  ],
431
+ "exposure": [
432
+ "dist/exposure.d.ts"
433
+ ],
398
434
  "fisheye": [
399
435
  "dist/fisheye.d.ts"
400
436
  ],
@@ -446,6 +482,9 @@
446
482
  "linear-progressive-pixelate": [
447
483
  "dist/linear-progressive-pixelate.d.ts"
448
484
  ],
485
+ "levels": [
486
+ "dist/levels.d.ts"
487
+ ],
449
488
  "light-leak": [
450
489
  "dist/light-leak.d.ts"
451
490
  ],
@@ -494,6 +533,9 @@
494
533
  "scale": [
495
534
  "dist/scale.d.ts"
496
535
  ],
536
+ "shadows-highlights": [
537
+ "dist/shadows-highlights.d.ts"
538
+ ],
497
539
  "shine": [
498
540
  "dist/shine.d.ts"
499
541
  ],
@@ -524,6 +566,9 @@
524
566
  "venetian-blinds": [
525
567
  "dist/venetian-blinds.d.ts"
526
568
  ],
569
+ "vibrance": [
570
+ "dist/vibrance.d.ts"
571
+ ],
527
572
  "vignette": [
528
573
  "dist/vignette.d.ts"
529
574
  ],
@@ -536,6 +581,9 @@
536
581
  "zigzag": [
537
582
  "dist/zigzag.d.ts"
538
583
  ],
584
+ "white-balance": [
585
+ "dist/white-balance.d.ts"
586
+ ],
539
587
  "white-noise": [
540
588
  "dist/white-noise.d.ts"
541
589
  ],
@@ -546,7 +594,7 @@
546
594
  },
547
595
  "homepage": "https://www.remotion.dev/docs/effects/api",
548
596
  "devDependencies": {
549
- "@remotion/eslint-config-internal": "4.0.507",
597
+ "@remotion/eslint-config-internal": "4.0.509",
550
598
  "@vitest/browser-playwright": "4.0.9",
551
599
  "eslint": "9.19.0",
552
600
  "vitest": "4.0.9",