@remotion/effects 4.0.475 → 4.0.477

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,317 @@
1
+ // src/tv-signal-off.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/tv-signal-off.ts
110
+ var { createEffect, createWebGL2ContextError } = Internals;
111
+ var DEFAULT_AMOUNT2 = 1;
112
+ var tvSignalOffSchema = {
113
+ amount: {
114
+ type: "number",
115
+ min: 0,
116
+ max: 1,
117
+ step: 0.01,
118
+ default: DEFAULT_AMOUNT2,
119
+ description: "Amount",
120
+ hiddenFromList: false
121
+ }
122
+ };
123
+ var resolve = (params) => ({
124
+ amount: params.amount ?? DEFAULT_AMOUNT2
125
+ });
126
+ var validateTvSignalOffParams = (params) => {
127
+ assertEffectParamsObject(params, "TV signal off");
128
+ assertOptionalFiniteNumber(params.amount, "amount");
129
+ validateUnitInterval(params.amount ?? DEFAULT_AMOUNT2, "amount");
130
+ };
131
+ var VERTEX_SHADER = `#version 300 es
132
+ in vec2 aPos;
133
+ in vec2 aUv;
134
+ out vec2 vUv;
135
+
136
+ void main() {
137
+ vUv = aUv;
138
+ gl_Position = vec4(aPos, 0.0, 1.0);
139
+ }
140
+ `;
141
+ var FRAGMENT_SHADER = `#version 300 es
142
+ precision highp float;
143
+
144
+ in vec2 vUv;
145
+ out vec4 fragColor;
146
+
147
+ uniform sampler2D uSource;
148
+ uniform float uAmount;
149
+
150
+ vec3 topBar(float x) {
151
+ if (x < 1.0 / 7.0) return vec3(0.74);
152
+ if (x < 2.0 / 7.0) return vec3(1.0, 1.0, 0.0);
153
+ if (x < 3.0 / 7.0) return vec3(0.0, 1.0, 1.0);
154
+ if (x < 4.0 / 7.0) return vec3(0.0, 1.0, 0.0);
155
+ if (x < 5.0 / 7.0) return vec3(1.0, 0.0, 1.0);
156
+ if (x < 6.0 / 7.0) return vec3(1.0, 0.0, 0.0);
157
+ return vec3(0.0, 0.0, 1.0);
158
+ }
159
+
160
+ vec3 middleBar(float x) {
161
+ if (x < 1.0 / 7.0) return vec3(0.0, 0.0, 1.0);
162
+ if (x < 2.0 / 7.0) return vec3(0.0);
163
+ if (x < 3.0 / 7.0) return vec3(1.0, 0.0, 1.0);
164
+ if (x < 4.0 / 7.0) return vec3(0.0);
165
+ if (x < 5.0 / 7.0) return vec3(0.0, 1.0, 1.0);
166
+ if (x < 6.0 / 7.0) return vec3(0.0);
167
+ return vec3(0.74);
168
+ }
169
+
170
+ vec3 tvPattern(vec2 uv) {
171
+ if (uv.y < 0.64) {
172
+ return topBar(uv.x);
173
+ }
174
+
175
+ if (uv.y < 0.76) {
176
+ return middleBar(uv.x);
177
+ }
178
+
179
+ if (uv.y < 0.88) {
180
+ if (uv.x < 0.58) return vec3(1.0);
181
+ float ramp = smoothstep(0.58, 1.0, uv.x);
182
+ return vec3(1.0 - ramp);
183
+ }
184
+
185
+ if (uv.x < 0.58) {
186
+ float stepValue = floor(uv.x * 12.0) / 11.0;
187
+ return vec3(stepValue);
188
+ }
189
+
190
+ return vec3(0.0);
191
+ }
192
+
193
+ void main() {
194
+ vec4 color = texture(uSource, vUv);
195
+ vec3 sourceColor = color.a == 0.0 ? vec3(0.0) : color.rgb / color.a;
196
+ vec3 bars = tvPattern(vUv);
197
+ vec3 mixed = mix(sourceColor, bars, uAmount);
198
+
199
+ fragColor = vec4(mixed * color.a, color.a);
200
+ }
201
+ `;
202
+ var compileShader = (gl, type, source) => {
203
+ const shader = gl.createShader(type);
204
+ if (!shader) {
205
+ throw new Error("Failed to create shader");
206
+ }
207
+ gl.shaderSource(shader, source);
208
+ gl.compileShader(shader);
209
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
210
+ const info = gl.getShaderInfoLog(shader) ?? "Unknown shader compile error";
211
+ gl.deleteShader(shader);
212
+ throw new Error(info);
213
+ }
214
+ return shader;
215
+ };
216
+ var createProgram = (gl, vertexSource, fragmentSource) => {
217
+ const vertex = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
218
+ const fragment = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
219
+ const program = gl.createProgram();
220
+ if (!program) {
221
+ throw new Error("Failed to create program");
222
+ }
223
+ gl.attachShader(program, vertex);
224
+ gl.attachShader(program, fragment);
225
+ gl.linkProgram(program);
226
+ gl.deleteShader(vertex);
227
+ gl.deleteShader(fragment);
228
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
229
+ const info = gl.getProgramInfoLog(program) ?? "Unknown program link error";
230
+ gl.deleteProgram(program);
231
+ throw new Error(info);
232
+ }
233
+ return program;
234
+ };
235
+ var createTvSignalOffState = (gl, vertexSource, fragmentSource) => {
236
+ const program = createProgram(gl, vertexSource, fragmentSource);
237
+ const vao = gl.createVertexArray();
238
+ const vbo = gl.createBuffer();
239
+ const texture = gl.createTexture();
240
+ if (!vao || !vbo || !texture) {
241
+ throw new Error("Failed to create WebGL resources");
242
+ }
243
+ gl.bindVertexArray(vao);
244
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
245
+ 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);
246
+ const aPos = gl.getAttribLocation(program, "aPos");
247
+ const aUv = gl.getAttribLocation(program, "aUv");
248
+ gl.enableVertexAttribArray(aPos);
249
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
250
+ gl.enableVertexAttribArray(aUv);
251
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
252
+ gl.bindTexture(gl.TEXTURE_2D, texture);
253
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
254
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
255
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
256
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
257
+ return {
258
+ gl,
259
+ program,
260
+ vao,
261
+ vbo,
262
+ texture,
263
+ uSource: gl.getUniformLocation(program, "uSource"),
264
+ uAmount: gl.getUniformLocation(program, "uAmount")
265
+ };
266
+ };
267
+ var tvSignalOff = createEffect({
268
+ type: "remotion/tv-signal-off",
269
+ label: "tvSignalOff()",
270
+ documentationLink: "https://www.remotion.dev/docs/effects/tv-signal-off",
271
+ backend: "webgl2",
272
+ calculateKey: (params) => {
273
+ const resolved = resolve(params);
274
+ return `tv-signal-off-${resolved.amount}`;
275
+ },
276
+ setup: (target) => {
277
+ const gl = target.getContext("webgl2", {
278
+ premultipliedAlpha: true,
279
+ alpha: true,
280
+ preserveDrawingBuffer: true
281
+ });
282
+ if (!gl) {
283
+ throw createWebGL2ContextError("TV signal off effect");
284
+ }
285
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
286
+ return createTvSignalOffState(gl, VERTEX_SHADER, FRAGMENT_SHADER);
287
+ },
288
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
289
+ const resolved = resolve(params);
290
+ state.gl.viewport(0, 0, width, height);
291
+ state.gl.bindFramebuffer(state.gl.FRAMEBUFFER, null);
292
+ state.gl.activeTexture(state.gl.TEXTURE0);
293
+ state.gl.bindTexture(state.gl.TEXTURE_2D, state.texture);
294
+ state.gl.pixelStorei(state.gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
295
+ state.gl.texImage2D(state.gl.TEXTURE_2D, 0, state.gl.RGBA, state.gl.RGBA, state.gl.UNSIGNED_BYTE, source);
296
+ state.gl.useProgram(state.program);
297
+ if (state.uSource) {
298
+ state.gl.uniform1i(state.uSource, 0);
299
+ }
300
+ if (state.uAmount) {
301
+ state.gl.uniform1f(state.uAmount, resolved.amount);
302
+ }
303
+ state.gl.bindVertexArray(state.vao);
304
+ state.gl.drawArrays(state.gl.TRIANGLE_STRIP, 0, 4);
305
+ },
306
+ cleanup: ({ gl, program, vao, vbo, texture }) => {
307
+ gl.deleteTexture(texture);
308
+ gl.deleteBuffer(vbo);
309
+ gl.deleteProgram(program);
310
+ gl.deleteVertexArray(vao);
311
+ },
312
+ schema: tvSignalOffSchema,
313
+ validateParams: validateTvSignalOffParams
314
+ });
315
+ export {
316
+ tvSignalOff
317
+ };
@@ -106,6 +106,11 @@ var parseColorRgba = (ctx, color) => {
106
106
  return [data[0], data[1], data[2], data[3]];
107
107
  };
