# Remotion Code Review

Remotion Code Review is a tested SKILL.md that reviews pasted Remotion code (React video compositions) for the five mistakes that make a render differ from the preview or come out with missing frames, and lists only those, one line each with a fixed code, the place, why it breaks the render and the fix - or exactly No findings; an agent buys it once for $0.01 over x402.

- Page: https://aiskills402.com/skills/remotion-code-review
- Category: Code & Engineering (https://aiskills402.com/categories/code)
- Price: $0.01 once, USD-priced, paid in USDC on Base over x402. Price as loaded on this page. The 402 response your agent receives is authoritative.
- Version: 1.0.0
- Card (JSON): https://api.aiskills402.com/v1/skills/remotion-code-review

## Use it when

Reviews pasted Remotion code (React video compositions) for the five mistakes that make a render differ from the preview or come out with missing frames, and lists only those, one line each with a fixed code, the place, why it breaks the render and the fix - or exactly No findings. It catches motion that is not driven by the frame number (CSS transitions and keyframes, timers, requestAnimationFrame, a counter held in state), Math.random in a component instead of the seeded random function, plain img, video, audio and iframe tags that the render does not wait for, data fetched in an effect with no render delay and no calculateMetadata, and a file from the public folder referenced by a bare path instead of staticFile. It leaves out safe look-alikes: clamped interpolate, seeded random, Math.random in a Node script. Use to review a Remotion composition before rendering, to debug flicker or a video that differs between renders, or to gate a pull request that edits a video project.

## Not for

General React review, Remotion settings and render commands, performance of the render, audio mixing and files that are imported but not pasted. It reads pasted Remotion code and judges only what is written in it.

## Tested, honestly

Tested 2026-10-29.

- Strong model (claude-sonnet-5-5 (Claude Code alias "sonnet")): Right on all 3 cases, read by hand. On the stats scene it named the counter advanced by a timer inside an effect and the plain img tag of the chart, and left out the clamped interpolate, the seeded random bars and the Img component with staticFile. On the leaderboard it gave the fetch inside an effect with no render delay and the Audio source written as a bare public path, and left out the Math.random in the Node render script and the fetch inside calculateMetadata. On the clean promo it answered exactly No findings.
- Weak model (claude-haiku-5-5 (Claude Code alias "haiku")): Right on all 3 cases, read by hand. It gave the same two lines as Sonnet on the stats scene and on the leaderboard, with the same safe look-alikes left out, and answered exactly No findings on the clean promo. One check was wrongly strict and is disclosed: on the leaderboard it suggested calculateMetadata as an alternative fix and named Root.tsx, and the first version of the check rejected any finding line that mentioned Root. The check was narrowed to the intro composition's own fetch and the six saved answers were re-evaluated without a new model call; Haiku's answer is correct.

Note: Light test: three cases (two planted, one clean), one run per model; no comparison without the skill. The code was written by us; each planted case carries a safe look-alike (a clamped interpolate, seeded random, Math.random in a Node script, a fetch in calculateMetadata), and neither planted case has a comment pointing at the defect. Facts come from the public Remotion documentation, read on 29 October 2026; there are no owner-measured facts.

Full summary: https://aiskills402.com/skills/remotion-code-review/tests

## Example

### English (claude-sonnet-5-5)

Before:

> import { AbsoluteFill, Img, interpolate, random, staticFile, useCurrentFrame } from 'remotion'; import { useEffect, useState } from 'react'; export const StatsScene: React.FC<{ total: number }> = ({ total }) => {   const frame = useCurrentFrame();   const [shown, setShown] = useState(0);   useEffect(() => {     const id = setInterval(() => setShown((n) => Math.min(n + 7, total)), 40);…

After:

> MOTION-NOT-FRAME — StatsScene, the `setInterval(() => setShown((n) => Math.min(n + 7, total)), 40)` counter in `useEffect` rendered as `{shown}` — the number advances on a wall-clock timer held in state, so each tab and each frame shows a different value than the frame number implies — compute it from `useCurrentFrame()`, e.g.…

## What is in the file

- The answer
- The idea behind the codes
- The codes
- How to read the code
- Rules
- Work in this order
- Short example

## Languages

English

## How to buy

Agent (HTTP):

1. GET https://api.aiskills402.com/v1/skills/remotion-code-review/file without a payment header. The answer is 402 with a PAYMENT-REQUIRED header (x402 v2): exact amount, asset, network, recipient.
2. Sign `accepts[0]` with an x402 client (for example @x402/core + @x402/evm).
3. Repeat the GET with the signature in the PAYMENT-SIGNATURE header. The answer is 200 with the file, its sha256 and a re-download token.

Agent (MCP): https://mcp.aiskills402.com/mcp — free tools search_skills, get_skill, redownload_skill. Buying itself is over HTTP.

Full flow: https://aiskills402.com/docs

## The file

- Version: 1.0.0
- Size: 7.9 KB (8124 bytes)
- SHA-256: dee0844eb5272dc10e551b5a8390fa97e0b53c210bc735f1547a2d26adef3322
- Updated: 2026-10-30
- New versions are free through your re-download token.

## Versions

### 1.0.0 (2026-10-30)

First release, written in the light-test batch of 29 October 2026 (three cases, price $0.01). The idea is ours; no foreign skill was opened, facts come from the public Remotion documentation (see notes/ideas.md). Output: one line per finding with a fixed code, or exactly `No findings.`

Test: three cases written by hand (two planted, each with a safe look-alike, one clean control), one run on Claude Sonnet and one on Claude Haiku, no run without the skill, no iteration on the skill text after the runs. `test/control.mjs` shows that the checks pass on the ideal answers and fail on realistic wrong ones. See `test-summary.json` for the verdicts read by hand. After the runs the frontmatter description was shortened to fit 1,024 characters; the rules the model follows were not changed.

## License

Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Terms: https://aiskills402.com/docs#license

## FAQ

### Remotion's clamped interpolate: is it reported?

No. A value computed from the frame number with interpolate or spring is the correct way to animate in Remotion, and the clamp option only stops it at the end of its range. The skill lists motion only when it follows a CSS transition, a timer, requestAnimationFrame or a counter kept in state.

### Is Math.random always reported?

Only inside a component that is drawn frame by frame. A seeded random call is left alone, and so is Math.random in a Node script that only builds a file name. The reason given is that several threads open the page and get different numbers.

### How was it tested?

Three cases, one answer per case from Claude Sonnet and one from Claude Haiku: a stats scene with a timer counter and a plain img tag, a leaderboard that fetches in an effect and hands a bare path to Audio, and a clean promo. The test summary holds the verdicts read by hand.

### What does clean code return?

A single fixed sentence, so a pipeline can gate on the text alone; nothing follows it. Otherwise one line per problem: a code, the place, why the render breaks and the Remotion way to write it. Safe patterns never get a line.

## Measurement limits

- Models other than the two named above were not run.
- Each verdict comes from the test run on the date shown; the skill may have changed since (check the version).
- Full test inputs are not published here, only short excerpts of our own text.
- Results on your own texts, languages and domains can differ.

Offer note: Paid in USDC (USD-pegged) over x402 by an AI agent; one-time.
