StealThis .dev

Quote Short Video (Remotion)

A vertical quote short with animated text reveal, author attribution, decorative accent line, and branded footer — 1080×1920, 30 fps.

Open Remotion
remotion react typescript
Targets: TS React

Preview

Code

import {
  AbsoluteFill,
  Composition,
  interpolate,
  spring,
  useCurrentFrame,
  useVideoConfig,
  Easing,
} from "remotion";

// ─── CONFIG ────────────────────────────────────────────────────────────────────
const CONFIG = {
  quote: "Code is like humor. When you have to explain it, it's bad.",
  author: "— Cory House",
  footer: "@codeinsights · stealthis.dev",
  bgColor: "#0a0e1a",
  accentColor: "#7c3aed",
  accentColorLight: "#a78bfa",
  textColor: "#ffffff",
  footerColor: "rgba(255,255,255,0.45)",
  quoteMarkOpacity: 0.07,
  // Timings (frames)
  quoteMarkInFrame: 0,
  firstWordFrame: 10,
  wordStagger: 5,
  accentLineFrame: 100,
  authorFrame: 120,
  footerFrame: 180,
  holdStart: 300, // freeze all motion near end
};
// ───────────────────────────────────────────────────────────────────────────────

export const QuoteShort: React.FC = () => {
  const frame = useCurrentFrame();
  const { fps, width, height } = useVideoConfig();

  const words = CONFIG.quote.split(" ");

  // ── Background radial glow ──────────────────────────────────────────────────
  const glowOpacity = interpolate(frame, [0, 40], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
    easing: Easing.out(Easing.quad),
  });

  // ── Giant decorative quote mark ─────────────────────────────────────────────
  const quoteMarkOpacity = interpolate(
    frame,
    [CONFIG.quoteMarkInFrame, CONFIG.quoteMarkInFrame + 20],
    [0, CONFIG.quoteMarkOpacity],
    { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
  );
  const quoteMarkScale = spring({
    frame: Math.max(0, frame - CONFIG.quoteMarkInFrame),
    fps,
    from: 0.4,
    to: 1,
    config: { damping: 16, stiffness: 70 },
  });

  // ── Accent line ─────────────────────────────────────────────────────────────
  const accentLineProgress = spring({
    frame: Math.max(0, frame - CONFIG.accentLineFrame),
    fps,
    from: 0,
    to: 1,
    config: { damping: 22, stiffness: 55 },
  });
  const accentLineWidth = accentLineProgress * 320;

  // ── Author attribution ───────────────────────────────────────────────────────
  const authorProgress = Math.max(0, frame - CONFIG.authorFrame);
  const authorOpacity = interpolate(authorProgress, [0, 18], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });
  const authorY = spring({
    frame: authorProgress,
    fps,
    from: 40,
    to: 0,
    config: { damping: 18, stiffness: 80 },
  });

  // ── Branded footer ───────────────────────────────────────────────────────────
  const footerProgress = Math.max(0, frame - CONFIG.footerFrame);
  const footerOpacity = interpolate(footerProgress, [0, 20], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });
  const footerY = spring({
    frame: footerProgress,
    fps,
    from: 20,
    to: 0,
    config: { damping: 18, stiffness: 90 },
  });

  return (
    <AbsoluteFill
      style={{
        backgroundColor: CONFIG.bgColor,
        width,
        height,
        overflow: "hidden",
        fontFamily: "'Georgia', serif",
      }}
    >
      {/* Background radial glow — purple pulse */}
      <div
        style={{
          position: "absolute",
          top: "38%",
          left: "50%",
          transform: "translate(-50%, -50%)",
          width: 900,
          height: 900,
          borderRadius: "50%",
          background: `radial-gradient(circle, ${CONFIG.accentColor}28 0%, transparent 70%)`,
          opacity: glowOpacity,
          pointerEvents: "none",
        }}
      />

      {/* Secondary soft glow bottom-right */}
      <div
        style={{
          position: "absolute",
          bottom: "10%",
          right: "-10%",
          width: 600,
          height: 600,
          borderRadius: "50%",
          background: `radial-gradient(circle, ${CONFIG.accentColorLight}18 0%, transparent 70%)`,
          opacity: glowOpacity * 0.6,
          pointerEvents: "none",
        }}
      />

      {/* Decorative giant quote mark */}
      <div
        style={{
          position: "absolute",
          top: 180,
          left: 60,
          opacity: quoteMarkOpacity,
          transform: `scale(${quoteMarkScale})`,
          transformOrigin: "top left",
          lineHeight: 1,
          userSelect: "none",
          pointerEvents: "none",
        }}
      >
        <span
          style={{
            fontFamily: "Georgia, 'Times New Roman', serif",
            fontSize: 380,
            color: CONFIG.textColor,
            lineHeight: 1,
            display: "block",
          }}
        >
          &ldquo;
        </span>
      </div>

      {/* Center content column */}
      <div
        style={{
          position: "absolute",
          top: 0,
          left: 0,
          right: 0,
          bottom: 0,
          display: "flex",
          flexDirection: "column",
          justifyContent: "center",
          alignItems: "center",
          padding: "0 80px",
        }}
      >
        {/* Quote text — word by word spring reveal */}
        <div
          style={{
            display: "flex",
            flexWrap: "wrap",
            justifyContent: "center",
            gap: "0 14px",
            textAlign: "center",
            position: "relative",
            zIndex: 1,
          }}
        >
          {words.map((word, i) => {
            const delay = CONFIG.firstWordFrame + i * CONFIG.wordStagger;
            const wordProgress = Math.max(0, frame - delay);
            const wordOpacity = interpolate(wordProgress, [0, 10], [0, 1], {
              extrapolateLeft: "clamp",
              extrapolateRight: "clamp",
            });
            const wordY = spring({
              frame: wordProgress,
              fps,
              from: 28,
              to: 0,
              config: { damping: 16, stiffness: 110 },
            });
            return (
              <span
                key={i}
                style={{
                  opacity: wordOpacity,
                  transform: `translateY(${wordY}px)`,
                  fontFamily: "Georgia, 'Times New Roman', serif",
                  fontWeight: 700,
                  fontStyle: "italic",
                  fontSize: 72,
                  lineHeight: 1.25,
                  color: CONFIG.textColor,
                  display: "inline-block",
                }}
              >
                {word}
              </span>
            );
          })}
        </div>

        {/* Gradient accent line */}
        <div
          style={{
            width: accentLineWidth,
            height: 4,
            borderRadius: 2,
            background: `linear-gradient(90deg, ${CONFIG.accentColor}, ${CONFIG.accentColorLight})`,
            marginTop: 52,
            marginBottom: 40,
            alignSelf: "center",
          }}
        />

        {/* Author attribution */}
        <div
          style={{
            opacity: authorOpacity,
            transform: `translateY(${authorY}px)`,
            textAlign: "center",
          }}
        >
          <span
            style={{
              fontFamily: "system-ui, -apple-system, sans-serif",
              fontWeight: 600,
              fontSize: 42,
              color: CONFIG.accentColorLight,
              letterSpacing: "0.02em",
            }}
          >
            {CONFIG.author}
          </span>
        </div>
      </div>

      {/* Branded footer */}
      <div
        style={{
          position: "absolute",
          bottom: 80,
          left: 0,
          right: 0,
          display: "flex",
          justifyContent: "center",
          alignItems: "center",
          opacity: footerOpacity,
          transform: `translateY(${footerY}px)`,
        }}
      >
        {/* Footer pill */}
        <div
          style={{
            display: "flex",
            alignItems: "center",
            gap: 12,
            backgroundColor: "rgba(255,255,255,0.06)",
            border: `1px solid rgba(167,139,250,0.2)`,
            borderRadius: 100,
            paddingTop: 14,
            paddingBottom: 14,
            paddingLeft: 36,
            paddingRight: 36,
          }}
        >
          {/* Dot accent */}
          <div
            style={{
              width: 8,
              height: 8,
              borderRadius: "50%",
              background: `linear-gradient(135deg, ${CONFIG.accentColor}, ${CONFIG.accentColorLight})`,
              flexShrink: 0,
            }}
          />
          <span
            style={{
              fontFamily: "system-ui, -apple-system, sans-serif",
              fontWeight: 500,
              fontSize: 30,
              color: CONFIG.footerColor,
              letterSpacing: "0.03em",
            }}
          >
            {CONFIG.footer}
          </span>
        </div>
      </div>
    </AbsoluteFill>
  );
};

export const RemotionRoot: React.FC = () => {
  return (
    <Composition
      id="QuoteShort"
      component={QuoteShort}
      durationInFrames={360}
      fps={30}
      width={1080}
      height={1920}
    />
  );
};

Quote Short Video

A full-screen vertical short (1080×1920) designed for social media reels and stories. An oversized decorative opening quote mark fades and scales into view, then the quote text animates in word by word using spring physics. A horizontal gradient accent line draws in from the left, followed by the author attribution sliding up from below. A branded footer fades in near the end, and the composition holds for a clean 4-second pause before looping. The deep navy background features a subtle radial purple glow for visual depth.

Composition specs

PropertyValue
Resolution1080×1920
FPS30
Duration360 frames (12 s)

Elements

  • Oversized decorative " quote mark — fades and scales in at frame 0, low-opacity white
  • Quote text — word-by-word spring reveal starting at frame 10, large bold white centered
  • Horizontal gradient accent line — draws in from left at frame 100
  • Author attribution (— Cory House) — slides up from below at frame 120
  • Branded footer (@codeinsights · stealthis.dev) — fades in at frame 180
  • Background — deep navy #0a0e1a with radial purple gradient accent