Period Drop
A word rises out of its line, then a colored dot falls from above the frame, bounces with squash and stretch, and settles as the period
$ pnpm dlx shadcn@latest add @remocn/period-dropUsage
// src/Root.tsx
import { AbsoluteFill, Composition } from "remotion";
import { PeriodDrop } from "@/components/remocn/period-drop";
const EndCard = () => (
<AbsoluteFill style={{ backgroundColor: "#0a0a0a" }}>
<PeriodDrop text="remocn" dotColor="#ff4d1a" />
</AbsoluteFill>
);
export const RemotionRoot = () => (
<Composition
id="PeriodDrop"
component={EndCard}
durationInFrames={75}
fps={30}
width={1280}
height={720}
/>
);Each letter rises out of a clip at its line over 12 frames, two frames apart. At frame 20 the dot drops from above the frame and lands at frame 32 on the baseline right after the last letter. It bounces twice, each time leaving at 0.35 of its previous speed, and comes to rest at frame 47.
The dot stretches with its speed in flight and squashes on each impact, keeping its area. The stretch tops out at 1.3× and the squash at 0.78×; later impacts squash less. That is well past the 2–4% squash the motion principles suggest for UI, on purpose: the bounce is the effect.
The dot is an inline element after the word, so it lands wherever the word
ends without measuring it. The component paints no background and centers the
word in its parent. Sizes scale with height / 720.
| Prop | Type | Default | Description |
|---|---|---|---|
text | string | "remocn" | The word before the period |
fontSize | number | 160 | Font size in reference px at 720p |
fontWeight | number | 800 | Font weight |
fontFamily | string | Inter | Font family |
color | string | "#fafafa" | Word color |
dotColor | string | "#D97757" | Color of the period |
dotSize | number | 0.2 | Period diameter in em |
speed | number | 1 | Timeline speed multiplier |
className | string | — | Optional className passed to the wrapper |