---
name: remotion
description: 动画逻辑图工厂。用户描述想要的动画(ASCII 草图或文字),自动生成 Remotion 代码并渲染为 GIF。当用户提到动画、逻辑图、GIF、Remotion 时触发。
---
# Remotion 动画逻辑图 Skill
## 核心工作流
```
检测环境 → 用户描述 → 匹配现有模板 → 适配/新建 → 注册 → 渲染 GIF → 导出
```
**核心原则:优先复用现有模板,不要从零新建。**
用户不需要搭环境、不需要懂代码。Skill 自带完整运行环境。
## 目录结构
```
skills/remotion/
├── SKILL.md # 本文件
├── package.json # 依赖配置(已安装)
├── tsconfig.json # TypeScript 配置
├── node_modules/ # 依赖(已安装)
├── src/
│ └── index.tsx # 入口文件(注册所有 Composition)
├── 案例库/ # 现有模板(可直接渲染)
│ ├── 循环流程图/
│ ├── 莫兰迪卡片网格/
│ ├── 可爱流程图/
│ ├── 对比流程图/
│ ├── 技能流程图/
│ ├── 终端流程图/
│ ├── 人物卡片/
│ ├── 时间线/
│ ├── 代码展示/
│ └── 饼图/
├── 脚本库/
│ ├── check-env.sh # 环境自检
│ └── init-project.sh # 初始化(已废弃,环境已内置)
└── 设计规范/
└── 动画设计规范.md
```
## 执行步骤
当用户要求生成动画逻辑图时,按以下步骤执行:
### 第 1 步:检测 Remotion 环境
检查 `skills/remotion/` 目录是否存在:
- **不存在** → 自动克隆仓库到 skills 目录下,然后 `npm install`
- **存在但无 node_modules** → 自动 `npm install`
- **一切就绪** → 进入下一步
```bash
# 检查目录是否存在
ls skills/remotion/package.json
# 如果不存在,克隆仓库
git clone https://github.com/Ceeon/remotion-skill.git skills/remotion
cd skills/remotion && npm install
# 如果存在但无 node_modules
cd skills/remotion && npm install
# 一切就绪,检查环境
bash 脚本库/check-env.sh
```
### 第 2 步:理解用户需求
用户会提供以下任意一种输入:
- **ASCII 草图**:用文字画出大概的布局和逻辑
- **文字描述**:自然语言描述想要的动画
- **参考案例**:指定案例库中的某个模板
### 第 3 步:匹配现有模板(优先)
**先看案例库,不要直接新建。**
1. 浏览 `案例库/` 下所有子目录,读取每个模板的 `.tsx` 文件
2. 找到与用户需求最接近的模板
3. 判断匹配度:
- **高匹配**(类型相同,只需改文字/颜色)→ 复制模板,修改内容
- **中匹配**(类型相近,需调整布局/动画)→ 基于模板改造
- **无匹配**(案例库没有类似的)→ 才从零新建
```
案例库现有模板:
├── 循环流程图/ → 循环关系、闭环流程
├── 莫兰迪卡片网格/ → 多卡片并列展示
├── 可爱流程图/ → 轻松风格的步骤图
├── 对比流程图/ → A vs B 对比
├── 技能流程图/ → 技能/能力展示
├── 终端流程图/ → 代码/终端风格
├── 人物卡片/ → 人物介绍
├── 时间线/ → 时间轴
├── 代码展示/ → 代码演示
└── 饼图/ → 数据可视化
```
### 第 4 步:生成/适配组件代码
基于模板适配或从零新建,在 `案例库/` 下创建新目录,写入 `.tsx` 组件文件。
**代码规范:**
- 画布尺寸:800×600(默认)
- fps:30
- 使用 `frame % totalFrames` 实现循环
- 动画使用 `spring()` 弹性效果
- 动画结尾留 60 帧静止缓冲(防闪烁)
- 字体:`PingFang SC, Microsoft YaHei, sans-serif`
- 入场动画:依次弹入,每个元素间隔 30-40 帧
**必须导入:**
```tsx
import { useCurrentFrame, useVideoConfig, interpolate, AbsoluteFill, spring } from 'remotion';
```
### 第 5 步:注册 Composition
将新组件添加到 `src/index.tsx`:
```tsx
import { NewComponent } from '../案例库/新组件/NewComponent';
// 在 Root 组件的 <> 内添加:
```
### 第 6 步:渲染 GIF
```bash
cd /path/to/skills/remotion
npx remotion render src/index.tsx "/目标路径/文件名.gif" --codec=gif --every-nth-frame=2
```
- `--every-nth-frame=2` 相当于 15fps,体积和流畅度的最佳平衡
- 输出路径由用户指定(通常是文章所在目录)
## 渲染已有模板
案例库中的模板可以直接渲染,无需额外操作:
```bash
# 查看可用 composition
grep 'id="' src/index.tsx
# 渲染指定模板
npx remotion render src/index.tsx cycle-flowchart /输出路径/循环流程图.gif --codec=gif --every-nth-frame=2
npx remotion render src/index.tsx morandi-grid /输出路径/莫兰迪卡片网格.gif --codec=gif --every-nth-frame=2
npx remotion render src/index.tsx cute-flowchart /输出路径/可爱流程图.gif --codec=gif --every-nth-frame=2
```
## 设计规范速查
| 项目 | 默认值 |
|------|--------|
| 画布 | 800×600 |
| fps | 30 |
| 背景 | `#fff` 或 `#f5f0eb`(莫兰迪) |
| 入场间隔 | 30-40 帧/元素 |
| 静止缓冲 | 尾部 60 帧 |
| 弹性动画 | `spring({ damping: 8-12 })` |
| 字体 | PingFang SC |
| 节点圆角 | 50%(圆)或 20px(卡片) |
## 触发条件
当用户提到以下内容时触发此 skill:
- 动画逻辑图、动态配图、GIF 配图
- Remotion 渲染
- 把 ASCII 变成动画
- 渲染模板、导出 GIF