@evatril/video-templates 2.0.4 → 2.0.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evatril/video-templates",
3
- "version": "2.0.4",
3
+ "version": "2.0.7",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "remotion": {
Binary file
@@ -9,17 +9,17 @@ import {
9
9
  staticFile
10
10
  } from "remotion";
11
11
 
12
- import { Butterflies20012026 } from "../Elements/Butterflies20012026.jsx";
12
+ import { Butterflies20012026 } from "../Elements/Butterflies20012026.jsx";
13
13
  import { OpeningGate20012026 } from "../Elements/OpeningGate20012026.jsx";
14
14
  import { CoupleWalk20012026 } from "../Elements/CoupleWalk20012026.jsx";
15
- import {FlowersSide20012026} from "../Elements/FlowersSide20012026.jsx";
15
+ import { FlowersSide20012026 } from "../Elements/FlowersSide20012026.jsx";
16
16
 
17
17
  export const F20012026_01 = ({
18
18
  firstName, secondName, welcomeMessage,
19
19
  }) => {
20
20
  /* -------------------- HOOKS (ONLY HERE) -------------------- */
21
21
  const frame = useCurrentFrame();
22
- const { fps, width, height, durationInFrames } = useVideoConfig();
22
+ const { fps, width, height } = useVideoConfig();
23
23
 
24
24
  /* -------------------- MESSAGE REVEAL -------------------- */
25
25
  const messageStart = fps * 4;
@@ -58,16 +58,6 @@ export const F20012026_01 = ({
58
58
  const groomAnim = reveal(groomStart);
59
59
  return (
60
60
  <AbsoluteFill style={{ overflow: "hidden" }}>
61
- {/* ================= BACKGROUND ================= */}
62
- <Img
63
- src={staticFile("video-images/20012026-bg.png")}
64
- style={{
65
- position: "absolute",
66
- width: "100%",
67
- height: "100%",
68
- objectFit: "cover",
69
- }}
70
- />
71
61
 
72
62
  {/* ================= VISUAL LAYERS ================= */}
73
63
  <Butterflies20012026 frame={frame} fps={fps} width={width} height={height} />
@@ -154,7 +144,7 @@ export const F20012026_01 = ({
154
144
 
155
145
  <h1
156
146
  style={{
157
- width: "100%",
147
+ width: "100%",
158
148
  maxWidth: "80%",
159
149
  fontFamily: "Playfair Display",
160
150
  color: "#6B1E2E",
@@ -171,7 +161,7 @@ export const F20012026_01 = ({
171
161
 
172
162
  }}
173
163
  >
174
- {secondName}
164
+ {secondName}
175
165
  </h1>
176
166
  </div>
177
167
  </div>
@@ -13,93 +13,59 @@ import { SideTrees20012026 } from "../Elements/SideTrees20012026.jsx";
13
13
  import { PeacockDance20012026 } from "../Elements/PeacockDance20012026.jsx";
14
14
  import { SmoothRevealFromTop } from "../Elements/SmoothRevealFromTop.jsx";
15
15
 
16
- export const F20012026_02 = ({ firstName, secondName,firstSideNote,secondSideNote, invitationMessage ,occasionDate,fadeInDuration = 30,
16
+ export const F20012026_02 = ({
17
+ firstName,
18
+ secondName,
19
+ firstSideNote,
20
+ secondSideNote,
21
+ invitationMessage,
22
+ occasionDate,
23
+ fadeInDuration = 30,
17
24
  }) => {
18
25
  const frame = useCurrentFrame();
19
26
  const { fps } = useVideoConfig();
20
27
 
21
- /* ================= SCENE FADE + ZOOM ================= */
22
- const sceneOpacity = interpolate(
23
- frame,
24
- [0, fadeInDuration],
25
- [0, 1],
26
- {
27
- extrapolateRight: "clamp",
28
- easing: Easing.out(Easing.ease),
29
- }
30
- );
31
-
32
- // 🎥 VERY SMOOTH CINEMATIC ZOOM
33
- const sceneScale = interpolate(
34
- frame,
35
- [0, fadeInDuration * 2],
36
- [1.20, 1],
37
- {
38
- extrapolateRight: "clamp",
39
- easing: Easing.out(Easing.cubic),
40
- }
41
- );
42
-
43
- /* ================= SAFE DATE FORMAT ================= */
28
+ /* ================= DATE FORMAT ================= */
44
29
  const formatDate = (date) => {
45
- if (!date) return "";
46
- const d = new Date(date);
47
- if (isNaN(d.getTime())) return "";
30
+ if (!date) return "";
31
+ const d = new Date(date);
32
+ if (isNaN(d.getTime())) return "";
48
33
 
49
- return d.toLocaleDateString("en-IN", {
50
- day: "numeric",
51
- month: "long",
52
- year: "numeric",
53
- });
54
- };
34
+ return d.toLocaleDateString("en-IN", {
35
+ day: "numeric",
36
+ month: "long",
37
+ year: "numeric",
38
+ });
39
+ };
55
40
 
41
+ const DETAILS_START = fps * 3;
56
42
 
57
- const DETAILS_START = fps * 3;
43
+ /* ================= CURTAIN ANIMATION ================= */
58
44
 
59
- /* ================= IMAGE ANIMATION ================= */
60
- const showImageAfter = fadeInDuration * 1;
45
+ const showImageAfter = fadeInDuration;
61
46
 
62
47
  const imageOpacity = interpolate(
63
48
  frame,
64
49
  [showImageAfter, showImageAfter + fps],
65
50
  [0, 1],
66
- {
67
- extrapolateRight: "clamp",
68
- easing: Easing.out(Easing.ease),
69
- }
51
+ { extrapolateRight: "clamp", easing: Easing.out(Easing.ease) }
70
52
  );
71
53
 
72
54
  const imageScale = interpolate(
73
55
  frame,
74
56
  [showImageAfter, showImageAfter + fps],
75
57
  [0.92, 1],
76
- {
77
- extrapolateRight: "clamp",
78
- easing: Easing.out(Easing.ease),
79
- }
58
+ { extrapolateRight: "clamp", easing: Easing.out(Easing.ease) }
80
59
  );
81
60
 
82
61
  return (
83
62
  <AbsoluteFill
84
63
  style={{
85
- opacity: sceneOpacity,
86
- transform: `scale(${sceneScale})`,
87
- transformOrigin: "center center",
88
64
  overflow: "hidden",
89
-
65
+ willChange: "transform",
90
66
  }}
91
67
  >
92
- {/* ================= BACKGROUND ================= */}
93
- <Img
94
- src={staticFile("video-images/20012026-bg.png")}
95
- style={{
96
- position: "absolute",
97
- width: "100%",
98
- height: "100%",
99
- objectFit: "cover",
100
- }}
101
- />
102
-
68
+ {/* Curtain */}
103
69
  <Img
104
70
  src={staticFile("video-images/20012026-curtain-floral.png")}
105
71
  style={{
@@ -108,13 +74,15 @@ export const F20012026_02 = ({ firstName, secondName,firstSideNote,secondSideNot
108
74
  width: "100%",
109
75
  opacity: imageOpacity,
110
76
  transform: `translateX(-50%) scale(${imageScale})`,
77
+ willChange: "transform, opacity",
111
78
  }}
112
79
  />
113
80
 
114
- {/* ================= DECORATIONS ================= */}
81
+ {/* Decorations */}
115
82
  <SideTrees20012026 startAfter={2} />
116
83
  <PeacockDance20012026 startAfter={3} />
117
84
 
85
+ {/* Content */}
118
86
  <div
119
87
  style={{
120
88
  position: "relative",
@@ -124,188 +92,113 @@ export const F20012026_02 = ({ firstName, secondName,firstSideNote,secondSideNot
124
92
  flexDirection: "column",
125
93
  alignItems: "center",
126
94
  textAlign: "center",
127
- gap: "15px"
95
+ gap: 15,
128
96
  }}
129
97
  >
130
- {/* Invitation Message */}
98
+ {/* Invitation */}
131
99
  <div
132
100
  style={{
133
101
  maxWidth: "50%",
134
102
  fontFamily: "Dancing Script",
135
103
  color: "#4A3A2A",
136
104
  fontSize: 40,
137
- fontWeight: "500",
138
- lineHeight: 1.2,
139
- letterSpacing: "2px",
140
- ...SmoothRevealFromTop({
141
- frame,
142
- startFrame: DETAILS_START,
143
- delay: 0,
144
- })
105
+ letterSpacing: 2,
106
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 0 }),
145
107
  }}
146
108
  >
147
109
  {invitationMessage}
148
110
  </div>
149
111
 
150
- {/* Bride Name */}
151
112
  <h1
152
113
  style={{
153
114
  maxWidth: "70%",
154
115
  fontFamily: "Playfair Display",
155
116
  color: "#7A1E2E",
156
117
  fontSize: 60,
157
- fontWeight: "600",
158
- lineHeight: 1.2,
159
- letterSpacing: "3px",
160
- whiteSpace: "normal",
161
- wordBreak: "break-word",
162
- overflowWrap: "break-word",
163
- ...SmoothRevealFromTop({
164
- frame,
165
- startFrame: DETAILS_START,
166
- delay: 25,
167
- })
118
+ letterSpacing: 3,
119
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 25 }),
168
120
  }}
169
121
  >
170
122
  {firstName}
171
123
  </h1>
172
124
 
173
- {/* Bride Side Note */}
174
125
  <div
175
126
  style={{
176
- maxWidth: "60%",
177
127
  fontFamily: "Dancing Script",
178
128
  color: "#B87A6A",
179
- fontSize: 40,
180
- fontWeight: "600",
181
- lineHeight: 1.2,
182
- letterSpacing: "2px",
183
- whiteSpace: "normal",
184
- wordBreak: "break-word",
185
- overflowWrap: "break-word",
186
- ...SmoothRevealFromTop({
187
- frame,
188
- startFrame: DETAILS_START,
189
- delay: 50,
190
- })
129
+ fontSize: 35,
130
+ maxWidth:"70%",
131
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 50 }),
191
132
  }}
192
133
  >
193
134
  {firstSideNote}
194
135
  </div>
195
136
 
196
- {/* & Symbol */}
197
137
  <div
198
138
  style={{
199
139
  fontSize: 40,
200
140
  color: "#C9A24D",
201
- letterSpacing: "6px",
202
- ...SmoothRevealFromTop({
203
- frame,
204
- startFrame: DETAILS_START,
205
- delay: 70,
206
- })
141
+ letterSpacing: 6,
142
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 70 }),
207
143
  }}
208
144
  >
209
145
  ❁ ❁ ❁
210
146
  </div>
211
147
 
212
-
213
- {/* Groom Name */}
214
148
  <h1
215
149
  style={{
216
150
  maxWidth: "70%",
217
151
  fontFamily: "Playfair Display",
218
152
  color: "#7A1E2E",
219
153
  fontSize: 60,
220
- fontWeight: "600",
221
- lineHeight: 1.2,
222
- letterSpacing: "3px",
223
- whiteSpace: "normal",
224
- wordBreak: "break-word",
225
- overflowWrap: "break-word",
226
- ...SmoothRevealFromTop({
227
- frame,
228
- startFrame: DETAILS_START,
229
- delay: 95,
230
- })
154
+ letterSpacing: 3,
155
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 95 }),
231
156
  }}
232
157
  >
233
- {secondName}
158
+ {secondName}
234
159
  </h1>
235
160
 
236
- {/* Groom Side Note */}
237
161
  <div
238
162
  style={{
239
- maxWidth: "70%",
240
163
  fontFamily: "Dancing Script",
241
164
  color: "#B87A6A",
242
- fontSize: 40,
243
- fontWeight: "600",
244
- lineHeight: 1.2,
245
- letterSpacing: "2px",
246
- whiteSpace: "normal",
247
- wordBreak: "break-word",
248
- overflowWrap: "break-word",
249
- ...SmoothRevealFromTop({
250
- frame,
251
- startFrame: DETAILS_START,
252
- delay: 120,
253
- })
165
+ fontSize: 35,
166
+ maxWidth:"70%",
167
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 120 }),
254
168
  }}
255
169
  >
256
170
  {secondSideNote}
257
171
  </div>
258
172
 
259
- {/* Date */}
260
173
  <div
261
174
  style={{
262
- maxWidth: "70%",
263
- marginTop: 20,
264
175
  textAlign: "center",
265
- ...SmoothRevealFromTop({
266
- frame,
267
- startFrame: DETAILS_START,
268
- delay: 145,
269
- })
176
+ ...SmoothRevealFromTop({ frame, startFrame: DETAILS_START, delay: 145 }),
270
177
  }}
271
178
  >
272
- {/* -------- Message Line -------- */}
273
179
  <div
274
180
  style={{
275
- fontSize: 45,
276
- fontFamily:"Great Vibes",
277
- fontWeight: "500",
278
- letterSpacing: "3px",
181
+ fontSize: 40,
182
+ fontWeight:"400",
183
+ fontFamily: "Great Vibes",
279
184
  color: "#2F6B4F",
280
- lineHeight: 1.2,
281
- marginBottom: 8,
282
- whiteSpace: "nowrap",
283
-
284
185
  }}
285
186
  >
286
187
  – Join us on this auspicious day –
287
188
  </div>
288
189
 
289
- {/* -------- Date Line -------- */}
290
190
  <div
291
191
  style={{
292
- fontSize: 55,
293
- fontFamily:"Playfair Display",
294
- fontWeight: "400",
192
+ fontSize: 50,
193
+ fontFamily: "Playfair Display",
295
194
  color: "#5A4632",
296
- lineHeight: 1.2,
297
- letterSpacing: "4px",
298
- whiteSpace: "nowrap", // 🔥 force single line
195
+ letterSpacing: 4,
299
196
  }}
300
197
  >
301
198
  {formatDate(occasionDate)}
302
199
  </div>
303
200
  </div>
304
-
305
-
306
201
  </div>
307
-
308
-
309
202
  </AbsoluteFill>
310
203
  );
311
204
  };
@@ -10,7 +10,7 @@ import {
10
10
  } from "remotion";
11
11
 
12
12
  import { GroomBrideLoveScene20012026 } from "../Elements/GroomBrideLoveScene20012026.jsx";
13
- import{ SmoothRevealFromTop} from "../Elements/SmoothRevealFromTop.jsx"
13
+ import { SmoothRevealFromTop } from "../Elements/SmoothRevealFromTop.jsx"
14
14
 
15
15
  export const F20012026_03 = ({
16
16
  eventDateTime,
@@ -22,28 +22,6 @@ export const F20012026_03 = ({
22
22
  const frame = useCurrentFrame();
23
23
  const { fps } = useVideoConfig();
24
24
 
25
- /* ================= SCENE REVEAL (SMOKE FOLLOW-UP) ================= */
26
- const sceneOpacity = interpolate(
27
- frame,
28
- [0, fadeInDuration],
29
- [0, 1],
30
- {
31
- extrapolateRight: "clamp",
32
- easing: Easing.out(Easing.ease),
33
- }
34
- );
35
-
36
- // 🎥 VERY SMOOTH CINEMATIC ZOOM
37
- const sceneScale = interpolate(
38
- frame,
39
- [0, fadeInDuration * 2],
40
- [1.20, 1],
41
- {
42
- extrapolateRight: "clamp",
43
- easing: Easing.out(Easing.cubic),
44
- }
45
- );
46
-
47
25
  /* ---------------- DATE UTILS ---------------- */
48
26
  const getDateParts = (iso) => {
49
27
  if (!iso) return { day: "", month: "", year: "", time: "" };
@@ -68,7 +46,7 @@ export const F20012026_03 = ({
68
46
  const { day, month, year, time } = getDateParts(eventDateTime);
69
47
 
70
48
  const DETAILS_START = fps * 4;
71
-
49
+
72
50
  /* ================= IMAGE ANIMATION ================= */
73
51
  const showImageAfter = fadeInDuration * 2;
74
52
 
@@ -104,23 +82,10 @@ export const F20012026_03 = ({
104
82
  return (
105
83
  <AbsoluteFill
106
84
  style={{
107
- opacity: sceneOpacity,
108
- transform: `scale(${sceneScale})`,
109
85
  transformOrigin: "center center",
110
86
  overflow: "hidden",
111
87
  }}
112
88
  >
113
- {/* ================= BACKGROUND ================= */}
114
- <Img
115
- src={staticFile("video-images/20012026-bg.png")}
116
- style={{
117
- position: "absolute",
118
- width: "100%",
119
- height: "100%",
120
- objectFit: "cover",
121
-
122
- }}
123
- />
124
89
  <Img
125
90
  src={staticFile("video-images/20012026-wedding-gate.png")}
126
91
  style={{
@@ -209,10 +174,10 @@ export const F20012026_03 = ({
209
174
  wordBreak: "break-word",
210
175
  overflowWrap: "break-word",
211
176
  ...SmoothRevealFromTop({
212
- frame,
213
- startFrame: DETAILS_START,
214
- delay: 50,
215
- })
177
+ frame,
178
+ startFrame: DETAILS_START,
179
+ delay: 50,
180
+ })
216
181
 
217
182
  }}
218
183
  >
@@ -232,11 +197,11 @@ export const F20012026_03 = ({
232
197
  whiteSpace: "normal",
233
198
  wordBreak: "break-word",
234
199
  overflowWrap: "break-word",
235
- ...SmoothRevealFromTop({
236
- frame,
237
- startFrame: DETAILS_START,
238
- delay: 70,
239
- })
200
+ ...SmoothRevealFromTop({
201
+ frame,
202
+ startFrame: DETAILS_START,
203
+ delay: 70,
204
+ })
240
205
 
241
206
  }}
242
207
  >
@@ -256,10 +221,10 @@ export const F20012026_03 = ({
256
221
  wordBreak: "break-word",
257
222
  overflowWrap: "break-word",
258
223
  ...SmoothRevealFromTop({
259
- frame,
260
- startFrame: DETAILS_START,
261
- delay: 95,
262
- })
224
+ frame,
225
+ startFrame: DETAILS_START,
226
+ delay: 95,
227
+ })
263
228
 
264
229
  }}
265
230
  >
@@ -277,10 +242,10 @@ export const F20012026_03 = ({
277
242
  wordBreak: "break-word",
278
243
  overflowWrap: "break-word",
279
244
  ...SmoothRevealFromTop({
280
- frame,
281
- startFrame: DETAILS_START,
282
- delay: 115,
283
- })
245
+ frame,
246
+ startFrame: DETAILS_START,
247
+ delay: 115,
248
+ })
284
249
 
285
250
  }}
286
251
  >
@@ -301,10 +266,10 @@ export const F20012026_03 = ({
301
266
  wordBreak: "break-word",
302
267
  overflowWrap: "break-word",
303
268
  ...SmoothRevealFromTop({
304
- frame,
305
- startFrame: DETAILS_START,
306
- delay: 125,
307
- })
269
+ frame,
270
+ startFrame: DETAILS_START,
271
+ delay: 125,
272
+ })
308
273
 
309
274
  }}
310
275
  >
@@ -5,6 +5,8 @@ import {
5
5
  Audio,
6
6
  staticFile,
7
7
  AbsoluteFill,
8
+ useCurrentFrame,
9
+ Img,
8
10
  } from "remotion";
9
11
 
10
12
  import { F20012026_01 } from "../Frames/F20012026_01.jsx";
@@ -24,6 +26,7 @@ export const T20012026_01 = ({
24
26
  familyMember,
25
27
  }) => {
26
28
  const { durationInFrames } = useVideoConfig();
29
+ const frame = useCurrentFrame();
27
30
 
28
31
  /* ---------------- SAFE DATA ---------------- */
29
32
 
@@ -68,7 +71,7 @@ export const T20012026_01 = ({
68
71
  const framesPerPage = Math.floor(durationInFrames / 3);
69
72
  const transitionDuration = Math.floor(framesPerPage * 0.25);
70
73
 
71
- /* ---------------- PRELOAD IMAGES (MEMOIZED) ---------------- */
74
+ /* ---------------- PRELOAD IMAGES ---------------- */
72
75
 
73
76
  const imagesToPreload = useMemo(
74
77
  () => [
@@ -94,66 +97,83 @@ export const T20012026_01 = ({
94
97
  /* ---------------- RENDER ---------------- */
95
98
 
96
99
  return (
97
- <AbsoluteFill style={{ backgroundColor: "#1a1a1a" }}>
98
- {/* 🎵 Background Music */}
100
+ <AbsoluteFill>
101
+
102
+ {/* 🎵 MUSIC */}
99
103
  <Audio
100
104
  src={staticFile("video-images/wedding.mp3")}
101
- startFrom={30}
102
- endAt={900}
105
+ startFrom={0}
106
+ endAt={durationInFrames}
103
107
  volume={0.4}
104
108
  />
105
109
 
106
- {/* -------- SCENE 1 -------- */}
107
- <Sequence from={0} durationInFrames={framesPerPage + 1}>
108
- <F20012026_01
109
- firstName={firstName}
110
- secondName={secondName}
111
- welcomeMessage={welcomeMessage}
112
- eventDateTime={eventDateTime}
113
- />
110
+
111
+ {/* ================= SCENE 1 ================= */}
112
+ <Sequence from={0} durationInFrames={framesPerPage + 2}>
113
+ <>
114
+ <Img
115
+ src={staticFile("video-images/20012026-bg.png")}
116
+ style={{ position: "absolute", width: "100%", height: "100%", objectFit: "cover" }}
117
+ />
118
+ <F20012026_01
119
+ firstName={firstName}
120
+ secondName={secondName}
121
+ welcomeMessage={welcomeMessage}
122
+ />
123
+ </>
114
124
  </Sequence>
115
125
 
116
- {/* -------- SCENE 2 -------- */}
117
- <Sequence from={framesPerPage} durationInFrames={framesPerPage + 1}>
118
- <F20012026_02
119
- firstName={firstName}
120
- secondName={secondName}
121
- firstSideNote={firstSideNote}
122
- secondSideNote={secondSideNote}
123
- invitationMessage={invitationMessage}
124
- occasionDate={occasionDate}
125
- fadeInDuration={transitionDuration}
126
- />
126
+ {/* ================= SCENE 2 ================= */}
127
+ <Sequence from={framesPerPage - 2} durationInFrames={framesPerPage + 2}>
128
+ <>
129
+ <Img
130
+ src={staticFile("video-images/20012026-bg.png")}
131
+ style={{ position: "absolute", width: "100%", height: "100%", objectFit: "cover" }}
132
+ />
133
+ <F20012026_02
134
+ firstName={firstName}
135
+ secondName={secondName}
136
+ firstSideNote={firstSideNote}
137
+ secondSideNote={secondSideNote}
138
+ invitationMessage={invitationMessage}
139
+ occasionDate={occasionDate}
140
+ fadeInDuration={transitionDuration}
141
+ />
142
+ </>
127
143
  </Sequence>
128
144
 
129
145
  {/* ☁️ TRANSITION 1 → 2 */}
130
146
  <Sequence
131
- from={framesPerPage - 1}
147
+ from={framesPerPage - 2}
132
148
  durationInFrames={transitionDuration + 2}
133
149
  >
134
150
  <InkSmokeTransition20012026 />
135
151
  </Sequence>
136
152
 
137
- {/* -------- SCENE 3 -------- */}
138
- <Sequence
139
- from={framesPerPage * 2}
140
- durationInFrames={framesPerPage + 1}
141
- >
142
- <F20012026_03
143
- eventDateTime={eventDateTime}
144
- venueName={venueName}
145
- venueAddress={venueAddress}
146
- familyMember={familyMember}
147
- />
153
+ {/* ================= SCENE 3 ================= */}
154
+ <Sequence from={framesPerPage * 2 - 2} durationInFrames={framesPerPage + 2}>
155
+ <>
156
+ <Img
157
+ src={staticFile("video-images/20012026-bg.png")}
158
+ style={{ position: "absolute", width: "100%", height: "100%", objectFit: "cover" }}
159
+ />
160
+ <F20012026_03
161
+ eventDateTime={eventDateTime}
162
+ venueName={venueName}
163
+ venueAddress={venueAddress}
164
+ familyMember={familyMember}
165
+ />
166
+ </>
148
167
  </Sequence>
149
168
 
150
169
  {/* ☁️ TRANSITION 2 → 3 */}
151
170
  <Sequence
152
- from={framesPerPage * 2 - 1}
171
+ from={framesPerPage * 2 - 2}
153
172
  durationInFrames={transitionDuration + 2}
154
173
  >
155
174
  <InkSmokeTransition20012026 />
156
175
  </Sequence>
176
+
157
177
  </AbsoluteFill>
158
178
  );
159
- };
179
+ };
@@ -1,19 +1,18 @@
1
1
  import React from "react";
2
2
  import { Composition } from "remotion";
3
3
  import { T20012026_01 } from "./Invitations/Themes/T20012026_01.jsx";
4
-
4
+
5
5
  export const VideoCompositions = () => {
6
6
  return (
7
7
  <>
8
8
  <Composition
9
9
  id="T20012026-01"
10
- component={T20012026_01}
11
- durationInFrames={30 * 30}
12
- fps={30}
10
+ component={T20012026_01}
11
+ fps={24}
12
+ durationInFrames={24 * 30}
13
13
  width={1080}
14
14
  height={1920}
15
15
  />
16
16
  </>
17
17
  );
18
18
  };
19
-