@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,302 @@
1
+ import {
2
+ setupWebGlProjection,
3
+ applyWebGlProjection,
4
+ cleanupWebGlProjection,
5
+ cleanupWebGpuProjection,
6
+ setupWebGpuProjection,
7
+ applyWebGpuProjection
8
+ } from "./index-vp56k1gj.mjs";
9
+ import {
10
+ assertOptionalFiniteNumber,
11
+ validateUnitInterval,
12
+ parseColorRgba
13
+ } from "./index-wxhvgv2s.mjs";
14
+ import {
15
+ assertEffectParamsObject,
16
+ assertOptionalColor
17
+ } from "./index-4fvp93ps.mjs";
18
+
19
+ // src/page-turn/index.ts
20
+ import { Internals } from "remotion";
21
+
22
+ // src/page-turn/shader.ts
23
+ var PAGE_TURN_SHADER = `
24
+ struct Params {
25
+ resolution: vec2f,
26
+ foldPosition: vec2f,
27
+ geometry: vec4f,
28
+ paperColor: vec4f,
29
+ back: vec4f,
30
+ }
31
+ @group(0) @binding(0) var source: texture_2d<f32>;
32
+ @group(0) @binding(1) var sourceSampler: sampler;
33
+ @group(0) @binding(2) var<uniform> params: Params;
34
+
35
+ @vertex fn vertex(@builtin(vertex_index) index: u32) -> @builtin(position) vec4f {
36
+ let positions = array<vec2f, 3>(vec2f(-1, -1), vec2f(3, -1), vec2f(-1, 3));
37
+ return vec4f(positions[index], 0, 1);
38
+ }
39
+
40
+ fn samplePage(pixel: vec2f) -> vec4f {
41
+ if (any(pixel < vec2f(0)) || any(pixel >= params.resolution)) { return vec4f(0); }
42
+ // The shared projection sampler wraps horizontally; pages must not wrap at the edges.
43
+ let uv = clamp(pixel, vec2f(0.5), params.resolution - vec2f(0.5)) / params.resolution;
44
+ return textureSampleLevel(source, sourceSampler, uv, 0);
45
+ }
46
+
47
+ @fragment fn fragment(@builtin(position) position: vec4f) -> @location(0) vec4f {
48
+ let radius = params.geometry.x;
49
+ let direction = params.geometry.y;
50
+ let normal = vec2f(-sin(direction), cos(direction));
51
+ let distance = dot(position.xy - params.foldPosition, normal);
52
+ let coverage = 1.0 - smoothstep(radius - max(fwidth(distance), 0.001), radius, distance);
53
+ if (distance >= radius) { return vec4f(0); }
54
+
55
+ var front = vec4f(0);
56
+ var back = vec4f(0);
57
+ var backDistance = 3.14159265359 * radius - distance;
58
+ var backShade = 0.9;
59
+ if (distance <= 0.0) {
60
+ front = samplePage(position.xy);
61
+ } else {
62
+ let angle = asin(clamp(distance / radius, 0.0, 1.0));
63
+ let frontDistance = radius * angle;
64
+ backDistance = 3.14159265359 * radius - frontDistance;
65
+ let light = params.geometry.z;
66
+ let lightDot = normal.x * sin(light) - normal.y * cos(light);
67
+ let shade = 1.0 - 0.4 * (angle / 1.57079632679) * (0.5 + 0.5 * lightDot);
68
+ let color = samplePage(position.xy + normal * (frontDistance - distance));
69
+ front = vec4f(color.rgb * shade, color.a);
70
+ backShade = 0.6 + 0.4 * cos(angle);
71
+ }
72
+ let color = samplePage(position.xy + normal * (backDistance - distance));
73
+ let tint = (1.0 - params.back.x) * params.paperColor.a;
74
+ back = vec4f(mix(color.rgb, params.paperColor.rgb * color.a, tint) * backShade, color.a);
75
+ if (params.geometry.w == 1.0) { return front * coverage; }
76
+ if (params.geometry.w == 2.0) { return back * coverage; }
77
+ // Premultiplied source-over: the curled back covers the front, which shows through its alpha.
78
+ return (back + front * (1.0 - back.a)) * coverage;
79
+ }
80
+ `;
81
+
82
+ // src/page-turn/webgl-shader.ts
83
+ var PAGE_TURN_WEBGL_SHADER = `#version 300 es
84
+ precision highp float;
85
+ uniform sampler2D uSource;
86
+ uniform vec4 uParams[4];
87
+ out vec4 fragColor;
88
+
89
+ vec4 samplePage(vec2 pixel) {
90
+ vec2 resolution = uParams[0].xy;
91
+ if (any(lessThan(pixel, vec2(0))) || any(greaterThanEqual(pixel, resolution))) { return vec4(0); }
92
+ // The shared projection sampler wraps horizontally; pages must not wrap at the edges.
93
+ vec2 uv = clamp(pixel, vec2(0.5), resolution - vec2(0.5)) / resolution;
94
+ return textureLod(uSource, vec2(uv.x, 1.0 - uv.y), 0.0);
95
+ }
96
+
97
+ vec4 project(vec2 position) {
98
+ float radius = uParams[1].x;
99
+ float direction = uParams[1].y;
100
+ vec2 normal = vec2(-sin(direction), cos(direction));
101
+ float distance = dot(position - uParams[0].zw, normal);
102
+ float coverage = 1.0 - smoothstep(radius - max(fwidth(distance), 0.001), radius, distance);
103
+ if (distance >= radius) { return vec4(0); }
104
+
105
+ vec4 front = vec4(0);
106
+ vec4 back = vec4(0);
107
+ float backDistance = 3.14159265359 * radius - distance;
108
+ float backShade = 0.9;
109
+ if (distance <= 0.0) {
110
+ front = samplePage(position);
111
+ } else {
112
+ float angle = asin(clamp(distance / radius, 0.0, 1.0));
113
+ float frontDistance = radius * angle;
114
+ backDistance = 3.14159265359 * radius - frontDistance;
115
+ float light = uParams[1].z;
116
+ float lightDot = normal.x * sin(light) - normal.y * cos(light);
117
+ float shade = 1.0 - 0.4 * (angle / 1.57079632679) * (0.5 + 0.5 * lightDot);
118
+ vec4 color = samplePage(position + normal * (frontDistance - distance));
119
+ front = vec4(color.rgb * shade, color.a);
120
+ backShade = 0.6 + 0.4 * cos(angle);
121
+ }
122
+ vec4 color = samplePage(position + normal * (backDistance - distance));
123
+ float tint = (1.0 - uParams[3].x) * uParams[2].a;
124
+ back = vec4(mix(color.rgb, uParams[2].rgb * color.a, tint) * backShade, color.a);
125
+ if (uParams[1].w == 1.0) { return front * coverage; }
126
+ if (uParams[1].w == 2.0) { return back * coverage; }
127
+ // Premultiplied source-over: the curled back covers the front, which shows through its alpha.
128
+ return (back + front * (1.0 - back.a)) * coverage;
129
+ }
130
+
131
+ void main() { fragColor = project(vec2(gl_FragCoord.x, uParams[0].y - gl_FragCoord.y)); }
132
+ `;
133
+
134
+ // src/page-turn/index.ts
135
+ var DEFAULT_FOLD_POSITION = [0.7, 0.7];
136
+ var DEFAULT_FOLD_DIRECTION = 315;
137
+ var DEFAULT_FOLD_RADIUS = 60;
138
+ var DEFAULT_LIGHT_DIRECTION = -45;
139
+ var DEFAULT_RENDER = "both";
140
+ var DEFAULT_BACK_PAGE_OPACITY = 0.25;
141
+ var DEFAULT_PAPER_COLOR = "#ffffff";
142
+ var pageTurnSchema = {
143
+ foldPosition: {
144
+ type: "uv-coordinate",
145
+ default: DEFAULT_FOLD_POSITION,
146
+ description: "Fold position"
147
+ },
148
+ foldDirection: {
149
+ type: "rotation-degrees",
150
+ default: DEFAULT_FOLD_DIRECTION,
151
+ description: "Fold direction"
152
+ },
153
+ foldRadius: {
154
+ type: "number",
155
+ min: 1,
156
+ max: 500,
157
+ step: 1,
158
+ default: DEFAULT_FOLD_RADIUS,
159
+ description: "Fold radius",
160
+ hiddenFromList: false
161
+ },
162
+ lightDirection: {
163
+ type: "rotation-degrees",
164
+ default: DEFAULT_LIGHT_DIRECTION,
165
+ description: "Light direction"
166
+ },
167
+ render: {
168
+ type: "enum",
169
+ variants: { both: {}, front: {}, back: {} },
170
+ default: DEFAULT_RENDER,
171
+ description: "Faces"
172
+ },
173
+ backPageOpacity: {
174
+ type: "number",
175
+ min: 0,
176
+ max: 1,
177
+ step: 0.01,
178
+ default: DEFAULT_BACK_PAGE_OPACITY,
179
+ description: "Back image opacity",
180
+ hiddenFromList: false
181
+ },
182
+ paperColor: {
183
+ type: "color",
184
+ default: DEFAULT_PAPER_COLOR,
185
+ description: "Paper color"
186
+ }
187
+ };
188
+ var setupPageTurnColor = () => {
189
+ const colorCanvas = document.createElement("canvas");
190
+ colorCanvas.width = 1;
191
+ colorCanvas.height = 1;
192
+ const colorCtx = colorCanvas.getContext("2d", { willReadFrequently: true });
193
+ if (!colorCtx)
194
+ throw new Error("Could not create the page turn color context");
195
+ return { colorCtx, cachedColor: null, cachedRgba: [255, 255, 255, 255] };
196
+ };
197
+ var resolve = (params) => ({
198
+ foldPosition: params.foldPosition ?? DEFAULT_FOLD_POSITION,
199
+ foldDirection: params.foldDirection ?? DEFAULT_FOLD_DIRECTION,
200
+ foldRadius: params.foldRadius ?? DEFAULT_FOLD_RADIUS,
201
+ lightDirection: params.lightDirection ?? DEFAULT_LIGHT_DIRECTION,
202
+ render: params.render ?? DEFAULT_RENDER,
203
+ backPageOpacity: params.backPageOpacity ?? DEFAULT_BACK_PAGE_OPACITY,
204
+ paperColor: params.paperColor ?? DEFAULT_PAPER_COLOR
205
+ });
206
+ var getUniformData = (params, state, width, height) => {
207
+ const r = resolve(params);
208
+ if (state.cachedColor !== r.paperColor) {
209
+ state.cachedColor = r.paperColor;
210
+ state.cachedRgba = parseColorRgba(state.colorCtx, r.paperColor);
211
+ }
212
+ const radians = Math.PI / 180;
213
+ return new Float32Array([
214
+ width,
215
+ height,
216
+ r.foldPosition[0] * width,
217
+ r.foldPosition[1] * height,
218
+ r.foldRadius,
219
+ r.foldDirection % 360 * radians,
220
+ r.lightDirection % 360 * radians,
221
+ r.render === "front" ? 1 : r.render === "back" ? 2 : 0,
222
+ ...state.cachedRgba.map((channel) => channel / 255),
223
+ r.backPageOpacity,
224
+ 0,
225
+ 0,
226
+ 0
227
+ ]);
228
+ };
229
+ var pageTurn = Internals.createEffect({
230
+ type: "remotion/page-turn",
231
+ label: "pageTurn()",
232
+ documentationLink: "https://www.remotion.dev/docs/effects/page-turn",
233
+ schema: pageTurnSchema,
234
+ validateParams: (params) => {
235
+ assertEffectParamsObject(params, "Page turn");
236
+ for (const key of [
237
+ "foldDirection",
238
+ "foldRadius",
239
+ "lightDirection",
240
+ "backPageOpacity"
241
+ ]) {
242
+ assertOptionalFiniteNumber(params[key], key);
243
+ }
244
+ assertOptionalColor(params.paperColor, "paperColor");
245
+ const r = resolve(params);
246
+ if (r.foldRadius <= 0)
247
+ throw new TypeError('"foldRadius" must be greater than 0');
248
+ validateUnitInterval(r.backPageOpacity, "backPageOpacity");
249
+ if (params.foldPosition !== undefined && (!Array.isArray(params.foldPosition) || params.foldPosition.length !== 2 || !Number.isFinite(params.foldPosition[0]) || !Number.isFinite(params.foldPosition[1]))) {
250
+ throw new TypeError('"foldPosition" must contain two finite numbers');
251
+ }
252
+ if (params.render !== undefined && params.render !== "both" && params.render !== "front" && params.render !== "back") {
253
+ throw new TypeError('"render" must be "both", "front", or "back"');
254
+ }
255
+ },
256
+ calculateKey: (params) => {
257
+ const r = resolve(params);
258
+ return `page-turn-${r.foldPosition.join(",")}-${r.foldDirection}-${r.foldRadius}-${r.lightDirection}-${r.render}-${r.backPageOpacity}-${r.paperColor}`;
259
+ },
260
+ implementations: {
261
+ webgpu: Internals.createEffectImplementation({
262
+ setup: (target) => ({
263
+ ...setupPageTurnColor(),
264
+ ...setupWebGpuProjection(target, "page turn")
265
+ }),
266
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
267
+ if (!gpuDevice)
268
+ throw new Error("A WebGPU device is required for the page turn effect");
269
+ applyWebGpuProjection({
270
+ source,
271
+ width,
272
+ height,
273
+ state,
274
+ device: gpuDevice,
275
+ shader: PAGE_TURN_SHADER,
276
+ uniformData: getUniformData(params, state, width, height)
277
+ });
278
+ },
279
+ cleanup: cleanupWebGpuProjection
280
+ }),
281
+ webgl2: Internals.createEffectImplementation({
282
+ setup: (target) => ({
283
+ ...setupPageTurnColor(),
284
+ ...setupWebGlProjection(target, PAGE_TURN_WEBGL_SHADER)
285
+ }),
286
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
287
+ applyWebGlProjection({
288
+ source,
289
+ width,
290
+ height,
291
+ state,
292
+ flipSourceY,
293
+ uniformData: getUniformData(params, state, width, height)
294
+ });
295
+ },
296
+ cleanup: cleanupWebGlProjection
297
+ })
298
+ }
299
+ });
300
+ export {
301
+ pageTurn
302
+ };