108
108
 
109
+ // src/uv-coordinate.ts
110
+ var publicUvToShaderUv = (uv) => {
111
+ return [uv[0], 1 - uv[1]];
112
+ };
113
+
109
114
  // src/vignette.ts
110
115
  var { createEffect, createWebGL2ContextError } = Internals;
111
116
  var VIGNETTE_MODES = ["color", "alpha"];
@@ -452,8 +457,10 @@ var vignette = createEffect({
452
457
  gl.uniform4f(uniforms.uColor, red, green, blue, alpha);
453
458
  if (uniforms.uMode)
454
459
  gl.uniform1i(uniforms.uMode, r.mode === "alpha" ? 1 : 0);
455
- if (uniforms.uCenter)
456
- gl.uniform2f(uniforms.uCenter, r.center[0], r.center[1]);
460
+ if (uniforms.uCenter) {
461
+ const shaderCenter = publicUvToShaderUv(r.center);
462
+ gl.uniform2f(uniforms.uCenter, shaderCenter[0], shaderCenter[1]);
463
+ }
457
464
  gl.bindVertexArray(vao);
458
465
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
459
466
  gl.bindVertexArray(null);
@@ -120,6 +120,17 @@ var DEFAULT_WAVELENGTH = 160;
120
120
  var DEFAULT_PHASE = 0;
121
121
  var DEFAULT_MASK_TO_SOURCE_ALPHA = false;
122
122
  var wavesSchema = {
123
+ colors: {
124
+ type: "array",
125
+ item: {
126
+ type: "color"
127
+ },
128
+ default: DEFAULT_COLORS,
129
+ minLength: 2,
130
+ newItemDefault: "#ff0000",
131
+ description: "Colors",
132
+ keyframable: false
133
+ },
123
134
  direction: {
124
135
  type: "enum",
125
136
  variants: {
@@ -119,6 +119,17 @@ var DEFAULT_AMPLITUDE = 40;
119
119
  var DEFAULT_WAVELENGTH = 160;
120
120
  var DEFAULT_MASK_TO_SOURCE_ALPHA = false;
121
121
  var zigzagSchema = {
122
+ colors: {
123
+ type: "array",
124
+ item: {
125
+ type: "color"
126
+ },
127
+ default: DEFAULT_COLORS,
128
+ minLength: 2,
129
+ newItemDefault: "#ff0000",
130
+ description: "Colors",
131
+ keyframable: false
132
+ },
122
133
  direction: {
123
134
  type: "enum",
124
135
  variants: {
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ export { pattern, type PatternOrigin, type PatternParams } from './pattern.js';
1
2
  export { rings, type RingsCenter, type RingsParams } from './rings.js';
2
3
  export { zigzag, type ZigzagDirection, type ZigzagParams } from './zigzag.js';
package/dist/lines.d.ts CHANGED
@@ -1,5 +1,16 @@
1
1
  declare const LINE_DIRECTIONS: readonly ["horizontal", "vertical"];
2
2
  export declare const linesSchema: {
3
+ readonly colors: {
4
+ readonly type: "array";
5
+ readonly item: {
6
+ readonly type: "color";
7
+ };
8
+ readonly default: readonly ["#dff4ff", "#7cc6ff"];
9
+ readonly minLength: 2;
10
+ readonly newItemDefault: "#ff0000";
11
+ readonly description: "Colors";
12
+ readonly keyframable: false;
13
+ };
3
14
  readonly direction: {
4
15
  readonly type: "enum";
5
16
  readonly variants: {
@@ -0,0 +1,33 @@
1
+ export type PatternOrigin = readonly [number, number];
2
+ export type PatternParams = {
3
+ /** Scale of each repeated tile. Defaults to `0.1`. */
4
+ readonly scale?: number;
5
+ /** Crops the source before it is scaled into the repeated tile. */
6
+ readonly cropLeft?: number;
7
+ readonly cropTop?: number;
8
+ readonly cropRight?: number;
9
+ readonly cropBottom?: number;
10
+ /** Horizontal space between tiles in pixels. Defaults to `0`. */
11
+ readonly gapX?: number;
12
+ /** Vertical space between tiles in pixels. Defaults to `0`. */
13
+ readonly gapY?: number;
14
+ /** Horizontal pattern offset in UV coordinates. Defaults to `0`. */
15
+ readonly offsetU?: number;
16
+ /** Vertical pattern offset in UV coordinates. Defaults to `0`. */
17
+ readonly offsetV?: number;
18
+ /** Horizontal offset added per row in pixels. Defaults to `0`. */
19
+ readonly rowOffset?: number;
20
+ /** Number of rows after which `rowOffset` repeats. Defaults to `0`, meaning it never repeats. */
21
+ readonly rowOffsetEvery?: number;
22
+ /** Vertical offset added per column in pixels. Defaults to `0`. */
23
+ readonly columnOffset?: number;
24
+ /** Number of columns after which `columnOffset` repeats. Defaults to `0`, meaning it never repeats. */
25
+ readonly columnOffsetEvery?: number;
26
+ /** Pattern origin in UV coordinates. Defaults to `[0, 0]`. */
27
+ readonly origin?: PatternOrigin;
28
+ /** Whether tiles before the origin are rendered. Defaults to `true`. */
29
+ readonly wrap?: boolean;
30
+ };
31
+ export declare const pattern: (params?: (PatternParams & {
32
+ readonly disabled?: boolean | undefined;
33
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
package/dist/rings.d.ts CHANGED
@@ -1,4 +1,15 @@
1
1
  export declare const ringsSchema: {
2
+ readonly colors: {
3
+ readonly type: "array";
4
+ readonly item: {
5
+ readonly type: "color";
6
+ };
7
+ readonly default: readonly ["#dff4ff", "#7cc6ff"];
8
+ readonly minLength: 2;
9
+ readonly newItemDefault: "#ff0000";
10
+ readonly description: "Colors";
11
+ readonly keyframable: false;
12
+ };
2
13
  readonly center: {
3
14
  readonly type: "uv-coordinate";
4
15
  readonly min: 0;
@@ -0,0 +1,7 @@
1
+ export type TvSignalOffParams = {
2
+ /** Blend amount from `0` to `1`. Defaults to `1`. */
3
+ readonly amount?: number;
4
+ };
5
+ export declare const tvSignalOff: (params?: (TvSignalOffParams & {
6
+ readonly disabled?: boolean | undefined;
7
+ }) | undefined) => import("remotion").EffectDescriptor<unknown>;
@@ -0,0 +1,2 @@
1
+ export type UvCoordinate = readonly [number, number];
2
+ export declare const publicUvToShaderUv: (uv: UvCoordinate) => readonly [number, number];
package/dist/waves.d.ts CHANGED
@@ -1,5 +1,16 @@
1
1
  declare const WAVE_DIRECTIONS: readonly ["horizontal", "vertical"];
2
2
  export declare const wavesSchema: {
3
+ readonly colors: {
4
+ readonly type: "array";
5
+ readonly item: {
6
+ readonly type: "color";
7
+ };
8
+ readonly default: readonly ["#dff4ff", "#7cc6ff"];
9
+ readonly minLength: 2;
10
+ readonly newItemDefault: "#ff0000";
11
+ readonly description: "Colors";
12
+ readonly keyframable: false;
13
+ };
3
14
  readonly direction: {
4
15
  readonly type: "enum";
5
16
  readonly variants: {
package/dist/zigzag.d.ts CHANGED
@@ -1,5 +1,16 @@
1
1
  declare const ZIGZAG_DIRECTIONS: readonly ["horizontal", "vertical"];
2
2
  export declare const zigzagSchema: {
3
+ readonly colors: {
4
+ readonly type: "array";
5
+ readonly item: {
6
+ readonly type: "color";
7
+ };
8
+ readonly default: readonly ["#dff4ff", "#7cc6ff"];
9
+ readonly minLength: 2;
10
+ readonly newItemDefault: "#ff0000";
11
+ readonly description: "Colors";
12
+ readonly keyframable: false;
13
+ };
3
14
  readonly direction: {
4
15
  readonly type: "enum";
5
16
  readonly variants: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/effects",
3
- "version": "4.0.475",
3
+ "version": "4.0.477",
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.475"
29
+ "remotion": "4.0.477"
30
30
  },
31
31
  "exports": {
32
32
  ".": {
@@ -149,6 +149,11 @@
149
149
  "module": "./dist/esm/noise-displacement.mjs",
150
150
  "import": "./dist/esm/noise-displacement.mjs"
151
151
  },
152
+ "./pattern": {
153
+ "types": "./dist/pattern.d.ts",
154
+ "module": "./dist/esm/pattern.mjs",
155
+ "import": "./dist/esm/pattern.mjs"
156
+ },
152
157
  "./rings": {
153
158
  "types": "./dist/rings.d.ts",
154
159
  "module": "./dist/esm/rings.mjs",
@@ -189,6 +194,11 @@
189
194
  "module": "./dist/esm/translate.mjs",
190
195
  "import": "./dist/esm/translate.mjs"
191
196
  },
197
+ "./tv-signal-off": {
198
+ "types": "./dist/tv-signal-off.d.ts",
199
+ "module": "./dist/esm/tv-signal-off.mjs",
200
+ "import": "./dist/esm/tv-signal-off.mjs"
201
+ },
192
202
  "./vignette": {
193
203
  "types": "./dist/vignette.d.ts",
194
204
  "module": "./dist/esm/vignette.mjs",
@@ -287,6 +297,9 @@
287
297
  "noise-displacement": [
288
298
  "dist/noise-displacement.d.ts"
289
299
  ],
300
+ "pattern": [
301
+ "dist/pattern.d.ts"
302
+ ],
290
303
  "rings": [
291
304
  "dist/rings.d.ts"
292
305
  ],
@@ -311,6 +324,9 @@
311
324
  "translate": [
312
325
  "dist/translate.d.ts"
313
326
  ],
327
+ "tv-signal-off": [
328
+ "dist/tv-signal-off.d.ts"
329
+ ],
314
330
  "vignette": [
315
331
  "dist/vignette.d.ts"
316
332
  ],
@@ -330,7 +346,7 @@
330
346
  },
331
347
  "homepage": "https://www.remotion.dev/docs/effects/api",
332
348
  "devDependencies": {
333
- "@remotion/eslint-config-internal": "4.0.475",
349
+ "@remotion/eslint-config-internal": "4.0.477",
334
350
  "@vitest/browser-playwright": "4.0.9",
335
351
  "eslint": "9.19.0",
336
352
  "vitest": "4.0.9",