@evatril/video-templates 2.0.7 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/package.json +1 -1
  2. package/public/video-images/03022026-bg-2.webp +0 -0
  3. package/public/video-images/03022026-bg-3.webp +0 -0
  4. package/public/video-images/03022026-bg-4.webp +0 -0
  5. package/public/video-images/03022026-bg-5.webp +0 -0
  6. package/public/video-images/03022026-bg.webp +0 -0
  7. package/public/video-images/03022026-krishnaradha-2.webp +0 -0
  8. package/public/video-images/03022026-krishnaradha-4.webp +0 -0
  9. package/public/video-images/03022026-krishnaradha-5.webp +0 -0
  10. package/public/video-images/03022026-krishnaradha.webp +0 -0
  11. package/public/video-images/28012026-BottomLeftFlower.webp +0 -0
  12. package/public/video-images/28012026-BottomRightFlower.webp +0 -0
  13. package/public/video-images/28012026-FlowerBorder.webp +0 -0
  14. package/public/video-images/28012026-Ganesh.webp +0 -0
  15. package/public/video-images/28012026-TopBorder.webp +0 -0
  16. package/public/video-images/28012026-TopLeftFlower.webp +0 -0
  17. package/public/video-images/28012026-TopRightFlower.webp +0 -0
  18. package/public/video-images/28012026-bg.webp +0 -0
  19. package/public/video-images/28012026-border.webp +0 -0
  20. package/public/video-images/28012026-frame.webp +0 -0
  21. package/public/video-images/wedding2.mp3 +0 -0
  22. package/src/Invitations/Elements/BlowingLeaves28012026.jsx +68 -0
  23. package/src/Invitations/Elements/Butterflies20012026.jsx +1 -1
  24. package/src/Invitations/Elements/CornerFlipTransition05022026.jsx +45 -0
  25. package/src/Invitations/Elements/DucksFrame05022026.jsx +38 -0
  26. package/src/Invitations/Elements/FloatingFlowersBottom.jsx +70 -0
  27. package/src/Invitations/Elements/FlowerReveal_TL_BR_28012026.jsx +114 -0
  28. package/src/Invitations/Elements/FlowerReveal_TR_BL_28012026.jsx +116 -0
  29. package/src/Invitations/Elements/GaneshBorder28012026.jsx +95 -0
  30. package/src/Invitations/Elements/GaneshGoldenHalo.jsx +90 -0
  31. package/src/Invitations/Elements/HangingJumar05022026.jsx +40 -0
  32. package/src/Invitations/Elements/HangingLamp05022026.jsx +40 -0
  33. package/src/Invitations/Elements/HeartDraw28012026.jsx +51 -0
  34. package/src/Invitations/Elements/HeartFlight28012026.jsx +72 -0
  35. package/src/Invitations/Elements/HoldSlide.jsx +54 -0
  36. package/src/Invitations/Elements/LetterReveal28012026.jsx +47 -0
  37. package/src/Invitations/Elements/OpeningGate20012026.jsx +2 -2
  38. package/src/Invitations/Elements/PageFlipTransition.jsx +180 -0
  39. package/src/Invitations/Elements/{SmoothRevealFromTop.jsx → SmoothRevealFromTop20012026.jsx} +1 -1
  40. package/src/Invitations/Elements/WordReveal28012026.jsx +94 -0
  41. package/src/Invitations/Frames/F03022026_01.jsx +214 -0
  42. package/src/Invitations/Frames/F03022026_02.jsx +313 -0
  43. package/src/Invitations/Frames/F03022026_03.jsx +332 -0
  44. package/src/Invitations/Frames/F03022026_04.jsx +298 -0
  45. package/src/Invitations/Frames/F03022026_05.jsx +235 -0
  46. package/src/Invitations/Frames/F05022026_01.jsx +173 -0
  47. package/src/Invitations/Frames/F05022026_02.jsx +387 -0
  48. package/src/Invitations/Frames/F05022026_03.jsx +328 -0
  49. package/src/Invitations/Frames/F05022026_04.jsx +140 -0
  50. package/src/Invitations/Frames/F20012026_01.jsx +0 -2
  51. package/src/Invitations/Frames/F20012026_02.jsx +8 -8
  52. package/src/Invitations/Frames/F20012026_03.jsx +8 -8
  53. package/src/Invitations/Frames/F28012026_01.jsx +51 -0
  54. package/src/Invitations/Frames/F28012026_02.jsx +246 -0
  55. package/src/Invitations/Frames/F28012026_03.jsx +268 -0
  56. package/src/Invitations/Frames/F28012026_04.jsx +275 -0
  57. package/src/Invitations/Frames/F28012026_05.jsx +179 -0
  58. package/src/Invitations/Themes/T03022026_01.jsx +269 -0
  59. package/src/Invitations/Themes/T05022026_01.jsx +259 -0
  60. package/src/Invitations/Themes/T20012026_01.jsx +74 -21
  61. package/src/Invitations/Themes/T28012026_01.jsx +241 -0
  62. package/src/compositions.jsx +29 -2
  63. package/src/index.js +4 -1
