Using images in Remotion
Always use the `` component from `remotion` to display images:
Overview
Using images in Remotion
The `` component
Always use the `` component from remotion to display images:
return ;
};
Important restrictions
You MUST use the `` component from remotion. Do not use:
- Native HTML
<img>elements - Next.js `` component
- CSS
background-image
The `` component ensures images are fully loaded before rendering, preventing flickering and blank frames during video export.
Local images with staticFile()
Place images in the public/ folder and use staticFile() to reference them:
my-video/
├─ public/
│ ├─ logo.png
│ ├─ avatar.jpg
│ └─ icon.svg
├─ src/
├─ package.json
Remote images
Remote URLs can be used directly without staticFile():
Ensure remote images have CORS enabled.
For animated GIFs, use the `` component from @remotion/gif instead.
Sizing and positioning
Use the style prop to control size and position:
Dynamic image paths
Use template literals for dynamic file references:
const frame = useCurrentFrame();
// Image sequence
// Selecting based on props
// Conditional images
This pattern is useful for:
- Image sequences (frame-by-frame animations)
- User-specific avatars or profile images
- Theme-based icons
- State-dependent graphics
Getting image dimensions
Use getImageDimensions() to get the dimensions of an image:
const { width, height } = await getImageDimensions(staticFile("photo.png"));
This is useful for calculating aspect ratios or sizing compositions:
const calculateMetadata: CalculateMetadataFunction = async () => {
const { width, height } = await getImageDimensions(staticFile("photo.png"));
return {
width,
height,
};
};