# Seedance Short Drama

> Requires OFOX_API_KEY — create one at https://app.ofox.ai. Generate a realistic-human, dialogue-driven short-drama clip — one shot, or a few hard-cut shots inside one job — from a script or scene description using the Ofox video API (Seedance 2.5). Runs a short creative brief when the input leaves beat, aspect ratio, emotional arc or camera register open (one held take, a travelling take, or a multi-shot cut list) ("Let the AI decide" is offered on the taste questions, never on a must-ask one, and never as the default), writes a structured prompt (header manifest, timestamped shots, quoted dialogue with delivery notes, consistency lock), shows a cost estimate, then calls ofox-video-core to submit, poll, download, and report the real cost. Use when a user asks to turn a script beat into video, e.g. "generate scene 3 of this script, two characters talking, 15 seconds", "make a vertical short-drama clip of these two arguing in a kitchen", "turn this dialogue into a 12-second video", or "give me a realistic short

- Skill: `ofoxai/seedance-short-drama` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add ofoxai/seedance-short-drama`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ofoxai/seedance-short-drama/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: ofoxai (https://skillmd.com/u/ofoxai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ofoxai/seedance-short-drama

---


# seedance-short-drama: dialogue-driven short-drama shots

Turns one beat of a script into a realistic-human video clip — one shot, or a
few hard-cut shots inside a single job. A short creative brief settles what
the script leaves open; a structured prompt (character block, timestamped
shots, quoted dialogue with delivery notes, consistency lock) goes to
Seedance 2.5; this skill submits, polls, downloads and reports the cost.

This skill is a thin, scenario-specific layer over
[`ofox-video-core`](../ofox-video-core/SKILL.md). It owns the short-drama
prompt craft, the pre-generation brief, recommended defaults, and this
scenario's rows in the approval table; `ofox-video-core` owns talking to the
Ofox API correctly and safely (the `OFOX_API_KEY` handling, the no-resubmit
rule, error-code mapping, download/verification). **Read that skill's safety
contract before using this one** — it is not restated here.

Three shared references from `ofox-video-core` are load-bearing here and are
linked, not copied:

- [`../ofox-video-core/references/creative-brief.md`](../ofox-video-core/references/creative-brief.md)
  — what to ask the user before a prompt exists: the three tiers, one round of
  at most four questions, the "Let the AI decide" discipline, the skip rows,
  and the anti-patterns. Read it before the brief section below, which adds
  only this scenario's question set.
- [`../ofox-video-core/references/prompt-structure.md`](../ofox-video-core/references/prompt-structure.md)
  — the vendor's formula, the header-manifest → timeline → closing-block
  skeleton, timestamp formats and segment lengths, transition and camera
  vocabularies, consistency locks and negative lists, dialogue density,
  reference-image semantics, endings. Load it before writing a prompt; this
  file adds only what is specific to short drama.
- [`../ofox-video-core/references/approval-gate.md`](../ofox-video-core/references/approval-gate.md)
  — never spend before an approved cost table.

## Before generating: the availability check

Run this once per session (not on every request):

```bash
bash ../ofox-video-core/references/ofox-video.sh check
```

If it fails, follow `ofox-video-core`'s guidance (install `curl`/`jq`, or get
an `OFOX_API_KEY` at `https://app.ofox.ai`) — don't dead-end the
conversation, and don't re-run this check on every subsequent request once
it has passed.

## Shots, cuts and jobs

One job is one clip of 4–30 seconds, and a clip **can hold several shots
joined by hard cuts**. Write the timestamps as cut boundaries — `SHOT 2
(3-6s): … HARD CUT.` — and on the runs measured so far Seedance 2.5 cuts
there. Default to **2–5 seconds per shot**.

The measured envelope, as of 2026-09-04, is **up to 10 shots in 30 seconds**,
and separately **up to 6 hard cuts** among one job's boundaries — the two
maxima are from different jobs — at 480p and 720p, on
`bytedance/seedance-2.5` pinned to `byteplus`. Four of those jobs are short
drama with the audio on and lines in it (`844c9145`, `4e5c9581`, `41f87ac7`,
`036ac3a8`), which closes the caveat this section used to carry — the first
two measured runs were silent, and speech turned out not to disturb the cut
structure: `036ac3a8` carried five lines across seven shots and rendered all
seven in order. Cuts land within about ±1.5 seconds of their stamps, and a
character described once in a manifest survives every shot on text alone,
with no image attached. The job ids and the frame-by-frame readings are
under "Several shots in one job" in
`../ofox-video-core/references/prompt-structure.md`.

**Still outside the envelope**: more than 10 shots or more than 6 hard cuts
in one job, 1080p, the `volcengine` upstream, and a single line of dialogue
split across a cut — the tooling used here cannot hear audio, so no run
above has had its words checked, only their presence and timing. A first
attempt outside that envelope is an experiment — say so, and price it as
one. And inside it, a written `HARD CUT` is still not self-guaranteeing;
see "Choosing a transition, not defaulting to a cut" below.

