feat(film): cold open + promise sequences
This commit is contained in:
@@ -1,5 +1,28 @@
|
|||||||
import { PillarTitle } from "../components/PillarTitle";
|
import { AbsoluteFill, useCurrentFrame, interpolate } from "remotion";
|
||||||
|
import { BlueprintBg } from "../components/BlueprintBg";
|
||||||
|
import { Caption } from "../components/Caption";
|
||||||
|
import { theme } from "../theme";
|
||||||
import { DURATIONS } from "../timing";
|
import { DURATIONS } from "../timing";
|
||||||
export const ColdOpen: React.FC = () => (
|
|
||||||
<PillarTitle index="" title="Cold Open" subtitle="(stub)" startFrame={0} durationInFrames={DURATIONS.coldOpen} />
|
export const ColdOpen: React.FC = () => {
|
||||||
|
const frame = useCurrentFrame();
|
||||||
|
const hud = interpolate(frame, [10, 30], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
||||||
|
return (
|
||||||
|
<AbsoluteFill>
|
||||||
|
<BlueprintBg opacity={0.5} />
|
||||||
|
<AbsoluteFill style={{ alignItems: "center", justifyContent: "center", flexDirection: "column" }}>
|
||||||
|
<div style={{ fontFamily: theme.font, fontWeight: 900, fontSize: 130, color: theme.text, letterSpacing: "-0.03em", lineHeight: 0.95, textAlign: "center" }}>
|
||||||
|
ROOFING<br />
|
||||||
|
<span style={{ background: theme.brandGradient, WebkitBackgroundClip: "text", WebkitTextFillColor: "transparent" }}>REVOLUTIONIZED</span>
|
||||||
|
</div>
|
||||||
|
</AbsoluteFill>
|
||||||
|
<div style={{ position: "absolute", bottom: 80, left: 80, opacity: hud, borderLeft: `1px solid ${theme.cyan}`, paddingLeft: 14, fontFamily: theme.mono, color: theme.cyan, fontSize: 22 }}>
|
||||||
|
▸ 5,847 PROPERTIES TRACKED
|
||||||
|
</div>
|
||||||
|
<div style={{ position: "absolute", bottom: 80, right: 80, opacity: hud, borderRight: `1px solid ${theme.amber}`, paddingRight: 14, textAlign: "right", fontFamily: theme.mono, color: theme.amber, fontSize: 22 }}>
|
||||||
|
▸ HAIL WATCH ACTIVE · ETA 35 MIN
|
||||||
|
</div>
|
||||||
|
<Caption text="A storm hits. The leads flood in. Then what?" startFrame={Math.round(DURATIONS.coldOpen * 0.45)} durationInFrames={Math.round(DURATIONS.coldOpen * 0.5)} />
|
||||||
|
</AbsoluteFill>
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,5 +1,26 @@
|
|||||||
import { PillarTitle } from "../components/PillarTitle";
|
import { AbsoluteFill, useCurrentFrame, useVideoConfig, spring, interpolate } from "remotion";
|
||||||
|
import { BlueprintBg } from "../components/BlueprintBg";
|
||||||
|
import { theme } from "../theme";
|
||||||
import { DURATIONS } from "../timing";
|
import { DURATIONS } from "../timing";
|
||||||
export const Promise: React.FC = () => (
|
|
||||||
<PillarTitle index="" title="Promise" subtitle="(stub)" startFrame={0} durationInFrames={DURATIONS.promise} />
|
export const Promise: React.FC = () => {
|
||||||
|
const frame = useCurrentFrame();
|
||||||
|
const { fps } = useVideoConfig();
|
||||||
|
const rise = spring({ frame, fps, durationInFrames: 24, config: { damping: 200 } });
|
||||||
|
const y = interpolate(rise, [0, 1], [30, 0]);
|
||||||
|
const opacity = interpolate(frame, [0, 14, DURATIONS.promise - 12, DURATIONS.promise], [0, 1, 1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
||||||
|
return (
|
||||||
|
<AbsoluteFill>
|
||||||
|
<BlueprintBg opacity={0.4} />
|
||||||
|
<AbsoluteFill style={{ alignItems: "center", justifyContent: "center", opacity }}>
|
||||||
|
<div style={{ transform: `translateY(${y}px)`, textAlign: "center", fontFamily: theme.font }}>
|
||||||
|
<div style={{ fontSize: 76, fontWeight: 900, color: theme.text, letterSpacing: "-0.02em" }}>
|
||||||
|
LynkedUp <span style={{ background: theme.brandGradient, WebkitBackgroundClip: "text", WebkitTextFillColor: "transparent" }}>Pro</span>
|
||||||
|
</div>
|
||||||
|
<div style={{ fontSize: 40, color: theme.textDim, marginTop: 18, fontWeight: 600 }}>From the storm to the bank — in one system.</div>
|
||||||
|
<div style={{ fontSize: 28, color: theme.blue, marginTop: 10, fontWeight: 700 }}>Your team runs it. You control all of it.</div>
|
||||||
|
</div>
|
||||||
|
</AbsoluteFill>
|
||||||
|
</AbsoluteFill>
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user