create-remotion-geist

작성자: vercel

Geist 디자인 시스템 미학을 사용하여 Remotion 비디오를 생성합니다. Vercel의 스타일을 따라야 하는 비디오, 애니메이션 또는 모션 그래픽을 만들라는 요청을 받았을 때 사용하세요.

npx skills add https://github.com/vercel-labs/skill-remotion-geist --skill create-remotion-geist

Create Remotion Geist Video

Create Remotion videos styled with Vercel's Geist design system - dark backgrounds, spring animations, Geist fonts, and the 10-step color scale.

When to Use

  • Creating any Remotion video that should look like Vercel
  • Building motion graphics with Geist's dark theme aesthetic
  • Making animated content using Geist typography and colors
  • Producing videos that need the polished Vercel visual style

Critical Rules

  1. NEVER use emojis - Use proper Geist icons from @geist-ui/icons package
  2. Use official brand assets - Download from official sources, don't hand-craft SVGs
  3. Entry point must be .tsx - Use src/index.tsx with registerRoot(), not .ts
  4. Use prism-react-renderer for code - Do NOT use regex-based syntax highlighting

Quick Start

  1. Scaffold the project:

    mkdir -p src/{scenes,components,utils} out
    npm init -y
    npm install remotion @remotion/cli @remotion/tailwind react react-dom
    npm install -D tailwindcss typescript @types/react
    npm install @geist-ui/icons  # For proper icons
    
  2. Create core files (see references/project-setup.md for templates):

    • remotion.config.ts - Enable Tailwind
    • tailwind.config.js - Geist colors and fonts
    • src/styles.css - Font loading from CDN
    • src/index.tsx - Root composition with registerRoot()
    • src/Root.tsx - Composition definitions
    • src/utils/animations.ts - Spring animations
  3. Build scenes following the pattern in references/scene-patterns.md

  4. Render:

    npx remotion studio          # Preview at localhost:3000
    npx remotion render MyComp out/video.mp4
    

Geist Design Tokens (Quick Reference)

Colors (Dark Theme)

TokenCSS VariableValueUsage
background-100--ds-background-100#0a0a0aPrimary background
background-200--ds-background-200#171717Secondary/elevated
gray-400--ds-gray-400#737373Default borders
green-700--ds-green-700#46A758Success
red-700--ds-red-700#E5484DError
amber-700--ds-amber-700#FFB224Warning
blue-700--ds-blue-700#0070F3Info/accent

Typography Classes

  • Headings: text-heading-{72|64|56|48|40|32|24|20|16|14} (semibold, tight tracking)
  • Labels: text-label-{20|18|16|14|13|12}[-mono] (normal weight)
  • Copy: text-copy-{24|20|18|16|14|13}[-mono] (normal weight)

Spacing (4px base)

  • space-2: 8px | space-4: 16px | space-6: 24px | space-8: 32px

Animation Utilities

Use spring-based animations for Geist's smooth aesthetic:

import { spring, interpolate } from 'remotion';

// Fade in with delay
export function fadeIn(frame: number, fps: number, delay = 0, duration = 0.4) {
  const delayFrames = delay * fps;
  const durationFrames = duration * fps;
  return interpolate(frame, [delayFrames, delayFrames + durationFrames], [0, 1],
    { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
}

// Spring scale
export function springIn(frame: number, fps: number, delay = 0) {
  return spring({ frame: frame - delay * fps, fps, config: { damping: 200 } });
}

Scene Structure Pattern

export function MyScene() {
  const frame = useCurrentFrame();
  const { fps } = useVideoConfig();

  const titleOpacity = fadeIn(frame, fps, 0, 0.4);
  const titleScale = springIn(frame, fps, 0);

  return (
    <AbsoluteFill className="bg-background-100 flex flex-col items-center justify-center">
      <h2 style={{ opacity: titleOpacity, transform: `scale(${titleScale})` }}>
        Title
      </h2>
    </AbsoluteFill>
  );
}

Key Principles

  1. NEVER use emojis - Import icons from @geist-ui/icons (e.g., import { Code, Folder, Check } from '@geist-ui/icons')
  2. Success = Green - Geist uses green for success states (--ds-green-700)
  3. Borders = gray-400 - Default border color (--ds-gray-400)
  4. Inputs use bg-100 - Primary background, not secondary
  5. Spring animations - Smooth, damped motion (damping: 200)
  6. Tight letter-spacing - Headings have negative tracking
  7. Use official brand assets - Download logos from official sources (see references/geist-icons.md)

References

  • references/project-setup.md - Complete file templates
  • references/geist-icons.md - Icons and brand assets (MUST READ)
  • references/code-blocks.md - Syntax-highlighted code blocks (use prism-react-renderer)
  • references/geist-colors.md - Full 10-step color scale
  • references/geist-typography.md - All typography classes with specs
  • references/geist-components.md - Component props and patterns
  • references/scene-patterns.md - Scene templates for common content
  • references/storyboard-template.md - Planning video structure

Font Loading (jsDelivr CDN)

@font-face {
  font-family: 'Geist';
  src: url('https://cdn.jsdelivr.net/npm/geist@1.5.1/dist/fonts/geist-sans/Geist-Regular.woff2') format('woff2');
  font-weight: 400;
}
/* Add Medium (500), SemiBold (600), Bold (700) weights */

vercel의 다른 스킬

vercel
vercel
로컬 개발 및 테스트를 위한 Vercel REST API 에뮬레이션입니다. 사용자가 로컬에서 Vercel API 엔드포인트와 상호작용하거나 Vercel 통합을 테스트해야 할 때 사용합니다.
cron-jobs
vercel
Vercel Cron Jobs 구성 및 모범 사례. vercel.json에서 예약된 작업을 추가, 편집 또는 디버깅할 때 사용합니다.
codegen
vercel
json-render을 위한 코드 생성 유틸리티입니다. UI 명세서에서 코드를 생성하거나, 사용자 정의 코드 내보내기를 구축하거나, 명세서를 탐색하거나, props를 직렬화할 때 사용합니다.
next-best-practice
vercel
Next.js 모범 사례 - 파일 규칙, RSC 경계, 데이터 패턴, 비동기 API, 메타데이터, 오류 처리, 라우트 핸들러, 이미지/폰트 최적화,…
benchmark-sandbox
vercel
Vercel Sandbox에서 vercel-plugin eval 시나리오를 로컬 WezTerm 패널 대신 실행합니다. Claude Code와 플러그인이 사전 설치된 임시 마이크로VM을 프로비저닝합니다.
write-guide
vercel
점진적인 예제를 통해 실제 사용 사례를 가르치는 기술 가이드를 제작합니다. 개념은 독자가 필요로 할 때만 소개됩니다.
benchmark-testing
vercel
벤치마크 테스트 프로젝트를 생성하고 실행하여 실제 시나리오에서 vercel-plugin 스킬 인젝션을 테스트합니다. 격리된 디렉토리를 설정하고, 설치하며…
ai-gateway
vercel
Vercel AI Gateway 전문가 안내. 모델 라우팅, 제공업체 장애 조치, 비용 추적 또는 통합된 방식을 통해 여러 AI 제공업체를 관리할 때 사용합니다.