Skip to main content
The full oanim pipeline: generate media with AI → place in public/ → use via staticFile().

The pattern

Every media type follows the same 3-step workflow:
  1. Generate — use oanim assets to create the file
  2. Place — save it to your project’s public/ directory
  3. Use — reference it with staticFile() in your Remotion component

Images

Generate

Use in a composition

Use objectFit: 'cover' to fill the frame without distortion. The image will be cropped to fit 1920x1080.

Video

Generate

Other video models:
  • fal-ai/minimax/hailuo-02/standard/text-to-video — fast, budget-friendly
  • fal-ai/kling-video/v3/pro/text-to-video — cinematic visuals, native audio
  • fal-ai/veo3.1 — Google’s best, up to 4K, audio
  • fal-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’s interpolate:

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 startFrom prop to skip the beginning: <OffthreadVideo startFrom={30} ... />
  • Keep audio subtlevolume={0.2} to volume={0.3} for background music. Let content dominate
  • Layer overlays — always add a semi-transparent dark overlay between media and text for readability