Ring Text
Text runs around a tilted 3D band that spins, reading on the near side and mirrored on the far side
$ pnpm dlx shadcn@latest add @remocn/ring-textUsage
// src/Root.tsx
import { AbsoluteFill, Composition } from "remotion";
import { RingText } from "@/components/remocn/ring-text";
const Ring = () => (
<AbsoluteFill style={{ backgroundColor: "#d4ff1f" }}>
<RingText text="Type in motion" color="#d4ff1f" band="#0a0a0a" />
</AbsoluteFill>
);
export const RemotionRoot = () => (
<Composition
id="RingText"
component={Ring}
durationInFrames={180}
fps={30}
width={1280}
height={720}
/>
);Every character sits on its own panel, placed around the ring with
rotateY(θ) translateZ(radius), and the panel background forms the band. The
text and separator repeat as many times as fit the circumference, and the
remainder is spread as letter spacing so the band closes without a gap. A
phrase longer than one lap grows the radius instead.
The ring is viewed from above: the near side reads left to right, and the far
side shows the letters mirrored and dimmed. It turns once every period
frames, and its tilt sways by six degrees. It arrives scaled down, spinning
fast, and settles into its cruise speed by frame 30.
The ring is centered in its parent; place it with a wrapper. Sizes scale with
height / 720.
Props13
| Prop | Type | Default |
|---|---|---|
| text | string"Type in motion" The phrase around the ring | |
| separator | string"•" Glyph between repeats. An empty string leaves a space | |
| radius | number210 Ring radius in reference px. Long text grows it | |
| fontSize | number40 Font size in reference px. The band is 1.5em tall | |
| fontWeight | number800 Font weight | |
| fontFamily | stringInter Font family | |
| color | string"#fafafa" Letter color | |
| band | string"#0a0a0a" Band color | |
| tilt | number38 Degrees the ring leans toward the camera | |
| roll | number-16 Degrees the ring is rotated in the frame | |
| period | number240 Frames for one full turn | |
| speed | number1 Timeline speed multiplier | |
| className | string— Optional className passed to the wrapper | |
- textstring
The phrase around the ring
Default
"Type in motion" - separatorstring
Glyph between repeats. An empty string leaves a space
Default
"•" - radiusnumber
Ring radius in reference px. Long text grows it
Default
210 - fontSizenumber
Font size in reference px. The band is 1.5em tall
Default
40 - fontWeightnumber
Font weight
Default
800 - fontFamilystring
Font family
Default
Inter - colorstring
Letter color
Default
"#fafafa" - bandstring
Band color
Default
"#0a0a0a" - tiltnumber
Degrees the ring leans toward the camera
Default
38 - rollnumber
Degrees the ring is rotated in the frame
Default
-16 - periodnumber
Frames for one full turn
Default
240 - speednumber
Timeline speed multiplier
Default
1 - classNamestring
Optional className passed to the wrapper