@evatril/video-templates 2.0.7 → 2.0.8

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 (51) 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/FlowerReveal_TL_BR_28012026.jsx +114 -0
  24. package/src/Invitations/Elements/FlowerReveal_TR_BL_28012026.jsx +116 -0
  25. package/src/Invitations/Elements/GaneshBorder28012026.jsx +95 -0
  26. package/src/Invitations/Elements/GaneshGoldenHalo.jsx +90 -0
  27. package/src/Invitations/Elements/HeartDraw28012026.jsx +51 -0
  28. package/src/Invitations/Elements/HeartFlight28012026.jsx +72 -0
  29. package/src/Invitations/Elements/HoldSlide.jsx +103 -0
  30. package/src/Invitations/Elements/LetterReveal28012026.jsx +47 -0
  31. package/src/Invitations/Elements/PageFlipTransition.jsx +180 -0
  32. package/src/Invitations/Elements/{SmoothRevealFromTop.jsx → SmoothRevealFromTop20012026.jsx} +1 -1
  33. package/src/Invitations/Elements/WordReveal28012026.jsx +92 -0
  34. package/src/Invitations/Frames/F03022026_01.jsx +214 -0
  35. package/src/Invitations/Frames/F03022026_02.jsx +312 -0
  36. package/src/Invitations/Frames/F03022026_03.jsx +332 -0
  37. package/src/Invitations/Frames/F03022026_04.jsx +300 -0
  38. package/src/Invitations/Frames/F03022026_05.jsx +235 -0
  39. package/src/Invitations/Frames/F20012026_01.jsx +0 -2
  40. package/src/Invitations/Frames/F20012026_02.jsx +8 -8
  41. package/src/Invitations/Frames/F20012026_03.jsx +8 -8
  42. package/src/Invitations/Frames/F28012026_01.jsx +51 -0
  43. package/src/Invitations/Frames/F28012026_02.jsx +246 -0
  44. package/src/Invitations/Frames/F28012026_03.jsx +268 -0
  45. package/src/Invitations/Frames/F28012026_04.jsx +275 -0
  46. package/src/Invitations/Frames/F28012026_05.jsx +179 -0
  47. package/src/Invitations/Themes/T03022026_01.jsx +269 -0
  48. package/src/Invitations/Themes/T20012026_01.jsx +21 -3
  49. package/src/Invitations/Themes/T28012026_01.jsx +241 -0
  50. package/src/compositions.jsx +20 -2
  51. package/src/index.js +3 -1
