In Proportion

Each worry builds word by word, shrinks to a dim note, and a bigger accent reply answers it.

Installation
$ pnpm dlx shadcn@latest add @remocn/in-proportion

Usage

tsx
// src/Root.tsx
import { Composition } from "remotion";
import { InProportion } from "@/components/remocn/in-proportion";
 
const InProportionScene = () => (
  <InProportion
    pairs={[
      { worry: "It will look templated.", answer: "It will look like your app." },
      { worry: "I will drown in keyframes.", answer: "You will write a component." },
    ]}
  />
);
 
export const RemotionRoot = () => (
  <Composition
    id="InProportion"
    component={InProportionScene}
    durationInFrames={200}
    fps={30}
    width={1280}
    height={720}
  />
);

A worry builds word by word in large white type, then shrinks into a dimmed note in the top corner while the answer rises in the accent color along the bottom. The next pair repeats. Pass pairs as { worry, answer } objects; timing compresses to fit the composition and leaves about 18% hold at the end. It ships light and dark.

Props5

PropTypeDefault
pairs
{ worry: string; answer: string }[]DEFAULT_PAIRS

Worry and answer pairs, played in order; two or three work best.

accent
string—

Color of the answer text; overrides the theme accent.

background
string—

Background fill; pass "transparent" to drop it.

speed
number1

Playback speed multiplier for the whole timeline.

theme
"dark" | "light""dark"

Light or dark palette.

  • pairs{ worry: string; answer: string }[]

    Worry and answer pairs, played in order; two or three work best.

    DefaultDEFAULT_PAIRS

  • accentstring

    Color of the answer text; overrides the theme accent.

  • backgroundstring

    Background fill; pass "transparent" to drop it.

  • speednumber

    Playback speed multiplier for the whole timeline.

    Default1

  • theme"dark" | "light"

    Light or dark palette.

    Default"dark"