---
title: "Multimodal Reference Trailer — H3 ref2v/t2v/i2v + real finishing"
tier: hero
format: video
theme: reference-driven | trailer | premium-video
persona: director, founder, brand studio, social editor
duration: "~15–35 min depending on retries"
budget_usd: "~$2.00–$6.00 (H3 priced per second) + finishing"
caps: ["minimax-h3-ref2v", "minimax-h3-t2v", "minimax-h3-i2v", "ffmpeg-concat", "ffmpeg-export", "ffmpeg-mux"]
skills: ["minimax-h3", "cinematography", "finishing-quality"]
showcases: ["/chapters/multimodal-reference-trailer-example.html"]
status: "live"
reliability: 3.3 # premium video + multi-reference latency variance; finishing deterministic
---

# Multimodal Reference Trailer — agent playbook

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code. Livepeer Agent builds a short trailer where **identity and style come from your references** (images, optional motion refs), then finishes into a single export.

## What you'll get

- **3–5 trailer shots** — each rendered with reference guidance (subject/style/motion)
- **A stitched trailer reel** — one MP4, clean cuts, export-ready
- **A “shot ledger”** — each shot’s prompt + refs so you can re-render one shot without redoing the others
- **A safe fallback plan** — what to switch to if premium H3 stalls

## Tell the agent about the trailer

```yaml
trailer_title:         # what you’ll call it
shot_count: 4          # 3–5
style_brief:           # 1–2 sentences (lighting, camera, grade)
reference_image_urls:  # 1–9 https URLs (hero first)
motion_ref_video_url:  # OPTIONAL https URL (a clip whose motion you like)
aspect_ratio: 16:9     # "16:9" or "9:16"
max_spend_usd: 8.00    # hard ceiling
output_slug:           # kebab-case filename prefix
```

## Conventions (how the agent must run)

1. **Spend gate (mandatory)**: before any H3 batch, estimate cost \(0.16 × seconds × shot_count\) and STOP.
2. **Identity gate (mandatory)**: after the first shot, STOP and confirm the hero identity/style is correct.
3. **Final review gate**: STOP before stitching/export.

## The stages

### Stage 0 — Confirm + plan (no render)

Write a 4-shot trailer outline (one line per shot) using the `style_brief` and references.

**STOP**: “Outline ok? (approve / edit [shot #])”

### Stage 1 — Cost preview (no render)

Compute a range using 6–10 seconds per shot (default 8s) and show the estimate.

**STOP**: “Approve spend to render Shot 1? (approve / lower duration / abort)”

### Stage 2 — Render Shot 1 with references (H3 ref2v)

Use `minimax-h3-ref2v` with:
- `reference_image_urls` (hero first)
- optional `reference_video_urls: [motion_ref_video_url]` if provided
- duration (default 8s), resolution `"768p"` for first pass (upgrade to `"2K"` only after approval)

**STOP**: “Shot 1 matches identity/style? (approve / adjust prompt / switch model)”

### Stage 3 — Batch the remaining shots (H3 ref2v)

Render Shots 2–N with the approved settings. Keep prompts short and shot-specific.

**STOP**: “All shots acceptable? (approve / redo [shot #])”

### Stage 4 — Deterministic finishing (stitch + export)

1. `ffmpeg-concat` the shots (hard cuts)
2. Optional music bed: if the user supplies an `audio_url`, mux it with `ffmpeg-mux` (`audio_fill:"loop"`)
3. If `aspect_ratio: 9:16`, run `ffmpeg-export` with `preset:"tiktok-portrait"`. If `aspect_ratio: 16:9`, skip export (the stitched output is already correct).

**STOP**: “Ready to export the final trailer? (approve / change aspect_ratio)”

### Stage 5 — Deliver

Return final URLs + the shot ledger (shot prompts + refs + durations).

## FINAL OUTPUT

Print exactly:

```
✅ Trailer (stitched): <URL>
✅ Shots (N):          <URL × N>
✅ Shot ledger:        <inline bullet list: shot # → prompt + refs + duration>

Total spent: $X.XX (ceiling $max_spend_usd)
```

## AFTERCARE

- If one shot drifts identity: redo only that shot (keep the rest locked).
- If you need a vertical cut: rerun the finishing pass with `ffmpeg-export` `preset:"tiktok-portrait"`.

## Notes for the agent (exact calls)

- H3 ref2v: `mcp__livepeer-agent__run_capability({ capability:"minimax-h3-ref2v", prompt, inputs:{ reference_image_urls, reference_video_urls?, duration, resolution, aspect_ratio } })`
- Stitch: `mcp__livepeer-agent__run_capability({ capability:"ffmpeg-concat", inputs:{ clips:[...], transition:"cut" } })`
- Export (9:16 only): `mcp__livepeer-agent__run_capability({ capability:"ffmpeg-export", inputs:{ source_url:"<stitched_url>", preset:"tiktok-portrait", crop:"center-crop" } })`
