
This automates the process of adding visual snapshot tests to the web renderer in a Remotion project. You'll create a fixture component in the test directory, register it in Root.tsx for previewing, write a corresponding test that renders a still frame, and update the documentation to note the newly supported property. It uses vitest under the hood and follows a straightforward pattern where each fixture exports a component with metadata like dimensions and frame count. The workflow is tight but requires you to touch multiple files for each test, which makes sense given you're simultaneously testing, documenting, and maintaining preview capabilities. Good for teams that want consistent visual regression testing on their rendering components.
$ npx -y skills add remotion-dev/remotion --skill web-renderer-test --agent claude-codeInstalls into .claude/skills of the current project.
Use this skill to update existing web renderer tests when needed for implementation changes. Add new tests only when the user explicitly requests them.
The web renderer is in packages/web-renderer and the test suite is in packages/web-renderer/src/test.
It uses visual snapshot testing using vitest. A test file can for example be executed using:
bunx vitest src/test/video.test.tsx
Each test is powered by a fixture in packages/web-renderer/src/test/fixtures.
A fixture looks like this for example:
import {AbsoluteFill} from 'remotion';
const Component: React.FC = () => {
return (
<AbsoluteFill
style={{
justifyContent: 'center',
alignItems: 'center',
}}
>
<div
style={{
backgroundColor: 'red',
width: 100,
height: 100,
borderRadius: 20,
}}
/>
</AbsoluteFill>
);
};
export const backgroundColor = {
component: Component,
id: 'background-color',
width: 200,
height: 200,
fps: 25,
durationInFrames: 1,
} as const;
The corresponding test looks like this:
import {test} from 'vitest';
import {renderStillOnWeb} from '../render-still-on-web';
import {backgroundColor} from './fixtures/background-color';
import {testImage} from './utils';
test('should render background-color', async () => {
const blob = await renderStillOnWeb({
licenseKey: 'free-license',
composition: backgroundColor,
frame: 0,
inputProps: {},
imageFormat: 'png',
});
await testImage({blob, testId: 'background-color'});
});
packages/web-renderer/src/test/fixtures.packages/web-renderer/src/test/Root.tsx to add a way to preview it.packages/web-renderer/src/test.bunx vitest src/test/video.test.tsx to execute the test.packages/docs/docs/client-side-rendering/limitations.mdx to reflect the newly supported property.Sponsors