# Seedance Prompting

> Use when planning, pricing or prompting ByteDance Seedance video generation (2.5 or 2.0-mini) - reference-to-video with character consistency, lip-synced dialogue, video extension/editing, or deciding whether a shot is worth generating at all. Encodes the billing formula, the per-second cost tables, and the block-cheap / finish-expensive workflow.

- Skill: `raphaelbgr/seedance-prompting` (Agent Skill)
- Install (CLI): `npx skillmds@latest add raphaelbgr/seedance-prompting`
- Raw SKILL.md: https://api.skillmd.com/api/skills/raphaelbgr/seedance-prompting/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: raphaelbgr (https://skillmd.com/u/raphaelbgr)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/raphaelbgr/seedance-prompting

---


# Seedance prompting and cost control

Seedance's distinguishing features are **reference-to-video with up to 50 references**,
**native lip-synced dialogue in 10+ languages**, **video editing and extension**, and
**4–30s in a single pass**. Its distinguishing risk is that it bills **per second
generated, rejects included** — so the prompt discipline here is inseparable from the
cost discipline.

Full numbers, sources and worked budgets:
[`docs/seedance-cost-model.md`](../../docs/seedance-cost-model.md).

---

## 1. Know what you are buying before you prompt

**Seedance is not free on any API route.** "Free Seedance" headlines refer to consumer
web UIs (watermarked exports) or time-boxed promos.

Capabilities of Seedance 2.5, from the vendor model page:

- **Resolution: 480p and 720p only.** No 1080p, no 4K. (Seedance **2.0** does 1080p/4K
  but caps at 15s.) 720p max means an upscale step before Instagram, which prefers
  1080×1920.
- 24 fps · **4–30s** in a single pass, no stitching · `.mp4` / `.mov`
- Inputs: text, image, video, audio → video. Up to **50 references** (30 images +
  10 videos + 10 audio), cited in the prompt as `@Image1`, `@Video1`, `@Audio1`.
- Task types: multimodality-to-video, **reference-to-video**, **video editing**
  (e.g. *"remove everyone in @Video1 except the protagonist"*), **video extension**,
  first-frame / first-and-last-frame image-to-video, text-to-video.
- Native synchronised audio and **lip-sync dialogue in 10+ languages**.
- Individual (non-enterprise) rate limits: 180 RPM, 3 concurrent tasks.

---

## 2. The billing formula — memorise this

```
tokens = (height_px * width_px * duration_seconds * 24) / 1024
cost   = tokens * unit_price_per_token
```

Verified against the vendor's own published price example (5s, 16:9, 720p, no video
input → 1280×720×5×24/1024 = 108,000 tokens → the exact published figure).

Two consequences that decide your whole workflow:

1. **Cost scales with pixels × seconds.** 480p vertical is **~2.2× cheaper per second**
   than 720p vertical. Blocking at 480p is nearly free by comparison.
2. **A rejected 30s take wastes 30s of billing; a rejected 5s clip wastes 5s.** Long
   takes are a cost trap *until your hit rate is already high.*

Per second of vertical 9:16 video (computed from the formula × published unit prices —
reconfirm current prices before budgeting):

| Route | 720p 9:16 | 480p 9:16 |
|---|---:|---:|
| Seedance 2.5, direct | **$0.231 /s** | $0.107 /s |
| Seedance 2.5, direct, **with a video reference** | $0.138 /s | $0.064 /s |
| Seedance 2.5 via a reseller/aggregator | $0.473 /s | $0.221 /s |
| Seedance 2.0 **mini**, direct | **$0.076 /s** | $0.035 /s |

**Go direct to the vendor API, not through an aggregator** — the aggregator route was
~2× the unit price for the identical model. Passing a **video reference** cuts the
rate ~40%.

---

## 3. The cost model that actually predicts your bill

Not "number of generations". This:

```
cost = final_runtime_seconds * attempts_per_keeper * price_per_second
```

`attempts_per_keeper` is the number that ruins budgets. A real measured campaign ran
**~11.4 attempts per keeper (a ~9% hit rate)** while the look was still being found.
Once the look is solved and references are locked, 2–4 is realistic.

**Therefore: block cheap, finish expensive.**

1. **Block every shot at 480p / 5s on the cheapest model in the family.** Burn the
   entire creative churn here. (160 blocking passes at 480p/5s on the mini model ≈ $28
   — the whole churn of a real campaign for the price of a pizza.)
2. **Lock the shot list.** Feed the approved frames back as `@Image1…` references.
3. **Re-render only the locked list at 720p**, ~1.5 attempts per shot.

Do **not** consolidate 14 short clips into four 30s takes to "save money". Final
runtime is the same either way, so the only lever is attempts per keeper — and at a low
hit rate, consolidating turns wasted seconds into *more* wasted seconds.

**The subscription trap:** if you are moving work off a flat-rate plan (e.g. Google
Flow credits already paid for) onto Seedance, you are converting a sunk subscription
into live cash spend. That, not the per-second rate, is the real decision.

---

## 4. Prompting notes specific to Seedance

- **Reference syntax lives in the prompt text:** `@Image1`, `@Video1`, `@Audio1`.
  Address references by identifier, not by natural-language description.
- **Reference-to-video is a training-free identity path.** Up to 30 image references
  hold a character across a 30s take with lip-sync. Before investing in LoRA training
  or a dataset, spend ~$1 on one 5s 720p reference-to-video test — it may already clear
  your quality bar. See
  [`skills/identity-and-likeness`](../identity-and-likeness/SKILL.md) for the zero-shot
  gate and the consent rules that still apply.
- **Video extension and video editing are native, and the with-video-input rate is
  ~40% cheaper.** For recurring segments (same set, same characters, new dialogue),
  generate the base take once and then extend/edit rather than regenerating from text.
- The clip-craft rules do not change: one camera move, max two action beats, no state
  change inside a shot, labelled speakers, restated wardrobe. Those are in
  [`skills/wan-3-prompting`](../wan-3-prompting/SKILL.md) §1–§5 and apply here too.

---

## 5. Wiring it into a pipeline

Treat generated video as **one shot source among several**, not a replacement for a
stock-footage pipeline.

**Highest cost/benefit first move: generate only the hook.** The first two seconds
decide retention, and stock footage is where every cold account looks generic.
A 4–5s, 720p, 9:16 hook on the cheap model is ~$0.30–0.38 per video; escalate to the
flagship model only for the ones you are actually pushing.

```
gen_video/
    base.py      # IVideoGenProvider: generate(prompt, refs, duration, resolution) -> Path
    seedance.py  # vendor endpoint, poll for completion
    cache.py     # prompt-hash -> mp4, so re-runs are free
```

Non-negotiables for any paid generation path:

- **Cache by prompt hash** so a re-run costs nothing.
- **Fall back to stock footage on any error** — never fail a batch because a paid
  provider hiccuped.
- **A hard per-run spend cap**, so a `--loop-count 20` run can never quietly burn $100.
- **Default the generation flag OFF.**

