Skip to main content

Importing assets

To import assets in Remotion, create a public/ folder in your project and use staticFile() to import it.

txt
my-video/
├─ node_modules/
├─ public/
│ ├─ logo.png
├─ src/
│ ├─ MyComp.tsx
│ ├─ Root.tsx
│ ├─ index.ts
├─ package.json
txt
my-video/
├─ node_modules/
├─ public/
│ ├─ logo.png
├─ src/
│ ├─ MyComp.tsx
│ ├─ Root.tsx
│ ├─ index.ts
├─ package.json
src/MyComp.tsx
tsx
import { Img, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <Img src={staticFile("logo.png")} />;
};
src/MyComp.tsx
tsx
import { Img, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <Img src={staticFile("logo.png")} />;
};

Using images​

Use the <Img/> tag from Remotion.

MyComp.tsx
tsx
import { Img, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <Img src={staticFile("logo.png")} />;
};
MyComp.tsx
tsx
import { Img, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <Img src={staticFile("logo.png")} />;
};

You can also pass a URL:

MyComp.tsx
tsx
import { Img } from "remotion";
 
export const MyComp: React.FC = () => {
return <Img src="https://picsum.photos/id/237/200/300" />;
};
MyComp.tsx
tsx
import { Img } from "remotion";
 
export const MyComp: React.FC = () => {
return <Img src="https://picsum.photos/id/237/200/300" />;
};

Using image sequences​

If you have a series of images, for example exported from another program like After Effects or Rotato, you can interpolate the path to create a dynamic import.

txt
my-video/
├─ public/
│ ├─ frame1.png
│ ├─ frame2.png
│ ├─ frame3.png
├─ package.json
txt
my-video/
├─ public/
│ ├─ frame1.png
│ ├─ frame2.png
│ ├─ frame3.png
├─ package.json
tsx
import { Img, staticFile, useCurrentFrame } from "remotion";
 
const MyComp: React.FC = () => {
const frame = useCurrentFrame();
 
return <Img src={staticFile(`/frame${frame}.png`)} />;
};
tsx
import { Img, staticFile, useCurrentFrame } from "remotion";
 
const MyComp: React.FC = () => {
const frame = useCurrentFrame();
 
return <Img src={staticFile(`/frame${frame}.png`)} />;
};

Using videos​

Use the <OffthreadVideo /> or <Video /> component to keep the timeline and your video in sync.

tsx
import { OffthreadVideo, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <OffthreadVideo src={staticFile("vid.webm")} />;
};
tsx
import { OffthreadVideo, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <OffthreadVideo src={staticFile("vid.webm")} />;
};

Loading videos via URL is also possible:

tsx
import { OffthreadVideo } from "remotion";
 
export const MyComp: React.FC = () => {
return (
<OffthreadVideo src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" />
);
};
tsx
import { OffthreadVideo } from "remotion";
 
export const MyComp: React.FC = () => {
return (
<OffthreadVideo src="https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" />
);
};

See also: Which video formats does Remotion support?

Using Audio​

Use the <Audio/ > component.

tsx
import { Audio, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <Audio src={staticFile("tune.mp3")} />;
};
tsx
import { Audio, staticFile } from "remotion";
 
export const MyComp: React.FC = () => {
return <Audio src={staticFile("tune.mp3")} />;
};

Loading audio from an URL is also possible:

tsx
import { Audio } from "remotion";
 
export const MyComp: React.FC = () => {
return (
<Audio src="https://file-examples.com/storage/fe48a63c5264cbd519788b3/2017/11/file_example_MP3_700KB.mp3" />
);
};
tsx
import { Audio } from "remotion";
 
export const MyComp: React.FC = () => {
return (
<Audio src="https://file-examples.com/storage/fe48a63c5264cbd519788b3/2017/11/file_example_MP3_700KB.mp3" />
);
};

See the audio guide for guidance on including audio.

Using CSS​

Put the .css file alongside your JavaScript source files and use an import statement.

txt
my-video/
├─ node_modules/
├─ src/
│ ├─ style.css
│ ├─ MyComp.tsx
│ ├─ Root.tsx
│ ├─ index.ts
├─ package.json
txt
my-video/
├─ node_modules/
├─ src/
│ ├─ style.css
│ ├─ MyComp.tsx
│ ├─ Root.tsx
│ ├─ index.ts
├─ package.json
MyComp.tsx
tsx
import "./style.css";
MyComp.tsx
tsx
import "./style.css";
note

Want to use SASS, Tailwind or similar? See examples on how to override the Webpack configuration.

Using Fonts​

Read the separate page for fonts.

import statements​

As an alternative way to import files, Remotion allows you to import or require() several types of files in your project:

  • Images (.png, .svg, .jpg, .jpeg, .webp, .gif, .bmp)
  • Videos (.webm, .mov, .mp4)
  • Audio (.mp3, .wav, .aac, .m4a)
  • Fonts (.woff, .woff2, .otf, .ttf, .eot)

For example:

MyComp.tsx
tsx
import { Img } from "remotion";
import logo from "./logo.png";
 
export const MyComp: React.FC = () => {
return <Img src={logo} />;
};
MyComp.tsx
tsx
import { Img } from "remotion";
import logo from "./logo.png";
 
export const MyComp: React.FC = () => {
return <Img src={logo} />;
};

Caveats​

While this was previously the main way of importing files, we now recommend against it because of the following reasons:

  • Only the above listed file extensions are supported.
  • The maximum file size is 2GB.
  • Dynamic imports such as require('img' + frame + '.png') are funky.

Prefer importing using staticFile() if possible.

Dynamic duration based on assets​

To make your videos duration dependent based on your assets, see: Dynamic duration, FPS & dimensions