@evatril/video-templates 2.0.11 → 2.0.14
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/src/Invitations/Elements/BlowingLeaves28012026.jsx +2 -2
- package/src/Invitations/Elements/BottomSideFrames20012026.jsx +122 -0
- package/src/Invitations/Elements/Butterflies20012026.jsx +4 -4
- package/src/Invitations/Elements/CoupleWalk20012026.jsx +2 -3
- package/src/Invitations/Elements/CurtainTransition20012026.jsx +79 -0
- package/src/Invitations/Elements/DucksFrame05022026.jsx +1 -2
- package/src/Invitations/Elements/{FloatingFlowersBottom.jsx → FloatingFlowersBottom05022026.jsx} +2 -3
- package/src/Invitations/Elements/FlowerReveal_TR_BL_28012026.jsx +2 -3
- package/src/Invitations/Elements/FlowersSide20012026.jsx +3 -72
- package/src/Invitations/Elements/GaneshBorder28012026.jsx +2 -4
- package/src/Invitations/Elements/GroomBrideLoveScene20012026.jsx +6 -7
- package/src/Invitations/Elements/HangingJumar05022026.jsx +1 -2
- package/src/Invitations/Elements/HangingLamp05022026.jsx +1 -2
- package/src/Invitations/Elements/HeartFlight28012026.jsx +1 -78
- package/src/Invitations/Elements/{HoldSlide.jsx → HoldSlide03022026.jsx} +1 -1
- package/src/Invitations/Elements/LetterReveal28012026.jsx +102 -14
- package/src/Invitations/Elements/OpeningGate20012026.jsx +3 -3
- package/src/Invitations/Elements/PageFlipTransition28012026.jsx +84 -0
- package/src/Invitations/Elements/SmoothReveal20012026.jsx +62 -0
- package/src/Invitations/Elements/WordReveal28012026.jsx +45 -7
- package/src/Invitations/Frames/F03022026_01.jsx +1 -1
- package/src/Invitations/Frames/F03022026_02.jsx +9 -10
- package/src/Invitations/Frames/F03022026_03.jsx +1 -1
- package/src/Invitations/Frames/F03022026_04.jsx +1 -1
- package/src/Invitations/Frames/F03022026_05.jsx +11 -8
- package/src/Invitations/Frames/F05022026_01.jsx +1 -2
- package/src/Invitations/Frames/F05022026_02.jsx +7 -14
- package/src/Invitations/Frames/F05022026_03.jsx +4 -5
- package/src/Invitations/Frames/F05022026_04.jsx +10 -14
- package/src/Invitations/Frames/F20012026_01.jsx +29 -136
- package/src/Invitations/Frames/F20012026_02.jsx +148 -75
- package/src/Invitations/Frames/F20012026_03.jsx +74 -193
- package/src/Invitations/Frames/F20012026_04.jsx +54 -122
- package/src/Invitations/Frames/F28012026_01.jsx +7 -8
- package/src/Invitations/Frames/F28012026_02.jsx +51 -53
- package/src/Invitations/Frames/F28012026_03.jsx +60 -61
- package/src/Invitations/Frames/F28012026_04.jsx +65 -70
- package/src/Invitations/Frames/F28012026_05.jsx +40 -11
- package/src/Invitations/Themes/T03022026_01.jsx +12 -17
- package/src/Invitations/Themes/T05022026_01.jsx +23 -19
- package/src/Invitations/Themes/T20012026_01.jsx +79 -66
- package/src/Invitations/Themes/T28012026_01.jsx +32 -25
- package/src/compositions.jsx +8 -8
- package/public/Fonts/DancingScript-VariableFont_wght.ttf +0 -0
- package/public/Fonts/GreatVibes-Regular.ttf +0 -0
- package/public/Fonts/PlayfairDisplay-Italic-VariableFont_wght.ttf +0 -0
- package/public/video-images/03022026-bg-2.webp +0 -0
- package/public/video-images/03022026-bg-3.webp +0 -0
- package/public/video-images/03022026-bg-4.webp +0 -0
- package/public/video-images/03022026-bg-5.webp +0 -0
- 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.png +0 -0
- package/public/video-images/20012026-bg.webp +0 -0
- package/public/video-images/20012026-bride.png +0 -0
- package/public/video-images/20012026-bride.webp +0 -0
- package/public/video-images/20012026-butterfly.png +0 -0
- package/public/video-images/20012026-butterfly.webp +0 -0
- package/public/video-images/20012026-couple-walk.png +0 -0
- package/public/video-images/20012026-couple-walk.webp +0 -0
- package/public/video-images/20012026-curtain-floral.png +0 -0
- package/public/video-images/20012026-curtain-floral.webp +0 -0
- package/public/video-images/20012026-floral-left.png +0 -0
- package/public/video-images/20012026-floral-left.webp +0 -0
- package/public/video-images/20012026-floral-right.png +0 -0
- package/public/video-images/20012026-floral-right.webp +0 -0
- package/public/video-images/20012026-groom.png +0 -0
- package/public/video-images/20012026-groom.webp +0 -0
- package/public/video-images/20012026-opening-gate.png +0 -0
- package/public/video-images/20012026-opening-gate.webp +0 -0
- package/public/video-images/20012026-peacock.png +0 -0
- package/public/video-images/20012026-peacock.webp +0 -0
- package/public/video-images/20012026-tree-left.png +0 -0
- package/public/video-images/20012026-tree-left.webp +0 -0
- package/public/video-images/20012026-tree-right.png +0 -0
- package/public/video-images/20012026-tree-right.webp +0 -0
- package/public/video-images/20012026-wedding-gate.png +0 -0
- package/public/video-images/20012026-wedding-gate.webp +0 -0
- package/public/video-images/28012026-BottomLeftFlower.webp +0 -0
- package/public/video-images/28012026-BottomRightFlower.webp +0 -0
- package/public/video-images/28012026-FlowerBorder.webp +0 -0
- package/public/video-images/28012026-Ganesh.webp +0 -0
- package/public/video-images/28012026-Heart.webp +0 -0
- package/public/video-images/28012026-PinkLeaf.webp +0 -0
- package/public/video-images/28012026-TopBorder.webp +0 -0
- package/public/video-images/28012026-TopLeftFlower.webp +0 -0
- package/public/video-images/28012026-TopRightFlower.webp +0 -0
- package/public/video-images/28012026-bg.webp +0 -0
- package/public/video-images/28012026-border.webp +0 -0
- package/public/video-images/28012026-frame.webp +0 -0
- package/public/video-images/wedding.mp3 +0 -0
- package/public/video-images/wedding2.mp3 +0 -0
- package/src/Invitations/Elements/GaneshGoldenHalo.jsx +0 -90
- package/src/Invitations/Elements/PageFlipTransition.jsx +0 -180
- package/src/Invitations/Elements/PeacockDance20012026.jsx +0 -68
- package/src/Invitations/Elements/SideTrees20012026.jsx +0 -92
- package/src/Invitations/Elements/SmoothRevealFromTop20012026.jsx +0 -32
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
Sequence,
|
|
4
4
|
useVideoConfig,
|
|
5
5
|
Audio,
|
|
6
|
-
staticFile,
|
|
7
6
|
AbsoluteFill,
|
|
8
7
|
useCurrentFrame,
|
|
9
8
|
interpolate,
|
|
@@ -17,7 +16,7 @@ import { F28012026_04 } from "../Frames/F28012026_04.jsx";
|
|
|
17
16
|
import { F28012026_05 } from "../Frames/F28012026_05.jsx";
|
|
18
17
|
|
|
19
18
|
import { usePreloadImages } from "../hooks/usePreloadImages.js";
|
|
20
|
-
import {
|
|
19
|
+
import { PageFlipTransition28012026 } from "../Elements/PageFlipTransition28012026.jsx";
|
|
21
20
|
|
|
22
21
|
export const T28012026_01 = ({
|
|
23
22
|
event,
|
|
@@ -45,8 +44,13 @@ export const T28012026_01 = ({
|
|
|
45
44
|
}
|
|
46
45
|
);
|
|
47
46
|
|
|
48
|
-
const
|
|
49
|
-
|
|
47
|
+
const sceneDurations = [
|
|
48
|
+
fps * 6, // Scene 1
|
|
49
|
+
fps * 7, // Scene 2
|
|
50
|
+
fps * 8, // Scene 3
|
|
51
|
+
fps * 8, // Scene 4
|
|
52
|
+
fps * 8, // Scene 5
|
|
53
|
+
];
|
|
50
54
|
|
|
51
55
|
const flipDuration = fps * 1;
|
|
52
56
|
|
|
@@ -107,18 +111,26 @@ export const T28012026_01 = ({
|
|
|
107
111
|
|
|
108
112
|
/* ---------------- PRELOAD IMAGES ---------------- */
|
|
109
113
|
|
|
114
|
+
const S3_BASE = "https://evatril-images.s3.ap-south-1.amazonaws.com/video-themes/hindu-wedding-1/v1/";
|
|
110
115
|
const imagesToPreload = useMemo(
|
|
111
116
|
() => [
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
`${S3_BASE}28012026-bg.webp`,
|
|
118
|
+
|
|
119
|
+
`${S3_BASE}28012026-TopRightFlower.webp`,
|
|
120
|
+
`${S3_BASE}28012026-BottomLeftFlower.webp`,
|
|
121
|
+
`${S3_BASE}28012026-Ganesh.webp`,
|
|
122
|
+
`${S3_BASE}28012026-FlowerBorder.webp`,
|
|
123
|
+
`${S3_BASE}28012026-PinkLeaf.webp`,
|
|
124
|
+
|
|
125
|
+
`${S3_BASE}28012026-TopLeftFlower.webp`,
|
|
126
|
+
`${S3_BASE}28012026-BottomRightFlower.webp`,
|
|
127
|
+
|
|
128
|
+
`${S3_BASE}28012026-TopBorder.webp`,
|
|
129
|
+
`${S3_BASE}28012026-border.webp`,
|
|
130
|
+
`${S3_BASE}28012026-Heart.webp`,
|
|
131
|
+
|
|
132
|
+
`${S3_BASE}28012026-frame.webp`,
|
|
133
|
+
`${S3_BASE}05022026-HangingJumar.webp`,
|
|
122
134
|
],
|
|
123
135
|
[]
|
|
124
136
|
);
|
|
@@ -134,7 +146,7 @@ export const T28012026_01 = ({
|
|
|
134
146
|
>
|
|
135
147
|
{/* Background */}
|
|
136
148
|
<img
|
|
137
|
-
src={
|
|
149
|
+
src={`${S3_BASE}28012026-bg.webp`}
|
|
138
150
|
style={{
|
|
139
151
|
position: "absolute",
|
|
140
152
|
inset: 0,
|
|
@@ -182,11 +194,6 @@ export const T28012026_01 = ({
|
|
|
182
194
|
/>,
|
|
183
195
|
];
|
|
184
196
|
|
|
185
|
-
/* 🧮 Dynamic Timing */
|
|
186
|
-
const sceneDurations = scenes.map((_, i) =>
|
|
187
|
-
i === 0 ? firstSceneDuration : otherSceneDuration
|
|
188
|
-
);
|
|
189
|
-
|
|
190
197
|
const sceneStartTimes = sceneDurations.reduce((acc, dur, i) => {
|
|
191
198
|
acc.push(i === 0 ? 0 : acc[i - 1] + sceneDurations[i - 1]);
|
|
192
199
|
return acc;
|
|
@@ -195,7 +202,7 @@ export const T28012026_01 = ({
|
|
|
195
202
|
const PageBackground = () => (
|
|
196
203
|
<AbsoluteFill>
|
|
197
204
|
<img
|
|
198
|
-
src={
|
|
205
|
+
src={`${S3_BASE}28012026-bg.webp`}
|
|
199
206
|
style={{
|
|
200
207
|
position: "absolute",
|
|
201
208
|
inset: 0,
|
|
@@ -210,7 +217,7 @@ export const T28012026_01 = ({
|
|
|
210
217
|
return (
|
|
211
218
|
<AbsoluteFill>
|
|
212
219
|
<Audio
|
|
213
|
-
|
|
220
|
+
src={`${S3_BASE}wedding2.mp3`}
|
|
214
221
|
volume={musicVolume}
|
|
215
222
|
/>
|
|
216
223
|
|
|
@@ -223,14 +230,14 @@ export const T28012026_01 = ({
|
|
|
223
230
|
{i === scenes.length - 1 ? (
|
|
224
231
|
<Page>{Scene}</Page>
|
|
225
232
|
) : (
|
|
226
|
-
<
|
|
233
|
+
<PageFlipTransition28012026
|
|
227
234
|
sceneDuration={duration}
|
|
228
235
|
flipDuration={flipDuration}
|
|
229
236
|
background={<PageBackground />}
|
|
230
237
|
direction={i % 2 === 0 ? "left" : "right"}
|
|
231
238
|
>
|
|
232
239
|
<Page>{Scene}</Page>
|
|
233
|
-
</
|
|
240
|
+
</PageFlipTransition28012026>
|
|
234
241
|
)}
|
|
235
242
|
</Sequence>
|
|
236
243
|
);
|
|
@@ -239,4 +246,4 @@ export const T28012026_01 = ({
|
|
|
239
246
|
);
|
|
240
247
|
}
|
|
241
248
|
|
|
242
|
-
T28012026_01.duration =
|
|
249
|
+
T28012026_01.duration = 30 * (6 + 7 + 8 + 8 + 8);
|
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={30}
|
|
15
|
+
durationInFrames={30 * 32.5}
|
|
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={30}
|
|
23
|
+
durationInFrames={30 * 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={30}
|
|
31
|
+
durationInFrames={30 * 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={30}
|
|
39
|
+
durationInFrames={30 * 30}
|
|
40
40
|
width={1080}
|
|
41
41
|
height={1920}
|
|
42
42
|
/>
|
|
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
|
|
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
|
|
Binary file
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
Img,
|
|
4
|
-
staticFile,
|
|
5
|
-
useCurrentFrame,
|
|
6
|
-
useVideoConfig,
|
|
7
|
-
interpolate,
|
|
8
|
-
Easing,
|
|
9
|
-
} from "remotion";
|
|
10
|
-
|
|
11
|
-
export const GaneshGoldenHalo = () => {
|
|
12
|
-
const frame = useCurrentFrame();
|
|
13
|
-
const { fps } = useVideoConfig();
|
|
14
|
-
|
|
15
|
-
/* 🌸 HALO BLOOM FIRST */
|
|
16
|
-
const haloProgress = interpolate(frame, [0, fps * 2], [0, 1], {
|
|
17
|
-
extrapolateLeft: "clamp",
|
|
18
|
-
extrapolateRight: "clamp",
|
|
19
|
-
easing: Easing.inOut(Easing.cubic),
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const haloScale = interpolate(haloProgress, [0, 1], [0, 1]);
|
|
23
|
-
|
|
24
|
-
/* 🕉 GANESH APPEARS AFTER HALO */
|
|
25
|
-
const ganeshDelay = fps * 1;
|
|
26
|
-
|
|
27
|
-
const ganeshProgress = interpolate(frame - ganeshDelay, [0, fps * 2], [0, 1], {
|
|
28
|
-
extrapolateLeft: "clamp",
|
|
29
|
-
extrapolateRight: "clamp",
|
|
30
|
-
easing: Easing.inOut(Easing.cubic),
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const ganeshScale = interpolate(ganeshProgress, [0, 1], [0.45, 1]);
|
|
34
|
-
const ganeshOpacity = ganeshProgress;
|
|
35
|
-
|
|
36
|
-
/* 🌿 HALO ROTATION (LOCKED CENTER) */
|
|
37
|
-
const rotate = frame * 0.15;
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<div
|
|
41
|
-
style={{
|
|
42
|
-
position: "absolute",
|
|
43
|
-
inset: 0,
|
|
44
|
-
display: "flex",
|
|
45
|
-
justifyContent: "center",
|
|
46
|
-
alignItems: "center",
|
|
47
|
-
pointerEvents: "none",
|
|
48
|
-
zIndex: 2,
|
|
49
|
-
}}
|
|
50
|
-
>
|
|
51
|
-
<div style={{ position: "relative", width: "100%", height: "100%" }}>
|
|
52
|
-
{/* 🌸 HALO (isolated rotation container) */}
|
|
53
|
-
<div
|
|
54
|
-
style={{
|
|
55
|
-
position: "absolute",
|
|
56
|
-
left: "50%",
|
|
57
|
-
top: "45%",
|
|
58
|
-
transform: "translate(-50%, -50%)",
|
|
59
|
-
}}
|
|
60
|
-
>
|
|
61
|
-
<Img
|
|
62
|
-
src={staticFile("video-images/30012026-Ganesh_golden_halo2.png")}
|
|
63
|
-
style={{
|
|
64
|
-
width: "100%",
|
|
65
|
-
transformOrigin: "50% 50%",
|
|
66
|
-
transform: `scale(${haloScale}) rotate(${rotate}deg)`,
|
|
67
|
-
}}
|
|
68
|
-
/>
|
|
69
|
-
</div>
|
|
70
|
-
|
|
71
|
-
{/* 🕉 GANESH */}
|
|
72
|
-
<Img
|
|
73
|
-
src={staticFile("video-images/28012026-Ganesh.png")}
|
|
74
|
-
style={{
|
|
75
|
-
position: "absolute",
|
|
76
|
-
left: "50%",
|
|
77
|
-
top: "55%",
|
|
78
|
-
width: "55%",
|
|
79
|
-
opacity: ganeshOpacity,
|
|
80
|
-
transformOrigin: "50% 50%",
|
|
81
|
-
transform: `
|
|
82
|
-
translate(-47%, -50%)
|
|
83
|
-
scale(${ganeshScale})
|
|
84
|
-
`,
|
|
85
|
-
}}
|
|
86
|
-
/>
|
|
87
|
-
</div>
|
|
88
|
-
</div>
|
|
89
|
-
);
|
|
90
|
-
};
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
// import React from "react";
|
|
2
|
-
// import {
|
|
3
|
-
// AbsoluteFill,
|
|
4
|
-
// useCurrentFrame,
|
|
5
|
-
// interpolate,
|
|
6
|
-
// Easing,
|
|
7
|
-
// staticFile,
|
|
8
|
-
// } from "remotion";
|
|
9
|
-
|
|
10
|
-
// export const PageFlipTransition = ({
|
|
11
|
-
// children,
|
|
12
|
-
// background,
|
|
13
|
-
// sceneDuration = 192,
|
|
14
|
-
// flipDuration = 24,
|
|
15
|
-
// }) => {
|
|
16
|
-
// const frame = useCurrentFrame();
|
|
17
|
-
|
|
18
|
-
// const flipStart = sceneDuration - flipDuration;
|
|
19
|
-
|
|
20
|
-
// const rotateY = interpolate(
|
|
21
|
-
// frame,
|
|
22
|
-
// [flipStart + flipDuration * 0.35, sceneDuration],
|
|
23
|
-
// [0, 90],
|
|
24
|
-
// {
|
|
25
|
-
// extrapolateLeft: "clamp",
|
|
26
|
-
// extrapolateRight: "clamp",
|
|
27
|
-
// easing: Easing.inOut(Easing.ease),
|
|
28
|
-
// }
|
|
29
|
-
// );
|
|
30
|
-
|
|
31
|
-
// // reveal next page only at end
|
|
32
|
-
// const bgOpacity = interpolate(
|
|
33
|
-
// frame,
|
|
34
|
-
// [flipStart + flipDuration * 0.5, sceneDuration],
|
|
35
|
-
// [0, 1],
|
|
36
|
-
// {
|
|
37
|
-
// extrapolateLeft: "clamp",
|
|
38
|
-
// extrapolateRight: "clamp",
|
|
39
|
-
// }
|
|
40
|
-
// );
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
// return (
|
|
44
|
-
// <AbsoluteFill style={{ perspective: 2500 }}>
|
|
45
|
-
|
|
46
|
-
// {/* FAKE BACK OF PAGE (prevents black void) */}
|
|
47
|
-
// <AbsoluteFill>
|
|
48
|
-
// <img
|
|
49
|
-
// src={staticFile("video-images/28012026-bg.png")}
|
|
50
|
-
// style={{
|
|
51
|
-
// position: "absolute",
|
|
52
|
-
// inset: 0,
|
|
53
|
-
// width: "100%",
|
|
54
|
-
// height: "100%",
|
|
55
|
-
// objectFit: "cover",
|
|
56
|
-
// }}
|
|
57
|
-
// />
|
|
58
|
-
// </AbsoluteFill>
|
|
59
|
-
|
|
60
|
-
// {/* REAL NEXT PAGE (appears only after flip) */}
|
|
61
|
-
// <AbsoluteFill style={{ opacity: bgOpacity }}>
|
|
62
|
-
// {background}
|
|
63
|
-
// </AbsoluteFill>
|
|
64
|
-
|
|
65
|
-
// {/* CURRENT PAGE */}
|
|
66
|
-
// <AbsoluteFill
|
|
67
|
-
// style={{
|
|
68
|
-
// transformOrigin: "left center",
|
|
69
|
-
// transformStyle: "preserve-3d",
|
|
70
|
-
// backfaceVisibility: "hidden",
|
|
71
|
-
// transform: `rotateY(-${rotateY}deg)`,
|
|
72
|
-
// boxShadow: "20px 0 40px rgba(0,0,0,0.25)",
|
|
73
|
-
// }}
|
|
74
|
-
// >
|
|
75
|
-
// {children}
|
|
76
|
-
// </AbsoluteFill>
|
|
77
|
-
|
|
78
|
-
// </AbsoluteFill>
|
|
79
|
-
// );
|
|
80
|
-
// };
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
import React from "react";
|
|
87
|
-
import {
|
|
88
|
-
AbsoluteFill,
|
|
89
|
-
useCurrentFrame,
|
|
90
|
-
interpolate,
|
|
91
|
-
Easing,
|
|
92
|
-
staticFile,
|
|
93
|
-
} from "remotion";
|
|
94
|
-
|
|
95
|
-
export const PageFlipTransition = ({
|
|
96
|
-
children,
|
|
97
|
-
background,
|
|
98
|
-
sceneDuration = 192,
|
|
99
|
-
flipDuration = 30,
|
|
100
|
-
direction = "left", // "left" | "right"
|
|
101
|
-
}) => {
|
|
102
|
-
const frame = useCurrentFrame();
|
|
103
|
-
|
|
104
|
-
const flipStart = sceneDuration - flipDuration;
|
|
105
|
-
|
|
106
|
-
// const rotate = interpolate(
|
|
107
|
-
// frame,
|
|
108
|
-
// [flipStart + flipDuration * 0.35, sceneDuration],
|
|
109
|
-
// [0, 100],
|
|
110
|
-
// {
|
|
111
|
-
// extrapolateLeft: "clamp",
|
|
112
|
-
// extrapolateRight: "clamp",
|
|
113
|
-
// easing: Easing.inOut(Easing.ease),
|
|
114
|
-
// }
|
|
115
|
-
// );
|
|
116
|
-
const rotate = interpolate(
|
|
117
|
-
frame,
|
|
118
|
-
[flipStart, sceneDuration],
|
|
119
|
-
[0, 80],
|
|
120
|
-
{
|
|
121
|
-
extrapolateLeft: "clamp",
|
|
122
|
-
extrapolateRight: "clamp",
|
|
123
|
-
easing: Easing.inOut(Easing.cubic),
|
|
124
|
-
}
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
const signedRotate = direction === "left" ? -rotate : rotate;
|
|
128
|
-
|
|
129
|
-
const bgOpacity = interpolate(
|
|
130
|
-
frame,
|
|
131
|
-
[flipStart + flipDuration * 0.5, sceneDuration],
|
|
132
|
-
[0, 1],
|
|
133
|
-
{
|
|
134
|
-
extrapolateLeft: "clamp",
|
|
135
|
-
extrapolateRight: "clamp",
|
|
136
|
-
}
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
return (
|
|
140
|
-
<AbsoluteFill style={{ perspective: 2500 }}>
|
|
141
|
-
|
|
142
|
-
{/* Fake back of page */}
|
|
143
|
-
<AbsoluteFill>
|
|
144
|
-
<img
|
|
145
|
-
src={staticFile("video-images/28012026-bg.png")}
|
|
146
|
-
style={{
|
|
147
|
-
position: "absolute",
|
|
148
|
-
inset: 0,
|
|
149
|
-
width: "100%",
|
|
150
|
-
height: "100%",
|
|
151
|
-
objectFit: "cover",
|
|
152
|
-
}}
|
|
153
|
-
/>
|
|
154
|
-
</AbsoluteFill>
|
|
155
|
-
|
|
156
|
-
{/* Next page */}
|
|
157
|
-
<AbsoluteFill style={{ opacity: bgOpacity }}>
|
|
158
|
-
{background}
|
|
159
|
-
</AbsoluteFill>
|
|
160
|
-
|
|
161
|
-
{/* Current page */}
|
|
162
|
-
<AbsoluteFill
|
|
163
|
-
style={{
|
|
164
|
-
transformOrigin:
|
|
165
|
-
direction === "left" ? "left center" : "right center",
|
|
166
|
-
transformStyle: "preserve-3d",
|
|
167
|
-
backfaceVisibility: "hidden",
|
|
168
|
-
transform: `rotateY(${signedRotate}deg)`,
|
|
169
|
-
boxShadow:
|
|
170
|
-
direction === "left"
|
|
171
|
-
? "20px 0 40px rgba(0,0,0,0.25)"
|
|
172
|
-
: "-20px 0 40px rgba(0,0,0,0.25)",
|
|
173
|
-
}}
|
|
174
|
-
>
|
|
175
|
-
{children}
|
|
176
|
-
</AbsoluteFill>
|
|
177
|
-
|
|
178
|
-
</AbsoluteFill>
|
|
179
|
-
);
|
|
180
|
-
};
|