171 lines
5.9 KiB
TypeScript
171 lines
5.9 KiB
TypeScript
import { Composition } from "remotion";
|
|
import { FeelsPromoV1 } from "./FeelsPromo";
|
|
import { ConceptASelfAwareness } from "./ConceptA-SelfAwareness";
|
|
import { ConceptBNoJournalJournal } from "./ConceptB-NoJournalJournal";
|
|
import { ConceptCYearInFeelings } from "./ConceptC-YearInFeelings";
|
|
import { ConceptDAlwaysThere } from "./ConceptD-AlwaysThere";
|
|
import { ConceptEMakeItYours } from "./ConceptE-MakeItYours";
|
|
import { ConceptFPrivacyFirst } from "./ConceptF-PrivacyFirst";
|
|
import { ConceptGStreakEffect } from "./ConceptG-StreakEffect";
|
|
// Wild concepts
|
|
import { ConceptHMoodHeist } from "./ConceptH-MoodHeist";
|
|
import { ConceptIRetroArcade } from "./ConceptI-RetroArcade";
|
|
import { ConceptJConspiracy } from "./ConceptJ-Conspiracy";
|
|
import { ConceptKSportsCenter } from "./ConceptK-SportsCenter";
|
|
import { ConceptLMusical } from "./ConceptL-Musical";
|
|
|
|
export const RemotionRoot: React.FC = () => {
|
|
const fps = 30;
|
|
|
|
// V1 calculations
|
|
const sceneDuration = 3.5 * fps;
|
|
const transitionDuration = Math.round(0.6 * fps);
|
|
const outroDuration = Math.round(2.5 * fps);
|
|
const v1TotalDuration =
|
|
sceneDuration * 7 + outroDuration - transitionDuration * 7;
|
|
|
|
return (
|
|
<>
|
|
{/* ═══════════════════════════════════════════════════════════════
|
|
ORIGINAL PROMO
|
|
═══════════════════════════════════════════════════════════════ */}
|
|
<Composition
|
|
id="FeelsPromoV1"
|
|
component={FeelsPromoV1}
|
|
durationInFrames={v1TotalDuration}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* ═══════════════════════════════════════════════════════════════
|
|
STANDARD CONCEPTS (A-G)
|
|
═══════════════════════════════════════════════════════════════ */}
|
|
|
|
{/* Concept A: 30 Seconds to Self-Awareness */}
|
|
<Composition
|
|
id="ConceptA-SelfAwareness"
|
|
component={ConceptASelfAwareness}
|
|
durationInFrames={Math.round(30 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept B: The No-Journal Journal (20s) */}
|
|
<Composition
|
|
id="ConceptB-NoJournalJournal"
|
|
component={ConceptBNoJournalJournal}
|
|
durationInFrames={Math.round(20 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept C: Your Year in Feelings (15s) */}
|
|
<Composition
|
|
id="ConceptC-YearInFeelings"
|
|
component={ConceptCYearInFeelings}
|
|
durationInFrames={Math.round(15 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept D: Always There (25s) */}
|
|
<Composition
|
|
id="ConceptD-AlwaysThere"
|
|
component={ConceptDAlwaysThere}
|
|
durationInFrames={Math.round(25 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept E: Make It Yours (20s) */}
|
|
<Composition
|
|
id="ConceptE-MakeItYours"
|
|
component={ConceptEMakeItYours}
|
|
durationInFrames={Math.round(20 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept F: Privacy First (15s) */}
|
|
<Composition
|
|
id="ConceptF-PrivacyFirst"
|
|
component={ConceptFPrivacyFirst}
|
|
durationInFrames={Math.round(15 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept G: The Streak Effect (20s) */}
|
|
<Composition
|
|
id="ConceptG-StreakEffect"
|
|
component={ConceptGStreakEffect}
|
|
durationInFrames={Math.round(20 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* ═══════════════════════════════════════════════════════════════
|
|
WILD CONCEPTS (H-L) - OFF THE WALL CREATIVE
|
|
═══════════════════════════════════════════════════════════════ */}
|
|
|
|
{/* Concept H: The Mood Heist (25s) - Ocean's Eleven style thriller */}
|
|
<Composition
|
|
id="ConceptH-MoodHeist"
|
|
component={ConceptHMoodHeist}
|
|
durationInFrames={Math.round(25 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept I: Retro Arcade Feels (20s) - 8-bit video game */}
|
|
<Composition
|
|
id="ConceptI-RetroArcade"
|
|
component={ConceptIRetroArcade}
|
|
durationInFrames={Math.round(20 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept J: The Feels Conspiracy (20s) - Dark documentary thriller */}
|
|
<Composition
|
|
id="ConceptJ-Conspiracy"
|
|
component={ConceptJConspiracy}
|
|
durationInFrames={Math.round(20 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept K: Sports Center Emotions (20s) - ESPN broadcast parody */}
|
|
<Composition
|
|
id="ConceptK-SportsCenter"
|
|
component={ConceptKSportsCenter}
|
|
durationInFrames={Math.round(20 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
|
|
{/* Concept L: Feelings The Musical (25s) - Broadway musical number */}
|
|
<Composition
|
|
id="ConceptL-Musical"
|
|
component={ConceptLMusical}
|
|
durationInFrames={Math.round(25 * fps)}
|
|
fps={fps}
|
|
width={1080}
|
|
height={1920}
|
|
/>
|
|
</>
|
|
);
|
|
};
|