@evatril/video-templates 2.0.9 → 2.0.10
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/package.json +1 -1
- package/public/video-images/03022026-bg.webp +0 -0
- package/public/video-images/03022026-krishnaradha-2.webp +0 -0
- package/public/video-images/03022026-krishnaradha-41.webp +0 -0
- package/public/video-images/03022026-krishnaradha-52.webp +0 -0
- package/public/video-images/03022026-krishnaradha.webp +0 -0
- package/public/video-images/05022026-Duck.webp +0 -0
- package/public/video-images/05022026-Flower.webp +0 -0
- package/public/video-images/05022026-Ganesh.webp +0 -0
- package/public/video-images/05022026-HangingJumar.webp +0 -0
- package/public/video-images/05022026-HangingLamps.webp +0 -0
- package/public/video-images/05022026-LeftPeacock.webp +0 -0
- package/public/video-images/05022026-Nameplate.webp +0 -0
- package/public/video-images/05022026-bg-2.webp +0 -0
- package/public/video-images/05022026-bg-3.webp +0 -0
- package/public/video-images/05022026-bg-4.webp +0 -0
- package/public/video-images/05022026-bg.webp +0 -0
- package/public/video-images/20012026-bg.webp +0 -0
- package/public/video-images/20012026-bride.webp +0 -0
- package/public/video-images/20012026-butterfly.webp +0 -0
- package/public/video-images/20012026-couple-walk.webp +0 -0
- package/public/video-images/20012026-curtain-floral.webp +0 -0
- package/public/video-images/20012026-floral-left.webp +0 -0
- package/public/video-images/20012026-floral-right.webp +0 -0
- package/public/video-images/20012026-groom.webp +0 -0
- package/public/video-images/20012026-opening-gate.webp +0 -0
- package/public/video-images/20012026-peacock.webp +0 -0
- package/public/video-images/20012026-tree-left.webp +0 -0
- package/public/video-images/20012026-tree-right.webp +0 -0
- package/public/video-images/20012026-wedding-gate.webp +0 -0
- package/public/video-images/28012026-Heart.webp +0 -0
- package/public/video-images/28012026-PinkLeaf.webp +0 -0
- package/src/Invitations/Elements/BlowingLeaves28012026.jsx +28 -22
- package/src/Invitations/Elements/CoupleWalk20012026.jsx +2 -2
- package/src/Invitations/Elements/FlowersSide20012026.jsx +45 -52
- package/src/Invitations/Elements/GroomBrideLoveScene20012026.jsx +27 -28
- package/src/Invitations/Elements/HeartFlight28012026.jsx +91 -4
- package/src/Invitations/Elements/PeacockDance20012026.jsx +1 -1
- package/src/Invitations/Elements/SideTrees20012026.jsx +2 -2
- package/src/Invitations/Frames/F03022026_01.jsx +1 -1
- package/src/Invitations/Frames/F03022026_04.jsx +1 -1
- package/src/Invitations/Frames/F03022026_05.jsx +4 -3
- package/src/Invitations/Frames/F05022026_01.jsx +2 -2
- package/src/Invitations/Frames/F20012026_01.jsx +58 -8
- package/src/Invitations/Frames/F20012026_02.jsx +2 -2
- package/src/Invitations/Frames/F20012026_03.jsx +2 -2
- package/src/Invitations/Frames/F28012026_03.jsx +1 -1
- package/src/Invitations/Frames/F28012026_04.jsx +1 -2
- package/src/Invitations/Themes/T03022026_01.jsx +4 -3
- package/src/Invitations/Themes/T05022026_01.jsx +3 -3
- package/src/Invitations/Themes/T20012026_01.jsx +43 -42
- package/src/Invitations/Themes/T28012026_01.jsx +4 -3
- package/src/compositions.jsx +8 -8
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
|
-
import { useCurrentFrame, useVideoConfig, interpolate } from "remotion";
|
|
2
|
+
import { useCurrentFrame, useVideoConfig, interpolate, Img, staticFile } from "remotion";
|
|
3
3
|
|
|
4
|
-
export const BlowingLeaves28012026 = ({ startAfter = 2, count =
|
|
4
|
+
export const BlowingLeaves28012026 = ({ startAfter = 2, count = 5 }) => {
|
|
5
5
|
const frame = useCurrentFrame();
|
|
6
6
|
const { fps = 30 } = useVideoConfig();
|
|
7
7
|
|
|
8
8
|
const delayFrames = fps * startAfter;
|
|
9
|
+
const leafSrc = staticFile("video-images/28012026-PinkLeaf.webp");
|
|
9
10
|
|
|
10
|
-
// 🍃 Generate leaves once
|
|
11
|
+
// 🍃 Generate leaves once (ULTRA SLOW SETTINGS)
|
|
11
12
|
const leaves = useMemo(() => {
|
|
12
13
|
return Array.from({ length: count }).map(() => ({
|
|
13
14
|
x: Math.random() * 100,
|
|
14
15
|
y: Math.random() * 100,
|
|
15
|
-
size:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
size: 40 + Math.random() * 25,
|
|
17
|
+
|
|
18
|
+
// 🌿 VERY slow speeds
|
|
19
|
+
speedX: 1 + Math.random() * 1, // % per second
|
|
20
|
+
speedY: 0.1 + Math.random() * 0.1, // % per second
|
|
21
|
+
|
|
20
22
|
phase: Math.random() * 200,
|
|
21
23
|
}));
|
|
22
24
|
}, [count]);
|
|
@@ -24,33 +26,39 @@ export const BlowingLeaves28012026 = ({ startAfter = 2, count = 30 }) => {
|
|
|
24
26
|
return (
|
|
25
27
|
<>
|
|
26
28
|
{leaves.map((l, i) => {
|
|
27
|
-
const local = frame - delayFrames;
|
|
29
|
+
const local = Math.max(0, frame - delayFrames);
|
|
30
|
+
|
|
31
|
+
// ⭐ Convert frame → seconds (IMPORTANT)
|
|
32
|
+
const time = local / fps;
|
|
28
33
|
|
|
29
|
-
const appear = interpolate(local, [0, fps], [0, 1], {
|
|
34
|
+
const appear = interpolate(local, [0, fps * 2], [0, 1], {
|
|
30
35
|
extrapolateLeft: "clamp",
|
|
31
36
|
extrapolateRight: "clamp",
|
|
32
37
|
});
|
|
33
38
|
|
|
34
|
-
//
|
|
35
|
-
const moveX = ((
|
|
39
|
+
// 🌿 Slow horizontal blowing
|
|
40
|
+
const moveX = ((l.x + time * l.speedX + l.phase) % 120) - 10;
|
|
36
41
|
|
|
37
|
-
// Gentle vertical
|
|
42
|
+
// 🌿 Gentle floating vertical
|
|
38
43
|
const moveY =
|
|
39
44
|
l.y +
|
|
40
|
-
Math.sin((
|
|
41
|
-
|
|
45
|
+
Math.sin((time * 2 + l.phase) / 2) * 10 +
|
|
46
|
+
time * l.speedY;
|
|
42
47
|
|
|
43
|
-
//
|
|
44
|
-
const rotate =
|
|
48
|
+
// 🌿 Super slow rotation
|
|
49
|
+
const rotate =
|
|
50
|
+
Math.sin((time + l.phase) / 2) * 15;
|
|
45
51
|
|
|
46
52
|
return (
|
|
47
|
-
<
|
|
53
|
+
<Img
|
|
48
54
|
key={i}
|
|
55
|
+
src={leafSrc}
|
|
49
56
|
style={{
|
|
50
57
|
position: "absolute",
|
|
51
58
|
left: `${moveX}%`,
|
|
52
59
|
top: `${moveY % 110}%`,
|
|
53
|
-
|
|
60
|
+
width: l.size,
|
|
61
|
+
height: "auto",
|
|
54
62
|
opacity: appear,
|
|
55
63
|
transform: `
|
|
56
64
|
translate(-50%, -50%)
|
|
@@ -58,9 +66,7 @@ export const BlowingLeaves28012026 = ({ startAfter = 2, count = 30 }) => {
|
|
|
58
66
|
`,
|
|
59
67
|
pointerEvents: "none",
|
|
60
68
|
}}
|
|
61
|
-
|
|
62
|
-
🍁
|
|
63
|
-
</div>
|
|
69
|
+
/>
|
|
64
70
|
);
|
|
65
71
|
})}
|
|
66
72
|
</>
|
|
@@ -13,7 +13,7 @@ export const CoupleWalk20012026 = () => {
|
|
|
13
13
|
const { fps, height } = useVideoConfig();
|
|
14
14
|
|
|
15
15
|
/* -----------------------------⏳ WALK SETTINGS ------------------------------*/
|
|
16
|
-
const delaySeconds = 0
|
|
16
|
+
const delaySeconds = 0;
|
|
17
17
|
const walkDurationSeconds = 5;
|
|
18
18
|
const delayFrames = fps * delaySeconds;
|
|
19
19
|
const walkFrames = fps * walkDurationSeconds;
|
|
@@ -56,7 +56,7 @@ export const CoupleWalk20012026 = () => {
|
|
|
56
56
|
|
|
57
57
|
{/* 👰🤵 COUPLE (BOTTOM-CENTER) */}
|
|
58
58
|
<Img
|
|
59
|
-
src={staticFile("video-images/20012026-couple-walk.
|
|
59
|
+
src={staticFile("video-images/20012026-couple-walk.webp")}
|
|
60
60
|
style={{
|
|
61
61
|
position: "absolute",
|
|
62
62
|
left: "50%",
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "remotion";
|
|
10
10
|
|
|
11
11
|
/* 🌸 FALLING EMOJI FLOWER – MULTI LINE */
|
|
12
|
-
const FallingEmojiFlower = ({ index, row = 0, startAfter =
|
|
12
|
+
const FallingEmojiFlower = ({ index, row = 0, startAfter = 0 }) => {
|
|
13
13
|
const frame = useCurrentFrame();
|
|
14
14
|
const { height, width, fps } = useVideoConfig();
|
|
15
15
|
|
|
@@ -20,7 +20,7 @@ const FallingEmojiFlower = ({ index, row = 0, startAfter = 6 }) => {
|
|
|
20
20
|
const baseX =
|
|
21
21
|
width / 2 - stripWidth / 2 + ((index * 50) % stripWidth);
|
|
22
22
|
|
|
23
|
-
/* 🌸 ROW OFFSET
|
|
23
|
+
/* 🌸 ROW OFFSET */
|
|
24
24
|
const rowOffsetY = row * 60;
|
|
25
25
|
|
|
26
26
|
const individualDelay = index * 10 + row * 15;
|
|
@@ -28,15 +28,10 @@ const FallingEmojiFlower = ({ index, row = 0, startAfter = 6 }) => {
|
|
|
28
28
|
|
|
29
29
|
const localFrame = frame - delayFrames - individualDelay;
|
|
30
30
|
|
|
31
|
-
const progress = interpolate(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{
|
|
36
|
-
extrapolateLeft: "clamp",
|
|
37
|
-
extrapolateRight: "clamp",
|
|
38
|
-
}
|
|
39
|
-
);
|
|
31
|
+
const progress = interpolate(localFrame, [0, duration], [0, 1], {
|
|
32
|
+
extrapolateLeft: "clamp",
|
|
33
|
+
extrapolateRight: "clamp",
|
|
34
|
+
});
|
|
40
35
|
|
|
41
36
|
const translateY = interpolate(
|
|
42
37
|
progress,
|
|
@@ -51,24 +46,22 @@ const FallingEmojiFlower = ({ index, row = 0, startAfter = 6 }) => {
|
|
|
51
46
|
|
|
52
47
|
const rotate = progress * 360;
|
|
53
48
|
|
|
54
|
-
// ❌ Do not render before start or after finish
|
|
55
49
|
if (localFrame < 0 || localFrame > duration) return null;
|
|
56
50
|
|
|
57
51
|
return (
|
|
58
|
-
<
|
|
52
|
+
<Img
|
|
53
|
+
src={staticFile("video-images/05022026-Flower.webp")}
|
|
59
54
|
style={{
|
|
60
55
|
position: "absolute",
|
|
61
56
|
left: baseX,
|
|
62
57
|
top: translateY,
|
|
63
|
-
|
|
64
|
-
opacity: 0.
|
|
58
|
+
width: "10%",
|
|
59
|
+
opacity: 0.9,
|
|
65
60
|
transform: `translateX(${sway}px) rotate(${rotate}deg)`,
|
|
66
61
|
pointerEvents: "none",
|
|
67
62
|
userSelect: "none",
|
|
68
63
|
}}
|
|
69
|
-
|
|
70
|
-
{["🌸", "🌺"][index % 2]}
|
|
71
|
-
</div>
|
|
64
|
+
/>
|
|
72
65
|
);
|
|
73
66
|
};
|
|
74
67
|
|
|
@@ -77,18 +70,18 @@ export const FlowersSide20012026 = ({ startAfter = 1 }) => {
|
|
|
77
70
|
const { fps } = useVideoConfig();
|
|
78
71
|
|
|
79
72
|
const delayFrames = fps * startAfter;
|
|
80
|
-
|
|
73
|
+
const revealDuration = fps * 2.5; // ⏱ 2 seconds
|
|
81
74
|
|
|
82
|
-
const revealProgress = interpolate(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
);
|
|
75
|
+
const revealProgress = interpolate(
|
|
76
|
+
frame - delayFrames,
|
|
77
|
+
[0, revealDuration],
|
|
78
|
+
[0, 1],
|
|
79
|
+
{
|
|
80
|
+
extrapolateLeft: "clamp",
|
|
81
|
+
extrapolateRight: "clamp",
|
|
82
|
+
easing: Easing.out(Easing.cubic),
|
|
83
|
+
}
|
|
84
|
+
);
|
|
92
85
|
|
|
93
86
|
return (
|
|
94
87
|
<>
|
|
@@ -105,36 +98,36 @@ const revealProgress = interpolate(
|
|
|
105
98
|
)}
|
|
106
99
|
{/* 🌸 LEFT FLOWER DECOR */}
|
|
107
100
|
<Img
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
101
|
+
src={staticFile("video-images/20012026-floral-left.webp")}
|
|
102
|
+
style={{
|
|
103
|
+
position: "absolute",
|
|
104
|
+
left: 0,
|
|
105
|
+
bottom: 370,
|
|
106
|
+
width: "100%",
|
|
107
|
+
opacity: revealProgress,
|
|
108
|
+
transform: `
|
|
116
109
|
translateX(${interpolate(revealProgress, [0, 1], [-120, -30])}px)
|
|
117
110
|
scale(${interpolate(revealProgress, [0, 1], [0.96, 1])})
|
|
118
111
|
`,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
/>
|
|
112
|
+
pointerEvents: "none",
|
|
113
|
+
}}
|
|
114
|
+
/>
|
|
122
115
|
{/* 🌸 RIGHT FLOWER DECOR */}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
116
|
+
<Img
|
|
117
|
+
src={staticFile("video-images/20012026-floral-right.webp")}
|
|
118
|
+
style={{
|
|
119
|
+
position: "absolute",
|
|
120
|
+
right: 0,
|
|
121
|
+
bottom: 370,
|
|
122
|
+
width: "100%",
|
|
123
|
+
opacity: revealProgress,
|
|
124
|
+
transform: `
|
|
132
125
|
translateX(${interpolate(revealProgress, [0, 1], [120, 30])}px)
|
|
133
126
|
scale(${interpolate(revealProgress, [0, 1], [0.96, 1])})
|
|
134
127
|
`,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
/>
|
|
128
|
+
pointerEvents: "none",
|
|
129
|
+
}}
|
|
130
|
+
/>
|
|
138
131
|
|
|
139
132
|
</>
|
|
140
133
|
);
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
Easing,
|
|
9
9
|
} from "remotion";
|
|
10
10
|
|
|
11
|
-
export const GroomBrideLoveScene20012026 = ({ startAfter = 3.5}) => {
|
|
11
|
+
export const GroomBrideLoveScene20012026 = ({ startAfter = 3.5 }) => {
|
|
12
12
|
const frame = useCurrentFrame();
|
|
13
13
|
const { fps, width } = useVideoConfig();
|
|
14
14
|
|
|
@@ -60,10 +60,10 @@ export const GroomBrideLoveScene20012026 = ({ startAfter = 3.5}) => {
|
|
|
60
60
|
const depthScale = 1 + Math.sin(walkFrame / 18) * 0.03;
|
|
61
61
|
const rotateZ = Math.sin(walkFrame / 30) * 1.2;
|
|
62
62
|
|
|
63
|
-
/* ---------------- BRIDE TURN (SAFE FLIP) ---------------- */
|
|
64
|
-
const meetFrame = walkDelay + walkDuration;
|
|
65
|
-
const brideTurnDuration = fps * 0.6;
|
|
66
|
-
const brideFlip = interpolate(
|
|
63
|
+
/* ---------------- BRIDE TURN (SAFE FLIP) ---------------- */
|
|
64
|
+
const meetFrame = walkDelay + walkDuration;
|
|
65
|
+
const brideTurnDuration = fps * 0.6;
|
|
66
|
+
const brideFlip = interpolate(
|
|
67
67
|
frame,
|
|
68
68
|
[meetFrame, meetFrame + brideTurnDuration],
|
|
69
69
|
[1, -1], // RIGHT → LEFT
|
|
@@ -75,12 +75,12 @@ const brideFlip = interpolate(
|
|
|
75
75
|
);
|
|
76
76
|
|
|
77
77
|
/* ---------------- LOVE EMOJI ---------------- */
|
|
78
|
-
|
|
78
|
+
const loveStart = meetFrame + brideTurnDuration;
|
|
79
79
|
return (
|
|
80
80
|
<>
|
|
81
81
|
{/* 🤵 GROOM (SHOW → PAUSE → WALK) */}
|
|
82
82
|
<Img
|
|
83
|
-
src={staticFile("video-images/20012026-groom.
|
|
83
|
+
src={staticFile("video-images/20012026-groom.webp")}
|
|
84
84
|
style={{
|
|
85
85
|
position: "absolute",
|
|
86
86
|
bottom: 0,
|
|
@@ -97,20 +97,20 @@ const brideFlip = interpolate(
|
|
|
97
97
|
/>
|
|
98
98
|
|
|
99
99
|
{/* 👰 BRIDE (FIXED, SHOWS SAME TIME) */}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
100
|
+
<Img
|
|
101
|
+
src={staticFile("video-images/20012026-bride.webp")}
|
|
102
|
+
style={{
|
|
103
|
+
position: "absolute",
|
|
104
|
+
bottom: 0,
|
|
105
|
+
width: "40%",
|
|
106
|
+
opacity,
|
|
107
|
+
transform: `
|
|
108
108
|
translateX(${brideX}px)
|
|
109
109
|
scaleX(${brideFlip})
|
|
110
110
|
`,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
/>
|
|
111
|
+
transformOrigin: "bottom center",
|
|
112
|
+
}}
|
|
113
|
+
/>
|
|
114
114
|
{/* ❤️ MULTIPLE FLOATING LOVE EMOJIS */}
|
|
115
115
|
{frame > loveStart &&
|
|
116
116
|
Array.from({ length: 16 }).map((_, i) => {
|
|
@@ -134,28 +134,27 @@ const brideFlip = interpolate(
|
|
|
134
134
|
);
|
|
135
135
|
|
|
136
136
|
const spreadX =
|
|
137
|
-
brideX + 60
|
|
137
|
+
brideX + 60 + Math.sin(i * 35) * 100;
|
|
138
138
|
|
|
139
139
|
const scale = 0.7 + (i % 5) * 0.12;
|
|
140
140
|
|
|
141
141
|
return (
|
|
142
|
-
<
|
|
143
|
-
|
|
142
|
+
<Img
|
|
143
|
+
key={i}
|
|
144
|
+
src={staticFile("video-images/28012026-Heart.webp")}
|
|
144
145
|
style={{
|
|
145
146
|
position: "absolute",
|
|
146
147
|
bottom: "30%",
|
|
147
148
|
left: spreadX,
|
|
148
|
-
|
|
149
|
+
width: 60,
|
|
149
150
|
opacity: emojiOpacity,
|
|
150
151
|
transform: `
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
translateY(${floatY}px)
|
|
153
|
+
scale(${scale})
|
|
154
|
+
`,
|
|
154
155
|
pointerEvents: "none",
|
|
155
156
|
}}
|
|
156
|
-
|
|
157
|
-
💖
|
|
158
|
-
</div>
|
|
157
|
+
/>
|
|
159
158
|
);
|
|
160
159
|
})}
|
|
161
160
|
</>
|
|
@@ -1,9 +1,91 @@
|
|
|
1
|
+
// import React from "react";
|
|
2
|
+
// import { useCurrentFrame, useVideoConfig, interpolate, Easing } from "remotion";
|
|
3
|
+
|
|
4
|
+
// export const HeartFlight28012026 = ({
|
|
5
|
+
// emoji = "💖",
|
|
6
|
+
// startAfter = 3,
|
|
7
|
+
// }) => {
|
|
8
|
+
// const frame = useCurrentFrame();
|
|
9
|
+
// const { fps, width, height } = useVideoConfig();
|
|
10
|
+
|
|
11
|
+
// const GLOBAL_DELAY = fps * startAfter;
|
|
12
|
+
|
|
13
|
+
// const hearts = [
|
|
14
|
+
// { sx: 0.1, sy: 0.9, ex: 0.8, ey: 0.2, delay: 0 },
|
|
15
|
+
// { sx: 0.9, sy: 0.85, ex: 0.2, ey: 0.1, delay: 20 },
|
|
16
|
+
// { sx: 0.3, sy: 1.0, ex: 0.7, ey: 0.3, delay: 40 },
|
|
17
|
+
// { sx: 0.4, sy: 0.9, ex: 0.8, ey: 0.2, delay: 10 },
|
|
18
|
+
// { sx: 0.5, sy: 0.85, ex: 0.2, ey: 0.1, delay: 30 },
|
|
19
|
+
// { sx: 0.8, sy: 1.0, ex: 0.7, ey: 0.3, delay: 50 },
|
|
20
|
+
// ];
|
|
21
|
+
|
|
22
|
+
// return (
|
|
23
|
+
// <>
|
|
24
|
+
// {hearts.map((h, i) => {
|
|
25
|
+
// const localFrame = frame - GLOBAL_DELAY - h.delay;
|
|
26
|
+
|
|
27
|
+
// const progress = interpolate(localFrame, [0, fps * 6], [0, 1], {
|
|
28
|
+
// extrapolateLeft: "clamp",
|
|
29
|
+
// extrapolateRight: "clamp",
|
|
30
|
+
// easing: Easing.inOut(Easing.ease),
|
|
31
|
+
// });
|
|
32
|
+
|
|
33
|
+
// const x = interpolate(progress, [0, 1], [
|
|
34
|
+
// h.sx * width,
|
|
35
|
+
// h.ex * width,
|
|
36
|
+
// ]);
|
|
37
|
+
|
|
38
|
+
// const y =
|
|
39
|
+
// interpolate(progress, [0, 1], [
|
|
40
|
+
// h.sy * height,
|
|
41
|
+
// h.ey * height,
|
|
42
|
+
// ]) +
|
|
43
|
+
// Math.sin(frame / 10 + i * 20) * 25;
|
|
44
|
+
|
|
45
|
+
// const scale = interpolate(progress, [0, 0.1, 0.9, 1], [0, 1, 1, 0.6]);
|
|
46
|
+
|
|
47
|
+
// const opacity = progress > 0.05 && progress < 0.95 ? 1 : 0;
|
|
48
|
+
|
|
49
|
+
// return (
|
|
50
|
+
// <div
|
|
51
|
+
// key={i}
|
|
52
|
+
// style={{
|
|
53
|
+
// position: "absolute",
|
|
54
|
+
// left: x,
|
|
55
|
+
// top: y,
|
|
56
|
+
// fontSize: 70,
|
|
57
|
+
// opacity,
|
|
58
|
+
// transform: `
|
|
59
|
+
// translate(-50%, -50%)
|
|
60
|
+
// scale(${scale})
|
|
61
|
+
// rotate(${Math.sin(localFrame / 15 + i) * 15}deg)
|
|
62
|
+
// `,
|
|
63
|
+
// pointerEvents: "none",
|
|
64
|
+
// }}
|
|
65
|
+
// >
|
|
66
|
+
// {emoji}
|
|
67
|
+
// </div>
|
|
68
|
+
// );
|
|
69
|
+
// })}
|
|
70
|
+
// </>
|
|
71
|
+
// );
|
|
72
|
+
// };
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
1
76
|
import React from "react";
|
|
2
|
-
import {
|
|
77
|
+
import {
|
|
78
|
+
useCurrentFrame,
|
|
79
|
+
useVideoConfig,
|
|
80
|
+
interpolate,
|
|
81
|
+
Easing,
|
|
82
|
+
Img,
|
|
83
|
+
staticFile,
|
|
84
|
+
} from "remotion";
|
|
3
85
|
|
|
4
86
|
export const HeartFlight28012026 = ({
|
|
5
|
-
emoji = "💖",
|
|
6
87
|
startAfter = 3,
|
|
88
|
+
heartImage = "heart.png", // image file name from public folder
|
|
7
89
|
}) => {
|
|
8
90
|
const frame = useCurrentFrame();
|
|
9
91
|
const { fps, width, height } = useVideoConfig();
|
|
@@ -53,7 +135,6 @@ export const HeartFlight28012026 = ({
|
|
|
53
135
|
position: "absolute",
|
|
54
136
|
left: x,
|
|
55
137
|
top: y,
|
|
56
|
-
fontSize: 70,
|
|
57
138
|
opacity,
|
|
58
139
|
transform: `
|
|
59
140
|
translate(-50%, -50%)
|
|
@@ -63,7 +144,13 @@ export const HeartFlight28012026 = ({
|
|
|
63
144
|
pointerEvents: "none",
|
|
64
145
|
}}
|
|
65
146
|
>
|
|
66
|
-
|
|
147
|
+
<Img
|
|
148
|
+
src={staticFile("video-images/28012026-Heart.webp")}
|
|
149
|
+
style={{
|
|
150
|
+
width: 70,
|
|
151
|
+
height: 70,
|
|
152
|
+
}}
|
|
153
|
+
/>
|
|
67
154
|
</div>
|
|
68
155
|
);
|
|
69
156
|
})}
|
|
@@ -68,7 +68,7 @@ export const SideTrees20012026 = ({ startAfter = 1 }) => {
|
|
|
68
68
|
<>
|
|
69
69
|
{/* 🌳 LEFT TREE */}
|
|
70
70
|
<Img
|
|
71
|
-
src={staticFile("video-images/20012026-tree-left.
|
|
71
|
+
src={staticFile("video-images/20012026-tree-left.webp")}
|
|
72
72
|
style={{
|
|
73
73
|
position: "absolute",
|
|
74
74
|
left: 0,
|
|
@@ -85,7 +85,7 @@ export const SideTrees20012026 = ({ startAfter = 1 }) => {
|
|
|
85
85
|
|
|
86
86
|
{/* 🌳 RIGHT TREE */}
|
|
87
87
|
<Img
|
|
88
|
-
src={staticFile("video-images/20012026-tree-right.
|
|
88
|
+
src={staticFile("video-images/20012026-tree-right.webp")}
|
|
89
89
|
style={{
|
|
90
90
|
position: "absolute",
|
|
91
91
|
right: 0,
|
|
@@ -159,11 +159,12 @@ export const F03022026_05 = ({
|
|
|
159
159
|
}}
|
|
160
160
|
>
|
|
161
161
|
<Img
|
|
162
|
-
src={staticFile("video-images/03022026-krishnaradha-
|
|
162
|
+
src={staticFile("video-images/03022026-krishnaradha-52.webp")}
|
|
163
163
|
style={{
|
|
164
164
|
position: "absolute",
|
|
165
|
-
top: "
|
|
165
|
+
top: "40%",
|
|
166
166
|
left: "50%",
|
|
167
|
+
width:"80%",
|
|
167
168
|
objectFit: "cover",
|
|
168
169
|
opacity: imageOpacity * imageExitOpacity,
|
|
169
170
|
transform: `translateX(-50%) translateX(${moveX}px) translateY(${imageExitY}px)`
|
|
@@ -179,7 +180,7 @@ export const F03022026_05 = ({
|
|
|
179
180
|
justifyContent: "center",
|
|
180
181
|
alignItems: "center",
|
|
181
182
|
opacity: msgOpacity * msgExitOpacity,
|
|
182
|
-
transform: `translateY(-
|
|
183
|
+
transform: `translateY(-20%) translateY(${msgY + msgExitY}px)`,
|
|
183
184
|
}}
|
|
184
185
|
>
|
|
185
186
|
<div
|
|
@@ -99,7 +99,7 @@ export const F05022026_01 = () => {
|
|
|
99
99
|
<AbsoluteFill
|
|
100
100
|
style={{
|
|
101
101
|
display: "flex",
|
|
102
|
-
paddingTop: "
|
|
102
|
+
paddingTop: "15%",
|
|
103
103
|
alignItems: "center",
|
|
104
104
|
opacity: fade(ganeshStart) * ganeshExitOpacity,
|
|
105
105
|
transform: `translateY(${ganeshExitY}px)`,
|
|
@@ -108,7 +108,7 @@ export const F05022026_01 = () => {
|
|
|
108
108
|
<Img
|
|
109
109
|
src={staticFile("video-images/05022026-Ganesh.webp")}
|
|
110
110
|
style={{
|
|
111
|
-
width: "
|
|
111
|
+
width: "50%",
|
|
112
112
|
objectFit: "contain",
|
|
113
113
|
transform: `scale(${ganeshScale * ganeshExitScale})`,
|
|
114
114
|
}}
|
|
@@ -20,7 +20,7 @@ export const F20012026_01 = ({
|
|
|
20
20
|
const { fps, width, height } = useVideoConfig();
|
|
21
21
|
|
|
22
22
|
/* -------------------- MESSAGE REVEAL -------------------- */
|
|
23
|
-
const messageStart = fps *
|
|
23
|
+
const messageStart = fps * 2;
|
|
24
24
|
const messageOpacity = interpolate(
|
|
25
25
|
frame,
|
|
26
26
|
[messageStart, messageStart + 15],
|
|
@@ -54,6 +54,49 @@ export const F20012026_01 = ({
|
|
|
54
54
|
const brideAnim = reveal(brideStart);
|
|
55
55
|
const wedsAnim = reveal(wedsStart);
|
|
56
56
|
const groomAnim = reveal(groomStart);
|
|
57
|
+
|
|
58
|
+
const sceneDuration = fps * 8;
|
|
59
|
+
const exitDuration = fps * 1.3; // last 1 sec
|
|
60
|
+
const exitStart = sceneDuration - exitDuration;
|
|
61
|
+
|
|
62
|
+
const parts = 5;
|
|
63
|
+
const partDuration = exitDuration / parts;
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const getExitAnim = (index) => {
|
|
67
|
+
const start = exitStart + partDuration * index;
|
|
68
|
+
const end = start + partDuration;
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
opacity: interpolate(
|
|
72
|
+
frame,
|
|
73
|
+
[start, end],
|
|
74
|
+
[1, 0],
|
|
75
|
+
{
|
|
76
|
+
extrapolateLeft: "clamp",
|
|
77
|
+
extrapolateRight: "clamp",
|
|
78
|
+
easing: Easing.out(Easing.cubic),
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
|
|
82
|
+
translateY: interpolate(
|
|
83
|
+
frame,
|
|
84
|
+
[start, end],
|
|
85
|
+
[0, -80],
|
|
86
|
+
{
|
|
87
|
+
extrapolateLeft: "clamp",
|
|
88
|
+
extrapolateRight: "clamp",
|
|
89
|
+
}
|
|
90
|
+
),
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const messageExit = getExitAnim(0);
|
|
95
|
+
const brideExit = getExitAnim(1);
|
|
96
|
+
const wedsExit = getExitAnim(2);
|
|
97
|
+
const groomExit = getExitAnim(3);
|
|
98
|
+
const coupleExit = getExitAnim(4);
|
|
99
|
+
|
|
57
100
|
return (
|
|
58
101
|
<AbsoluteFill style={{ overflow: "hidden" }}>
|
|
59
102
|
|
|
@@ -91,6 +134,8 @@ export const F20012026_01 = ({
|
|
|
91
134
|
lineHeight: 1.2,
|
|
92
135
|
opacity: messageOpacity,
|
|
93
136
|
transform: `translateY(${messageTranslateY}px)`,
|
|
137
|
+
opacity: messageOpacity * messageExit.opacity,
|
|
138
|
+
transform: `translateY(${messageTranslateY + messageExit.translateY}px)`,
|
|
94
139
|
}}
|
|
95
140
|
>
|
|
96
141
|
{welcomeMessage}
|
|
@@ -120,8 +165,10 @@ export const F20012026_01 = ({
|
|
|
120
165
|
whiteSpace: "normal",
|
|
121
166
|
wordBreak: "break-word",
|
|
122
167
|
overflowWrap: "break-word",
|
|
123
|
-
opacity: brideAnim.opacity,
|
|
124
|
-
transform: `translateY(${brideAnim.translateY}px)`,
|
|
168
|
+
// opacity: brideAnim.opacity,
|
|
169
|
+
// transform: `translateY(${brideAnim.translateY}px)`,
|
|
170
|
+
opacity: brideAnim.opacity * brideExit.opacity,
|
|
171
|
+
transform: `translateY(${brideAnim.translateY + brideExit.translateY}px)`,
|
|
125
172
|
}}
|
|
126
173
|
>
|
|
127
174
|
{firstName}
|
|
@@ -133,8 +180,10 @@ export const F20012026_01 = ({
|
|
|
133
180
|
fontFamily: "Great Vibes",
|
|
134
181
|
color: "#D4AF37",
|
|
135
182
|
margin: "10px 0",
|
|
136
|
-
opacity: wedsAnim.opacity,
|
|
137
|
-
transform: `translateY(${wedsAnim.translateY}px)`,
|
|
183
|
+
// opacity: wedsAnim.opacity,
|
|
184
|
+
// transform: `translateY(${wedsAnim.translateY}px)`,
|
|
185
|
+
opacity: wedsAnim.opacity * wedsExit.opacity,
|
|
186
|
+
transform: `translateY(${wedsAnim.translateY + wedsExit.translateY}px)`,
|
|
138
187
|
}}
|
|
139
188
|
>
|
|
140
189
|
weds
|
|
@@ -154,9 +203,10 @@ export const F20012026_01 = ({
|
|
|
154
203
|
whiteSpace: "normal",
|
|
155
204
|
wordBreak: "break-word",
|
|
156
205
|
overflowWrap: "break-word",
|
|
157
|
-
opacity: groomAnim.opacity,
|
|
158
|
-
transform: `translateY(${groomAnim.translateY}px)`,
|
|
159
|
-
|
|
206
|
+
// opacity: groomAnim.opacity,
|
|
207
|
+
// transform: `translateY(${groomAnim.translateY}px)`,
|
|
208
|
+
opacity: groomAnim.opacity * groomExit.opacity,
|
|
209
|
+
transform: `translateY(${groomAnim.translateY + groomExit.translateY}px)`,
|
|
160
210
|
}}
|
|
161
211
|
>
|
|
162
212
|
{secondName}
|
|
@@ -67,7 +67,7 @@ export const F20012026_02 = ({
|
|
|
67
67
|
>
|
|
68
68
|
{/* Curtain */}
|
|
69
69
|
<Img
|
|
70
|
-
src={staticFile("video-images/20012026-curtain-floral.
|
|
70
|
+
src={staticFile("video-images/20012026-curtain-floral.webp")}
|
|
71
71
|
style={{
|
|
72
72
|
position: "absolute",
|
|
73
73
|
left: "50%",
|
|
@@ -179,7 +179,7 @@ export const F20012026_02 = ({
|
|
|
179
179
|
<div
|
|
180
180
|
style={{
|
|
181
181
|
fontSize: 40,
|
|
182
|
-
fontWeight:"400",
|
|
182
|
+
fontWeight:"400",
|
|
183
183
|
fontFamily: "Great Vibes",
|
|
184
184
|
color: "#2F6B4F",
|
|
185
185
|
}}
|
|
@@ -79,7 +79,7 @@ export const F20012026_03 = ({
|
|
|
79
79
|
}
|
|
80
80
|
);
|
|
81
81
|
|
|
82
|
-
return (
|
|
82
|
+
return (
|
|
83
83
|
<AbsoluteFill
|
|
84
84
|
style={{
|
|
85
85
|
transformOrigin: "center center",
|
|
@@ -87,7 +87,7 @@ export const F20012026_03 = ({
|
|
|
87
87
|
}}
|
|
88
88
|
>
|
|
89
89
|
<Img
|
|
90
|
-
src={staticFile("video-images/20012026-wedding-gate.
|
|
90
|
+
src={staticFile("video-images/20012026-wedding-gate.webp")}
|
|
91
91
|
style={{
|
|
92
92
|
position: "absolute",
|
|
93
93
|
top: 0,
|
|
@@ -135,8 +135,7 @@ const nameTranslateX = interpolate(
|
|
|
135
135
|
overflow: "hidden",
|
|
136
136
|
}}
|
|
137
137
|
>
|
|
138
|
-
|
|
139
|
-
<HeartFlight28012026 emoji="💗" />
|
|
138
|
+
<HeartFlight28012026 />
|
|
140
139
|
|
|
141
140
|
{/* Top Border */}
|
|
142
141
|
<div
|
|
@@ -37,14 +37,15 @@ export const T03022026_01 = ({
|
|
|
37
37
|
const fadeOutStart = durationInFrames - fadeDuration;
|
|
38
38
|
const musicVolume = interpolate(
|
|
39
39
|
frame,
|
|
40
|
-
[0, fadeOutStart, durationInFrames],
|
|
41
|
-
[0.4, 0.4, 0],
|
|
40
|
+
[0, fps, fadeOutStart, durationInFrames],
|
|
41
|
+
[0, 0.4, 0.4, 0],
|
|
42
42
|
{
|
|
43
43
|
easing: Easing.inOut(Easing.ease),
|
|
44
44
|
extrapolateLeft: "clamp",
|
|
45
45
|
extrapolateRight: "clamp",
|
|
46
46
|
}
|
|
47
47
|
);
|
|
48
|
+
|
|
48
49
|
const slideDuration = 1 * fps;
|
|
49
50
|
|
|
50
51
|
const firstSceneContent = 5 * fps;
|
|
@@ -266,4 +267,4 @@ export const T03022026_01 = ({
|
|
|
266
267
|
);
|
|
267
268
|
};
|
|
268
269
|
|
|
269
|
-
T03022026_01.duration =
|
|
270
|
+
T03022026_01.duration = 24 * 38;
|
|
@@ -36,8 +36,8 @@ export const T05022026_01 = ({
|
|
|
36
36
|
const fadeOutStart = durationInFrames - fadeDuration;
|
|
37
37
|
const musicVolume = interpolate(
|
|
38
38
|
frame,
|
|
39
|
-
[0, fadeOutStart, durationInFrames],
|
|
40
|
-
[0.4, 0.4, 0],
|
|
39
|
+
[0, fps, fadeOutStart, durationInFrames],
|
|
40
|
+
[0, 0.4, 0.4, 0],
|
|
41
41
|
{
|
|
42
42
|
easing: Easing.inOut(Easing.ease),
|
|
43
43
|
extrapolateLeft: "clamp",
|
|
@@ -256,4 +256,4 @@ export const T05022026_01 = ({
|
|
|
256
256
|
);
|
|
257
257
|
};
|
|
258
258
|
|
|
259
|
-
T05022026_01.duration =
|
|
259
|
+
T05022026_01.duration = 24 * 30;
|
|
@@ -35,8 +35,8 @@ export const T20012026_01 = ({
|
|
|
35
35
|
const fadeOutStart = durationInFrames - fadeDuration;
|
|
36
36
|
const musicVolume = interpolate(
|
|
37
37
|
frame,
|
|
38
|
-
[0, fadeOutStart, durationInFrames],
|
|
39
|
-
[0.4, 0.4, 0],
|
|
38
|
+
[0, fps, fadeOutStart, durationInFrames],
|
|
39
|
+
[0, 0.4, 0.4, 0],
|
|
40
40
|
{
|
|
41
41
|
easing: Easing.inOut(Easing.ease),
|
|
42
42
|
extrapolateLeft: "clamp",
|
|
@@ -44,6 +44,13 @@ export const T20012026_01 = ({
|
|
|
44
44
|
}
|
|
45
45
|
);
|
|
46
46
|
|
|
47
|
+
// 🎬 Change timing here
|
|
48
|
+
const scene1Duration = 8 * fps;
|
|
49
|
+
const scene2Duration = 10 * fps;
|
|
50
|
+
const scene3Duration = 12 * fps;
|
|
51
|
+
|
|
52
|
+
const transitionDuration = 1 * fps;
|
|
53
|
+
|
|
47
54
|
/* ---------------- SAFE DATA ---------------- */
|
|
48
55
|
|
|
49
56
|
const whoIsCreating =
|
|
@@ -98,11 +105,6 @@ export const T20012026_01 = ({
|
|
|
98
105
|
const venueAddress =
|
|
99
106
|
venue?.address || formData?.venue_address || "";
|
|
100
107
|
|
|
101
|
-
/* ---------------- TIMING ---------------- */
|
|
102
|
-
|
|
103
|
-
const framesPerPage = Math.floor(durationInFrames / 3);
|
|
104
|
-
const transitionDuration = Math.floor(framesPerPage * 0.25);
|
|
105
|
-
|
|
106
108
|
/* ---------------- PRELOAD IMAGES ---------------- */
|
|
107
109
|
|
|
108
110
|
const imagesToPreload = useMemo(
|
|
@@ -114,7 +116,9 @@ export const T20012026_01 = ({
|
|
|
114
116
|
staticFile("video-images/20012026-curtain-floral.webp"),
|
|
115
117
|
staticFile("video-images/20012026-floral-left.webp"),
|
|
116
118
|
staticFile("video-images/20012026-floral-right.webp"),
|
|
119
|
+
staticFile("video-images/05022026-Flower.webp"),
|
|
117
120
|
staticFile("video-images/20012026-groom.webp"),
|
|
121
|
+
staticFile("video-images/28012026-Heart.webp"),
|
|
118
122
|
staticFile("video-images/20012026-opening-gate.webp"),
|
|
119
123
|
staticFile("video-images/20012026-peacock.webp"),
|
|
120
124
|
staticFile("video-images/20012026-tree-left.webp"),
|
|
@@ -158,29 +162,33 @@ export const T20012026_01 = ({
|
|
|
158
162
|
volume={musicVolume}
|
|
159
163
|
/>
|
|
160
164
|
|
|
161
|
-
|
|
162
165
|
{/* ================= SCENE 1 ================= */}
|
|
163
|
-
<Sequence from={0} durationInFrames={
|
|
164
|
-
|
|
165
|
-
<Img
|
|
166
|
-
src={staticFile("video-images/20012026-bg.png")}
|
|
167
|
-
style={{ position: "absolute", width: "100%", height: "100%", objectFit: "cover" }}
|
|
168
|
-
/>
|
|
166
|
+
<Sequence from={0} durationInFrames={scene1Duration}>
|
|
167
|
+
<Page bg={backgrounds[0]}>
|
|
169
168
|
<F20012026_01
|
|
170
169
|
firstName={firstName}
|
|
171
170
|
secondName={secondName}
|
|
172
171
|
welcomeMessage={welcomeMessage}
|
|
173
172
|
/>
|
|
174
|
-
|
|
173
|
+
</Page>
|
|
174
|
+
</Sequence>
|
|
175
|
+
|
|
176
|
+
{/* ☁️ TRANSITION 1 */}
|
|
177
|
+
<Sequence
|
|
178
|
+
from={scene1Duration}
|
|
179
|
+
durationInFrames={transitionDuration}
|
|
180
|
+
>
|
|
181
|
+
<Page bg={backgrounds[0]}>
|
|
182
|
+
<InkSmokeTransition20012026 />
|
|
183
|
+
</Page>
|
|
175
184
|
</Sequence>
|
|
176
185
|
|
|
177
186
|
{/* ================= SCENE 2 ================= */}
|
|
178
|
-
<Sequence
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
/>
|
|
187
|
+
<Sequence
|
|
188
|
+
from={scene1Duration + transitionDuration}
|
|
189
|
+
durationInFrames={scene2Duration}
|
|
190
|
+
>
|
|
191
|
+
<Page bg={backgrounds[0]}>
|
|
184
192
|
<F20012026_02
|
|
185
193
|
firstName={firstName}
|
|
186
194
|
secondName={secondName}
|
|
@@ -190,43 +198,36 @@ export const T20012026_01 = ({
|
|
|
190
198
|
occasionDate={occasionDate}
|
|
191
199
|
fadeInDuration={transitionDuration}
|
|
192
200
|
/>
|
|
193
|
-
|
|
201
|
+
</Page>
|
|
194
202
|
</Sequence>
|
|
195
203
|
|
|
196
|
-
{/* ☁️ TRANSITION
|
|
204
|
+
{/* ☁️ TRANSITION 2 */}
|
|
197
205
|
<Sequence
|
|
198
|
-
from={
|
|
199
|
-
durationInFrames={transitionDuration
|
|
206
|
+
from={scene1Duration + transitionDuration + scene2Duration}
|
|
207
|
+
durationInFrames={transitionDuration}
|
|
200
208
|
>
|
|
201
|
-
<
|
|
209
|
+
<Page bg={backgrounds[0]}>
|
|
210
|
+
<InkSmokeTransition20012026 />
|
|
211
|
+
</Page>
|
|
202
212
|
</Sequence>
|
|
203
213
|
|
|
204
214
|
{/* ================= SCENE 3 ================= */}
|
|
205
|
-
<Sequence
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
/>
|
|
215
|
+
<Sequence
|
|
216
|
+
from={scene1Duration + transitionDuration + scene2Duration + transitionDuration}
|
|
217
|
+
durationInFrames={scene3Duration}
|
|
218
|
+
>
|
|
219
|
+
<Page bg={backgrounds[0]}>
|
|
211
220
|
<F20012026_03
|
|
212
221
|
eventDateTime={eventDateTime}
|
|
213
222
|
venueName={venueName}
|
|
214
223
|
venueAddress={venueAddress}
|
|
215
224
|
familyMember={familyMember}
|
|
216
225
|
/>
|
|
217
|
-
|
|
218
|
-
</Sequence>
|
|
219
|
-
|
|
220
|
-
{/* ☁️ TRANSITION 2 → 3 */}
|
|
221
|
-
<Sequence
|
|
222
|
-
from={framesPerPage * 2 - 2}
|
|
223
|
-
durationInFrames={transitionDuration + 2}
|
|
224
|
-
>
|
|
225
|
-
<InkSmokeTransition20012026 />
|
|
226
|
+
</Page>
|
|
226
227
|
</Sequence>
|
|
227
228
|
|
|
228
229
|
</AbsoluteFill>
|
|
229
230
|
);
|
|
230
231
|
};
|
|
231
232
|
|
|
232
|
-
T20012026_01.duration =
|
|
233
|
+
T20012026_01.duration = 24 * 30;
|
|
@@ -36,14 +36,15 @@ export const T28012026_01 = ({
|
|
|
36
36
|
const fadeOutStart = durationInFrames - fadeDuration;
|
|
37
37
|
const musicVolume = interpolate(
|
|
38
38
|
frame,
|
|
39
|
-
[0, fadeOutStart, durationInFrames],
|
|
40
|
-
[0.4, 0.4, 0],
|
|
39
|
+
[0, fps, fadeOutStart, durationInFrames],
|
|
40
|
+
[0, 0.4, 0.4, 0],
|
|
41
41
|
{
|
|
42
42
|
easing: Easing.inOut(Easing.ease),
|
|
43
43
|
extrapolateLeft: "clamp",
|
|
44
44
|
extrapolateRight: "clamp",
|
|
45
45
|
}
|
|
46
46
|
);
|
|
47
|
+
|
|
47
48
|
const firstSceneDuration = fps * 5;
|
|
48
49
|
const otherSceneDuration = fps * 8;
|
|
49
50
|
|
|
@@ -238,4 +239,4 @@ export const T28012026_01 = ({
|
|
|
238
239
|
);
|
|
239
240
|
}
|
|
240
241
|
|
|
241
|
-
T28012026_01.duration =
|
|
242
|
+
T28012026_01.duration = 24 * 37;
|
package/src/compositions.jsx
CHANGED
|
@@ -11,32 +11,32 @@ export const VideoCompositions = () => {
|
|
|
11
11
|
<Composition
|
|
12
12
|
id="T20012026-01"
|
|
13
13
|
component={T20012026_01}
|
|
14
|
-
fps={
|
|
15
|
-
durationInFrames={
|
|
14
|
+
fps={24}
|
|
15
|
+
durationInFrames={24 * 30}
|
|
16
16
|
width={1080}
|
|
17
17
|
height={1920}
|
|
18
18
|
/>
|
|
19
19
|
<Composition
|
|
20
20
|
id="T28012026-01"
|
|
21
21
|
component={T28012026_01}
|
|
22
|
-
fps={
|
|
23
|
-
durationInFrames={
|
|
22
|
+
fps={24}
|
|
23
|
+
durationInFrames={24 * 37}
|
|
24
24
|
width={1080}
|
|
25
25
|
height={1920}
|
|
26
26
|
/>
|
|
27
27
|
<Composition
|
|
28
28
|
id="T03022026-01"
|
|
29
29
|
component={T03022026_01}
|
|
30
|
-
fps={
|
|
31
|
-
durationInFrames={
|
|
30
|
+
fps={24}
|
|
31
|
+
durationInFrames={24 * 38}
|
|
32
32
|
width={1080}
|
|
33
33
|
height={1920}
|
|
34
34
|
/>
|
|
35
35
|
<Composition
|
|
36
36
|
id="T05022026-01"
|
|
37
37
|
component={T05022026_01}
|
|
38
|
-
fps={
|
|
39
|
-
durationInFrames={
|
|
38
|
+
fps={24}
|
|
39
|
+
durationInFrames={24 * 30}
|
|
40
40
|
width={1080}
|
|
41
41
|
height={1920}
|
|
42
42
|
/>
|