---
title: "Audio-First Scene — LTX 2.5, cut to the track then finished on pro"
tier: hero
format: video
theme: audio-driven | draft-to-final | music
persona: creator, music, brand studio
duration: "~8–15 min"
budget_usd: "~$3–$9 (audio-to-video billed per second of INPUT audio; video per second at 720p)"
caps: ["ltx-25-a2v-fast", "ltx-25-a2v-pro", "ltx-25-t2v-fast", "ltx-25-t2v-pro", "ffmpeg-concat", "ffmpeg-mux", "ffmpeg-export"]
skills: ["ltx-2-5", "cinematography", "finishing-quality"]
showcases: ["/chapters/audio-first-scene-example.html"]
status: "live"
reliability: 4.3 # 16/16 across all six endpoints at registration; deterministic finishing
---

# Audio-First Scene — agent playbook

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code.
> Livepeer Agent generates video **from** your track — timed to it, not laid over it —
> drafts every shot on the fast tier, then re-renders the keepers on pro.

## What you'll get

- **A scene cut to your audio**, generated from it rather than synced to it afterwards
- **Draft variations at ~30s each** — see three ideas before committing to one
- **A pro-tier final** of whichever draft won, same prompt, higher fidelity
- **A platform export** (9:16 or 16:9) and the cost per second, so the next one can be priced

## Why audio-first

The usual order is: generate video, then lay audio under it with `ffmpeg-mux`.
That works and it is nearly free — but the cut has to be *made* to fit the track,
and it shows.

`ltx-25-a2v-*` inverts it: the audio drives generation, so the motion lands with
the track by construction. It is the right call when the audio came first — a
music hook, a VO line, a beat you are cutting to.

If your audio is just background, **do not use this playbook** — generate the
video and `ffmpeg-mux` the bed under it for a fraction of the cost.

## Tell the agent about the scene

```yaml
scene_title:        # e.g. "Warehouse Hook"
audio_url:          # REQUIRED. https URL, 2–20 seconds (upstream cap).
                    # Billing follows THIS length, not the output's.
the_visual:         # 1–3 sentences. What we see while the audio plays.
anchor_image_url:   # OPTIONAL. Anchors the look; when omitted, the_visual is required.
variations: 3       # how many fast drafts to show before promoting (1–4)
final_resolution: 1080p   # 720p | 1080p  (pro tops out at 1080p)
aspect_ratio: 16:9  # 16:9 | 9:16
max_spend_usd: 10.00
output_slug:        # kebab-case filename prefix
```

## Conventions (how the agent must run)

1. **Check the audio length first.** Over 20s, upstream rejects it — say so and
   offer to trim with `ffmpeg-trim` rather than letting the call fail.
2. **Spend gate.** Cost is `rate × audio_seconds`, and the rate is
   **$0.1365/s** on `a2v-fast`, **$0.1785/s** on `a2v-pro`. State the dollar figure
   for the drafts *and* the projected final before rendering. Refuse to exceed
   `max_spend_usd`.
3. **Draft on fast, always.** At ~33s a draft, showing three is cheaper in
   wall-clock than one Seedance take. Never render a pro take nobody has seen a
   draft of.
4. **Final review gate.** STOP after the drafts. The user picks; the agent does
   not promote on its own.

## Steps

### 1 — Drafts on the fast tier

Render `variations` takes, same audio, varied `the_visual`:

```jsonc
run_capability({
  capability: "ltx-25-a2v-fast",
  inputs: {
    audio_url: "<audio_url>",
    prompt: "<the_visual — variation n>",
    image_url: "<anchor_image_url>",   // omit if none; then prompt is required
    aspect_ratio: "<aspect_ratio>"
  }
})
```

Show all of them with their cost. **STOP.**

### 2 — Promote the winner to pro

Same audio, the winning prompt, pro tier:

```jsonc
run_capability({
  capability: "ltx-25-a2v-pro",
  inputs: { audio_url: "<audio_url>", prompt: "<the winner>", image_url: "<anchor_image_url>" }
})
```

### 3 — Optional: extend the scene with matching t2v shots

If the piece needs more than the audio covers, generate companion shots on the
same ladder (`ltx-25-t2v-fast` to draft, `-pro` for the keeper), then join:

```jsonc
create_media({ action: "generate", model_override: "ffmpeg-concat",
  inputs: { clips: ["<a2v-pro output>", "<t2v-pro output>"] } })
```

Only reach for `ffmpeg-concat` when there is genuinely more than one clip.

### 4 — Export

```jsonc
create_media({ action: "generate", model_override: "ffmpeg-export",
  inputs: { video_url: "<final>", width: 1080, height: 1920, mode: "cover" } })
```

## Deliver

- the **pro final**, with its audio-driven timing called out
- the **drafts** that lost, so the choice is visible
- **cost**: drafts + final + export, and the per-second rate
- one honest line on whether the motion actually landed with the track, and where it drifted

## When to use something else

| If… | Use |
|---|---|
| the audio is just a bed under finished video | `ffmpeg-mux` — orders of magnitude cheaper |
| the audio runs longer than 20s | trim it, or generate video and mux |
| the shot must be one continuous 20–30s take | `seedance-25-t2v` |
| you want the same look cheaper and don't need the ladder | `ltx-q-*` (LTX 2.3 Quality, $0.056/s) |
