No Buts
A muted objection builds in the corner and a larger reply answers it, repeating, with the last reply in accent.
$ pnpm dlx shadcn@latest add @remocn/no-butsUsage
// src/Root.tsx
import { Composition } from "remotion";
import { NoButs } from "@/components/remocn/no-buts";
const NoButsScene = () => (
<NoButs
exchanges={[
{ objection: "But I am not a designer.", reply: "You do not need to be." },
{ objection: "But…", reply: "Go on. We will wait." },
]}
/>
);
export const RemotionRoot = () => (
<Composition
id="NoButs"
component={NoButsScene}
durationInFrames={255}
fps={30}
width={1280}
height={720}
/>
);Each exchange builds a muted objection word by word at the top right, then a larger reply along the bottom left; the next exchange pushes the previous one away, and the final reply turns the accent color. Pass exchanges as { objection, reply } pairs. Timing compresses to fit the composition; 226 frames is the uncompressed length of the three defaults. It ships light and dark.
Props5
| Prop | Type | Default |
|---|---|---|
| exchanges | { objection: string; reply: string }[]DEFAULT_EXCHANGES Objection and reply pairs, played in order. | |
| accent | string— Color of the final reply; 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. | |
- exchanges{ objection: string; reply: string }[]
Objection and reply pairs, played in order.
Default
DEFAULT_EXCHANGES - accentstring
Color of the final reply; overrides the theme accent.
- backgroundstring
Background fill; pass "transparent" to drop it.
- speednumber
Playback speed multiplier for the whole timeline.
Default
1 - theme"dark" | "light"
Light or dark palette.
Default
"dark"