remotion-motion-graphics — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited remotion-motion-graphics (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Remotion renders React components frame-by-frame into video. Code quality is not the bottleneck — motion design craft is. Untrained generation produces linear easing, opacity-only fades, simultaneous entrances, flat colors, and no texture. That is the "generic AI video" look. This skill exists to prevent it.
interpolate() gets an easing curve;every entrance prefers spring(). Always extrapolateLeft/Right: "clamp".
A lone fade is forbidden.
enters simultaneously.
graphics/type → color grade → grain + vignette. Never a flat solid background.
uses <OffthreadVideo>, never <Video>.
useVideoConfig(). No magic frame numbers.fonts). Never inline a hex color or easing in a component.
unverified render. This loop is mandatory — see Verification below.
Determine: duration, fps (30 default; 60 only for heavy fast motion), dimensions (1080×1920 Reels/Shorts, 1920×1080 landscape), what assets exist (images, footage, audio, logos), and whether this is a new composition or an edit to an existing project. If editing an existing project: read src/ fully first, find the theme (or create one), and refactor violations of the rules above before adding features.
New project:
npm install remotion @remotion/cli react react-dom
# optional: @remotion/transitions @remotion/motion-blur @remotion/google-fontsCopy assets/theme.ts from this skill into src/theme.ts and adjust the palette to the user's brand. Structure: src/index.ts (registerRoot) → src/Root.tsx (Composition, duration/fps/size) → src/scenes/*.tsx → src/components/*.tsx. User assets go in public/, loaded via staticFile().
Read references/motion-patterns.md for the reusable component implementations (BgMesh, Grade, Grain, Vignette, KenBurns, WordReveal, Stagger, Counter, Spark, transitions, parallax). Compose scenes from those patterns. For pacing, rhythm, typography, color palettes, and sound design rules, read references/design-rules.md.
Scene rhythm: HIT → hold (15–20 still frames) → build → HIT. Something must move in the first 15 frames. Never >90 frames without a new visual element.
npx remotion render src/index.ts <CompId> out/video.mp4 --codec h264 --crf 17Remotion needs a Chromium binary. If its auto-download fails (sandboxes, offline CI), find one and pass it explicitly:
which chromium chromium-browser google-chrome 2>/dev/null
ls /opt/pw-browsers 2>/dev/null # Playwright installs live here
npx remotion render ... --browser-executable=<path>If full Chrome errors with "Old Headless mode has been removed", use a headless_shell binary instead (Playwright ships one as chromium_headless_shell-*/chrome-linux/headless_shell).
Extract frames at key moments and visually inspect each one:
ffmpeg -v error -i out/video.mp4 -vf "select='eq(n\,15)+eq(n\,45)+eq(n\,90)+eq(n\,N-10)'" \
-vsync 0 check_%d.pngLook for, and fix, in order of frequency:
gap/margin in em resolves against the PARENT font-size(often 16px), not the text size — use px values in flex containers around big type.
vertically for 9:16 — platform UI covers top/bottom).
over the grade.
Fix → re-render → re-extract → re-inspect. Only deliver after a clean pass. Then run the final checklist at the bottom of references/design-rules.md.
To enhance an existing mp4 (captions, grade, intro/outro) rather than build from scratch: put the file in public/, render it as the asset layer with <OffthreadVideo src={staticFile("clip.mp4")} />, set composition duration from the clip length, and stack graphics/grade/grain above it. Get the clip's duration and fps with ffprobe before setting up the composition. For word-synced captions over speech, see the captions section of references/motion-patterns.md.
references/motion-patterns.md — copy-paste component library: backgrounds,grade/grain/vignette, Ken Burns, text reveals, counters, transitions, parallax, audio sync, captions. Read before writing components.
references/design-rules.md — palettes, typography rules, scene architecture,sound design, pre-delivery checklist. Read before designing scenes and before final delivery.
assets/theme.ts — the theme template to copy into every project.durationInFrames mismatch between Composition and scene content (dead air).--overwrite on re-renders, then inspecting the stale file.@remotion/google-fonts or @font-face + staticFile.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.