@@ -0,0 +1,235 @@
1
+ import React from "react";
2
+ import {
3
+ AbsoluteFill,
4
+ Img,
5
+ useCurrentFrame,
6
+ useVideoConfig,
7
+ interpolate,
8
+ Easing,
9
+ staticFile,
10
+ } from "remotion";
11
+ import { WordReveal28012026 } from "../Elements/WordReveal28012026";
12
+
13
+ export const F03022026_05 = ({
14
+ familyMember,
15
+ }) => {
16
+ const frame = useCurrentFrame();
17
+ const { fps } = useVideoConfig();
18
+
19
+ const moveDuration = fps * 3;
20
+ const moveX = interpolate(
21
+ frame,
22
+ [0, moveDuration],
23
+ [-80, 80],
24
+ {
25
+ easing: Easing.inOut(Easing.ease),
26
+ extrapolateRight: "clamp",
27
+ }
28
+ );
29
+
30
+ const start = fps * 0.8;
31
+ const msgOpacity = interpolate(frame, [start, start + 20], [0, 1], {
32
+ extrapolateLeft: "clamp",
33
+ extrapolateRight: "clamp",
34
+ easing: Easing.out(Easing.cubic),
35
+ });
36
+
37
+ const msgY = interpolate(frame, [start, start + 20], [60, 0], {
38
+ extrapolateLeft: "clamp",
39
+ extrapolateRight: "clamp",
40
+ });
41
+
42
+ // Scene timing
43
+ const sceneDuration = fps * 6;
44
+
45
+ // Exit starts near end
46
+ const exitStart = sceneDuration - fps * 1.5;
47
+
48
+ // Wedding exit
49
+ const msgExitOpacity = interpolate(
50
+ frame,
51
+ [exitStart, exitStart + 25],
52
+ [1, 0],
53
+ {
54
+ extrapolateLeft: "clamp",
55
+ extrapolateRight: "clamp",
56
+ easing: Easing.out(Easing.cubic),
57
+ }
58
+ );
59
+
60
+ const msgExitY = interpolate(
61
+ frame,
62
+ [exitStart, exitStart + 25],
63
+ [0, -80], // moves UP
64
+ {
65
+ extrapolateLeft: "clamp",
66
+ extrapolateRight: "clamp",
67
+ }
68
+ );
69
+
70
+ // Thank You appears AFTER familyMember exits
71
+ const thankStart = exitStart + 35;
72
+
73
+ const thankOpacity = interpolate(
74
+ frame,
75
+ [thankStart, thankStart + 25],
76
+ [0, 1],
77
+ {
78
+ extrapolateLeft: "clamp",
79
+ extrapolateRight: "clamp",
80
+ easing: Easing.out(Easing.cubic),
81
+ }
82
+ );
83
+
84
+ const thankY = interpolate(
85
+ frame,
86
+ [thankStart, thankStart + 25],
87
+ [60, 0],
88
+ {
89
+ extrapolateLeft: "clamp",
90
+ extrapolateRight: "clamp",
91
+ }
92
+ );
93
+
94
+ // Thank You exit (last 1.2 seconds)
95
+ const thankStay = fps * 2;
96
+
97
+ const thankExitStart = thankStart + thankStay;
98
+
99
+ const thankExitOpacity = interpolate(
100
+ frame,
101
+ [thankExitStart, thankExitStart + 25],
102
+ [1, 0],
103
+ {
104
+ extrapolateLeft: "clamp",
105
+ extrapolateRight: "clamp",
106
+ easing: Easing.out(Easing.cubic),
107
+ }
108
+ );
109
+
110
+ const thankExitY = interpolate(
111
+ frame,
112
+ [thankExitStart, thankExitStart + 25],
113
+ [0, -80], // moves UP
114
+ {
115
+ extrapolateLeft: "clamp",
116
+ extrapolateRight: "clamp",
117
+ }
118
+ );
119
+
120
+
121
+ // Image animation (same timing as Wedding)
122
+ const imageOpacity = interpolate(frame, [start, start + 25], [0, 1], {
123
+ extrapolateLeft: "clamp",
124
+ extrapolateRight: "clamp",
125
+ easing: Easing.out(Easing.cubic),
126
+ });
127
+
128
+ // Image exit (same timing as Wedding but slower for elegance)
129
+ const imageExitOpacity = interpolate(
130
+ frame,
131
+ [exitStart, exitStart + 35],
132
+ [1, 0],
133
+ {
134
+ extrapolateLeft: "clamp",
135
+ extrapolateRight: "clamp",
136
+ easing: Easing.out(Easing.cubic),
137
+ }
138
+ );
139
+
140
+ const imageExitY = interpolate(
141
+ frame,
142
+ [exitStart, exitStart + 35],
143
+ [0, -120], // image moves UP more
144
+ {
145
+ extrapolateLeft: "clamp",
146
+ extrapolateRight: "clamp",
147
+ }
148
+ );
149
+ return (
150
+ <AbsoluteFill style={{ overflow: "hidden" }}>
151
+
152
+ <div
153
+ style={{
154
+ position: "absolute",
155
+ bottom: 0,
156
+ width: "100%",
157
+ height: "100%",
158
+ overflow: "hidden",
159
+ }}
160
+ >
161
+ <Img
162
+ src={staticFile("video-images/03022026-krishnaradha-5.webp")}
163
+ style={{
164
+ position: "absolute",
165
+ top: "30%",
166
+ left: "50%",
167
+ objectFit: "cover",
168
+ opacity: imageOpacity * imageExitOpacity,
169
+ transform: `translateX(-50%) translateX(${moveX}px) translateY(${imageExitY}px)`
170
+ }}
171
+ />
172
+ </div>
173
+
174
+ <div
175
+ style={{
176
+ position: "absolute",
177
+ inset: 0,
178
+ display: "flex",
179
+ justifyContent: "center",
180
+ alignItems: "center",
181
+ opacity: msgOpacity * msgExitOpacity,
182
+ transform: `translateY(-18%) translateY(${msgY + msgExitY}px)`,
183
+ }}
184
+ >
185
+ <div
186
+ style={{
187
+ maxWidth: "70%",
188
+ textAlign: "center",
189
+ lineHeight: 1.3,
190
+ }}
191
+ >
192
+ <WordReveal28012026
193
+ text={familyMember}
194
+ start={20}
195
+ fontSize={60}
196
+ color= "#F4A261"
197
+ fontFamily="Playfair Display"
198
+ />
199
+ </div>
200
+ </div>
201
+
202
+ {/* THANK YOU MESSAGE */}
203
+ <div
204
+ style={{
205
+ position: "absolute",
206
+ inset: 0,
207
+ display: "flex",
208
+ justifyContent: "center",
209
+ alignItems: "center",
210
+ opacity: thankOpacity * thankExitOpacity,
211
+ transform: `translateY(${thankY + thankExitY}px)`,
212
+ }}
213
+ >
214
+ <div
215
+ style={{
216
+ maxWidth: "50%",
217
+ textAlign: "center",
218
+ }}
219
+ >
220
+ <h1
221
+ style={{
222
+ fontFamily: "Dancing Script",
223
+ fontSize: 180,
224
+ color:"#D94A5C"
225
+ }}
226
+ >
227
+ Thank You
228
+ </h1>
229
+ </div>
230
+ </div>
231
+
232
+
233
+ </AbsoluteFill>
234
+ );
235
+ };
@@ -0,0 +1,173 @@
1
+ import React from "react";
2
+ import {
3
+ AbsoluteFill,
4
+ Img,
5
+ staticFile,
6
+ useCurrentFrame,
7
+ useVideoConfig,
8
+ interpolate,
9
+ Easing,
10
+ } from "remotion";
11
+ import { DucksFrame05022026 } from "../Elements/DucksFrame05022026";
12
+ import { HangingLamp05022026 } from "../Elements/HangingLamp05022026";
13
+
14
+ export const F05022026_01 = () => {
15
+ const frame = useCurrentFrame();
16
+ const { fps } = useVideoConfig();
17
+
18
+ // TIMINGS
19
+ const ganeshStart = fps * 0.5;
20
+ const word1Start = fps * 1;
21
+ const word2Start = fps * 1.5;
22
+ const word3Start = fps * 2;
23
+
24
+ // Fade helper
25
+ const fade = (start) =>
26
+ interpolate(frame, [start, start + fps * 0.7], [0, 1], {
27
+ extrapolateLeft: "clamp",
28
+ extrapolateRight: "clamp",
29
+ easing: Easing.out(Easing.ease),
30
+ });
31
+
32
+ // Slide helper
33
+ const slide = (start) =>
34
+ interpolate(frame, [start, start + fps * 0.7], [30, 0], {
35
+ extrapolateLeft: "clamp",
36
+ extrapolateRight: "clamp",
37
+ easing: Easing.out(Easing.ease),
38
+ });
39
+
40
+ // Ganesh scale
41
+ const ganeshScale = interpolate(
42
+ frame,
43
+ [ganeshStart, ganeshStart + fps],
44
+ [0.9, 1],
45
+ {
46
+ extrapolateLeft: "clamp",
47
+ extrapolateRight: "clamp",
48
+ easing: Easing.out(Easing.ease),
49
+ }
50
+ );
51
+
52
+ const totalFrames = fps * 6;
53
+
54
+ const exitStart = totalFrames - fps * 1;
55
+
56
+ const ganeshExitOpacity = interpolate(
57
+ frame,
58
+ [exitStart, totalFrames],
59
+ [1, 0],
60
+ { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
61
+ );
62
+
63
+ const ganeshExitY = interpolate(
64
+ frame,
65
+ [exitStart, totalFrames],
66
+ [0, -40],
67
+ {
68
+ extrapolateLeft: "clamp",
69
+ extrapolateRight: "clamp",
70
+ easing: Easing.in(Easing.ease),
71
+ }
72
+ );
73
+
74
+ const ganeshExitScale = interpolate(
75
+ frame,
76
+ [exitStart, totalFrames],
77
+ [1, 0.85],
78
+ {
79
+ extrapolateLeft: "clamp",
80
+ extrapolateRight: "clamp",
81
+ easing: Easing.in(Easing.ease),
82
+ }
83
+ );
84
+
85
+
86
+ return (
87
+ <AbsoluteFill style={{ overflow: "hidden" }}>
88
+
89
+ {/* LEFT CORNER LAMP */}
90
+ <HangingLamp05022026 side="left" offset={-200} />
91
+ <HangingLamp05022026 side="left" offset={10} />
92
+ {/* Right CORNER LAMP */}
93
+ <HangingLamp05022026 side="right" offset={-200} />
94
+ <HangingLamp05022026 side="right" offset={10} />
95
+
96
+ <DucksFrame05022026 />
97
+
98
+ {/* GANESH CENTER */}
99
+ <AbsoluteFill
100
+ style={{
101
+ display: "flex",
102
+ paddingTop: "10%",
103
+ alignItems: "center",
104
+ opacity: fade(ganeshStart) * ganeshExitOpacity,
105
+ transform: `translateY(${ganeshExitY}px)`,
106
+ }}
107
+ >
108
+ <Img
109
+ src={staticFile("video-images/05022026-Ganesh.webp")}
110
+ style={{
111
+ width: "60%",
112
+ objectFit: "contain",
113
+ transform: `scale(${ganeshScale * ganeshExitScale})`,
114
+ }}
115
+ />
116
+ </AbsoluteFill>
117
+
118
+ {/* TEXT */}
119
+ <div
120
+ style={{
121
+ position: "absolute",
122
+ top: "55%",
123
+ left: "50%",
124
+ display: "flex",
125
+ flexDirection: "column",
126
+ alignItems: "center",
127
+ lineHeight: 1.2,
128
+ fontWeight: 600,
129
+ transform: `translate(-50%, -50%) translateY(${ganeshExitY}px)`,
130
+ opacity: ganeshExitOpacity,
131
+ }}
132
+ >
133
+ <h1
134
+ style={{
135
+ fontFamily: "Dancing Script",
136
+ color: "#2F5D50",
137
+ fontSize: 120,
138
+ margin: 0,
139
+ opacity: fade(word1Start) * ganeshExitOpacity,
140
+ transform: `translateY(${slide(word1Start)}px)`,
141
+ }}
142
+ >
143
+ Shree
144
+ </h1>
145
+
146
+ <h1
147
+ style={{
148
+ fontFamily: "Dancing Script",
149
+ color: "#2F5D50",
150
+ fontSize: 120,
151
+ opacity: fade(word2Start) * ganeshExitOpacity,
152
+ transform: `translateY(${slide(word2Start)}px)`,
153
+ }}
154
+ >
155
+ Ganeshay
156
+ </h1>
157
+
158
+ <h1
159
+ style={{
160
+ fontFamily: "Dancing Script",
161
+ color: "#2F5D50",
162
+ fontSize: 120,
163
+ margin: 0,
164
+ opacity: fade(word3Start) * ganeshExitOpacity,
165
+ transform: `translateY(${slide(word3Start)}px)`,
166
+ }}
167
+ >
168
+ Namaha
169
+ </h1>
170
+ </div>
171
+ </AbsoluteFill>
172
+ );
173
+ };