Payload and output preview

Payload example

{
  "version": "v1",
  "output": {
    "width": 1080,
    "height": 1920,
    "fps": 30
  },
  "assets": [
    { "id": "porsche-video-audio", "type": "video", "url": "https://pub-2ad5592bc4ca44abb609acfc0b7c5ceb.r2.dev/reel-forge-website-assets/prsche%20stitched%20with%20audio.mp4" }
  ],
  "composition": {
    "timeline": [
      { "id": "base-video", "type": "video", "asset_id": "porsche-video-audio", "time": { "start_seconds": 0, "duration_seconds": 15.1 } }
    ],
    "global_styles": {
      "text": {
        "font_family": "Inter",
        "font_size": 74,
        "font_weight": 800,
        "color": "#FFFFFF",
        "text_align": "center",
        "stroke_color": "#000000",
        "stroke_width": 3,
        "shadow_color": "rgba(0,0,0,0.35)",
        "shadow_offset_x": 0,
        "shadow_offset_y": 2,
        "shadow_blur": 8
      }
    },
    "global_layouts": {
      "text": { "x": "8%", "y": "10%", "width": "84%", "height": "14%" }
    },
    "text_overlays": [
      { "id": "overlay-1", "content": "Porsche 911 Turbo S", "time": { "start_seconds": 0.6, "duration_seconds": 3.4 } },
      { "id": "overlay-2", "content": "Launch control energy", "time": { "start_seconds": 5.2, "duration_seconds": 3.6 } },
      { "id": "overlay-3", "content": "Built for standout reels", "time": { "start_seconds": 10.0, "duration_seconds": 4.2 } }
    ]
  }
}

Output preview

Porsche montage with three timed text overlays using global_styles.text and global_layouts.text.

Text Overlays

Use composition.text_overlays for on-screen text with timing, style, and layout controls. Define shared defaults once via global_styles.text and global_layouts.text, then each overlay only needs content and time.

Input assets

This example uses the Porsche video with audio as the base layer and adds three timed text overlays:

Overlay text (defined in payload):

  1. "Porsche 911 Turbo S"
  2. "Launch control energy"
  3. "Built for standout reels"

Why this works

When adding text overlays:

  1. Global defaults: global_styles.text and global_layouts.text apply to all overlays, so you avoid repeating font size, color, stroke, and position per overlay.
  2. Timed windows: Each overlay has its own time (start_seconds, duration_seconds), so text appears and disappears at the right moments.
  3. Local overrides: Per-overlay style or layout keys override the global defaults when you need a one-off change.