@remotion/effects 4.0.540 → 4.0.542

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,387 @@
1
+ import {
2
+ colorAmountSchema,
3
+ assertOptionalFiniteNumber,
4
+ validateUnitInterval,
5
+ parseColorRgba
6
+ } from "./index-wxhvgv2s.mjs";
7
+ import {
8
+ WEBGPU_SINGLE_PASS_VERTEX,
9
+ setupWebGpuSinglePass,
10
+ cleanupWebGpuSinglePass,
11
+ applyWebGpuSinglePass
12
+ } from "./index-tvfexb7s.mjs";
13
+ import {
14
+ assertEffectParamsObject,
15
+ assertRequiredColor
16
+ } from "./index-4fvp93ps.mjs";
17
+
18
+ // src/thermal-vision.ts
19
+ import { Internals } from "remotion";
20
+
21
+ // src/thermal-vision-webgpu-shader.ts
22
+ var THERMAL_VISION_WEBGPU_SHADER = `
23
+ ${WEBGPU_SINGLE_PASS_VERTEX}
24
+ @group(0) @binding(0) var source: texture_2d<f32>;
25
+ @group(0) @binding(1) var sourceSampler: sampler;
26
+ @group(0) @binding(2) var<uniform> params: Params;
27
+
28
+ struct Params { amount: f32, paletteLength: f32, }
29
+ @group(0) @binding(3) var palette: texture_2d<f32>;
30
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
31
+ let color=textureSampleLevel(source,sourceSampler,input.uv,0);
32
+ if(color.a<=0.001) { return vec4f(0); }
33
+ let rgb=color.rgb/color.a;
34
+ let luminance=dot(rgb,vec3f(0.299,0.587,0.114));
35
+ let position=clamp(luminance,0.0,1.0)*(max(params.paletteLength,2.0)-1.0);
36
+ let index=i32(floor(position));
37
+ let first=textureLoad(palette,vec2i(index,0),0).rgb;
38
+ let last=textureLoad(palette,vec2i(min(index+1,i32(params.paletteLength)-1),0),0).rgb;
39
+ let thermal=mix(first,last,fract(position));
40
+ return vec4f(mix(rgb,thermal,clamp(params.amount,0.0,1.0))*color.a,color.a);
41
+ }
42
+
43
+ `;
44
+
45
+ // src/thermal-vision.ts
46
+ var { createEffect, createWebGL2ContextError } = Internals;
47
+ var DEFAULT_AMOUNT = 1;
48
+ var DEFAULT_PALETTE = [
49
+ "#020617",
50
+ "#1238ff",
51
+ "#00a6ff",
52
+ "#00c853",
53
+ "#d6f542",
54
+ "#ffb000",
55
+ "#ff2f00",
56
+ "#ffffff"
57
+ ];
58
+ var thermalVisionSchema = {
59
+ amount: colorAmountSchema,
60
+ palette: {
61
+ type: "array",
62
+ item: {
63
+ type: "color"
64
+ },
65
+ default: DEFAULT_PALETTE,
66
+ minLength: 2,
67
+ newItemDefault: "#00c853",
68
+ description: "Palette",
69
+ keyframable: false
70
+ }
71
+ };
72
+ var resolve = (p) => ({
73
+ amount: p.amount ?? DEFAULT_AMOUNT,
74
+ palette: p.palette ?? DEFAULT_PALETTE
75
+ });
76
+ var validatePalette = (palette) => {
77
+ if (palette === undefined) {
78
+ return;
79
+ }
80
+ if (!Array.isArray(palette) || palette.length < 2) {
81
+ throw new TypeError(`"palette" must be an array with at least 2 colors, but got ${JSON.stringify(palette)}`);
82
+ }
83
+ for (let i = 0;i < palette.length; i++) {
84
+ assertRequiredColor(palette[i], `palette[${i}]`);
85
+ }
86
+ };
87
+ var validateThermalVisionParams = (params) => {
88
+ assertEffectParamsObject(params, "Thermal vision");
89
+ assertOptionalFiniteNumber(params.amount, "amount");
90
+ validatePalette(params.palette);
91
+ const { amount } = resolve(params);
92
+ validateUnitInterval(amount, "amount");
93
+ };
94
+ var THERMAL_VISION_VS = `#version 300 es
95
+ in vec2 aPos;
96
+ in vec2 aUv;
97
+ out vec2 vUv;
98
+
99
+ void main() {
100
+ vUv = aUv;
101
+ gl_Position = vec4(aPos, 0.0, 1.0);
102
+ }
103
+ `;
104
+ var THERMAL_VISION_FS = `#version 300 es
105
+ precision highp float;
106
+
107
+ in vec2 vUv;
108
+ out vec4 fragColor;
109
+
110
+ uniform sampler2D uSource;
111
+ uniform sampler2D uPalette;
112
+ uniform float uPaletteLength;
113
+ uniform float uAmount;
114
+
115
+ vec3 paletteColor(float luminance) {
116
+ float length = max(uPaletteLength, 2.0);
117
+ float texCoord = (clamp(luminance, 0.0, 1.0) * (length - 1.0) + 0.5) / length;
118
+ return texture(uPalette, vec2(texCoord, 0.5)).rgb;
119
+ }
120
+
121
+ void main() {
122
+ vec4 texColor = texture(uSource, vUv);
123
+ float alpha = texColor.a;
124
+
125
+ if (alpha <= 0.001) {
126
+ fragColor = vec4(0.0);
127
+ return;
128
+ }
129
+
130
+ vec3 rgb = texColor.rgb / alpha;
131
+ float luminance = dot(rgb, vec3(0.299, 0.587, 0.114));
132
+ vec3 thermalRgb = paletteColor(luminance);
133
+ vec3 mixedRgb = mix(rgb, thermalRgb, clamp(uAmount, 0.0, 1.0));
134
+
135
+ fragColor = vec4(mixedRgb * alpha, alpha);
136
+ }
137
+ `;
138
+ var compileShader = (gl, type, source) => {
139
+ const shader = gl.createShader(type);
140
+ if (!shader) {
141
+ throw new Error("Failed to create WebGL shader");
142
+ }
143
+ gl.shaderSource(shader, source);
144
+ gl.compileShader(shader);
145
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
146
+ const log = gl.getShaderInfoLog(shader);
147
+ gl.deleteShader(shader);
148
+ throw new Error(`Thermal vision shader compile failed: ${log ?? "(no log)"}`);
149
+ }
150
+ return shader;
151
+ };
152
+ var linkProgram = (gl, vs, fs) => {
153
+ const program = gl.createProgram();
154
+ if (!program) {
155
+ throw new Error("Failed to create WebGL program");
156
+ }
157
+ gl.attachShader(program, vs);
158
+ gl.attachShader(program, fs);
159
+ gl.linkProgram(program);
160
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
161
+ const log = gl.getProgramInfoLog(program);
162
+ gl.deleteProgram(program);
163
+ throw new Error(`Thermal vision program link failed: ${log ?? "(no log)"}`);
164
+ }
165
+ return program;
166
+ };
167
+ var createProgram = (gl, vertexSource, fragmentSource) => {
168
+ const vs = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
169
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
170
+ const program = linkProgram(gl, vs, fs);
171
+ gl.deleteShader(vs);
172
+ gl.deleteShader(fs);
173
+ return program;
174
+ };
175
+ var createTexture = (gl, filter) => {
176
+ const texture = gl.createTexture();
177
+ if (!texture) {
178
+ throw new Error("Failed to create WebGL texture");
179
+ }
180
+ gl.bindTexture(gl.TEXTURE_2D, texture);
181
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
182
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
183
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
184
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
185
+ gl.bindTexture(gl.TEXTURE_2D, null);
186
+ return texture;
187
+ };
188
+ var setupThermalVision = (target) => {
189
+ const gl = target.getContext("webgl2", {
190
+ premultipliedAlpha: true,
191
+ alpha: true,
192
+ preserveDrawingBuffer: true
193
+ });
194
+ if (!gl) {
195
+ throw createWebGL2ContextError("thermal vision effect");
196
+ }
197
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
198
+ const program = createProgram(gl, THERMAL_VISION_VS, THERMAL_VISION_FS);
199
+ const vao = gl.createVertexArray();
200
+ if (!vao) {
201
+ throw new Error("Failed to create WebGL vertex array");
202
+ }
203
+ gl.bindVertexArray(vao);
204
+ const data = new Float32Array([
205
+ -1,
206
+ -1,
207
+ 0,
208
+ 0,
209
+ 1,
210
+ -1,
211
+ 1,
212
+ 0,
213
+ -1,
214
+ 1,
215
+ 0,
216
+ 1,
217
+ 1,
218
+ 1,
219
+ 1,
220
+ 1
221
+ ]);
222
+ const vbo = gl.createBuffer();
223
+ if (!vbo) {
224
+ throw new Error("Failed to create WebGL buffer");
225
+ }
226
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
227
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
228
+ const aPos = gl.getAttribLocation(program, "aPos");
229
+ const aUv = gl.getAttribLocation(program, "aUv");
230
+ gl.enableVertexAttribArray(aPos);
231
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
232
+ gl.enableVertexAttribArray(aUv);
233
+ gl.vertexAttribPointer(aUv, 2, gl.FLOAT, false, 16, 8);
234
+ gl.bindVertexArray(null);
235
+ const colorCanvas = document.createElement("canvas");
236
+ colorCanvas.width = 1;
237
+ colorCanvas.height = 1;
238
+ const colorCtx = colorCanvas.getContext("2d", { willReadFrequently: true });
239
+ if (!colorCtx) {
240
+ throw new Error("Failed to acquire 2D context for color parsing");
241
+ }
242
+ return {
243
+ gl,
244
+ program,
245
+ vao,
246
+ vbo,
247
+ sourceTexture: createTexture(gl, gl.LINEAR),
248
+ paletteTexture: createTexture(gl, gl.LINEAR),
249
+ colorCtx,
250
+ uniforms: {
251
+ uSource: gl.getUniformLocation(program, "uSource"),
252
+ uPalette: gl.getUniformLocation(program, "uPalette"),
253
+ uPaletteLength: gl.getUniformLocation(program, "uPaletteLength"),
254
+ uAmount: gl.getUniformLocation(program, "uAmount")
255
+ },
256
+ cachedPaletteKey: "",
257
+ palettePixelData: new Uint8Array(0)
258
+ };
259
+ };
260
+ var updatePalette = (state, palette) => {
261
+ const paletteKey = palette.join("|");
262
+ const paletteDirty = state.cachedPaletteKey !== paletteKey;
263
+ if (!paletteDirty) {
264
+ return false;
265
+ }
266
+ state.cachedPaletteKey = paletteKey;
267
+ const len = palette.length * 4;
268
+ state.palettePixelData = new Uint8Array(len);
269
+ const { palettePixelData } = state;
270
+ for (let i = 0;i < palette.length; i++) {
271
+ const color = parseColorRgba(state.colorCtx, palette[i]);
272
+ palettePixelData[i * 4] = color[0];
273
+ palettePixelData[i * 4 + 1] = color[1];
274
+ palettePixelData[i * 4 + 2] = color[2];
275
+ palettePixelData[i * 4 + 3] = color[3];
276
+ }
277
+ return true;
278
+ };
279
+ var thermalVision = createEffect({
280
+ type: "remotion/thermal-vision",
281
+ label: "thermalVision()",
282
+ documentationLink: "https://www.remotion.dev/docs/effects/thermal-vision",
283
+ calculateKey: (params) => {
284
+ const r = resolve(params);
285
+ return `thermal-vision-${r.amount}-${r.palette.join("|")}`;
286
+ },
287
+ implementations: {
288
+ webgpu: Internals.createEffectImplementation({
289
+ setup: (target) => {
290
+ const canvas = document.createElement("canvas");
291
+ canvas.width = 1;
292
+ canvas.height = 1;
293
+ const colorCtx = canvas.getContext("2d", { willReadFrequently: true });
294
+ if (!colorCtx)
295
+ throw new Error("Failed to acquire 2D context for color parsing");
296
+ return {
297
+ ...setupWebGpuSinglePass(target, "thermal-vision"),
298
+ colorCtx,
299
+ cachedPaletteKey: "",
300
+ palettePixelData: new Uint8Array(0)
301
+ };
302
+ },
303
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
304
+ if (!gpuDevice)
305
+ throw new Error("A WebGPU device is required for the thermal-vision effect");
306
+ const r = resolve(params);
307
+ const uniformData = new Float32Array([
308
+ r.amount,
309
+ r.palette.length,
310
+ 0,
311
+ 0
312
+ ]);
313
+ updatePalette(state, r.palette);
314
+ applyWebGpuSinglePass({
315
+ state,
316
+ source,
317
+ width,
318
+ height,
319
+ device: gpuDevice,
320
+ shader: THERMAL_VISION_WEBGPU_SHADER,
321
+ uniformData
322
+ }, {
323
+ sourceFilter: null,
324
+ auxiliaryTexture: {
325
+ data: state.palettePixelData,
326
+ width: r.palette.length,
327
+ height: 1,
328
+ format: "rgba8unorm"
329
+ }
330
+ });
331
+ },
332
+ cleanup: cleanupWebGpuSinglePass
333
+ }),
334
+ webgl2: Internals.createEffectImplementation({
335
+ setup: (target) => setupThermalVision(target),
336
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
337
+ const r = resolve(params);
338
+ const paletteDirty = updatePalette(state, r.palette);
339
+ const { gl, program, sourceTexture, paletteTexture, uniforms, vao } = state;
340
+ gl.viewport(0, 0, width, height);
341
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
342
+ gl.clearColor(0, 0, 0, 0);
343
+ gl.clear(gl.COLOR_BUFFER_BIT);
344
+ gl.activeTexture(gl.TEXTURE0);
345
+ gl.bindTexture(gl.TEXTURE_2D, sourceTexture);
346
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
347
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
348
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
349
+ gl.activeTexture(gl.TEXTURE1);
350
+ gl.bindTexture(gl.TEXTURE_2D, paletteTexture);
351
+ if (paletteDirty) {
352
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
353
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
354
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, r.palette.length, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, state.palettePixelData);
355
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
356
+ }
357
+ gl.useProgram(program);
358
+ if (uniforms.uSource)
359
+ gl.uniform1i(uniforms.uSource, 0);
360
+ if (uniforms.uPalette)
361
+ gl.uniform1i(uniforms.uPalette, 1);
362
+ if (uniforms.uPaletteLength)
363
+ gl.uniform1f(uniforms.uPaletteLength, r.palette.length);
364
+ if (uniforms.uAmount)
365
+ gl.uniform1f(uniforms.uAmount, r.amount);
366
+ gl.bindVertexArray(vao);
367
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
368
+ gl.bindVertexArray(null);
369
+ gl.bindTexture(gl.TEXTURE_2D, null);
370
+ gl.useProgram(null);
371
+ },
372
+ cleanup: ({ gl, program, vao, vbo, sourceTexture, paletteTexture }) => {
373
+ gl.deleteTexture(sourceTexture);
374
+ gl.deleteTexture(paletteTexture);
375
+ gl.deleteBuffer(vbo);
376
+ gl.deleteProgram(program);
377
+ gl.deleteVertexArray(vao);
378
+ }
379
+ })
380
+ },
381
+ schema: thermalVisionSchema,
382
+ validateParams: validateThermalVisionParams
383
+ });
384
+ export {
385
+ thermalVision,
386
+ thermalVisionSchema
387
+ };
@@ -0,0 +1,7 @@
1
+ import {
2
+ tile2
3
+ } from "./index-ysnwfc4t.mjs";
4
+ import"./index-8p04sssx.mjs";
5
+ export {
6
+ tile2 as tile
7
+ };
@@ -0,0 +1,125 @@
1
+ import"./index-8p04sssx.mjs";
2
+ import {
3
+ createColorMatrixImplementations
4
+ } from "./index-cdp7tr8x.mjs";
5
+ import {
6
+ assertOptionalFiniteNumber,
7
+ validateUnitInterval,
8
+ parseColorRgba
9
+ } from "./index-wxhvgv2s.mjs";
10
+ import {
11
+ assertEffectParamsObject,
12
+ assertRequiredColor
13
+ } from "./index-4fvp93ps.mjs";
14
+
15
+ // src/tint.ts
16
+ import { Internals } from "remotion";
17
+ var { createEffect } = Internals;
18
+ var DEFAULT_AMOUNT = 0.5;
19
+ var tintSchema = {
20
+ color: {
21
+ type: "color",
22
+ default: undefined,
23
+ description: "Color"
24
+ },
25
+ amount: {
26
+ type: "number",
27
+ min: 0,
28
+ max: 1,
29
+ step: 0.01,
30
+ default: DEFAULT_AMOUNT,
31
+ description: "Amount",
32
+ hiddenFromList: false
33
+ }
34
+ };
35
+ var resolve = (p) => ({
36
+ color: p.color,
37
+ amount: p.amount ?? DEFAULT_AMOUNT
38
+ });
39
+ var validateTintParams = (params) => {
40
+ assertEffectParamsObject(params, "Tint");
41
+ assertRequiredColor(params.color, "color");
42
+ assertOptionalFiniteNumber(params.amount, "amount");
43
+ if (params.amount !== undefined) {
44
+ validateUnitInterval(params.amount, "amount");
45
+ }
46
+ };
47
+ var colorContext = null;
48
+ var cachedColor = null;
49
+ var shaderImplementations = createColorMatrixImplementations("tint", (params) => {
50
+ if (!colorContext) {
51
+ const colorCanvas = document.createElement("canvas");
52
+ colorCanvas.width = 1;
53
+ colorCanvas.height = 1;
54
+ colorContext = colorCanvas.getContext("2d", { willReadFrequently: true });
55
+ if (!colorContext)
56
+ throw new Error("Failed to acquire 2D context for color parsing");
57
+ }
58
+ if (cachedColor?.key !== params.color)
59
+ cachedColor = {
60
+ key: params.color,
61
+ value: parseColorRgba(colorContext, params.color)
62
+ };
63
+ const color = cachedColor.value;
64
+ const amount = (params.amount ?? DEFAULT_AMOUNT) * color[3] / 255;
65
+ return new Float32Array([
66
+ 1 - amount,
67
+ 0,
68
+ 0,
69
+ color[0] / 255 * amount,
70
+ 0,
71
+ 1 - amount,
72
+ 0,
73
+ color[1] / 255 * amount,
74
+ 0,
75
+ 0,
76
+ 1 - amount,
77
+ color[2] / 255 * amount,
78
+ 0,
79
+ 0,
80
+ 0,
81
+ 0
82
+ ]);
83
+ });
84
+ var tint = createEffect({
85
+ type: "dev.remotion.effects.tint",
86
+ label: "tint()",
87
+ documentationLink: "https://www.remotion.dev/docs/effects/tint",
88
+ calculateKey: (params) => {
89
+ const r = resolve(params);
90
+ return `tint-${r.color}-${r.amount}`;
91
+ },
92
+ implementations: {
93
+ ...shaderImplementations,
94
+ "2d": Internals.createEffectImplementation({
95
+ setup: () => null,
96
+ apply: ({ source, target, width, height, params }) => {
97
+ const ctx = target.getContext("2d");
98
+ if (!ctx) {
99
+ throw new Error("Failed to acquire 2D context for tint effect. The canvas may have been assigned a different context type.");
100
+ }
101
+ const r = resolve(params);
102
+ const amount = Math.max(0, Math.min(1, r.amount));
103
+ ctx.clearRect(0, 0, width, height);
104
+ ctx.globalAlpha = 1;
105
+ ctx.globalCompositeOperation = "source-over";
106
+ ctx.drawImage(source, 0, 0, width, height);
107
+ ctx.globalAlpha = amount;
108
+ ctx.globalCompositeOperation = "source-atop";
109
+ ctx.fillStyle = r.color;
110
+ ctx.fillRect(0, 0, width, height);
111
+ ctx.globalAlpha = 1;
112
+ ctx.globalCompositeOperation = "source-over";
113
+ },
114
+ cleanup: () => {
115
+ return;
116
+ }
117
+ })
118
+ },
119
+ schema: tintSchema,
120
+ validateParams: validateTintParams
121
+ });
122
+ export {
123
+ tint,
124
+ tintSchema
125
+ };
@@ -0,0 +1,151 @@
1
+ import"./index-8p04sssx.mjs";
2
+ import {
3
+ createRectTransformImplementations
4
+ } from "./index-s9mrx750.mjs";
5
+ import {
6
+ assertOptionalFiniteNumber
7
+ } from "./index-wxhvgv2s.mjs";
8
+ import {
9
+ assertEffectParamsObject
10
+ } from "./index-4fvp93ps.mjs";
11
+
12
+ // src/translate/index.ts
13
+ import { Internals } from "remotion";
14
+ var { createEffect } = Internals;
15
+ var xyTranslateSchema = {
16
+ x: {
17
+ type: "number",
18
+ step: 1,
19
+ default: 0,
20
+ description: "X",
21
+ hiddenFromList: false
22
+ },
23
+ y: {
24
+ type: "number",
25
+ step: 1,
26
+ default: 0,
27
+ description: "Y",
28
+ hiddenFromList: false
29
+ }
30
+ };
31
+ var uvTranslateSchema = {
32
+ u: {
33
+ type: "number",
34
+ step: 0.01,
35
+ default: 0,
36
+ description: "U",
37
+ hiddenFromList: false
38
+ },
39
+ v: {
40
+ type: "number",
41
+ step: 0.01,
42
+ default: 0,
43
+ description: "V",
44
+ hiddenFromList: false
45
+ }
46
+ };
47
+ var resolveXyTranslate = (params) => ({
48
+ x: params.x ?? 0,
49
+ y: params.y ?? 0
50
+ });
51
+ var resolveUvTranslate = (params) => ({
52
+ u: params.u ?? 0,
53
+ v: params.v ?? 0
54
+ });
55
+ var validateXyTranslateParams = (params) => {
56
+ assertEffectParamsObject(params, "xyTranslate");
57
+ assertOptionalFiniteNumber(params.x, "x");
58
+ assertOptionalFiniteNumber(params.y, "y");
59
+ };
60
+ var validateUvTranslateParams = (params) => {
61
+ assertEffectParamsObject(params, "uvTranslate");
62
+ assertOptionalFiniteNumber(params.u, "u");
63
+ assertOptionalFiniteNumber(params.v, "v");
64
+ };
65
+ var applyTranslate = ({
66
+ source,
67
+ target,
68
+ width,
69
+ height,
70
+ x,
71
+ y
72
+ }) => {
73
+ const ctx = target.getContext("2d");
74
+ if (!ctx) {
75
+ throw new Error("Failed to acquire 2D context for translate effect. The canvas may have been assigned a different context type.");
76
+ }
77
+ ctx.clearRect(0, 0, width, height);
78
+ ctx.drawImage(source, x, y, width, height);
79
+ };
80
+ var xyTranslate = createEffect({
81
+ type: "dev.remotion.effects.xyTranslate",
82
+ label: "xyTranslate()",
83
+ documentationLink: "https://www.remotion.dev/docs/effects/xy-translate",
84
+ calculateKey: (params) => {
85
+ const r = resolveXyTranslate(params);
86
+ return `xy-translate-${r.x}-${r.y}`;
87
+ },
88
+ implementations: {
89
+ ...createRectTransformImplementations("xyTranslate", (params, width, height) => {
90
+ const r = resolveXyTranslate(params);
91
+ return { x: r.x, y: r.y, width, height };
92
+ }),
93
+ "2d": Internals.createEffectImplementation({
94
+ setup: () => null,
95
+ apply: ({ source, target, width, height, params }) => {
96
+ const r = resolveXyTranslate(params);
97
+ applyTranslate({
98
+ source,
99
+ target,
100
+ width,
101
+ height,
102
+ x: r.x,
103
+ y: r.y
104
+ });
105
+ },
106
+ cleanup: () => {
107
+ return;
108
+ }
109
+ })
110
+ },
111
+ schema: xyTranslateSchema,
112
+ validateParams: validateXyTranslateParams
113
+ });
114
+ var uvTranslate = createEffect({
115
+ type: "dev.remotion.effects.uvTranslate",
116
+ label: "uvTranslate()",
117
+ documentationLink: "https://www.remotion.dev/docs/effects/uv-translate",
118
+ calculateKey: (params) => {
119
+ const r = resolveUvTranslate(params);
120
+ return `uv-translate-${r.u}-${r.v}`;
121
+ },
122
+ implementations: {
123
+ ...createRectTransformImplementations("uvTranslate", (params, width, height) => {
124
+ const r = resolveUvTranslate(params);
125
+ return { x: r.u * width, y: r.v * height, width, height };
126
+ }),
127
+ "2d": Internals.createEffectImplementation({
128
+ setup: () => null,
129
+ apply: ({ source, target, width, height, params }) => {
130
+ const r = resolveUvTranslate(params);
131
+ applyTranslate({
132
+ source,
133
+ target,
134
+ width,
135
+ height,
136
+ x: r.u * width,
137
+ y: r.v * height
138
+ });
139
+ },
140
+ cleanup: () => {
141
+ return;
142
+ }
143
+ })
144
+ },
145
+ schema: uvTranslateSchema,
146
+ validateParams: validateUvTranslateParams
147
+ });
148
+ export {
149
+ uvTranslate,
150
+ xyTranslate
151
+ };