public/ → use via staticFile().
The pattern
Every media type follows the same 3-step workflow:- Generate — use
oanim assetsto create the file - Place — save it to your project’s
public/directory - Use — reference it with
staticFile()in your Remotion component
Images
Generate
Use in a composition
Video
Generate
fal-ai/minimax/hailuo-02/standard/text-to-video— fast, budget-friendlyfal-ai/kling-video/v3/pro/text-to-video— cinematic visuals, native audiofal-ai/veo3.1— Google’s best, up to 4K, audiofal-ai/sora-2/text-to-video/pro— OpenAI, up to 25s, native audio
Use in a composition
Use
<OffthreadVideo> instead of <Video> — it decodes on a separate thread and prevents frame drops during rendering.Audio
Generate
Use in a composition
Add<Audio> at the composition level (outside TransitionSeries) so it plays across all scenes:
Volume animation
Fade audio in/out using Remotion’sinterpolate:
Layer order
When combining multiple media types, layer from back to front:Complete example
A scene combining all 3 media types:Tips
- Generate at video resolution — for backgrounds, use 1920x1080 prompts to avoid upscaling artifacts
objectFit: 'cover'— fills the frame, crops excess. Use'contain'if you need the full image visible- Trim video clips — use Remotion’s
startFromprop to skip the beginning:<OffthreadVideo startFrom={30} ... /> - Keep audio subtle —
volume={0.2}tovolume={0.3}for background music. Let content dominate - Layer overlays — always add a semi-transparent dark overlay between media and text for readability