home / skills / vercel-labs / skill-remotion-geist / create-remotion-geist
This skill generates Remotion Geist videos in Vercel's dark Geist style with spring animations and Geist typography.
npx playbooks add skill vercel-labs/skill-remotion-geist --skill create-remotion-geistReview the files below or copy the command above to add this skill to your agents.
---
name: create-remotion-geist
description: Create Remotion videos using the Geist design system aesthetic. Use when asked to create videos, animations, or motion graphics that should follow Vercel's visual style - dark theme, spring animations, Geist typography, and the Geist color palette.
---
# 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:**
```bash
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:**
```bash
npx remotion studio # Preview at localhost:3000
npx remotion render MyComp out/video.mp4
```
## Geist Design Tokens (Quick Reference)
### Colors (Dark Theme)
| Token | CSS Variable | Value | Usage |
|-------|--------------|-------|-------|
| background-100 | --ds-background-100 | #0a0a0a | Primary background |
| background-200 | --ds-background-200 | #171717 | Secondary/elevated |
| gray-400 | --ds-gray-400 | #737373 | Default borders |
| green-700 | --ds-green-700 | #46A758 | Success |
| red-700 | --ds-red-700 | #E5484D | Error |
| amber-700 | --ds-amber-700 | #FFB224 | Warning |
| blue-700 | --ds-blue-700 | #0070F3 | Info/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:
```typescript
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
```tsx
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)
```css
@font-face {
font-family: 'Geist';
src: url('https://cdn.jsdelivr.net/npm/[email protected]/dist/fonts/geist-sans/Geist-Regular.woff2') format('woff2');
font-weight: 400;
}
/* Add Medium (500), SemiBold (600), Bold (700) weights */
```
This skill generates Remotion videos styled with the Geist design system aesthetic. It produces dark-theme motion graphics using Geist typography, the official color palette, and spring-based animations to match Vercel's polished visual style.
The skill scaffolds a Remotion project with a TypeScript React entry (.tsx) and supplies scene patterns, Tailwind configuration, font loading, and animation utilities. It enforces Geist rules: dark backgrounds, Geist fonts, the 10-step color tokens, prism-react-renderer for code blocks, and icon usage from @geist-ui/icons rather than emojis.
Can I use emojis or custom icons in Geist-styled videos?
No. Use @geist-ui/icons for icons and official brand assets. Emojis are disallowed to keep the brand consistent.
What entry file and tools are required to render?
Use src/index.tsx (registerRoot()). Install remotion, React, Tailwind, and @geist-ui/icons. Use npx remotion studio to preview and npx remotion render to export.