mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(videos): add PromoTeaser square and vertical compositions
This commit is contained in:
@@ -14,6 +14,8 @@ import { FormatUniverse } from "./compositions/features/FormatUniverse";
|
||||
import { PipelineFlow } from "./compositions/features/PipelineFlow";
|
||||
import { OneCommand } from "./compositions/hero/OneCommand";
|
||||
import { PrivacyPromise } from "./compositions/hero/PrivacyPromise";
|
||||
import { PromoTeaser } from "./compositions/promo-teaser/PromoTeaser";
|
||||
import { PromoTeaserVertical } from "./compositions/promo-teaser/PromoTeaserVertical";
|
||||
import { TEXT } from "./lib/fonts";
|
||||
|
||||
const ComponentTest: React.FC = () => (
|
||||
@@ -119,5 +121,21 @@ export const RemotionRoot: React.FC = () => (
|
||||
width={1920}
|
||||
height={1080}
|
||||
/>
|
||||
<Composition
|
||||
id="PromoTeaser"
|
||||
component={PromoTeaser}
|
||||
durationInFrames={600}
|
||||
fps={30}
|
||||
width={1080}
|
||||
height={1080}
|
||||
/>
|
||||
<Composition
|
||||
id="PromoTeaserVertical"
|
||||
component={PromoTeaserVertical}
|
||||
durationInFrames={600}
|
||||
fps={30}
|
||||
width={1080}
|
||||
height={1920}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
import type React from "react";
|
||||
import { AbsoluteFill, Series } from "remotion";
|
||||
import { GradientBlob } from "@/components/GradientBlob";
|
||||
import { GrainOverlay } from "@/components/GrainOverlay";
|
||||
import { COLOR } from "@/lib/colors";
|
||||
import { AmbientOpenScene } from "./scenes/AmbientOpenScene";
|
||||
import { CTAScene } from "./scenes/CTAScene";
|
||||
import { LogoRevealScene } from "./scenes/LogoRevealScene";
|
||||
import { NumberPunchScene } from "./scenes/NumberPunchScene";
|
||||
import { TaglineCascadeScene } from "./scenes/TaglineCascadeScene";
|
||||
|
||||
const BG_BLOBS = [
|
||||
{
|
||||
color: "#f59e0b",
|
||||
radius: 200,
|
||||
cx: 300,
|
||||
cy: 400,
|
||||
a: 1,
|
||||
b: 2,
|
||||
phaseX: 0,
|
||||
phaseY: 0,
|
||||
amplitudeX: 60,
|
||||
amplitudeY: 40,
|
||||
},
|
||||
{
|
||||
color: "#f97316",
|
||||
radius: 150,
|
||||
cx: 750,
|
||||
cy: 250,
|
||||
a: 2,
|
||||
b: 1,
|
||||
phaseX: 1.2,
|
||||
phaseY: 0.8,
|
||||
amplitudeX: 50,
|
||||
amplitudeY: 60,
|
||||
},
|
||||
{
|
||||
color: "#d97706",
|
||||
radius: 180,
|
||||
cx: 540,
|
||||
cy: 700,
|
||||
a: 1,
|
||||
b: 1,
|
||||
phaseX: 2.4,
|
||||
phaseY: 1.6,
|
||||
amplitudeX: 70,
|
||||
amplitudeY: 50,
|
||||
},
|
||||
];
|
||||
|
||||
export const PromoTeaser: React.FC = () => {
|
||||
return (
|
||||
<AbsoluteFill style={{ backgroundColor: COLOR.dark }}>
|
||||
{BG_BLOBS.map((blob, i) => (
|
||||
<GradientBlob key={`bg-${i}`} config={blob} duration={600} />
|
||||
))}
|
||||
|
||||
<Series>
|
||||
<Series.Sequence durationInFrames={90}>
|
||||
<AmbientOpenScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={150}>
|
||||
<NumberPunchScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={150}>
|
||||
<TaglineCascadeScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={120}>
|
||||
<LogoRevealScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={90}>
|
||||
<CTAScene />
|
||||
</Series.Sequence>
|
||||
</Series>
|
||||
|
||||
<GrainOverlay opacity={0.03} />
|
||||
</AbsoluteFill>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,79 @@
|
||||
import type React from "react";
|
||||
import { AbsoluteFill, Series } from "remotion";
|
||||
import { GradientBlob } from "@/components/GradientBlob";
|
||||
import { GrainOverlay } from "@/components/GrainOverlay";
|
||||
import { COLOR } from "@/lib/colors";
|
||||
import { AmbientOpenScene } from "./scenes/AmbientOpenScene";
|
||||
import { CTAScene } from "./scenes/CTAScene";
|
||||
import { LogoRevealScene } from "./scenes/LogoRevealScene";
|
||||
import { NumberPunchScene } from "./scenes/NumberPunchScene";
|
||||
import { TaglineCascadeScene } from "./scenes/TaglineCascadeScene";
|
||||
|
||||
const BG_BLOBS = [
|
||||
{
|
||||
color: "#f59e0b",
|
||||
radius: 250,
|
||||
cx: 540,
|
||||
cy: 600,
|
||||
a: 1,
|
||||
b: 2,
|
||||
phaseX: 0,
|
||||
phaseY: 0,
|
||||
amplitudeX: 80,
|
||||
amplitudeY: 100,
|
||||
},
|
||||
{
|
||||
color: "#f97316",
|
||||
radius: 200,
|
||||
cx: 300,
|
||||
cy: 1200,
|
||||
a: 2,
|
||||
b: 1,
|
||||
phaseX: 1.2,
|
||||
phaseY: 0.8,
|
||||
amplitudeX: 60,
|
||||
amplitudeY: 120,
|
||||
},
|
||||
{
|
||||
color: "#d97706",
|
||||
radius: 220,
|
||||
cx: 700,
|
||||
cy: 1600,
|
||||
a: 1,
|
||||
b: 1,
|
||||
phaseX: 2.4,
|
||||
phaseY: 1.6,
|
||||
amplitudeX: 90,
|
||||
amplitudeY: 80,
|
||||
},
|
||||
];
|
||||
|
||||
export const PromoTeaserVertical: React.FC = () => {
|
||||
return (
|
||||
<AbsoluteFill style={{ backgroundColor: COLOR.dark }}>
|
||||
{BG_BLOBS.map((blob, i) => (
|
||||
<GradientBlob key={`bg-v-${i}`} config={blob} duration={600} />
|
||||
))}
|
||||
|
||||
<Series>
|
||||
<Series.Sequence durationInFrames={90}>
|
||||
<AmbientOpenScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={150}>
|
||||
<NumberPunchScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={150}>
|
||||
<TaglineCascadeScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={120}>
|
||||
<LogoRevealScene />
|
||||
</Series.Sequence>
|
||||
<Series.Sequence durationInFrames={90}>
|
||||
<CTAScene />
|
||||
</Series.Sequence>
|
||||
</Series>
|
||||
|
||||
<GrainOverlay opacity={0.03} />
|
||||
</AbsoluteFill>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user