@remotion/transitions 4.0.466 → 4.0.467
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.
- package/cross-zoom.js +2 -0
- package/dist/esm/book-flip.mjs +4 -3
- package/dist/esm/cross-zoom.mjs +377 -0
- package/dist/esm/crosswarp.mjs +4 -3
- package/dist/esm/dissolve.mjs +4 -3
- package/dist/esm/dreamy-zoom.mjs +4 -3
- package/dist/esm/film-burn.mjs +443 -0
- package/dist/esm/index.mjs +492 -25
- package/dist/esm/linear-blur.mjs +4 -3
- package/dist/esm/ripple.mjs +4 -3
- package/dist/esm/swap.mjs +4 -3
- package/dist/esm/zoom-blur.mjs +4 -3
- package/dist/esm/zoom-in-out.mjs +4 -3
- package/dist/html-in-canvas-presentation.js +4 -5
- package/dist/index.d.ts +6 -2
- package/dist/index.js +7 -3
- package/dist/presentations/cross-zoom.d.ts +13 -0
- package/dist/presentations/cross-zoom.js +199 -0
- package/dist/presentations/film-burn.d.ts +13 -0
- package/dist/presentations/film-burn.js +265 -0
- package/dist/types.d.ts +1 -1
- package/film-burn.js +2 -0
- package/package.json +26 -8
package/dist/esm/index.mjs
CHANGED
|
@@ -77,13 +77,14 @@ var slide = (props) => {
|
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
// src/html-in-canvas-presentation.tsx
|
|
80
|
-
import { useLayoutEffect, useMemo as useMemo2, useRef, useState
|
|
80
|
+
import { useCallback, useLayoutEffect, useMemo as useMemo2, useRef, useState } from "react";
|
|
81
81
|
import {
|
|
82
|
-
|
|
82
|
+
AbsoluteFill as AbsoluteFill2,
|
|
83
83
|
HTML_IN_CANVAS_UNSUPPORTED_MESSAGE,
|
|
84
|
+
HtmlInCanvas,
|
|
85
|
+
Internals,
|
|
84
86
|
useDelayRender
|
|
85
87
|
} from "remotion";
|
|
86
|
-
import { AbsoluteFill as AbsoluteFill2, Internals } from "remotion";
|
|
87
88
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
88
89
|
var HtmlInCanvasPresentation = ({
|
|
89
90
|
children,
|
|
@@ -250,7 +251,8 @@ var makeHtmlInCanvasPresentation = (shader) => {
|
|
|
250
251
|
};
|
|
251
252
|
};
|
|
252
253
|
|
|
253
|
-
// src/presentations/
|
|
254
|
+
// src/presentations/cross-zoom.tsx
|
|
255
|
+
var DEFAULT_STRENGTH = 0.4;
|
|
254
256
|
var VERTEX_SHADER = `#version 300 es
|
|
255
257
|
in vec2 a_pos;
|
|
256
258
|
out vec2 v_uv;
|
|
@@ -264,31 +266,64 @@ precision highp float;
|
|
|
264
266
|
uniform sampler2D u_prev;
|
|
265
267
|
uniform sampler2D u_next;
|
|
266
268
|
uniform float u_time;
|
|
267
|
-
uniform float
|
|
269
|
+
uniform float u_strength;
|
|
268
270
|
|
|
269
271
|
in vec2 v_uv;
|
|
270
272
|
out vec4 outColor;
|
|
271
273
|
|
|
272
|
-
const
|
|
274
|
+
const float PI = 3.141592653589793;
|
|
275
|
+
|
|
276
|
+
float linearEase(float begin, float change, float duration, float time) {
|
|
277
|
+
return change * time / duration + begin;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
float exponentialEaseInOut(float begin, float change, float duration, float time) {
|
|
281
|
+
if (time == 0.0) {
|
|
282
|
+
return begin;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (time == duration) {
|
|
286
|
+
return begin + change;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
float t = time / (duration / 2.0);
|
|
290
|
+
if (t < 1.0) {
|
|
291
|
+
return change / 2.0 * pow(2.0, 10.0 * (t - 1.0)) + begin;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return change / 2.0 * (-pow(2.0, -10.0 * (t - 1.0)) + 2.0) + begin;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
float sinusoidalEaseInOut(float begin, float change, float duration, float time) {
|
|
298
|
+
return -change / 2.0 * (cos(PI * time / duration) - 1.0) + begin;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
float random(vec2 co) {
|
|
302
|
+
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
vec4 crossFade(vec2 uv, float dissolve) {
|
|
306
|
+
return mix(texture(u_prev, uv), texture(u_next, uv), dissolve);
|
|
307
|
+
}
|
|
273
308
|
|
|
274
309
|
vec4 transition(vec2 uv, float progress) {
|
|
275
|
-
|
|
276
|
-
|
|
310
|
+
vec2 center = vec2(linearEase(0.25, 0.5, 1.0, progress), 0.5);
|
|
311
|
+
float dissolve = exponentialEaseInOut(0.0, 1.0, 1.0, progress);
|
|
312
|
+
float strength = sinusoidalEaseInOut(0.0, u_strength, 0.5, progress);
|
|
277
313
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
314
|
+
vec4 color = vec4(0.0);
|
|
315
|
+
float total = 0.0;
|
|
316
|
+
vec2 toCenter = center - uv;
|
|
317
|
+
float offset = random(uv);
|
|
318
|
+
|
|
319
|
+
for (int i = 0; i <= 40; i++) {
|
|
320
|
+
float percent = (float(i) + offset) / 40.0;
|
|
321
|
+
float weight = 4.0 * (percent - percent * percent);
|
|
322
|
+
color += crossFade(uv + toCenter * percent * strength, dissolve) * weight;
|
|
323
|
+
total += weight;
|
|
287
324
|
}
|
|
288
325
|
|
|
289
|
-
|
|
290
|
-
c2 /= float(PASSES * PASSES);
|
|
291
|
-
return mix(c1, c2, progress);
|
|
326
|
+
return color / total;
|
|
292
327
|
}
|
|
293
328
|
|
|
294
329
|
void main() {
|
|
@@ -339,7 +374,7 @@ var createTexture = (gl) => {
|
|
|
339
374
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));
|
|
340
375
|
return tex;
|
|
341
376
|
};
|
|
342
|
-
var
|
|
377
|
+
var crossZoomShader = (canvas) => {
|
|
343
378
|
const gl = canvas.getContext("webgl2", { premultipliedAlpha: true });
|
|
344
379
|
if (!gl) {
|
|
345
380
|
throw new Error("Failed to create WebGL2 context");
|
|
@@ -358,7 +393,7 @@ var linearBlurShader = (canvas) => {
|
|
|
358
393
|
const uTime = gl.getUniformLocation(program, "u_time");
|
|
359
394
|
const uPrev = gl.getUniformLocation(program, "u_prev");
|
|
360
395
|
const uNext = gl.getUniformLocation(program, "u_next");
|
|
361
|
-
const
|
|
396
|
+
const uStrength = gl.getUniformLocation(program, "u_strength");
|
|
362
397
|
const cleanup = () => {
|
|
363
398
|
gl.deleteProgram(program);
|
|
364
399
|
gl.deleteTexture(prevTex);
|
|
@@ -376,7 +411,7 @@ var linearBlurShader = (canvas) => {
|
|
|
376
411
|
time,
|
|
377
412
|
passedProps
|
|
378
413
|
}) => {
|
|
379
|
-
const {
|
|
414
|
+
const { strength = DEFAULT_STRENGTH } = passedProps;
|
|
380
415
|
if (!prevImage && !nextImage) {
|
|
381
416
|
return;
|
|
382
417
|
}
|
|
@@ -404,7 +439,7 @@ var linearBlurShader = (canvas) => {
|
|
|
404
439
|
}
|
|
405
440
|
gl.uniform1i(uNext, 1);
|
|
406
441
|
gl.uniform1f(uTime, effectiveTime);
|
|
407
|
-
gl.uniform1f(
|
|
442
|
+
gl.uniform1f(uStrength, strength);
|
|
408
443
|
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
409
444
|
};
|
|
410
445
|
return {
|
|
@@ -413,7 +448,7 @@ var linearBlurShader = (canvas) => {
|
|
|
413
448
|
draw
|
|
414
449
|
};
|
|
415
450
|
};
|
|
416
|
-
var
|
|
451
|
+
var crossZoom = makeHtmlInCanvasPresentation(crossZoomShader);
|
|
417
452
|
|
|
418
453
|
// src/presentations/dreamy-zoom.tsx
|
|
419
454
|
var DEFAULT_ROTATION = 6;
|
|
@@ -585,6 +620,436 @@ var dreamyZoomShader = (canvas) => {
|
|
|
585
620
|
};
|
|
586
621
|
var dreamyZoom = makeHtmlInCanvasPresentation(dreamyZoomShader);
|
|
587
622
|
|
|
623
|
+
// src/presentations/film-burn.tsx
|
|
624
|
+
var DEFAULT_SEED = 2.31;
|
|
625
|
+
var VERTEX_SHADER3 = `#version 300 es
|
|
626
|
+
in vec2 a_pos;
|
|
627
|
+
out vec2 v_uv;
|
|
628
|
+
void main() {
|
|
629
|
+
v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);
|
|
630
|
+
gl_Position = vec4(a_pos, 0.0, 1.0);
|
|
631
|
+
}`;
|
|
632
|
+
var FRAGMENT_SHADER3 = `#version 300 es
|
|
633
|
+
precision highp float;
|
|
634
|
+
|
|
635
|
+
uniform sampler2D u_prev;
|
|
636
|
+
uniform sampler2D u_next;
|
|
637
|
+
uniform float u_time;
|
|
638
|
+
uniform float u_seed;
|
|
639
|
+
|
|
640
|
+
in vec2 v_uv;
|
|
641
|
+
out vec4 outColor;
|
|
642
|
+
|
|
643
|
+
#define PI 3.14159265358979323
|
|
644
|
+
#define CLAMPS(x) clamp(x, 0.0, 1.0)
|
|
645
|
+
#define REPEATS 50.0
|
|
646
|
+
|
|
647
|
+
float sigmoid(float x, float a) {
|
|
648
|
+
float b = pow(x * 2.0, a) / 2.0;
|
|
649
|
+
if (x > 0.5) {
|
|
650
|
+
b = 1.0 - pow(2.0 - (x * 2.0), a) / 2.0;
|
|
651
|
+
}
|
|
652
|
+
return b;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
float rand(float co) {
|
|
656
|
+
return fract(sin((co * 24.9898) + u_seed) * 43758.5453);
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
float rand(vec2 co) {
|
|
660
|
+
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
float apow(float a, float b) {
|
|
664
|
+
return pow(abs(a), b) * sign(b);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
vec3 pow3(vec3 a, vec3 b) {
|
|
668
|
+
return vec3(apow(a.r, b.r), apow(a.g, b.g), apow(a.b, b.b));
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
float smoothMix(float a, float b, float c) {
|
|
672
|
+
return mix(a, b, sigmoid(c, 2.0));
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
float random(vec2 co, float shft) {
|
|
676
|
+
co += 10.0;
|
|
677
|
+
return smoothMix(
|
|
678
|
+
fract(
|
|
679
|
+
sin(
|
|
680
|
+
dot(
|
|
681
|
+
co.xy,
|
|
682
|
+
vec2(12.9898 + (floor(shft) * 0.5), 78.233 + u_seed)
|
|
683
|
+
)
|
|
684
|
+
) * 43758.5453
|
|
685
|
+
),
|
|
686
|
+
fract(
|
|
687
|
+
sin(
|
|
688
|
+
dot(
|
|
689
|
+
co.xy,
|
|
690
|
+
vec2(12.9898 + (floor(shft + 1.0) * 0.5), 78.233 + u_seed)
|
|
691
|
+
)
|
|
692
|
+
) * 43758.5453
|
|
693
|
+
),
|
|
694
|
+
fract(shft)
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
float smoothRandom(vec2 co, float shft) {
|
|
699
|
+
return smoothMix(
|
|
700
|
+
smoothMix(
|
|
701
|
+
random(floor(co), shft),
|
|
702
|
+
random(floor(co + vec2(1.0, 0.0)), shft),
|
|
703
|
+
fract(co.x)
|
|
704
|
+
),
|
|
705
|
+
smoothMix(
|
|
706
|
+
random(floor(co + vec2(0.0, 1.0)), shft),
|
|
707
|
+
random(floor(co + vec2(1.0, 1.0)), shft),
|
|
708
|
+
fract(co.x)
|
|
709
|
+
),
|
|
710
|
+
fract(co.y)
|
|
711
|
+
);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
vec4 sampleTexture(vec2 p, float progress) {
|
|
715
|
+
return mix(texture(u_prev, p), texture(u_next, p), sigmoid(progress, 10.0));
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
vec4 transition(vec2 p, float progress) {
|
|
719
|
+
vec3 f = vec3(0.0);
|
|
720
|
+
for (float i = 0.0; i < 13.0; i++) {
|
|
721
|
+
f += sin(((p.x * rand(i) * 6.0) + (progress * 8.0)) + rand(i + 1.43)) *
|
|
722
|
+
sin(
|
|
723
|
+
((p.y * rand(i + 4.4) * 6.0) + (progress * 6.0)) +
|
|
724
|
+
rand(i + 2.4)
|
|
725
|
+
);
|
|
726
|
+
f += 1.0 - CLAMPS(
|
|
727
|
+
length(
|
|
728
|
+
p -
|
|
729
|
+
vec2(
|
|
730
|
+
smoothRandom(vec2(progress * 1.3), i + 1.0),
|
|
731
|
+
smoothRandom(vec2(progress * 0.5), i + 6.25)
|
|
732
|
+
)
|
|
733
|
+
) * mix(20.0, 70.0, rand(i))
|
|
734
|
+
);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
f += 4.0;
|
|
738
|
+
f /= 11.0;
|
|
739
|
+
f = pow3(
|
|
740
|
+
f * vec3(1.0, 0.7, 0.6),
|
|
741
|
+
vec3(1.0, 2.0 - sin(progress * PI), 1.3)
|
|
742
|
+
);
|
|
743
|
+
f *= sin(progress * PI);
|
|
744
|
+
|
|
745
|
+
p -= 0.5;
|
|
746
|
+
p *= 1.0 + (smoothRandom(vec2(progress * 5.0), 6.3) * sin(progress * PI) * 0.05);
|
|
747
|
+
p += 0.5;
|
|
748
|
+
|
|
749
|
+
vec4 blurredImage = vec4(0.0);
|
|
750
|
+
float blurAmount = sin(progress * PI) * 0.03;
|
|
751
|
+
for (float i = 0.0; i < REPEATS; i++) {
|
|
752
|
+
vec2 q = vec2(
|
|
753
|
+
cos(degrees((i / REPEATS) * 360.0)),
|
|
754
|
+
sin(degrees((i / REPEATS) * 360.0))
|
|
755
|
+
) * (rand(vec2(i, p.x + p.y)) + blurAmount);
|
|
756
|
+
vec2 uv2 = p + (q * blurAmount);
|
|
757
|
+
blurredImage += sampleTexture(uv2, progress);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
blurredImage /= REPEATS;
|
|
761
|
+
return blurredImage + vec4(f, 0.0);
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
void main() {
|
|
765
|
+
float progress = 1.0 - u_time;
|
|
766
|
+
outColor = transition(v_uv, progress);
|
|
767
|
+
}`;
|
|
768
|
+
var compileShader3 = (gl, source, type) => {
|
|
769
|
+
const shader = gl.createShader(type);
|
|
770
|
+
if (!shader) {
|
|
771
|
+
throw new Error("Failed to create shader");
|
|
772
|
+
}
|
|
773
|
+
gl.shaderSource(shader, source);
|
|
774
|
+
gl.compileShader(shader);
|
|
775
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
776
|
+
const log = gl.getShaderInfoLog(shader);
|
|
777
|
+
gl.deleteShader(shader);
|
|
778
|
+
throw new Error(`Failed to compile shader: ${log}`);
|
|
779
|
+
}
|
|
780
|
+
return shader;
|
|
781
|
+
};
|
|
782
|
+
var createProgram3 = (gl) => {
|
|
783
|
+
const program = gl.createProgram();
|
|
784
|
+
if (!program) {
|
|
785
|
+
throw new Error("Failed to create WebGL program");
|
|
786
|
+
}
|
|
787
|
+
const vs = compileShader3(gl, VERTEX_SHADER3, gl.VERTEX_SHADER);
|
|
788
|
+
const fs = compileShader3(gl, FRAGMENT_SHADER3, gl.FRAGMENT_SHADER);
|
|
789
|
+
gl.attachShader(program, vs);
|
|
790
|
+
gl.attachShader(program, fs);
|
|
791
|
+
gl.linkProgram(program);
|
|
792
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
793
|
+
const log = gl.getProgramInfoLog(program);
|
|
794
|
+
gl.deleteProgram(program);
|
|
795
|
+
throw new Error(`Failed to link program: ${log}`);
|
|
796
|
+
}
|
|
797
|
+
return program;
|
|
798
|
+
};
|
|
799
|
+
var createTexture3 = (gl) => {
|
|
800
|
+
const tex = gl.createTexture();
|
|
801
|
+
if (!tex) {
|
|
802
|
+
throw new Error("Failed to create texture");
|
|
803
|
+
}
|
|
804
|
+
gl.bindTexture(gl.TEXTURE_2D, tex);
|
|
805
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
806
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
807
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
808
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
809
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));
|
|
810
|
+
return tex;
|
|
811
|
+
};
|
|
812
|
+
var filmBurnShader = (canvas) => {
|
|
813
|
+
const gl = canvas.getContext("webgl2", { premultipliedAlpha: true });
|
|
814
|
+
if (!gl) {
|
|
815
|
+
throw new Error("Failed to create WebGL2 context");
|
|
816
|
+
}
|
|
817
|
+
const program = createProgram3(gl);
|
|
818
|
+
const prevTex = createTexture3(gl);
|
|
819
|
+
const nextTex = createTexture3(gl);
|
|
820
|
+
const vao = gl.createVertexArray();
|
|
821
|
+
gl.bindVertexArray(vao);
|
|
822
|
+
const buffer = gl.createBuffer();
|
|
823
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
824
|
+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]), gl.STATIC_DRAW);
|
|
825
|
+
const aPos = gl.getAttribLocation(program, "a_pos");
|
|
826
|
+
gl.enableVertexAttribArray(aPos);
|
|
827
|
+
gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);
|
|
828
|
+
const uTime = gl.getUniformLocation(program, "u_time");
|
|
829
|
+
const uPrev = gl.getUniformLocation(program, "u_prev");
|
|
830
|
+
const uNext = gl.getUniformLocation(program, "u_next");
|
|
831
|
+
const uSeed = gl.getUniformLocation(program, "u_seed");
|
|
832
|
+
const cleanup = () => {
|
|
833
|
+
gl.deleteProgram(program);
|
|
834
|
+
gl.deleteTexture(prevTex);
|
|
835
|
+
gl.deleteTexture(nextTex);
|
|
836
|
+
};
|
|
837
|
+
const clear = () => {
|
|
838
|
+
gl.clearColor(0, 0, 0, 0);
|
|
839
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
840
|
+
};
|
|
841
|
+
const draw = ({
|
|
842
|
+
prevImage,
|
|
843
|
+
nextImage,
|
|
844
|
+
width,
|
|
845
|
+
height,
|
|
846
|
+
time,
|
|
847
|
+
passedProps
|
|
848
|
+
}) => {
|
|
849
|
+
const { seed = DEFAULT_SEED } = passedProps;
|
|
850
|
+
if (!prevImage && !nextImage) {
|
|
851
|
+
return;
|
|
852
|
+
}
|
|
853
|
+
if (prevImage && (prevImage.width === 0 || prevImage.height === 0)) {
|
|
854
|
+
return;
|
|
855
|
+
}
|
|
856
|
+
if (nextImage && (nextImage.width === 0 || nextImage.height === 0)) {
|
|
857
|
+
return;
|
|
858
|
+
}
|
|
859
|
+
const effectiveTime = !prevImage ? 0 : !nextImage ? 1 : time;
|
|
860
|
+
gl.viewport(0, 0, width, height);
|
|
861
|
+
gl.clearColor(0, 0, 0, 0);
|
|
862
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
863
|
+
gl.useProgram(program);
|
|
864
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
865
|
+
gl.bindTexture(gl.TEXTURE_2D, prevTex);
|
|
866
|
+
if (prevImage) {
|
|
867
|
+
gl.texElementImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, prevImage);
|
|
868
|
+
}
|
|
869
|
+
gl.uniform1i(uPrev, 0);
|
|
870
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
871
|
+
gl.bindTexture(gl.TEXTURE_2D, nextTex);
|
|
872
|
+
if (nextImage) {
|
|
873
|
+
gl.texElementImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, nextImage);
|
|
874
|
+
}
|
|
875
|
+
gl.uniform1i(uNext, 1);
|
|
876
|
+
gl.uniform1f(uTime, effectiveTime);
|
|
877
|
+
gl.uniform1f(uSeed, seed);
|
|
878
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
879
|
+
};
|
|
880
|
+
return {
|
|
881
|
+
clear,
|
|
882
|
+
cleanup,
|
|
883
|
+
draw
|
|
884
|
+
};
|
|
885
|
+
};
|
|
886
|
+
var filmBurn = makeHtmlInCanvasPresentation(filmBurnShader);
|
|
887
|
+
|
|
888
|
+
// src/presentations/linear-blur.tsx
|
|
889
|
+
var VERTEX_SHADER4 = `#version 300 es
|
|
890
|
+
in vec2 a_pos;
|
|
891
|
+
out vec2 v_uv;
|
|
892
|
+
void main() {
|
|
893
|
+
v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);
|
|
894
|
+
gl_Position = vec4(a_pos, 0.0, 1.0);
|
|
895
|
+
}`;
|
|
896
|
+
var FRAGMENT_SHADER4 = `#version 300 es
|
|
897
|
+
precision highp float;
|
|
898
|
+
|
|
899
|
+
uniform sampler2D u_prev;
|
|
900
|
+
uniform sampler2D u_next;
|
|
901
|
+
uniform float u_time;
|
|
902
|
+
uniform float u_intensity;
|
|
903
|
+
|
|
904
|
+
in vec2 v_uv;
|
|
905
|
+
out vec4 outColor;
|
|
906
|
+
|
|
907
|
+
const int PASSES = 6;
|
|
908
|
+
|
|
909
|
+
vec4 transition(vec2 uv, float progress) {
|
|
910
|
+
vec4 c1 = vec4(0.0);
|
|
911
|
+
vec4 c2 = vec4(0.0);
|
|
912
|
+
|
|
913
|
+
float disp = u_intensity * (0.5 - distance(0.5, progress));
|
|
914
|
+
for (int xi = 0; xi < PASSES; xi++) {
|
|
915
|
+
float x = float(xi) / float(PASSES) - 0.5;
|
|
916
|
+
for (int yi = 0; yi < PASSES; yi++) {
|
|
917
|
+
float y = float(yi) / float(PASSES) - 0.5;
|
|
918
|
+
vec2 v = vec2(x, y);
|
|
919
|
+
c1 += texture(u_prev, uv + disp * v);
|
|
920
|
+
c2 += texture(u_next, uv + disp * v);
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
c1 /= float(PASSES * PASSES);
|
|
925
|
+
c2 /= float(PASSES * PASSES);
|
|
926
|
+
return mix(c1, c2, progress);
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
void main() {
|
|
930
|
+
float progress = 1.0 - u_time;
|
|
931
|
+
outColor = transition(v_uv, progress);
|
|
932
|
+
}`;
|
|
933
|
+
var compileShader4 = (gl, source, type) => {
|
|
934
|
+
const shader = gl.createShader(type);
|
|
935
|
+
if (!shader) {
|
|
936
|
+
throw new Error("Failed to create shader");
|
|
937
|
+
}
|
|
938
|
+
gl.shaderSource(shader, source);
|
|
939
|
+
gl.compileShader(shader);
|
|
940
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
941
|
+
const log = gl.getShaderInfoLog(shader);
|
|
942
|
+
gl.deleteShader(shader);
|
|
943
|
+
throw new Error(`Failed to compile shader: ${log}`);
|
|
944
|
+
}
|
|
945
|
+
return shader;
|
|
946
|
+
};
|
|
947
|
+
var createProgram4 = (gl) => {
|
|
948
|
+
const program = gl.createProgram();
|
|
949
|
+
if (!program) {
|
|
950
|
+
throw new Error("Failed to create WebGL program");
|
|
951
|
+
}
|
|
952
|
+
const vs = compileShader4(gl, VERTEX_SHADER4, gl.VERTEX_SHADER);
|
|
953
|
+
const fs = compileShader4(gl, FRAGMENT_SHADER4, gl.FRAGMENT_SHADER);
|
|
954
|
+
gl.attachShader(program, vs);
|
|
955
|
+
gl.attachShader(program, fs);
|
|
956
|
+
gl.linkProgram(program);
|
|
957
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
958
|
+
const log = gl.getProgramInfoLog(program);
|
|
959
|
+
gl.deleteProgram(program);
|
|
960
|
+
throw new Error(`Failed to link program: ${log}`);
|
|
961
|
+
}
|
|
962
|
+
return program;
|
|
963
|
+
};
|
|
964
|
+
var createTexture4 = (gl) => {
|
|
965
|
+
const tex = gl.createTexture();
|
|
966
|
+
if (!tex) {
|
|
967
|
+
throw new Error("Failed to create texture");
|
|
968
|
+
}
|
|
969
|
+
gl.bindTexture(gl.TEXTURE_2D, tex);
|
|
970
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
971
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
972
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
973
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
974
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 0]));
|
|
975
|
+
return tex;
|
|
976
|
+
};
|
|
977
|
+
var linearBlurShader = (canvas) => {
|
|
978
|
+
const gl = canvas.getContext("webgl2", { premultipliedAlpha: true });
|
|
979
|
+
if (!gl) {
|
|
980
|
+
throw new Error("Failed to create WebGL2 context");
|
|
981
|
+
}
|
|
982
|
+
const program = createProgram4(gl);
|
|
983
|
+
const prevTex = createTexture4(gl);
|
|
984
|
+
const nextTex = createTexture4(gl);
|
|
985
|
+
const vao = gl.createVertexArray();
|
|
986
|
+
gl.bindVertexArray(vao);
|
|
987
|
+
const buffer = gl.createBuffer();
|
|
988
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
989
|
+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]), gl.STATIC_DRAW);
|
|
990
|
+
const aPos = gl.getAttribLocation(program, "a_pos");
|
|
991
|
+
gl.enableVertexAttribArray(aPos);
|
|
992
|
+
gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);
|
|
993
|
+
const uTime = gl.getUniformLocation(program, "u_time");
|
|
994
|
+
const uPrev = gl.getUniformLocation(program, "u_prev");
|
|
995
|
+
const uNext = gl.getUniformLocation(program, "u_next");
|
|
996
|
+
const uIntensity = gl.getUniformLocation(program, "u_intensity");
|
|
997
|
+
const cleanup = () => {
|
|
998
|
+
gl.deleteProgram(program);
|
|
999
|
+
gl.deleteTexture(prevTex);
|
|
1000
|
+
gl.deleteTexture(nextTex);
|
|
1001
|
+
};
|
|
1002
|
+
const clear = () => {
|
|
1003
|
+
gl.clearColor(0, 0, 0, 0);
|
|
1004
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
1005
|
+
};
|
|
1006
|
+
const draw = ({
|
|
1007
|
+
prevImage,
|
|
1008
|
+
nextImage,
|
|
1009
|
+
width,
|
|
1010
|
+
height,
|
|
1011
|
+
time,
|
|
1012
|
+
passedProps
|
|
1013
|
+
}) => {
|
|
1014
|
+
const { intensity = 0.1 } = passedProps;
|
|
1015
|
+
if (!prevImage && !nextImage) {
|
|
1016
|
+
return;
|
|
1017
|
+
}
|
|
1018
|
+
if (prevImage && (prevImage.width === 0 || prevImage.height === 0)) {
|
|
1019
|
+
return;
|
|
1020
|
+
}
|
|
1021
|
+
if (nextImage && (nextImage.width === 0 || nextImage.height === 0)) {
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
1024
|
+
const effectiveTime = !prevImage ? 0 : !nextImage ? 1 : time;
|
|
1025
|
+
gl.viewport(0, 0, width, height);
|
|
1026
|
+
gl.clearColor(0, 0, 0, 0);
|
|
1027
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
1028
|
+
gl.useProgram(program);
|
|
1029
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
1030
|
+
gl.bindTexture(gl.TEXTURE_2D, prevTex);
|
|
1031
|
+
if (prevImage) {
|
|
1032
|
+
gl.texElementImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, prevImage);
|
|
1033
|
+
}
|
|
1034
|
+
gl.uniform1i(uPrev, 0);
|
|
1035
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
1036
|
+
gl.bindTexture(gl.TEXTURE_2D, nextTex);
|
|
1037
|
+
if (nextImage) {
|
|
1038
|
+
gl.texElementImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, nextImage);
|
|
1039
|
+
}
|
|
1040
|
+
gl.uniform1i(uNext, 1);
|
|
1041
|
+
gl.uniform1f(uTime, effectiveTime);
|
|
1042
|
+
gl.uniform1f(uIntensity, intensity);
|
|
1043
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
1044
|
+
};
|
|
1045
|
+
return {
|
|
1046
|
+
clear,
|
|
1047
|
+
cleanup,
|
|
1048
|
+
draw
|
|
1049
|
+
};
|
|
1050
|
+
};
|
|
1051
|
+
var linearBlur = makeHtmlInCanvasPresentation(linearBlurShader);
|
|
1052
|
+
|
|
588
1053
|
// src/timings/linear-timing.ts
|
|
589
1054
|
import { interpolate } from "remotion";
|
|
590
1055
|
var linearTiming = (options) => {
|
|
@@ -1046,6 +1511,8 @@ export {
|
|
|
1046
1511
|
makeHtmlInCanvasPresentation,
|
|
1047
1512
|
linearTiming,
|
|
1048
1513
|
linearBlur,
|
|
1514
|
+
filmBurn,
|
|
1049
1515
|
dreamyZoom,
|
|
1516
|
+
crossZoom,
|
|
1050
1517
|
TransitionSeries
|
|
1051
1518
|
};
|
package/dist/esm/linear-blur.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// src/html-in-canvas-presentation.tsx
|
|
2
|
-
import { useLayoutEffect, useMemo, useRef, useState
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
AbsoluteFill,
|
|
5
5
|
HTML_IN_CANVAS_UNSUPPORTED_MESSAGE,
|
|
6
|
+
HtmlInCanvas,
|
|
7
|
+
Internals,
|
|
6
8
|
useDelayRender
|
|
7
9
|
} from "remotion";
|
|
8
|
-
import { AbsoluteFill, Internals } from "remotion";
|
|
9
10
|
import { jsx } from "react/jsx-runtime";
|
|
10
11
|
var HtmlInCanvasPresentation = ({
|
|
11
12
|
children,
|
package/dist/esm/ripple.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// src/html-in-canvas-presentation.tsx
|
|
2
|
-
import { useLayoutEffect, useMemo, useRef, useState
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
AbsoluteFill,
|
|
5
5
|
HTML_IN_CANVAS_UNSUPPORTED_MESSAGE,
|
|
6
|
+
HtmlInCanvas,
|
|
7
|
+
Internals,
|
|
6
8
|
useDelayRender
|
|
7
9
|
} from "remotion";
|
|
8
|
-
import { AbsoluteFill, Internals } from "remotion";
|
|
9
10
|
import { jsx } from "react/jsx-runtime";
|
|
10
11
|
var HtmlInCanvasPresentation = ({
|
|
11
12
|
children,
|
package/dist/esm/swap.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// src/html-in-canvas-presentation.tsx
|
|
2
|
-
import { useLayoutEffect, useMemo, useRef, useState
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
AbsoluteFill,
|
|
5
5
|
HTML_IN_CANVAS_UNSUPPORTED_MESSAGE,
|
|
6
|
+
HtmlInCanvas,
|
|
7
|
+
Internals,
|
|
6
8
|
useDelayRender
|
|
7
9
|
} from "remotion";
|
|
8
|
-
import { AbsoluteFill, Internals } from "remotion";
|
|
9
10
|
import { jsx } from "react/jsx-runtime";
|
|
10
11
|
var HtmlInCanvasPresentation = ({
|
|
11
12
|
children,
|
package/dist/esm/zoom-blur.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// src/html-in-canvas-presentation.tsx
|
|
2
|
-
import { useLayoutEffect, useMemo, useRef, useState
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
AbsoluteFill,
|
|
5
5
|
HTML_IN_CANVAS_UNSUPPORTED_MESSAGE,
|
|
6
|
+
HtmlInCanvas,
|
|
7
|
+
Internals,
|
|
6
8
|
useDelayRender
|
|
7
9
|
} from "remotion";
|
|
8
|
-
import { AbsoluteFill, Internals } from "remotion";
|
|
9
10
|
import { jsx } from "react/jsx-runtime";
|
|
10
11
|
var HtmlInCanvasPresentation = ({
|
|
11
12
|
children,
|
package/dist/esm/zoom-in-out.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// src/html-in-canvas-presentation.tsx
|
|
2
|
-
import { useLayoutEffect, useMemo, useRef, useState
|
|
2
|
+
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
AbsoluteFill,
|
|
5
5
|
HTML_IN_CANVAS_UNSUPPORTED_MESSAGE,
|
|
6
|
+
HtmlInCanvas,
|
|
7
|
+
Internals,
|
|
6
8
|
useDelayRender
|
|
7
9
|
} from "remotion";
|
|
8
|
-
import { AbsoluteFill, Internals } from "remotion";
|
|
9
10
|
import { jsx } from "react/jsx-runtime";
|
|
10
11
|
var HtmlInCanvasPresentation = ({
|
|
11
12
|
children,
|