重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
remotion-video-reviewer by ncklrs/startup-os-skills
npx skills add https://github.com/ncklrs/startup-os-skills --skill remotion-video-reviewer提供针对运动设计规范的 Remotion 视频实现的全面、结构化审查。识别问题、评估影响并生成可操作的修订清单。
执行多层审查分析:
需要原始规范和已实现的代码:
VIDEO_SPEC.md (来自 /motion-designer)
# 视频标题
## 概述
- 时长:30 秒
- 帧率:30 fps
## 调色板
主色:#FF6B35
背景色:#0A0A0A
## 场景 1:开场 (0s - 5s)
- Logo 从 0.8 缩放到 1.0
- 弹簧配置:{ damping: 200 }
待审查的代码文件:
src/remotion/compositions/VideoName/index.tsx广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
src/remotion/compositions/VideoName/constants.tssrc/remotion/compositions/VideoName/types.tspublic/ 中的资源文件生成包含优先级问题的全面审查报告:
# 视频审查报告:[视频标题]
**日期:** 2026-01-23
**审查者:** remotion-video-reviewer
**规范版本:** VIDEO_SPEC.md v1.0
**代码位置:** `src/remotion/compositions/VideoName/`
---
## 执行摘要
**总体状态:** ✅ 已批准,需少量修订
**快速统计:**
- 问题总数:4 (0 个关键,1 个高,2 个中,1 个低)
- 规范符合性:95%
- 代码质量:优秀
- 生产就绪:是,在解决高优先级项目后
**建议:** 在最终渲染前解决高优先级颜色不匹配问题。中低优先级项目为可选改进项。
---
## 符合性评分
| 类别 | 分数 | 状态 | 备注 |
|----------|-------|--------|-------|
| **规范符合性** | 95% | 🟢 通过 | 场景 3 中有 1 处颜色不匹配 |
| **代码质量** | 98% | 🟢 通过 | 结构优秀,有少量优化机会 |
| **时间准确性** | 100% | 🟢 通过 | 所有帧计算正确 |
| **视觉保真度** | 95% | 🟢 通过 | 轻微颜色偏差 |
| **资源质量** | 90% | 🟡 良好 | 1 张图片可优化 |
| **性能** | 95% | 🟢 通过 | 渲染时间优秀 |
**总体符合性:** 95.5% — 生产就绪
---
## 发现的问题
### 关键 (生产前必须修复)
_无_ ✅
### 高优先级 (应修复)
#### 1. 场景 3 背景颜色不匹配
**类别:** 视觉保真度
**位置:** `src/remotion/compositions/VideoName/scenes/Scene3.tsx:15`
**影响:** 与品牌颜色视觉不一致
**问题:**
```typescript
// 当前实现
backgroundColor: '#0B0B0B' // ❌ 错误
// 规范要求
Primary: #FF6B35
Background: #0A0A0A // ✅ 正确
修复:
// 更新为使用 COLORS 常量
backgroundColor: COLORS.background // 现在: #0A0A0A
验证:
constants.ts类别: 资源质量
位置: public/images/product.png
影响: 渲染时间变慢,输出文件更大
当前:
建议:
修复:
# 调整大小并转换
magick public/images/product.png -resize 1920x1440 -quality 90 public/images/product.jpg
# 更新代码以使用 .jpg
<Img src={staticFile('images/product.jpg')} />
好处:
类别: 性能
位置: src/remotion/compositions/VideoName/scenes/Scene2.tsx:45
影响: 可能存在轻微性能改进
当前:
// 粒子位置重新计算 (确定性的但未缓存)
const particles = Array.from({ length: 70 }, (_, i) => ({
x: seededRandom(i * 123) * width,
y: seededRandom(i * 456) * height,
}));
建议:
import { useMemo } from 'react';
const particles = useMemo(
() => Array.from({ length: 70 }, (_, i) => ({
x: seededRandom(i * 123) * width,
y: seededRandom(i * 456) * height,
})),
[width, height]
);
预期影响: 场景 2 渲染速度提升 5-10%
类别: 代码质量 位置: 所有场景组件 影响: 提高可维护性
建议:
/**
* 场景 1:带有 Logo 揭示的开场动画
* 时长:0s - 5s (帧 0-150)
* 规范参考:VIDEO_SPEC.md 章节 "场景 1"
*/
function Scene1Opening() {
// ...
}
好处:
✅ 通过:
❌ 未通过:
完成的验证步骤:
✅ 优秀模式:
✅ 遵循最佳实践:
🟡 轻微改进:
✅ 全部已验证:
场景 1: 0s - 5s → 帧 0-150 ✓ 正确 (5 * 30fps)
场景 2: 5s - 15s → 帧 150-450 ✓ 正确 (10 * 30fps)
场景 3: 15s - 25s → 帧 450-750 ✓ 正确 (10 * 30fps)
场景 4: 25s - 30s → 帧 750-900 ✓ 正确 (5 * 30fps)
总计:30s = 900 帧 ✓ 正确
验证:
✅ 良好:
🟡 可改进:
资源检查清单:
public/渲染性能:
无重大问题:
轻微优化机会:
完成的验证:
/remotion-performance-optimizer状态: ✅ 已批准,需少量修订
在解决场景 3 颜色不匹配问题后,此实现已可用于生产。所有关键功能、时序和结构均正确。中低优先级项目是可在未来迭代中解决的可选改进项。
签署: remotion-video-reviewer 日期: 2026-01-23
**本文档提供:**
- 带有快速批准状态的执行摘要
- 量化的符合性分数 (95%, 98% 等)
- 优先级问题 (关键、高、中、低)
- 具体的代码位置和修复方法
- 每个类别的详细分析
- 测试验证检查清单
- 清晰的后续步骤
- 官方批准状态
**输入至:**
- 开发者:修复已识别的问题
- 如果发现性能问题,则输入至 `/remotion-performance-optimizer`
- 批准后的最终生产渲染
## 审查流程
### 1. 规范比较
将实现与运动设计规范进行比较:
**检查:**
- [ ] 规范中的所有场景均已实现
- [ ] 场景时长匹配规范时序
- [ ] 调色板完全匹配十六进制代码
- [ ] 排版 (字体、大小、字重) 匹配
- [ ] 动画描述被准确翻译
- [ ] 音频放置匹配时序
- [ ] 弹簧配置匹配规范
### 2. 代码质量审查
评估代码结构和模式:
**检查:**
- [ ] 常量已提取 (颜色、弹簧、时序)
- [ ] 场景组件遵循命名约定
- [ ] 所有场景正确使用 AbsoluteFill
- [ ] 进度变量已提取 (非内联计算)
- [ ] 使用 useVideoConfig 进行响应式定位
- [ ] 已定义 TypeScript 类型
- [ ] 从 remotion 正确导入
### 3. 时间准确性
验证帧计算:
**检查:**
- [ ] 秒数正确转换为帧 (秒 * fps)
- [ ] 场景时序常量准确
- [ ] 延迟计算使用帧偏移量
- [ ] 过渡考虑重叠
- [ ] 总时长匹配规范
- [ ] 动画保持时间正确
### 4. 动画审查
评估动画实现:
**检查:**
- [ ] 弹簧配置匹配规范描述
- [ ] 插值范围匹配规范值
- [ ] 缓动函数适合运动类型
- [ ] 错开延迟计算正确
- [ ] 连续动画使用适当的模式
- [ ] 退出动画在指定位置存在
### 5. 视觉保真度
确认视觉准确性:
**检查:**
- [ ] 背景颜色匹配规范
- [ ] 元素颜色使用 COLORS 常量
- [ ] 字体大小完全匹配规范
- [ ] 定位遵循规范布局
- [ ] 视觉层次结构得以保持
- [ ] 图层组织 (背景/中景/前景)
### 6. 资源质量
验证资源准备情况:
**检查:**
- [ ] 所有必需资源均存在
- [ ] 资源使用 staticFile() 导入
- [ ] 图片格式合适 (PNG 用于透明,JPEG 用于照片)
- [ ] 音频文件为支持的格式
- [ ] 资源尺寸适合合成
- [ ] 字体正确加载
### 7. 性能检查
识别性能问题:
**检查:**
- [ ] 渲染中无昂贵计算
- [ ] 进度变量被复用
- [ ] 无不必要的弹簧重新计算
- [ ] 在适当的地方使用记忆化
- [ ] 大资源已优化
- [ ] 循环中无内存泄漏
## 审查输出格式
### 摘要
```markdown
## 审查摘要
**规范符合性**:95% (1 处轻微偏差)
**代码质量**:优秀
**时间准确性**:100%
**视觉保真度**:98% (场景 3 颜色不匹配)
**资源质量**:良好 (1 处需要优化)
**性能**:优秀
**总体评级**:生产就绪 (需少量修订)
## 发现的问题
### 关键 (必须修复)
无
### 高 (应修复)
1. **场景 3 背景颜色不匹配**
- 规范:#0A0A0A
- 代码:#0B0B0B
- 影响:视觉不一致
- 修复:更新 COLORS.background
### 中 (考虑修复)
1. **产品图片可优化**
- 当前:4000x3000 PNG
- 建议:1920x1440 JPEG
- 影响:更快的渲染时间
- 修复:调整大小并转换资源
### 低 (锦上添花)
1. **为粒子系统添加记忆化**
- 影响:性能增益可忽略
- 修复:用 useMemo 包装
## 建议
### 代码组织
- 将 ParticleSystem 提取为可复用组件
- 考虑拆分 Scene6 (当前 150 行)
### 性能
- 预加载音频文件
- 考虑懒加载大资源
### 可维护性
- 为场景组件添加 JSDoc 注释
- 考虑提取动画辅助函数
问题: 错误的帧计算
// 错误
const duration = 5; // 应为 150 帧,而不是 5
// 正确
const duration = 5 * fps; // 150 帧
问题: 缺少延迟
// 错误 - 所有元素同时出现
const progress = spring({ frame, fps, config: SMOOTH_SPRING });
// 正确 - 错开延迟
const progress = spring({
frame: frame - (index * STAGGER_DELAY),
fps,
config: SMOOTH_SPRING
});
问题: 内联弹簧配置而非常量
// 错误
const progress = spring({
frame,
fps,
config: { damping: 200 },
});
// 正确
const progress = spring({
frame,
fps,
config: SPRING_CONFIGS.smooth,
});
问题: 重复计算
// 错误
<div style={{
opacity: spring({ frame, fps, config: SMOOTH }),
transform: `scale(${spring({ frame, fps, config: SMOOTH })})`,
}} />
// 正确
const progress = spring({ frame, fps, config: SMOOTH });
<div style={{
opacity: progress,
transform: `scale(${progress})`,
}} />
问题: 硬编码颜色
// 错误
backgroundColor: '#FF6B35'
// 正确
backgroundColor: COLORS.primary
问题: 像素值而非响应式
// 错误
left: 960, // 硬编码居中
// 正确
left: width / 2, // 响应式居中
问题: 直接导入而非 staticFile
// 错误
import logo from './logo.png';
// 正确
import { staticFile } from 'remotion';
const logoSrc = staticFile('logo.png');
问题: 渲染中的昂贵操作
// 错误 - 每帧重新计算
const particles = Array.from({ length: 1000 }, (_, i) => ({
x: Math.random() * width,
y: Math.random() * height,
}));
// 正确 - 计算一次
const particles = useMemo(
() => Array.from({ length: 1000 }, (_, i) => ({
x: seededRandom(i * 123) * width,
y: seededRandom(i * 456) * height,
})),
[width, height]
);
完整的审查检查清单:
配合使用:
/remotion-spec-translator — 审查翻译后的代码/remotion-best-practices — 确保遵循模式/motion-designer — 与原始规范比较/remotion-performance-optimizer — 深度性能分析有关详细的审查标准:
此技能确保 Remotion 实现在部署前是生产就绪、符合规范并遵循最佳实践的。
每周安装次数
64
仓库
GitHub 星标数
9
首次出现
2026年1月27日
安全审计
安装在
opencode60
codex59
gemini-cli59
github-copilot58
claude-code55
cursor55
Provides comprehensive, structured reviews of Remotion video implementations against motion design specifications. Identifies issues, assesses impact, and generates actionable revision lists.
Performs multi-layer review analysis:
Requires both the original specification and implemented code:
VIDEO_SPEC.md (from /motion-designer)
# Video Title
## Overview
- Duration: 30 seconds
- Frame Rate: 30 fps
## Color Palette
Primary: #FF6B35
Background: #0A0A0A
## Scene 1: Opening (0s - 5s)
- Logo scales from 0.8 to 1.0
- Spring config: { damping: 200 }
Code Files to review:
src/remotion/compositions/VideoName/index.tsxsrc/remotion/compositions/VideoName/constants.tssrc/remotion/compositions/VideoName/types.tspublic/Generates a comprehensive review with prioritized issues:
# Video Review Report: [Video Title]
**Date:** 2026-01-23
**Reviewer:** remotion-video-reviewer
**Spec Version:** VIDEO_SPEC.md v1.0
**Code Location:** `src/remotion/compositions/VideoName/`
---
## Executive Summary
**Overall Status:** ✅ APPROVED WITH MINOR REVISIONS
**Quick Stats:**
- Total Issues: 4 (0 critical, 1 high, 2 medium, 1 low)
- Spec Compliance: 95%
- Code Quality: Excellent
- Production Ready: Yes, after addressing HIGH priority items
**Recommendation:** Address high-priority color mismatch before final render. Medium and low priority items are optional improvements.
---
## Compliance Scores
| Category | Score | Status | Notes |
|----------|-------|--------|-------|
| **Spec Compliance** | 95% | 🟢 Pass | 1 color mismatch in Scene 3 |
| **Code Quality** | 98% | 🟢 Pass | Excellent structure, minor optimization opportunity |
| **Timing Accuracy** | 100% | 🟢 Pass | All frame calculations correct |
| **Visual Fidelity** | 95% | 🟢 Pass | Minor color deviation |
| **Asset Quality** | 90% | 🟡 Good | 1 image could be optimized |
| **Performance** | 95% | 🟢 Pass | Excellent render times |
**Overall Compliance:** 95.5% — Production Ready
---
## Issues Found
### CRITICAL (Must Fix Before Production)
_None_ ✅
### HIGH Priority (Should Fix)
#### 1. Scene 3 Background Color Mismatch
**Category:** Visual Fidelity
**Location:** `src/remotion/compositions/VideoName/scenes/Scene3.tsx:15`
**Impact:** Visual inconsistency with brand colors
**Issue:**
```typescript
// Current implementation
backgroundColor: '#0B0B0B' // ❌ Wrong
// Spec requirement
Primary: #FF6B35
Background: #0A0A0A // ✅ Correct
Fix:
// Update to use COLORS constant
backgroundColor: COLORS.background // Now: #0A0A0A
Verification:
constants.ts if COLORS.background is incorrectCategory: Asset Quality Location: public/images/product.png Impact: Slower render times, larger output file
Current:
Recommendation:
Fix:
# Resize and convert
magick public/images/product.png -resize 1920x1440 -quality 90 public/images/product.jpg
# Update code to use .jpg
<Img src={staticFile('images/product.jpg')} />
Benefits:
Category: Performance Location: src/remotion/compositions/VideoName/scenes/Scene2.tsx:45 Impact: Minor performance improvement possible
Current:
// Particle positions recalculated (deterministic but not cached)
const particles = Array.from({ length: 70 }, (_, i) => ({
x: seededRandom(i * 123) * width,
y: seededRandom(i * 456) * height,
}));
Recommendation:
import { useMemo } from 'react';
const particles = useMemo(
() => Array.from({ length: 70 }, (_, i) => ({
x: seededRandom(i * 123) * width,
y: seededRandom(i * 456) * height,
})),
[width, height]
);
Expected Impact: 5-10% faster render for Scene 2
Category: Code Quality Location: All scene components Impact: Improved maintainability
Recommendation:
/**
* Scene 1: Opening animation with logo reveal
* Duration: 0s - 5s (frames 0-150)
* Spec reference: VIDEO_SPEC.md Section "Scene 1"
*/
function Scene1Opening() {
// ...
}
Benefits:
✅ Passed:
❌ Failed:
Verification Steps Completed:
✅ Excellent Patterns:
✅ Best Practices Followed:
🟡 Minor Improvements:
✅ All Verified:
Scene 1: 0s - 5s → frames 0-150 ✓ Correct (5 * 30fps)
Scene 2: 5s - 15s → frames 150-450 ✓ Correct (10 * 30fps)
Scene 3: 15s - 25s → frames 450-750 ✓ Correct (10 * 30fps)
Scene 4: 25s - 30s → frames 750-900 ✓ Correct (5 * 30fps)
Total: 30s = 900 frames ✓ Correct
Validation:
✅ Good:
🟡 Could Improve:
Asset Checklist:
public/Render Performance:
No Major Issues:
Minor Optimization Opportunities:
Completed validation:
/remotion-performance-optimizer if render times increaseStatus: ✅ APPROVED WITH MINOR REVISIONS
This implementation is production-ready after addressing the Scene 3 color mismatch. All critical functionality, timing, and structure are correct. Medium and low priority items are optional improvements that can be addressed in future iterations.
Signed: remotion-video-reviewer Date: 2026-01-23
**This document provides:**
- Executive summary with quick approval status
- Quantified compliance scores (95%, 98%, etc.)
- Prioritized issues (CRITICAL, HIGH, MEDIUM, LOW)
- Specific code locations and fixes
- Detailed analysis per category
- Testing verification checklist
- Clear next steps
- Official approval status
**Feeds into:**
- Developer: Fix identified issues
- `/remotion-performance-optimizer` if performance issues found
- Final production render after approval
## Review Process
### 1. Spec Comparison
Compare implementation against motion design spec:
**Check:**
- [ ] All scenes from spec are implemented
- [ ] Scene durations match spec timing
- [ ] Color palette matches hex codes exactly
- [ ] Typography (font, size, weight) matches
- [ ] Animation descriptions are accurately translated
- [ ] Audio placement matches timing
- [ ] Spring configurations match spec
### 2. Code Quality Review
Evaluate code structure and patterns:
**Check:**
- [ ] Constants extracted (colors, springs, timing)
- [ ] Scene components follow naming convention
- [ ] AbsoluteFill used for all scenes
- [ ] Progress variables extracted (not inline calculations)
- [ ] useVideoConfig used for responsive positioning
- [ ] TypeScript types defined
- [ ] Proper imports from remotion
### 3. Timing Accuracy
Verify frame calculations:
**Check:**
- [ ] Seconds correctly converted to frames (seconds * fps)
- [ ] Scene timing constants are accurate
- [ ] Delay calculations use frame offsets
- [ ] Transitions account for overlap
- [ ] Total duration matches spec
- [ ] Animation hold times are correct
### 4. Animation Review
Assess animation implementation:
**Check:**
- [ ] Spring configs match spec descriptions
- [ ] Interpolate ranges match spec values
- [ ] Easing functions appropriate for motion type
- [ ] Stagger delays calculated correctly
- [ ] Continuous animations use appropriate patterns
- [ ] Exit animations present where specified
### 5. Visual Fidelity
Confirm visual accuracy:
**Check:**
- [ ] Background colors match spec
- [ ] Element colors use COLORS constants
- [ ] Font sizes match spec exactly
- [ ] Positioning follows spec layout
- [ ] Visual hierarchy maintained
- [ ] Layer organization (background/midground/foreground)
### 6. Asset Quality
Validate asset preparation:
**Check:**
- [ ] All required assets present
- [ ] Assets use staticFile() import
- [ ] Image formats appropriate (PNG for transparency, JPEG for photos)
- [ ] Audio files in supported formats
- [ ] Asset dimensions suitable for composition
- [ ] Fonts loaded correctly
### 7. Performance Check
Identify performance issues:
**Check:**
- [ ] No expensive calculations in render
- [ ] Progress variables reused
- [ ] No unnecessary spring recalculations
- [ ] Memoization used where appropriate
- [ ] Large assets optimized
- [ ] No memory leaks in loops
## Review Output Format
### Summary
```markdown
## Review Summary
**Spec Compliance**: 95% (1 minor deviation)
**Code Quality**: Excellent
**Timing Accuracy**: 100%
**Visual Fidelity**: 98% (color mismatch in Scene 3)
**Asset Quality**: Good (1 optimization needed)
**Performance**: Excellent
**Overall Rating**: READY FOR PRODUCTION (with minor revisions)
## Issues Found
### CRITICAL (Must Fix)
None
### HIGH (Should Fix)
1. **Scene 3 background color mismatch**
- Spec: #0A0A0A
- Code: #0B0B0B
- Impact: Visual inconsistency
- Fix: Update COLORS.background
### MEDIUM (Consider Fixing)
1. **Product image could be optimized**
- Current: 4000x3000 PNG
- Recommendation: 1920x1440 JPEG
- Impact: Faster render times
- Fix: Resize and convert asset
### LOW (Nice to Have)
1. **Add memoization to particle system**
- Impact: Negligible performance gain
- Fix: Wrap in useMemo
## Recommendations
### Code Organization
- Extract ParticleSystem to reusable component
- Consider splitting Scene6 (currently 150 lines)
### Performance
- Preload audio files
- Consider lazy loading large assets
### Maintainability
- Add JSDoc comments to scene components
- Consider extracting animation helpers
Issue: Incorrect frame calculation
// Wrong
const duration = 5; // Should be 150 frames, not 5
// Correct
const duration = 5 * fps; // 150 frames
Issue: Missing delay
// Wrong - all elements appear at once
const progress = spring({ frame, fps, config: SMOOTH_SPRING });
// Correct - staggered with delays
const progress = spring({
frame: frame - (index * STAGGER_DELAY),
fps,
config: SMOOTH_SPRING
});
Issue: Inline spring config instead of constant
// Wrong
const progress = spring({
frame,
fps,
config: { damping: 200 },
});
// Correct
const progress = spring({
frame,
fps,
config: SPRING_CONFIGS.smooth,
});
Issue: Repeated calculations
// Wrong
<div style={{
opacity: spring({ frame, fps, config: SMOOTH }),
transform: `scale(${spring({ frame, fps, config: SMOOTH })})`,
}} />
// Correct
const progress = spring({ frame, fps, config: SMOOTH });
<div style={{
opacity: progress,
transform: `scale(${progress})`,
}} />
Issue: Hardcoded colors
// Wrong
backgroundColor: '#FF6B35'
// Correct
backgroundColor: COLORS.primary
Issue: Pixel values instead of responsive
// Wrong
left: 960, // Hardcoded center
// Correct
left: width / 2, // Responsive center
Issue: Direct import instead of staticFile
// Wrong
import logo from './logo.png';
// Correct
import { staticFile } from 'remotion';
const logoSrc = staticFile('logo.png');
Issue: Expensive operation in render
// Wrong - recalculated every frame
const particles = Array.from({ length: 1000 }, (_, i) => ({
x: Math.random() * width,
y: Math.random() * height,
}));
// Correct - calculate once
const particles = useMemo(
() => Array.from({ length: 1000 }, (_, i) => ({
x: seededRandom(i * 123) * width,
y: seededRandom(i * 456) * height,
})),
[width, height]
);
Complete review checklist:
Works with:
/remotion-spec-translator — Reviews translated code/remotion-best-practices — Ensures patterns are followed/motion-designer — Compares against original spec/remotion-performance-optimizer — Deep performance analysisFor detailed review criteria:
This skill ensures Remotion implementations are production-ready, spec-compliant, and follow best practices before deployment.
Weekly Installs
64
Repository
GitHub Stars
9
First Seen
Jan 27, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode60
codex59
gemini-cli59
github-copilot58
claude-code55
cursor55
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
46,900 周安装