If you mean beats inside one held shot rather than cuts, declare `one
continuous shot` in the first sentence; without it a timestamped list reads
as a cut list ("Two things a timestamp can mean" in the shared file).

### Where separate jobs and `chain` fit

- **Separate `generate` calls** when each shot needs its own approval, seed,
  resolution or duration, or when the sequence runs past 30 seconds. Each is
  a separately billed job; this skill does not stitch clips.
- **`ofox-video-core`'s `chain`** carries one job's closing frame into the
  next. **It does not work in this scenario** — the carried frame holds a
  photoreal person, which Seedance 2.5 refuses ("Reference images and real
  people"). Say so up front rather than letting the user discover it
  mid-sequence. Consecutive short-drama jobs are generated independently;
  continuity across them is text — the same character block word for word
  plus the `CONSISTENCY` line of the template.

A script that spans several scenes is still not one job. Which beat gets the
clip is the brief's first question; do not compress a chapter into 30
seconds.

## Prompt language follows the audio

Audio is generated on by default, and the model speaks **whatever language the
quoted lines are written in**. So keep dialogue in the user's own language —
if they give you Chinese lines, put Chinese in the prompt. Translating them to
match the English examples in this file produces an English-dubbed clip, and
the user only finds out after paying for it.

The rest of the prompt (setting, camera, lighting) can be English regardless;
it is the quoted speech that determines the spoken language. The dialogue
budget is in two tiers, below; for Chinese and Japanese count characters
rather than words.

## Before writing the prompt: the creative brief

The shared rules are in
[`../ofox-video-core/references/creative-brief.md`](../ofox-video-core/references/creative-brief.md)
— the three tiers, the one-round limit, the shape of a question, the "Let the
AI decide" discipline, the generic skip rows, the order with the approval
gate, the fallback for a runtime without `AskUserQuestion`, and the
anti-patterns. Read it before writing a prompt. This section adds only what
is specific to short drama.

Read the user's message and attachments first, and mark every axis of the
clip **settled** or **open**. Zero questions is common here: a beat pasted
with its stage directions plus "15 seconds, vertical, for Reels" has settled
every axis — write the prompt.

| Tier | Short-drama axes |
|---|---|
| **must-ask** | which beat of a multi-scene script to render; whether an asset the request implies actually exists |
| **ask-if-open** | aspect ratio, emotional arc, the camera register — which also fixes the shot count; a draft batch versus one final, but only when the user is already exploring; on a published deliverable, a second round adds the duration split and whether a slow-motion or freeze-frame beat belongs in the clip at all — see "Pacing questions belong in round two" in `creative-brief.md` |
| **never-ask** | resolution, model, provider, audio on/off, duration once stated |

### The short-drama questions

| # | Tier | Header | Question | Options — first is recommended; "Let the AI decide" comes last wherever it appears, and never on a must-ask row | Ask when |
|---|---|---|---|---|---|
| 1 | must-ask | `Beat` | Which beat gets this clip? One job holds 4–30 seconds. | Two or three beats extracted from the script, each named by its turning line or action (`Kitchen confrontation — "Where were you last night?"`, `She walks out — no lines`); recommended = the one with the clearest reversal. **No "Let the AI decide" here** — a must-ask axis never gets one, and no model can tell which beat the user meant. If they answer "you pick" in free text, choose the strongest beat, name it in the recap, and let the gate be the check | The script spans more than one scene or more than about 30s of action. A single beat: skip. |
| 2 | ask-if-open | `Aspect` | Where will it be watched? Vertical and landscape are different framings, not a crop. | `9:16 vertical (recommended)` — mobile short-drama feeds, the default below / `16:9 landscape` — web and YouTube; the gallery's own short-drama sample is mostly landscape (5 of the 6 cases that state a ratio) / `Let the AI decide` | No platform word and no ratio in the input. |
| 3 | ask-if-open | `Arc` | How does the feeling move across the clip? It decides the shots. | Two or three arrow chains built from the script (`braced → hears him → wavers → wry smile → "We're done." → steps back`, adapted from case 3; `calm → the lie lands → silence → she leaves`); recommended = the one the lines support most directly / `Let the AI decide` | Lines with no stage directions and no tone word. Stage directions present: skip. |
| 4 | ask-if-open | `Camera` | How is the beat shot? This one answer decides what the camera does **and** how many shots there are. | Put the register that fits the beat first and mark it `(recommended)` — the travelling take when the beat has somewhere to go (two rooms, a corridor, a doorway, a street), the cut list when it jumps between faces, hands and details, the held take when everything happens on one face. `Travelling one take` — no cuts; the camera **crosses space** and each new view arrives from behind an occlusion or through a gap; 3–5 phases of 5–8s (cases 2, 6, 8). Only offer it when the beat has somewhere to go — a take that closes distance in place comes back static (job `16023efe`, below) / `Multi-shot cut list` — a new shot size and camera position at every timestamp, 2–5s a shot, so 4–10 shots in 20–30s (cases 1, 11, 14) / `Held take` — locked, or a breathing handheld, on one or two faces; the reframing comes from an actor moving rather than the lens (cases 3, 22) / `Let the AI decide` | No camera word in the input. |
| 5 | follow-up | `Lines` | The lines overrun this duration's budget (tiers below). | `Extend to <N> seconds (recommended)` — keeps every line; state N / `Trim to budget` — the cut lines are shown before the cost table / `Let the AI decide` | Only when the dialogue exceeds its tier for the chosen duration. |
| 6 | ask-if-open | `Drafts` | Several takes to choose from, or one final? | `One 720p final on seedance-2.5 (recommended)` / `Four 480p drafts on seedance-2.0-mini, then the final` — a different model is a different look, not only a different price; see "Several takes to choose from" / `Let the AI decide` | Only when the user asks for versions, or says they are unsure what they want. |
| 7 | ask-if-open (round two) | `Pacing` | Where do the seconds go? The payoff decides it — a fight's payoff is the middle of the clip, a dialogue beat's can be the last line. | `Weight the core (recommended)` — setup and close stay near the "Action / spectacle" row of "Duration budget" below; most of the runtime goes to the fight or the exchange itself / `Weight the close` — the payoff is the last line or action, so the close gets real time, near the "Dialogue / slice-of-life" row / `Let the AI decide` | Only in round two (a published deliverable — see `creative-brief.md`), and only when the beat has a clear "main event" whose share of the runtime the request leaves open. |
| 8 | ask-if-open (round two) | `Effects` | Slow motion or a freeze frame on the best beat, or full speed throughout? | `One insert, capped near 2–3s (recommended)` — on the single decisive hit or reveal only, per "Duration budget" below / `None — full speed throughout` — plainer, and nothing to check on the draft / `Let the AI decide` | Only in round two, and only when the beat has an obvious climactic hit, reveal or gesture where either device is a plausible choice. |

Handheld or locked is a **texture inside** the register, not a fourth
option: the realistic short-drama convention is a breathing handheld (cases
1, 4, 6), and it applies to a travelling take (case 6) as readily as to a
held one. Until 1.8.0 this question offered `Handheld documentary`, `Steady
cinematic` and `Static over-the-shoulder` — three labels for the camera
staying roughly where it is, which is exactly what `creative-brief.md`'s "The
shape of a question" forbids ("visibly different pictures, not synonyms").
A user who wanted the camera to travel could not pick it.

If more than four are open in round one, ask in this order: `Beat`,
`Aspect`, `Arc`, `Camera`; `Lines` is the follow-up. `Drafts` folds into the
cost table as a second row rather than taking a question slot. On a
published deliverable (`creative-brief.md`'s two-round rule), round two adds
`Pacing` and `Effects` — in that order, since the duration split has to be
settled before a slow-motion budget can be carved out of it. Never asked:
the language of the lines (follows the script), resolution, model, provider,
audio on/off — all rows in the table.

### Skip rows specific to short drama

On top of the generic rows in `creative-brief.md`:

| Signal in the input | Axis | Value |
|---|---|---|
| The language the quoted lines are written in | spoken language | that language — **never asked**; see "Prompt language follows the audio" |
| Stage directions in the script ("crying", "slams the door", "deadpan") | emotional arc | build the arc from them |
| A tone adjective ("tense", "tender", "bitter") | emotional arc | build the arc from it |
| A camera word ("handheld", "locked off", "slow push", "over the shoulder") | camera register | held take, with that word as the movement value |
| A traversal word ("walks with her", "follows him through", "one take", "no cuts", "out onto the street") | camera register | travelling one take |
| A cutting word ("cut between", "intercut", "shot list"), or a numbered storyboard in the input | camera register | multi-shot cut list, at the count the input implies |
| An image attached to the request | asset question | settled; see "Reference images and real people" for the route it takes and the real-person refusal |
| The request names where the runtime should go ("mostly the fight", "linger on the ending", "keep it snappy") | duration split | as stated; see "Duration budget" below |
| The request rules slow motion or a freeze frame in or out ("no slow-mo", "give me a freeze on the hit", "keep it at full speed") | slow motion / freeze | as stated |

### Every answer lands somewhere

| Answer | Where it goes |
|---|---|
| Beat | which lines and actions the timeline covers; the `--name` |
| Aspect | `--aspect-ratio` |
| Arc | the `ARC` arrow chain in the header and the 1–3 signals in each shot |
| Camera register | how many `SHOT` blocks there are and how long each runs, which kinds appear on the `TRANSITION` lines, the movement field of the `CAMERA` line, and each shot's size / position / movement |
| Lines over budget | `--duration`, or the trimmed lines shown in the recap |
| Drafts | `batch` on `bytedance/seedance-2.0-mini` at 480p, or a single `generate` |
| Pacing | the per-shot lengths and the `SHOT` count given to setup, core and close, per "Duration budget" below |
| Effects | whether a shot's action line or `TRANSITION` carries a speed ramp or a freeze frame, and how many seconds it spends |

### The recap for this scenario

```
Brief
- Beat: the kitchen confrontation — "Where were you last night?" (your choice)
- Aspect: 9:16 (inferred from "for Reels")
- Arc: composed → hears the excuse → wavers → wry smile → "We're done." → steps back (AI's pick)
- Camera: multi-shot cut list — six shots of about 2.5s, breathing handheld; occlusion into shot 4, hard cuts elsewhere (your choice)
- Pacing: most of the runtime goes to the confrontation itself; setup and close stay brief (your choice)
- Effects: one slow-motion beat on the final line, capped at about 2s (AI's pick)
- 720p, 15s, byteplus, audio on (defaults — rows in the table below)
```

Then the full prompt, then the table `approval-gate.md` specifies, all in one
message.

## Prompt template

Load these sections of `../ofox-video-core/references/prompt-structure.md`
first: "Prompt skeleton: header manifest, timeline, closing block",
"Segmenting the timeline", "Camera language", "Consistency locks and the
negative list", "Dialogue and sound", "Endings". The vocabulary — shot sizes,
movements, transition phrases, negative-list items — lives there and is not
repeated. What follows is the short-drama shape laid over that skeleton.

Gallery evidence for the shape: the eight short-drama prompts (cases 1–8) are
the only category timestamped 8 of 8. Of the 11 short-drama and talking-head
prompts, 8 carry a capture-medium style anchor and 8 carry a negative list —
two overlapping sets of eight, not the same eight. 6 of the 8 prompts with
dialogue attach a delivery note. Chinese-language cases are quoted in
translation.

### 15–30 seconds: one or several shots

Slots in `<angle brackets>`; optional lines in `[square brackets]`. Two to
five seconds per shot; most shots carry no line.

```
[FORMAT: <ratio>, <T> seconds, <N shots, hard cuts on the timestamps | N shots, transitions named on the timeline | one continuous shot, no cuts>]      — optional; must match the flags
STYLE: live-action, <colour 35mm film grain | phone or mirrorless realism, slight sensor noise>, <light: soft cool key from front-left, warm rim from behind | tungsten practicals>, <palette or grade>.
<TAG A>: <age range, build>, <hair>, <clothing item by item, colour + material — "grey turtleneck knit top, small gold hoops, thin chain">, <one bearing word>. Referred to as "<tag A>".
<TAG B>: <same fields> — or: heard only, never shown | seen only as a dark, heavily out-of-focus shoulder at frame right.
SCENE: <place, time of day, light direction and colour temperature, one foreground element, weather or room tone>.
ARC: <state 1> → <what she hears or sees> → <wavering> → <the cover: wry smile, looks down> → <the line that turns it> → <the exit action>.

SHOT 1 (0–<a>s): <shot size, camera position, movement>. <tag A> <one action — at most 1–3 visible signals: eyes, hands, breath>. [<Tag B> (off-screen, <tone>): "<line>".] <sound for this beat>
<TRANSITION — name a kind on purpose; a hard cut is one of nine, not the default: HARD CUT. | Without cutting, <the swinging door / his shoulder / a passing body> sweeps across the lens and the camera comes out of the occlusion on <the next view>. | Without cutting, the camera pushes through <the doorway / the beaded curtain / the gap between the machines> into <the next space>. | Without cutting, <what changes the framing: she steps back; the camera drifts>. | <nothing here — one continuous shot, declared in the first sentence instead>>
SHOT 2 (<a>–<b>s): … [<Tag A> (<tone>): "<line>" — <delivery: quiet, no anger; on "<word>" the eyes steady>.]
SHOT <N> (<x>–<T>s): … <ending state: hold on her face for one second | hard cut to black at the peak | the camera settles and the clip runs on a moment>.

CAMERA: <movement — not optional, and `static` is one of its values rather than the absence of one: locked with a breathing sway | close handheld follow just behind and beside her | slow push from the two-shot into a close-up | a half-turn orbit | travels with her from <space 1> through <space 2>; state it per shot when it changes>, <lens: 70–100mm medium telephoto | 24mm wide>, <depth of field>, focus stays on <tag A>'s eyes; <axis rule: one eye-line axis, never crossed>.
SOUND: <room tone>, <two diegetic sounds tied to actions: door click, fabric>; music <none — the default here, since asking this model for a scored cue has failed output moderation on audio copyright (unbilled); see "Asking for music can fail output moderation on copyright" in the shared file | enters at <t> | drops out at <t>, only if the user accepts that same risk>. Dialogue in <language>, mouths matched to it.
CONSISTENCY: <tag A>'s face, hairstyle, <accessory>, <clothing items> identical in every shot; <tag B>'s <items>; positions and light direction do not change.
AVOID: subtitles, on-screen text, watermarks; extra or warped limbs; CGI look, plastic skin, skin smoothing; <the cuts you forbid: jump cuts, dissolves | shot/reverse-shot when one continuous shot>; theatrical over-acting, sudden tears.
```

What each short-drama slot is for, and where it comes from:

| Slot | Why it is here | Cases |
|---|---|---|
| `ARC` arrow chain | Five or six states in a row give the model a path rather than a mood; each shot then owns one step of it | 3 (`tense preparation → hears the familiar greeting → brief wavering → wry smile as cover → resolute declaration → restrained exit`), 8 |
| 1–3 visible signals per shot | More reads as over-acting; the gallery's most controlled performance prompt caps it and bans the tear | 3, 20 |
| Delivery note on every line | Volume, tone, accent, and what the face does on which word — present in 6 of the 8 dialogue prompts | 3, 7 (`controlled and intimate, not theatrical`), 22 (`confident Australian accent`), 5 |
| Off-screen or unseen partner | A voice without a face, or a silhouette kept out of focus, is cheaper to keep consistent and stronger dramatically | 3 (the man is heard off-screen and seen only as an out-of-focus shoulder), 21 (`cut to the voice only … as a voiceover`) |
| Two people told apart by wardrobe colour blocks | Case 7's four characters are `cobalt trench / rust knit polo / faded green workwear / pale gray suit` and nothing else, and stay distinguishable | 7, 1 |
| Ending state | Stated in 6 of the 11: freeze, black, `End on …`, the camera settling | 4 (`hard cut to black at the peak of suspense`), 5 (`the frame freezes`), 7, 8 |
| Separate `SOUND` block | Room tone plus two or three sounds keyed to actions; music in and out points | 3, 4, 7, 6 |
| `TRANSITION` line between shots | Nine kinds exist and only one of them is a cut; naming a kind is what stops a timeline from becoming a list of held frames spliced together | 2 (the back-flags sweep past the lens and the camera comes out on the other actor), 3 (she is revealed from behind his out-of-focus silhouette), 8 (an ice crevice and a roof each carry one transition), 7 (`Cut to` / `Cut back inside`) |
| `CAMERA` movement field | The camera has to be doing something specific, even when that something is holding still; without the field the prompt tends to come back as "locked, no push, no zoom" in every shot | 6 (`close handheld follow shot, staying just behind and slightly beside her`), 8 (a movement phase per segment), 2 (orbit into the next actor), 3 (locked, deliberately) |
| `AVOID` — the short-drama items | subtitles / text / watermarks (6 of 11); CGI or plastic skin (1, 4, 20); over-acting (3, 20); the transitions you are not making (3, 8). **Its text items are a backstop, not a defence** — a period or festival setting (a neon street, a courtyard at New Year, a shopfront) needs the lettered surfaces composed out of the shots themselves, per "Unwanted text is designed out of the set, not forbidden in the list" in the shared file; jobs `41f87ac7` and `036ac3a8` are the two sides of that | 4, 5, 20 |
| Clothing with colour and material | The one appearance field every gallery prompt that describes a character writes; age, build, hair, eyes appear as needed | 1, 3, 4, 5, 7, 8 |

Camera choices that recur in this category, all in the shared "Camera
language" tables: over-the-shoulder at the partner's eye height, held (case
3); a fixed close-up where the reframing comes from an actor stepping back,
not a zoom (3); a close handheld follow that stays just behind and beside (6);
a frontal medium two-shot with a slow push into a close-up (1, 22); `do not
cut to shot/reverse-shot` when the point is one held take (3). The travelling
end of the same tables: a slow orbit of the upper body that carries into the
next actor (2); a close handheld follow that struggles through the same crowd
she does, then releases and settles at her level (6); one movement phase per
segment, written out as its own block — `low-altitude rear FPV pursuit`,
`smooth three-quarter rear tracking`, `continuous rise into a high-angle
wide` (8).

### Choosing a transition, not defaulting to a cut

The shared "Transitions" section holds **nine** kinds with the exact phrasing
to copy for each: hard cut; one continuous shot with cuts forbidden;
occlusion; pass-through; morph; flash; match cut; speed ramp; narrative
ordering words. Load it and pick one per boundary. Four of the nine have
short-drama instances among the 63 prompts:

| Kind | Short-drama cases |
|---|---|
| Hard cut | 1 (nine numbered shots), 4, 5, 7 |
| One continuous shot, cuts forbidden | 2, 3, 6, 8 |
| Occlusion | 2, 3, 8 |
| Pass-through | 8 |

The other five — morph, flash, match cut, speed ramp, narrative ordering
words — appear only outside this category (ads, fashion, fight and
music-video prompts). Borrowing one is a deliberate choice, not a documented
short-drama convention; say so in the recap if you do.

A boundary with no transition kind named is not neutral. It renders as a
hard cut, so a timeline of `SHOT 1 … SHOT 2 … SHOT 3` with nothing between
them is a cut list whether or not that was the intent — the same mistake as
leaving the `CAMERA` movement field empty, one line further down.

**Naming a `HARD CUT` is not a guarantee it renders as one, and the reason is
the rest of the timeline, not that boundary alone.** Six
`bytedance/seedance-2.5` jobs now bear on this, four of them short drama.
Ordered by how large a share of the boundaries were written as hard cuts:

| Hard-cut share | Job | Hard cuts that rendered as cuts |
|---|---|---|
| 3 of 9 | `4e5c9581-d462-443b-9663-b1aa6d72f527` (30s) | **0 of 3** — the whole clip read as one continuous flow |
| 3 of 8 | `844c9145-9b10-4335-9fdc-ec4937793a2f` (30s) | 3 of 3, within about 1.5s of their stamps |
| 3 of 6 | `036ac3a8-6f68-47ad-a553-86a29aa3e5b8` (20s) | 3 of 3, all seven shots in the written order |
| 5 of 7 | `41f87ac7-d7a6-4c8c-8efd-feb7bdc4818d` (20s) | 5 of 5 |

The two commerce jobs at 4-of-4 and 6-of-6 kept every cut as well. So the
direction is settled even though the threshold is not: **a boundary's
rendering is not decided independently of the rest of the timeline, and
weighting the mix toward hard cuts is what buys a cutting rhythm.** Five
consistent samples against one is enough to act on; the gap between 3-of-8
(held all three) and 3-of-9 (held none) is a single boundary, so nobody knows
where the line is, and the trigger could still be the boundary count, the
resolution or the particular transition kinds. The full reading is under
"Several shots in one job" in
`../ofox-video-core/references/prompt-structure.md`.

Two working rules follow. **Write hard cuts as at least half the boundaries
when the beat needs a cutting rhythm**; if the brief's `Camera` answer was
the cut list, that is what it asked for. And **check the draft by reading
frames, not by counting a scene detector's hits** — at threshold 0.3 the
detector misses a cut between two shots in the same place under the same
light, which is exactly what shot/reverse-shot is. It missed the single most
important cut in each of two accepted clips: `41f87ac7` at 9.5s (his
close-up to hers) and `036ac3a8` at 9s (the mother's close-up to the son's),
both plainly visible frame by frame. "Checking the cuts: read frames, never
a detector count alone" in the shared file has the method.

What none of this establishes: whether the softened cuts are what made the
30-second clip above read, in the repository owner's words, as not well
connected — that is a plausible follow-on hypothesis, not a tested finding,
and this repo has no measurement of viewer-perceived coherence to test it
against.

### Shot density — pick a register, then count

The register comes from the brief's `Camera` answer; the shot count follows
from the register and the duration. Per-case measurements behind this table
are in "Shot density, measured per case" in the shared file; these are the
short-drama targets read off them.

| Register | Per shot | 20s | 30s | Measured on |
|---|---|---|---|---|
| **Held take** — one or two faces, the camera stays put | performance beats of 1–3s inside one frame, no cuts | 1 shot | 1 shot | case 3: eight beats in 15s |
| **Travelling one take** — no cuts; the camera moves through the space and an occlusion or a pass-through carries each new view | 5–8s a phase, each phase arriving somewhere the previous one could not see | 3–4 phases | 4–5 phases | case 2: 3 phases in 20s; case 6: 4 phases and three spaces in 30s; case 8: 5 phases and four locations in 30s |
| **Multi-shot cut list** — a new size and position at every stamp | 3–5s | 4–6 shots | 6–9 shots | case 1: 9 shots in 30s; case 18: 8 in 30s; case 22: 6 in 30s |
| **Spectacle, beat-driven** — cuts on the action, the line or the music | 2–3s | 7–10 shots | 10–13 shots | case 11: 10 shots in 24s; case 34: 13 cuts in 30s |

Frequency is not effect: these are counts from prompts good enough to be
collected, not a measured relationship between shot count and how good a
clip is. What they do settle is the floor. **Four 5-second shots in a
20-second clip is the slowest point on this table** — and if each of those
shots also holds the camera still, the result is a slideshow of held frames
that renders exactly as written. Measured here on 2026-09-03, job
`38ca8311-5b2d-47d5-a45d-e8ebea0e6312` (20s, 480p, four static shots, cuts
landing on 5/10/15s as written, consistent characters, clean Mandarin
delivery): technically correct on every axis and discarded for being plain.
That run is why this subsection and the `Camera` register question exist.

**The one-take rows have a floor of their own, and it is about movement, not
shot count.** A single 20–30 second take needs the camera to *travel* — cases
2, 6 and 8 cross a stage, three club rooms and four locations respectively.
Measured against that on 2026-09-04: job
`16023efe-48d6-45fe-8fd8-f5c6fbfe6519` (20s, 720p, one continuous shot, zero
detected cuts, characters stable throughout) was rejected as too static,
because its whole movement plan was one very slow push while the actors held
a standing position. So when writing this register:

- give each 5–8s phase **a view the previous phase could not see** — through a
  doorway, past an occlusion, around a corner, from the other side of a room;
- write the movement as travel (`the camera walks with her out of the kitchen
  and into the corridor`), not as distance-closing (`a very slow push`). A
  push is a beat inside a phase, never the plan for the take;
- if the beat genuinely happens in one place on one face, the register you
  want is the **held take** with performance beats — that is what case 3 is,
  at 15 seconds, and it does not pretend to travel.

Cut counts here are inside the measured envelope: 10 shots in 30 seconds, and
up to 6 hard cuts in one job, have both been run on Ofox ("Shots, cuts and
jobs" above). The `spectacle` row's 10–13 cuts in 30s is still gallery practice —
price a first attempt as an experiment — and on every register, check where
the cuts actually landed on a 480p draft, **by reading frames rather than a
detector count**, before paying for the final.

### Duration budget — spend the seconds where the beat is

Shot density says how many shots and how long each one runs; it says nothing
about which shots the story actually needs seconds for, and a clip can obey
every row of that table while still spending more than a third of its
runtime on the parts nobody came to watch. Measured on job
`4e5c9581-d462-443b-9663-b1aa6d72f527` (30s, 720p, ten shots, 3.0s each,
$7.20, accepted but flagged): a 2.5s stand-off, six shots of close-quarters
combat, one 4.5s decisive-strike shot carrying a speed ramp and a freeze
frame, then 7 seconds — close to a quarter of the clip — spent recovering
breath and settling into a stand-down that mirrors the opening shot. The
repository owner's own words on it: "why is 20 to 30 seconds so plain? Don't
compress the best part just to make room for the ending — the ending took
10 seconds, most of it should be the fight." The uniform 3.0s-per-shot
average that produced this — every shot the same length, none longer or
shorter than any other — is itself part of the problem: it is the same
flattening shape "Shot density" already warns against for a static camera,
just spread across duration instead of across shot count.

**Budget by function, not by shot count**, and check the numbers add up to
the duration before writing a single shot:

| Register | 20s | 24s | 30s |
|---|---|---|---|
| **Action / spectacle** — a fight, a chase, a stunt; the beat's payoff is the middle of the clip, not the last shot | setup ~1.5s, core ~15s, close ~3.5s | setup ~2s, core ~19s, close ~3s | setup ~2s, core ~24s, close ~3–4s |
| **Dialogue / slice-of-life** — an exchange that lands on a line or an action; the beat's payoff can legitimately be the last shot | setup ~3s, build ~12s, close ~5s | setup ~3.5s, build ~15s, close ~5.5s | setup ~4–5s, build ~17–18s, close ~6–8s |

The two rows are not the same rule with different numbers — they encode
where the payoff sits. An action beat's payoff is the fight itself, so the
close is a stand-down after it rather than the destination, and stays the
smaller number. A dialogue beat's payoff is often the final line or gesture,
so its close is allowed real weight: job
`844c9145-9b10-4335-9fdc-ec4937793a2f` gives its last shot the
sitting-down-and-eating beat the whole scene has been building to, and that
is the close doing its job, not padding. Pick the row that matches the
beat's `Arc`, not the clip's genre label — a dialogue scene that resolves
mid-clip and coasts to a static hold behaves like the action row.

**Slow motion, speed ramps and freeze frames spend real seconds and have to
come out of this budget, not sit outside it.** The 4.5s decisive-strike shot
above stacked an extreme speed ramp into a flash-freeze into a resume — three
effects on one action — to cover what a single clean strike needed about
half that time for. Cap it: **no more than about 2–3 seconds of
slow-motion/freeze/speed-ramp effect, total, across a 30-second clip**
(scale down for shorter clips — roughly 1.5–2s at 20s, 2–2.5s at 24s), and
default to using the device **once**, on the single best beat, not on every
hit. A second use is defensible only when each instance stays under about
1.5s.

**A symmetrical bookend — the last shot mirroring the first — is a
deliberate flourish, not the default shape of a close.** It reads well (the
`ARC` line and the shared file's `Endings` section both support it), but it
is not free: in the job above it cost the close roughly half its budget on
two static, held shots that do nothing but face each other. If you use it,
its seconds come **out of** the close row above, not on top of it — a
mirrored bookend in a 30s action clip should still leave the close at 3–4s
total, split between the two bookend shots, not 3–4s each.

**"The best part gets more shots and more description" is an instruction
about density, not just enthusiasm — apply it unevenly on purpose.** The
counter-example is exactly what produced the flagged clip: ten shots
averaging 3.0s each, uniformly, so the six-shot melee in the middle got the
same per-shot allowance as the stand-off that opened it and the stand-down
that closed it. The fix is not more shots overall — it is fewer, longer
shots outside the core and more, shorter, more specifically described shots
inside it: one shot for the setup, one or two for the close, and the core
written at the dense end of "Shot density" (2–2.5s a shot, one distinct
action verb per shot) while the shots around it sit at the loose end
(4–6s). A prompt where every shot is the same length is easy to write and
hard to notice is flat until the clip is already paid for.

### Dialogue budget — two tiers

| Tier | Budget | What the gallery measured |
|---|---|---|
| **Dialogue drama** — two people, an exchange | **0.4–1.7 words/s over the clip**; one 2–4s beat may peak at 3.5–5. Treat 2–3 words/s as a ceiling, never a target — most seconds carry no line | case 3: 6 words in 15s; case 1: 51 words in 30s; case 7: 43 words in 30s |
| **Monologue / talking head** — one person to camera | **3.5 words/s English; 5 characters/s Chinese or Japanese** | case 22: 103 words in 30s; case 20: 50 characters in 10s |

A script that overruns its tier is the brief's `Lines` question: extend the
duration (within 30s) or trim and show the trimmed lines in the recap.
Compressing the delivery is what produces rushed, garbled speech.

### Two worked examples, two registers

Both are legitimate short drama and the brief's `Camera` answer picks between
them. The first is the restrained end: one held take, one face, six spoken
words in fifteen seconds. The second is the dense end: nine shots in
twenty-four seconds, a space the camera travels through, and something other
than a hard cut at three of its eight boundaries. Writing the first when the beat
wanted the second is this skill's most likely failure, because it fails
quietly — every rule obeyed, nothing to look at.

### Worked example 1 — adapted from case 3 (translated): 15 seconds, one continuous shot

The original attached a photo of the actress; on Ofox that is refused (real
person), so this version carries her in text. Six spoken words in fifteen
seconds — this is what the drama tier looks like in practice.

```
STYLE: live-action, natural light, soft cool-white key from about 45 degrees front-left, a little warm gold rim from behind; real skin texture, no smoothing; nothing theatrical in the lighting.
HER: woman around 30, slim, dark hair in a low knot, small silver hoops and a thin chain, grey turtleneck knit top; composed, tired. Referred to as "her".
HIM: heard off-screen; seen only as a dark, heavily out-of-focus shoulder and jaw at frame right, never in focus, never turning to camera.
SCENE: an apartment doorway at dusk; she is inside, he has just opened the door; quiet street tone outside.
ARC: braced → hears the familiar greeting → a flicker of the old warmth → wry smile as cover → "We're done." → one step back.

One continuous shot, 15 seconds, no cuts, no shot/reverse-shot.
0.0–0.8s: The door opens toward camera; the frame is mostly his dark blurred shoulder; she is revealed behind it, chest-up, centred slightly left, eyes down.
0.8–3.2s: Him (off-screen, casual, a smile in it): "Hey, what's up, baby?" Her eyes lift to his; one slow blink. Sound: door click, fabric.
3.2–6.0s: A half-breath. The corner of her mouth moves — the start of a smile that does not arrive. Nothing else moves.
6.0–9.5s: Her (very quiet, very clear, no anger): "We're done." A short intake of breath before it; "We're" still carries warmth, on "done" the eyes steady.
9.5–13.0s: Lips close. She holds his look a full second, then one step back; the framing loosens from close to medium close-up because she moved, not the lens.
13.0–15.0s: She turns her head a few degrees away. Hold. Room tone only; no music.

CAMERA: over-the-shoulder from behind his right shoulder at her eye height, 70–100mm equivalent, shallow depth of field, focus locked on her eyes throughout; his outline stays out of focus at frame right; one eye-line axis, never crossed; no push, no zoom, at most a faint breathing sway.
SOUND: door hinge, knit fabric, distant street; no score. Dialogue in English.
CONSISTENCY: her face, hair knot, hoops, chain, grey turtleneck and apparent age identical throughout; his position and the light direction do not change.
AVOID: subtitles, on-screen text, watermarks; tears rolling, hysterics, exaggerated frowning; shot/reverse-shot, fast push-ins, orbits, sudden zooms, multi-camera switching; plastic skin, beauty filter.
```

### Worked example 2 — adapted from case 1 (translated): 24 seconds, nine shots, four kinds of transition

Case

…(truncated)
