@evatril/video-templates 2.0.9 → 2.0.11
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-4.webp +0 -0
- package/public/video-images/03022026-krishnaradha-5.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/FlowerReveal_TL_BR_28012026.jsx +2 -3
- 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 +11 -23
- package/src/Invitations/Frames/F03022026_01.jsx +4 -5
- package/src/Invitations/Frames/F03022026_02.jsx +2 -4
- package/src/Invitations/Frames/F03022026_03.jsx +2 -3
- package/src/Invitations/Frames/F03022026_04.jsx +2 -3
- package/src/Invitations/Frames/F03022026_05.jsx +5 -5
- 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 +3 -2
- package/src/Invitations/Frames/F20012026_03.jsx +191 -207
- package/src/Invitations/Frames/F20012026_04.jsx +282 -0
- 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 +21 -20
- package/src/Invitations/Themes/T05022026_01.jsx +3 -3
- package/src/Invitations/Themes/T20012026_01.jsx +70 -42
- package/src/Invitations/Themes/T28012026_01.jsx +4 -3
- package/src/compositions.jsx +8 -8
- package/src/fonts/registerFonts.js +3 -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%",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import {
|
|
3
3
|
Img,
|
|
4
|
-
staticFile,
|
|
5
4
|
useCurrentFrame,
|
|
6
5
|
useVideoConfig,
|
|
7
6
|
interpolate,
|
|
@@ -74,7 +73,7 @@ export const FlowerReveal_TL_BR_28012026 = ({ startAfter = 0 }) => {
|
|
|
74
73
|
<>
|
|
75
74
|
{/* 🌸 TOP LEFT */}
|
|
76
75
|
<Img
|
|
77
|
-
src=
|
|
76
|
+
src="https://evatril-images.s3.ap-south-1.amazonaws.com/video-themes/hindu-wedding-1/v1/28012026-TopLeftFlower.webp"
|
|
78
77
|
style={{
|
|
79
78
|
position: "absolute",
|
|
80
79
|
top: "-170px",
|
|
@@ -93,7 +92,7 @@ export const FlowerReveal_TL_BR_28012026 = ({ startAfter = 0 }) => {
|
|
|
93
92
|
|
|
94
93
|
{/* 🌸 BOTTOM RIGHT */}
|
|
95
94
|
<Img
|
|
96
|
-
src=
|
|
95
|
+
src="https://evatril-images.s3.ap-south-1.amazonaws.com/video-themes/hindu-wedding-1/v1/28012026-BottomRightFlower.webp"
|
|
97
96
|
style={{
|
|
98
97
|
position: "absolute",
|
|
99
98
|
bottom: "-300px",
|
|
@@ -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
|
})}
|