Render with Remotion CLI
npx remotion render remotion/index.tsx SubscribeCTA output.mp4
Composition code
import { AbsoluteFill, useCurrentFrame, interpolate, Easing } from "remotion";
export const SubscribeCTA: React.FC = () => {
const frame = useCurrentFrame();
const avatarScale = interpolate(frame, [10, 40], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp", easing: Easing.out(Easing.back(1.6)) });
const buttonScale = interpolate(frame, [70, 100], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp", easing: Easing.out(Easing.back(1.5)) });
const bellAngle = frame > 110 && frame < 145 ? Math.sin((frame - 110) * 0.7) * 20 * Math.max(0, 1 - (frame - 110) / 35) : 0;
return (
<AbsoluteFill style={{ background: "#0f0f0f", fontFamily: "Inter, sans-serif", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center" }}>
<div style={{ position: "absolute", top: 0, left: 0, right: 0, height: 3, background: "#ff0000" }} />
<div style={{ width: 140, height: 140, borderRadius: "50%", background: "linear-gradient(135deg, #ff0000, #cc0000)", display: "flex", alignItems: "center", justifyContent: "center", fontSize: 52, fontWeight: 900, color: "white", marginBottom: 28, transform: `scale(${avatarScale})` }}>YT</div>Subscribe CTA
YouTube subscribe call-to-action with avatar spring-in, bell shake animation, and ripple pulse rings.
Duration6s
Resolution1920 × 1080
Frame rate30 fps
Frames180
Copy the code snippet into your Remotion project and run the render command to generate this template locally.