staticFile()
Available from v2.5.7.
Turns a file in your public/ folder into an URL which you can then load into your project.
tsximport {Img ,staticFile } from "remotion";constmyImage =staticFile (`/my-image.png`);// ...<Img src ={myImage } />;
tsximport {Img ,staticFile } from "remotion";constmyImage =staticFile (`/my-image.png`);// ...<Img src ={myImage } />;
Example
Start by creating a public/ folder in the root of your video project:
txtmy-video/ ├─ node_modules/ ├─ public/ │ ├─ my-image.png │ ├─ font.woff2 ├─ src/ │ ├─ Video.tsx │ ├─ index.tsx ├─ package.json
txtmy-video/ ├─ node_modules/ ├─ public/ │ ├─ my-image.png │ ├─ font.woff2 ├─ src/ │ ├─ Video.tsx │ ├─ index.tsx ├─ package.json
info
The public/ folder should always be in the same folder as your package.json that contains the remotion dependency, even if your Remotion code lives in a subdirectory.
Get an URL reference of your asset:
tsximport {staticFile } from "remotion";constmyImage =staticFile (`/my-image.png`); // "/static-32e8nd/my-image.png"constfont =staticFile (`/font.woff2`); // "/static-32e8nd/font.woff2"
tsximport {staticFile } from "remotion";constmyImage =staticFile (`/my-image.png`); // "/static-32e8nd/my-image.png"constfont =staticFile (`/font.woff2`); // "/static-32e8nd/font.woff2"
You can now load the asset via:
<Img />,<Audio/>,<Video/>tag- Fetch API
- FontFace()
- Any other loader that supports data fetching via URL
Why can't I just pass a string?
If you are a Create React App or Next.JS user, you might be used to just to be able to reference the asset from a string: <img src="/my-image.png"/>. Remotion is different in that you need to use the staticFile() API because:
- It prevents breaking when deploying your site into a subdirectory of a domain:
https://example.com/my-folder/my-logo.png - It avoids conflicts with composition names which might share the same name (for example
http://localhost:3000/conflicting-namewhile running the preview) - It allows us to make paths framework-agnostic, so your code can work across Remotion, Create React App, Next.JS and potentially other frameworks.