@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.
@@ -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, useCallback } from "react";
80
+ import { useCallback, useLayoutEffect, useMemo as useMemo2, useRef, useState } from "react";
81
81
  import {
82
- HtmlInCanvas,
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/linear-blur.tsx
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 u_intensity;
269
+ uniform float u_strength;
268
270
 
269
271
  in vec2 v_uv;
270
272
  out vec4 outColor;
271
273
 
272
- const int PASSES = 6;
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
- vec4 c1 = vec4(0.0);
276
- vec4 c2 = vec4(0.0);
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
- float disp = u_intensity * (0.5 - distance(0.5, progress));
279
- for (int xi = 0; xi < PASSES; xi++) {
280
- float x = float(xi) / float(PASSES) - 0.5;
281
- for (int yi = 0; yi < PASSES; yi++) {
282
- float y = float(yi) / float(PASSES) - 0.5;
283
- vec2 v = vec2(x, y);
284
- c1 += texture(u_prev, uv + disp * v);
285
- c2 += texture(u_next, uv + disp * v);
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
- c1 /= float(PASSES * PASSES);
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 linearBlurShader = (canvas) => {
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 uIntensity = gl.getUniformLocation(program, "u_intensity");
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 { intensity = 0.1 } = passedProps;
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(uIntensity, intensity);
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 linearBlur = makeHtmlInCanvasPresentation(linearBlurShader);
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
  };
@@ -1,11 +1,12 @@
1
1
  // src/html-in-canvas-presentation.tsx
2
- import { useLayoutEffect, useMemo, useRef, useState, useCallback } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import {
4
- HtmlInCanvas,
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,
@@ -1,11 +1,12 @@
1
1
  // src/html-in-canvas-presentation.tsx
2
- import { useLayoutEffect, useMemo, useRef, useState, useCallback } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import {
4
- HtmlInCanvas,
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, useCallback } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import {
4
- HtmlInCanvas,
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,
@@ -1,11 +1,12 @@
1
1
  // src/html-in-canvas-presentation.tsx
2
- import { useLayoutEffect, useMemo, useRef, useState, useCallback } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import {
4
- HtmlInCanvas,
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,
@@ -1,11 +1,12 @@
1
1
  // src/html-in-canvas-presentation.tsx
2
- import { useLayoutEffect, useMemo, useRef, useState, useCallback } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import {
4
- HtmlInCanvas,
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,