---
title: "One-Take 30s Spot — Seedance 2.5 single pass, no stitching"
tier: hero
format: video
theme: one-take | continuous | brand-spot
persona: brand studio, director, creator
duration: "~10–20 min"
budget_usd: "~$5–$15 (priced per second: ~$0.497/s at 720p, ~$0.232/s at 480p)"
caps: ["seedance-25-t2v", "seedance-25-i2v", "seedance-25-ref2v", "ffmpeg-export", "ffmpeg-trim", "ffmpeg-overlay"]
skills: ["seedance-2-5", "cinematography", "finishing-quality"]
showcases: ["/chapters/one-take-30s-spot-example.html"]
status: "live"
reliability: 3.4 # premium video, priced per second; long takes verified after the 300s ceiling fix
---

# One-Take 30s Spot — agent playbook

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code.
> Livepeer Agent renders a **single continuous take** — no cuts, no stitching, with
> synchronised audio — then cuts the platform variants off that one master.

## What you'll get

- **One 20–30s take**, rendered in a single pass, with synced audio
- **A 9:16 cut** of the same master for vertical placements
- **A 6s cutdown** for pre-roll / paid social
- **A cost line** — what the take cost, per second, before you commit to a second one

## Why this playbook exists

The normal way to get 30 seconds out of a generative model is to render 5–6 clips
and join them with `ffmpeg-concat`. That is the right answer most of the time and
it is cheaper. It also **shows its seams**: the join points drift in colour and
subject, and the audio has to be laid over the top because no clip shares a bed
with its neighbour.

Seedance 2.5 renders the whole thing in one pass. Use this playbook when a cut
would ruin the shot — an unbroken performance, a camera move that has to travel,
a product turn where a seam would read as a mistake.

## Tell the agent about the spot

```yaml
spot_title:          # e.g. "Morning Pull"
the_take:            # 2-4 sentences. ONE continuous action with a beginning,
                     # middle and end. Name ONE camera move. Put spoken lines
                     # in "quotes" so they lip-sync.
duration_sec: 20     # 4-30. Verified end to end at 30s (480p, 30.04s of video).
                     # This is the price lever: ~$0.497/s at 720p, ~$0.232/s at 480p.
start_frame_url:     # OPTIONAL https URL. Given one, the take starts there
                     # (seedance-25-i2v); omitted, it is text-driven.
end_frame_url:       # OPTIONAL. Lands the take on a specific composition.
reference_urls:      # OPTIONAL, up to 30 images. Given these, use ref2v and
                     # address them in the prompt as @Image1, @Image2, …
aspect_ratio: 16:9   # master aspect: 16:9 | 9:16 | 21:9 | 1:1 | 4:3 | 3:4
brand_mark_url:      # OPTIONAL https PNG for the corner mark
max_spend_usd: 20.00 # hard ceiling
output_slug:         # kebab-case filename prefix
```

## Conventions (how the agent must run)

1. **Warn about the wait, not the duration.** The full 30 seconds is reachable —
   verified 2026-08-13, a 30s take at 480p rendered in 186s. But latency is
   dominated by queue depth rather than duration (a 20s take measured 388s while a
   30s took 186s), so quote the p95 (~400s) and tell the user it is running rather
   than promising a time.
2. **Draft gate — then this, always.** Render the same prompt at
   `resolution: "480p"`, `duration: "4"` (~$0.93). Show it. Ask whether the idea
   holds. A 4-second draft costs 6% of a 30-second master and is the only honest
   way to find out that the prompt implies a cut.
3. **Spend gate.** Compute `0.497 × duration_sec` (720p) or `0.232 × duration_sec`
   (480p), state it in dollars, and **STOP** for approval before the master.
   Refuse to exceed `max_spend_usd`.
4. **Duration is a STRING.** `"20"`, not `20`. And `create_media` caps duration at
   15s — anything longer goes through `run_capability`.
5. **One take means one space.** If the brief implies a location change, say so
   and offer the concat route instead. Do not render a cut and call it a take.
6. **Final review gate.** STOP before the platform variants — they are cheap
   (deterministic ffmpeg) but pointless off a master nobody approved.

## Steps

### 1 — Draft at 480p / 4s

```jsonc
run_capability({
  capability: "seedance-25-t2v",         // or -i2v with start_frame_url
  prompt: "<the_take>",
  inputs: { duration: "4", resolution: "480p", aspect_ratio: "<aspect_ratio>" }
})
```

Show the draft. **STOP.** If the subject drifts or a seam appears, the prompt is
asking for a cut — fix it here, not at 30 seconds.

### 2 — The master, at the approved duration

```jsonc
run_capability({
  capability: "seedance-25-t2v",
  prompt: "<the_take>",
  inputs: { duration: "<duration_sec>", resolution: "720p", aspect_ratio: "<aspect_ratio>" }
})
```

With a `start_frame_url`, use `seedance-25-i2v` and pass `source_url`; add
`end_image_url` to land the take. With `reference_urls`, use `seedance-25-ref2v`
and name them positionally in the prompt (`@Image1` …).

**No fallback exists for these capabilities.** If the render fails, report the
error as-is — do not silently substitute Mini, which cannot do the duration.

### 3 — Brand mark (optional)

```jsonc
create_media({ action: "generate", model_override: "ffmpeg-overlay",
  inputs: { video_url: "<master>", image_url: "<brand_mark_url>", x: 0.88, y: 0.9 } })
```

### 4 — Platform variants, off the one master

```jsonc
// 9:16 vertical — scale + crop, NOT opencv-smart-crop (not registered in prod)
create_media({ action: "generate", model_override: "ffmpeg-export",
  inputs: { video_url: "<master>", width: 1080, height: 1920, mode: "cover" } })

// 6s cutdown for pre-roll
create_media({ action: "generate", model_override: "ffmpeg-trim",
  inputs: { video_url: "<master>", head_offset: 0, duration: 6 } })
```

Do **not** run `ffmpeg-concat` anywhere in this playbook. There is one clip; there
is nothing to join. That is the point.

## Deliver

Hand back, in one message:

- the **master** (duration, aspect, "one continuous take, synced audio")
- the **9:16 cut** and the **6s cutdown**
- **cost**: draft + master + finishing, and the per-second rate so the next
  duration can be priced without asking
- **one honest line** on whether the take held for its full length, and where it
  weakened if it did not

## When to use something else

| If… | Use |
|---|---|
| the piece will be cut anyway | `seedance-mini-t2v` + `ffmpeg-concat` (~3× cheaper) |
| under ~8 seconds | `seedance-mini-*`, or `ltx-25-t2v-fast` |
| you need a fast preview from a still | `pixverse-i2v` (~10× cheaper, ~7× faster) |
| the cast must hold across separate shots | `seedance-mini-ref2v` or `grok-imagine-video-ref2v` |
| you need 4K | `ltx-25-t2v-fast` at 2160p |