@@ -31,6 +31,7 @@ export const T20012026_01 = ({
31
31
  /* ---------------- SAFE DATA ---------------- */
32
32
 
33
33
  const whoIsCreating =
34
+ event?.eventData?.occasion_data?.who_is_creating ??
34
35
  event?.occasion_data?.who_is_creating ??
35
36
  event?.who_is_creating;
36
37
 
@@ -38,20 +39,35 @@ export const T20012026_01 = ({
38
39
  whoIsCreating === "Bride" || !whoIsCreating;
39
40
 
40
41
  const brideName =
42
+ event?.eventData?.occasion_data?.bride_name ??
41
43
  event?.occasion_data?.bride_name ??
42
- event?.bride_name ??
43
44
  formData?.bride_name ??
44
45
  "";
45
46
 
46
47
  const groomName =
48
+ event?.eventData?.occasion_data?.groom_name ??
47
49
  event?.occasion_data?.groom_name ??
48
- event?.groom_name ??
49
50
  formData?.groom_name ??
50
51
  "";
51
52
 
53
+ const bridePhoto =
54
+ event?.eventData?.occasion_data?.bride_photo?.url ??
55
+ event?.occasion_data?.bride_photo?.url ??
56
+ formData?.bride_photo ??
57
+ "";
58
+
59
+ const groomPhoto =
60
+ event?.eventData?.occasion_data?.groom_photo?.url ??
61
+ event?.occasion_data?.groom_photo?.url ??
62
+ formData?.groom_photo ??
63
+ "";
64
+
52
65
  const firstName = isBrideCreating ? brideName : groomName;
53
66
  const secondName = isBrideCreating ? groomName : brideName;
54
67
 
68
+ const firstPhoto = isBrideCreating ? bridePhoto : groomPhoto;
69
+ const secondPhoto = isBrideCreating ? groomPhoto : bridePhoto;
70
+
55
71
  const firstSideNote = isBrideCreating
56
72
  ? formData?.bride_side_note || ""
57
73
  : formData?.groom_side_note || "";
@@ -176,4 +192,6 @@ export const T20012026_01 = ({
176
192
 
177
193
  </AbsoluteFill>
178
194
  );
179
- };
195
+ };
196
+
197
+ T20012026_01.duration = 30 * 30;
@@ -0,0 +1,241 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ Sequence,
4
+ useVideoConfig,
5
+ Audio,
6
+ staticFile,
7
+ AbsoluteFill,
8
+ useCurrentFrame,
9
+ interpolate,
10
+ Easing,
11
+ } from "remotion";
12
+
13
+ import { F28012026_01 } from "../Frames/F28012026_01.jsx";
14
+ import { F28012026_02 } from "../Frames/F28012026_02.jsx";
15
+ import { F28012026_03 } from "../Frames/F28012026_03.jsx";
16
+ import { F28012026_04 } from "../Frames/F28012026_04.jsx";
17
+ import { F28012026_05 } from "../Frames/F28012026_05.jsx";
18
+
19
+ import { usePreloadImages } from "../hooks/usePreloadImages.js";
20
+ import { PageFlipTransition } from "../Elements/PageFlipTransition.jsx";
21
+
22
+ export const T28012026_01 = ({
23
+ event,
24
+ formData,
25
+ eventDateTime,
26
+ occasionDate,
27
+ venue,
28
+ welcomeMessage,
29
+ invitationMessage,
30
+ familyMember,
31
+ }) => {
32
+ const { fps, durationInFrames } = useVideoConfig();
33
+ const frame = useCurrentFrame();
34
+ /* ---------------- MUSIC FADE ---------------- */
35
+ const fadeDuration = 2 * fps;
36
+ const fadeOutStart = durationInFrames - fadeDuration;
37
+ const musicVolume = interpolate(
38
+ frame,
39
+ [0, fadeOutStart, durationInFrames],
40
+ [0.4, 0.4, 0],
41
+ {
42
+ easing: Easing.inOut(Easing.ease),
43
+ extrapolateLeft: "clamp",
44
+ extrapolateRight: "clamp",
45
+ }
46
+ );
47
+ const firstSceneDuration = fps * 5;
48
+ const otherSceneDuration = fps * 8;
49
+
50
+ const flipDuration = fps * 1;
51
+
52
+ /* ---------------- SAFE DATA ---------------- */
53
+
54
+ const whoIsCreating =
55
+ event?.eventData?.occasion_data?.who_is_creating ??
56
+ event?.occasion_data?.who_is_creating ??
57
+ event?.who_is_creating;
58
+
59
+ const isBrideCreating =
60
+ whoIsCreating === "Bride" || !whoIsCreating;
61
+
62
+ const brideName =
63
+ event?.eventData?.occasion_data?.bride_name ??
64
+ event?.occasion_data?.bride_name ??
65
+ formData?.bride_name ??
66
+ "";
67
+
68
+ const groomName =
69
+ event?.eventData?.occasion_data?.groom_name ??
70
+ event?.occasion_data?.groom_name ??
71
+ formData?.groom_name ??
72
+ "";
73
+
74
+ const bridePhoto =
75
+ event?.eventData?.occasion_data?.bride_photo?.url ??
76
+ event?.occasion_data?.bride_photo?.url ??
77
+ formData?.bride_photo ??
78
+ "";
79
+
80
+ const groomPhoto =
81
+ event?.eventData?.occasion_data?.groom_photo?.url ??
82
+ event?.occasion_data?.groom_photo?.url ??
83
+ formData?.groom_photo ??
84
+ "";
85
+
86
+ const firstName = isBrideCreating ? brideName : groomName;
87
+ const secondName = isBrideCreating ? groomName : brideName;
88
+
89
+ const firstPhoto = isBrideCreating ? bridePhoto : groomPhoto;
90
+ const secondPhoto = isBrideCreating ? groomPhoto : bridePhoto;
91
+
92
+
93
+ const firstSideNote = isBrideCreating
94
+ ? formData?.bride_side_note || ""
95
+ : formData?.groom_side_note || "";
96
+
97
+ const secondSideNote = isBrideCreating
98
+ ? formData?.groom_side_note || ""
99
+ : formData?.bride_side_note || "";
100
+
101
+ const venueName =
102
+ venue?.name || formData?.venue_name || "";
103
+
104
+ const venueAddress =
105
+ venue?.address || formData?.venue_address || "";
106
+
107
+ /* ---------------- PRELOAD IMAGES ---------------- */
108
+
109
+ const imagesToPreload = useMemo(
110
+ () => [
111
+ staticFile("video-images/28012026-bg.webp"),
112
+ staticFile("video-images/28012026-TopRightFlower.webp"),
113
+ staticFile("video-images/28012026-BottomLeftFlower.webp"),
114
+ staticFile("video-images/28012026-Ganesh.webp"),
115
+ staticFile("video-images/28012026-FlowerBorder.webp"),
116
+ staticFile("video-images/28012026-TopBorder.webp"),
117
+ staticFile("video-images/28012026-TopLeftFlower.webp"),
118
+ staticFile("video-images/28012026-BottomRightFlower.webp"),
119
+ staticFile("video-images/28012026-frame.webp"),
120
+ staticFile("video-images/28012026-border.webp"),
121
+ ],
122
+ []
123
+ );
124
+
125
+ usePreloadImages(imagesToPreload);
126
+
127
+ const Page = ({ children }) => {
128
+ return (
129
+ <AbsoluteFill
130
+ style={{
131
+ transformStyle: "preserve-3d",
132
+ }}
133
+ >
134
+ {/* Background */}
135
+ <img
136
+ src={staticFile("video-images/28012026-bg.webp")}
137
+ style={{
138
+ position: "absolute",
139
+ inset: 0,
140
+ width: "100%",
141
+ height: "100%",
142
+ objectFit: "cover",
143
+ }}
144
+ />
145
+
146
+ {/* Content */}
147
+ <AbsoluteFill style={{ transformStyle: "preserve-3d" }}>
148
+ {children}
149
+ </AbsoluteFill>
150
+ </AbsoluteFill>
151
+ );
152
+ };
153
+
154
+ const scenes = [
155
+ <F28012026_01 welcomeMessage={welcomeMessage} />,
156
+
157
+ <F28012026_02
158
+ firstName={firstName}
159
+ secondName={secondName}
160
+ invitationMessage={invitationMessage}
161
+ occasionDate={occasionDate}
162
+ />,
163
+
164
+ <F28012026_03
165
+ firstName={firstName}
166
+ firstPhoto={firstPhoto}
167
+ firstSideNote={firstSideNote}
168
+ />,
169
+
170
+ <F28012026_04
171
+ secondName={secondName}
172
+ secondPhoto={secondPhoto}
173
+ secondSideNote={secondSideNote}
174
+ />,
175
+
176
+ <F28012026_05
177
+ eventDateTime={eventDateTime}
178
+ venueName={venueName}
179
+ venueAddress={venueAddress}
180
+ familyMember={familyMember}
181
+ />,
182
+ ];
183
+
184
+ /* 🧮 Dynamic Timing */
185
+ const sceneDurations = scenes.map((_, i) =>
186
+ i === 0 ? firstSceneDuration : otherSceneDuration
187
+ );
188
+
189
+ const sceneStartTimes = sceneDurations.reduce((acc, dur, i) => {
190
+ acc.push(i === 0 ? 0 : acc[i - 1] + sceneDurations[i - 1]);
191
+ return acc;
192
+ }, []);
193
+
194
+ const PageBackground = () => (
195
+ <AbsoluteFill>
196
+ <img
197
+ src={staticFile("video-images/28012026-bg.webp")}
198
+ style={{
199
+ position: "absolute",
200
+ inset: 0,
201
+ width: "100%",
202
+ height: "100%",
203
+ objectFit: "cover",
204
+ }}
205
+ />
206
+ </AbsoluteFill>
207
+ );
208
+
209
+ return (
210
+ <AbsoluteFill>
211
+ <Audio
212
+ src={staticFile("video-images/wedding2.mp3")}
213
+ volume={musicVolume}
214
+ />
215
+
216
+ {scenes.map((Scene, i) => {
217
+ const from = sceneStartTimes[i];
218
+ const duration = sceneDurations[i];
219
+
220
+ return (
221
+ <Sequence key={i} from={from} durationInFrames={duration}>
222
+ {i === scenes.length - 1 ? (
223
+ <Page>{Scene}</Page>
224
+ ) : (
225
+ <PageFlipTransition
226
+ sceneDuration={duration}
227
+ flipDuration={flipDuration}
228
+ background={<PageBackground />}
229
+ direction={i % 2 === 0 ? "left" : "right"}
230
+ >
231
+ <Page>{Scene}</Page>
232
+ </PageFlipTransition>
233
+ )}
234
+ </Sequence>
235
+ );
236
+ })}
237
+ </AbsoluteFill>
238
+ );
239
+ }
240
+
241
+ T28012026_01.duration = 30 * 37;
@@ -1,6 +1,8 @@
1
1
  import React from "react";
2
2
  import { Composition } from "remotion";
3
3
  import { T20012026_01 } from "./Invitations/Themes/T20012026_01.jsx";
4
+ import { T28012026_01 } from "./Invitations/Themes/T28012026_01.jsx";
5
+ import { T03022026_01 } from "./Invitations/Themes/T03022026_01.jsx";
4
6
 
5
7
  export const VideoCompositions = () => {
6
8
  return (
@@ -8,8 +10,24 @@ export const VideoCompositions = () => {
8
10
  <Composition
9
11
  id="T20012026-01"
10
12
  component={T20012026_01}
11
- fps={24}
12
- durationInFrames={24 * 30}
13
+ fps={30}
14
+ durationInFrames={30 * 30}
15
+ width={1080}
16
+ height={1920}
17
+ />
18
+ <Composition
19
+ id="T28012026-01"
20
+ component={T28012026_01}
21
+ fps={30}
22
+ durationInFrames={30 * 37}
23
+ width={1080}
24
+ height={1920}
25
+ />
26
+ <Composition
27
+ id="T03022026-01"
28
+ component={T03022026_01}
29
+ fps={30}
30
+ durationInFrames={30 * 38}
13
31
  width={1080}
14
32
  height={1920}
15
33
  />
package/src/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  // Preview-only exports (PURE components)
2
- export { T20012026_01 } from "./Invitations/Themes/T20012026_01.jsx";
2
+ export { T20012026_01 } from "./Invitations/Themes/T20012026_01.jsx"
3
+ export { T28012026_01 } from "./Invitations/Themes/T28012026_01.jsx"
4
+ export { T03022026_01 } from "./Invitations/Themes/T03022026_01.jsx"