Skip to content
Back to skills

Carocut Builder Remotion Ref

ASecurity

Remotion API 参考索引。包含 50+ 条 Remotion API 规则的目录索引、关键规则速查表、常用模式代码示例。加载此 skill 获取索引,然后按需 read 具体规则文件。是 carocut-builder-compositor 的伴侣参考。

  • 124 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 8, 2026
ai-agentstypescriptgobashreactnodespringdebuggingapidocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned June 8, 2026

npx -y skills add bilibili/carocut --skill carocut-builder-remotion-ref --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Carocut Builder Remotion Ref?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Carocut Builder Remotion Ref
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bilibili-carocut-builder-remotion-ref/badge)](https://www.skillsdirectory.com/skills/bilibili-carocut-builder-remotion-ref)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: carocut-builder-remotion-ref
description: Remotion API 参考索引。包含 50+ 条 Remotion API 规则的目录索引、关键规则速查表、常用模式代码示例。加载此 skill 获取索引,然后按需 read 具体规则文件。是 carocut-builder-compositor 的伴侣参考。
---

# Remotion Reference

Comprehensive Remotion API reference with best practices. This skill supplements carocut-builder-compositor with detailed API documentation.

**Relationship to other skills:**
- **carocut-builder-compositor:** Implementation patterns, visual standards, project structure
- **carocut-reviewer:** Debugging, preview, render commands
- **This skill:** Remotion API reference, component documentation

---

## Critical Rules (MANDATORY)

| Rule | Implementation | Why |
|------|----------------|-----|
| Frame calculation | Always `Math.round(sec * fps)` | Float frames cause jitter/crashes |
| interpolate safety | `Math.max(duration, 1)` for inputRange | Equal values crash Remotion |
| extrapolate clamp | Always add `extrapolateLeft/Right: 'clamp'` | Prevents values outside range |
| CSS animations | FORBIDDEN | Frame-inaccurate, breaks render |
| Native HTML media | FORBIDDEN - use `<Img>`, `<Audio>`, `<Video>` | Remotion needs asset tracking |
| setTimeout/setInterval | FORBIDDEN | Not frame-synchronized |
| useEffect side effects | FORBIDDEN | Breaks deterministic rendering |

---

## Quick Reference

### Core Hooks

| Hook | Returns | Usage |
|------|---------|-------|
| `useCurrentFrame()` | `number` | Current frame (0-indexed) |
| `useVideoConfig()` | `{ fps, width, height, durationInFrames }` | Video configuration |

### Animation Functions

| Function | Signature | Purpose |
|----------|-----------|---------|
| `interpolate` | `interpolate(frame, inputRange, outputRange, options)` | Linear interpolation |
| `spring` | `spring({ frame, fps, config })` | Physics-based animation |
| `Easing` | `Easing.out(Easing.cubic)` | Easing curves |

### Components

| Component | Props | Purpose |
|-----------|-------|---------|
| `<Sequence>` | `from`, `durationInFrames`, `premountFor`, `name` | Time-based children |
| `<Series>` | children | Sequential playback |
| `<AbsoluteFill>` | style | Full-frame container |
| `<Img>` | `src` | Image (use with staticFile) |
| `<Audio>` | `src`, `volume`, `startFrom` | Audio playback |
| `<Video>` | `src`, `startFrom`, `endAt` | Video playback |
| `<OffthreadVideo>` | `src` | Memory-efficient video |

### Utility Functions

| Function | Usage |
|----------|-------|
| `staticFile("path")` | Reference public/ assets |
| `delayRender()` | Pause render until ready |
| `continueRender(handle)` | Resume after delayRender |
| `getInputProps()` | Get CLI input props |

---

## References Directory

Detailed documentation organized by category. Load specific files when needed.

### Core Concepts

| Topic | File | When to Use |
|-------|------|-------------|
| Compositions | `references/compositions.md` | Defining compositions, registerRoot |
| Sequencing | `references/sequencing.md` | Sequence, Series, TransitionSeries |
| Timing | `references/timing.md` | Easing functions, spring config |
| Animations | `references/animations.md` | interpolate patterns, motion |
| Parameters | `references/parameters.md` | Zod schemas, input props |
| Calculate Metadata | `references/calculate-metadata.md` | Dynamic duration/dimensions |

### Media Components

| Topic | File | When to Use |
|-------|------|-------------|
| Images | `references/images.md` | Img component, sizing |
| Videos | `references/videos.md` | Video component, playback |
| Audio | `references/audio.md` | Sound, volume curves, trimming |
| GIFs | `references/gifs.md` | Animated GIF playback |
| Transparent Videos | `references/transparent-videos.md` | Alpha channel, WebM |

### Assets and Resources

| Topic | File | When to Use |
|-------|------|-------------|
| Assets | `references/assets.md` | staticFile, importing |
| Fonts | `references/fonts.md` | Google Fonts, local fonts, @font-face |
| Trimming | `references/trimming.md` | Cut audio/video start/end |

### Text and Typography

| Topic | File | When to Use |
|-------|------|-------------|
| Text Animations | `references/text-animations.md` | Typewriter, word-by-word |
| Measuring Text | `references/measuring-text.md` | Text dimensions, overflow |
| Measuring DOM Nodes | `references/measuring-dom-nodes.md` | Element size calculation |

### Captions and Subtitles

| Topic | File | When to Use |
|-------|------|-------------|
| Subtitles | `references/subtitles.md` | Caption display basics |
| Display Captions | `references/display-captions.md` | Styled caption rendering |
| Import SRT Captions | `references/import-srt-captions.md` | Parse SRT files |
| Transcribe Captions | `references/transcribe-captions.md` | Audio-to-text |

### Visual Effects

| Topic | File | When to Use |
|-------|------|-------------|
| Transitions | `references/transitions.md` | Scene transitions, TransitionSeries |
| Light Leaks | `references/light-leaks.md` | Overlay light effects |
| Lottie | `references/lottie.md` | After Effects animations |

### Data Visualization

| Topic | File | When to Use |
|-------|------|-------------|
| Charts | `references/charts.md` | Recharts integration |
| Maps | `references/maps.md` | Mapbox, geographic data |

### Advanced Features

| Topic | File | When to Use |
|-------|------|-------------|
| 3D | `references/3d.md` | Three.js, React Three Fiber |
| Tailwind | `references/tailwind.md` | Tailwind CSS integration |
| Can Decode | `references/can-decode.md` | Check codec support |
| Extract Frames | `references/extract-frames.md` | Get frames from video |
| Get Video Duration | `references/get-video-duration.md` | Query video length |
| Get Video Dimensions | `references/get-video-dimensions.md` | Query video size |
| Get Audio Duration | `references/get-audio-duration.md` | Query audio length |

---

## Common Patterns

### interpolate with Safety

```typescript
// ALWAYS include clamp options
const opacity = interpolate(
  frame,
  [startFrame, endFrame],
  [0, 1],
  { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' }
);

// ALWAYS ensure minimum 1-frame duration
const duration = Math.max(secToFrames(text.length * 0.02), 1);
```

### Staggered Entry Animation

```typescript
{items.map((item, index) => {
  const delay = 0.5 + index * 0.12;
  const startFrame = Math.round(delay * fps);
  const endFrame = Math.round((delay + 0.3) * fps);

  const opacity = interpolate(
    frame,
    [startFrame, endFrame],
    [0, 1],
    { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' }
  );
  const translateY = interpolate(
    frame,
    [startFrame, endFrame],
    [20, 0],
    { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' }
  );

  return (
    <div key={index} style={{ opacity, transform: `translateY(${translateY}px)` }}>
      {item}
    </div>
  );
})}
```

### Spring Animation

```typescript
const { fps } = useVideoConfig();
const scale = spring({
  frame,
  fps,
  config: {
    damping: 12,
    stiffness: 100,
    mass: 0.5,
  },
});
```

### BGM with Fade In/Out

```typescript
const { durationInFrames } = useVideoConfig();
const fadeInFrames = 60;  // 2 seconds at 30fps
const fadeOutFrames = 90; // 3 seconds

<Audio
  src={staticFile('audio/bgm/ambient.mp3')}
  volume={(f) => interpolate(
    f,
    [0, fadeInFrames, durationInFrames - fadeOutFrames, durationInFrames],
    [0, 0.15, 0.15, 0],
    { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' }
  )}
  loop
/>
```

### Voiceover Positioning

```typescript
// Absolute positioning - NOT nested Sequences
const voStartFrame = computeShotStartFrame('shot_005') + msToFrames(200);

<Sequence from={voStartFrame} durationInFrames={msToFrames(voDuration)} name="Shot-005">
  <Audio src={staticFile('audio/vo/VO_005.wav')} />
</Sequence>
```

### TransitionSeries Usage

```typescript
import { TransitionSeries, linearTiming } from '@remotion/transitions';
import { fade } from '@remotion/transitions/fade';

<TransitionSeries>
  <TransitionSeries.Sequence durationInFrames={CHAPTER1_DURATION}>
    <Chapter1 />
  </TransitionSeries.Sequence>

  <TransitionSeries.Transition
    presentation={fade()}
    timing={linearTiming({ durationInFrames: 15 })}
  />

  <TransitionSeries.Sequence durationInFrames={CHAPTER2_DURATION}>
    <Chapter2 />
  </TransitionSeries.Sequence>
</TransitionSeries>
```

---

## Frame Calculation Utilities

```typescript
import { FPS } from './constants';

// Seconds to frames (always integer)
export function secToFrames(sec: number): number {
  return Math.round(sec * FPS);
}

// Milliseconds to frames (always integer)
export function msToFrames(ms: number): number {
  return Math.round((ms / 1000) * FPS);
}

// Safe duration (minimum 1 frame)
export function safeDuration(frames: number): number {
  return Math.max(frames, 1);
}
```

---

## Error Quick Reference

| Error Message | Cause | Fix |
|---------------|-------|-----|
| `inputRange must be strictly monotonically increasing` | Equal inputRange values | Use `Math.max(duration, 1)` |
| `Could not find composition` | Missing registerRoot | Check Root.tsx exports |
| `staticFile not found` | Wrong path | Path relative to public/, case-sensitive |
| `Render timed out` | delayRender not continued | Call continueRender() |
| White screen in Studio | Component crash | Check DevTools Console |
| WebGL render fails | OpenGL flag | Add renderer flag like`--gl angle-egl` |

---

## Render Commands

All render output MUST go to the `out/` directory so it appears in the resource panel.

```bash
# Test render (first 10 seconds)
npx remotion render MyComposition --frames=0-300 out/test.mp4

# Full render
npx remotion render MyComposition out/output.mp4

# High quality render
npx remotion render MyComposition --crf=15 out/output_hq.mp4

# Low memory render
npx remotion render MyComposition --concurrency=2 --gl=angle out/output.mp4
```

---

## Notes

- This reference supplements carocut-builder-compositor, not replaces it
- For visual standards (fonts, colors, layout), see carocut-builder-compositor
- For debugging workflow, see carocut-reviewer
- Load specific rule files only when implementing that feature

Files in this skill

  • SKILL.md10 KB
  • references/3d.md2.2 KB
  • references/animations.md790 B
  • references/assets.md1.6 KB
  • references/assets/charts-bar-chart.tsx3.3 KB
  • references/assets/text-animations-typewriter.tsx2.1 KB
  • references/assets/text-animations-word-highlight.tsx2.3 KB
  • references/audio.md3.5 KB
  • references/calculate-metadata.md2.9 KB
  • references/can-decode.md1.5 KB
  • references/charts.md1.7 KB
  • references/compositions.md3.6 KB
  • references/display-captions.md5.3 KB
  • references/extract-frames.md5.4 KB
  • references/fonts.md3.4 KB
  • references/get-audio-duration.md1.3 KB
  • references/get-video-dimensions.md1.6 KB
  • references/get-video-duration.md1.3 KB
  • references/gifs.md3.6 KB
  • references/images.md2.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.