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. 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
— 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
— 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
— never spend before an approved cost table.
Before generating: the availability check
Run this once per session (not on every request):
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
— 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)
1---2name: seedance-short-drama3description: 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 short4license: MIT5---67# seedance-short-drama: dialogue-driven short-drama shots89Turns one beat of a script into a realistic-human video clip — one shot, or a10few hard-cut shots inside a single job. A short creative brief settles what11the script leaves open; a structured prompt (character block, timestamped12shots, quoted dialogue with delivery notes, consistency lock) goes to13Seedance 2.5; this skill submits, polls, downloads and reports the cost.1415This skill is a thin, scenario-specific layer over16[`ofox-video-core`](../ofox-video-core/SKILL.md). It owns the short-drama17prompt craft, the pre-generation brief, recommended defaults, and this18scenario's rows in the approval table; `ofox-video-core` owns talking to the19Ofox API correctly and safely (the `OFOX_API_KEY` handling, the no-resubmit20rule, error-code mapping, download/verification). **Read that skill's safety21contract before using this one** — it is not restated here.2223Three shared references from `ofox-video-core` are load-bearing here and are24linked, not copied:2526- [`../ofox-video-core/references/creative-brief.md`](../ofox-video-core/references/creative-brief.md)27 — what to ask the user before a prompt exists: the three tiers, one round of28 at most four questions, the "Let the AI decide" discipline, the skip rows,29 and the anti-patterns. Read it before the brief section below, which adds30 only this scenario's question set.31- [`../ofox-video-core/references/prompt-structure.md`](../ofox-video-core/references/prompt-structure.md)32 — the vendor's formula, the header-manifest → timeline → closing-block33 skeleton, timestamp formats and segment lengths, transition and camera34 vocabularies, consistency locks and negative lists, dialogue density,35 reference-image semantics, endings. Load it before writing a prompt; this36 file adds only what is specific to short drama.37- [`../ofox-video-core/references/approval-gate.md`](../ofox-video-core/references/approval-gate.md)38 — never spend before an approved cost table.3940## Before generating: the availability check4142Run this once per session (not on every request):4344```bash45bash ../ofox-video-core/references/ofox-video.sh check46```4748If it fails, follow `ofox-video-core`'s guidance (install `curl`/`jq`, or get49an `OFOX_API_KEY` at `https://app.ofox.ai`) — don't dead-end the50conversation, and don't re-run this check on every subsequent request once51it has passed.5253## Shots, cuts and jobs5455One job is one clip of 4–30 seconds, and a clip **can hold several shots56joined by hard cuts**. Write the timestamps as cut boundaries — `SHOT 257(3-6s): … HARD CUT.` — and on the runs measured so far Seedance 2.5 cuts58there. Default to **2–5 seconds per shot**.5960The measured envelope, as of 2026-09-04, is **up to 10 shots in 30 seconds**,61and separately **up to 6 hard cuts** among one job's boundaries — the two62maxima are from different jobs — at 480p and 720p, on63`bytedance/seedance-2.5` pinned to `byteplus`. Four of those jobs are short64drama with the audio on and lines in it (`844c9145`, `4e5c9581`, `41f87ac7`,65`036ac3a8`), which closes the caveat this section used to carry — the first66two measured runs were silent, and speech turned out not to disturb the cut67structure: `036ac3a8` carried five lines across seven shots and rendered all68seven in order. Cuts land within about ±1.5 seconds of their stamps, and a69character described once in a manifest survives every shot on text alone,70with no image attached. The job ids and the frame-by-frame readings are71under "Several shots in one job" in72`../ofox-video-core/references/prompt-structure.md`.7374**Still outside the envelope**: more than 10 shots or more than 6 hard cuts75in one job, 1080p, the `volcengine` upstream, and a single line of dialogue76split across a cut — the tooling used here cannot hear audio, so no run77above has had its words checked, only their presence and timing. A first78attempt outside that envelope is an experiment — say so, and price it as79one. And inside it, a written `HARD CUT` is still not self-guaranteeing;80see "Choosing a transition, not defaulting to a cut" below.8182If you mean beats inside one held shot rather than cuts, declare `one83continuous shot` in the first sentence; without it a timestamped list reads84as a cut list ("Two things a timestamp can mean" in the shared file).8586### Where separate jobs and `chain` fit8788- **Separate `generate` calls** when each shot needs its own approval, seed,89 resolution or duration, or when the sequence runs past 30 seconds. Each is90 a separately billed job; this skill does not stitch clips.91- **`ofox-video-core`'s `chain`** carries one job's closing frame into the92 next. **It does not work in this scenario** — the carried frame holds a93 photoreal person, which Seedance 2.5 refuses ("Reference images and real94 people"). Say so up front rather than letting the user discover it95 mid-sequence. Consecutive short-drama jobs are generated independently;96 continuity across them is text — the same character block word for word97 plus the `CONSISTENCY` line of the template.9899A script that spans several scenes is still not one job. Which beat gets the100clip is the brief's first question; do not compress a chapter into 30101seconds.102103## Prompt language follows the audio104105Audio is generated on by default, and the model speaks **whatever language the106quoted lines are written in**. So keep dialogue in the user's own language —107if they give you Chinese lines, put Chinese in the prompt. Translating them to108match the English examples in this file produces an English-dubbed clip, and109the user only finds out after paying for it.110111The rest of the prompt (setting, camera, lighting) can be English regardless;112it is the quoted speech that determines the spoken language. The dialogue113budget is in two tiers, below; for Chinese and Japanese count characters114rather than words.115116## Before writing the prompt: the creative brief117118The shared rules are in119[`../ofox-video-core/references/creative-brief.md`](../ofox-video-core/references/creative-brief.md)120— the three tiers, the one-round limit, the shape of a question, the "Let the121AI decide" discipline, the generic skip rows, the order with the approval122gate, the fallback for a runtime without `AskUserQuestion`, and the123anti-patterns. Read it before writing a prompt. This section adds only what124is specific to short drama.125126Read the user's message and attachments first, and mark every axis of the127clip **settled** or **open**. Zero questions is common here: a beat pasted128with its stage directions plus "15 seconds, vertical, for Reels" has settled129every axis — write the prompt.130131| Tier | Short-drama axes |132|---|---|133| **must-ask** | which beat of a multi-scene script to render; whether an asset the request implies actually exists |134| **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` |135| **never-ask** | resolution, model, provider, audio on/off, duration once stated |136137### The short-drama questions138139| # | 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 |140|---|---|---|---|---|---|141| 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. |142| 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. |143| 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. |144| 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. |145| 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. |146| 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. |147| 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. |148| 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. |149150Handheld or locked is a **texture inside** the register, not a fourth151option: the realistic short-drama convention is a breathing handheld (cases1521, 4, 6), and it applies to a travelling take (case 6) as readily as to a153held one. Until 1.8.0 this question offered `Handheld documentary`, `Steady154cinematic` and `Static over-the-shoulder` — three labels for the camera155staying roughly where it is, which is exactly what `creative-brief.md`'s "The156shape of a question" forbids ("visibly different pictures, not synonyms").157A user who wanted the camera to travel could not pick it.158159If more than four are open in round one, ask in this order: `Beat`,160`Aspect`, `Arc`, `Camera`; `Lines` is the follow-up. `Drafts` folds into the161cost table as a second row rather than taking a question slot. On a162published deliverable (`creative-brief.md`'s two-round rule), round two adds163`Pacing` and `Effects` — in that order, since the duration split has to be164settled before a slow-motion budget can be carved out of it. Never asked:165the language of the lines (follows the script), resolution, model, provider,166audio on/off — all rows in the table.167168### Skip rows specific to short drama169170On top of the generic rows in `creative-brief.md`:171172| Signal in the input | Axis | Value |173|---|---|---|174| The language the quoted lines are written in | spoken language | that language — **never asked**; see "Prompt language follows the audio" |175| Stage directions in the script ("crying", "slams the door", "deadpan") | emotional arc | build the arc from them |176| A tone adjective ("tense", "tender", "bitter") | emotional arc | build the arc from it |177| A camera word ("handheld", "locked off", "slow push", "over the shoulder") | camera register | held take, with that word as the movement value |178| A traversal word ("walks with her", "follows him through", "one take", "no cuts", "out onto the street") | camera register | travelling one take |179| 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 |180| 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 |181| 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 |182| 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 |183184### Every answer lands somewhere185186| Answer | Where it goes |187|---|---|188| Beat | which lines and actions the timeline covers; the `--name` |189| Aspect | `--aspect-ratio` |190| Arc | the `ARC` arrow chain in the header and the 1–3 signals in each shot |191| 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 |192| Lines over budget | `--duration`, or the trimmed lines shown in the recap |193| Drafts | `batch` on `bytedance/seedance-2.0-mini` at 480p, or a single `generate` |194| Pacing | the per-shot lengths and the `SHOT` count given to setup, core and close, per "Duration budget" below |195| Effects | whether a shot's action line or `TRANSITION` carries a speed ramp or a freeze frame, and how many seconds it spends |196197### The recap for this scenario198199```200Brief201- Beat: the kitchen confrontation — "Where were you last night?" (your choice)202- Aspect: 9:16 (inferred from "for Reels")203- Arc: composed → hears the excuse → wavers → wry smile → "We're done." → steps back (AI's pick)204- Camera: multi-shot cut list — six shots of about 2.5s, breathing handheld; occlusion into shot 4, hard cuts elsewhere (your choice)205- Pacing: most of the runtime goes to the confrontation itself; setup and close stay brief (your choice)206- Effects: one slow-motion beat on the final line, capped at about 2s (AI's pick)207- 720p, 15s, byteplus, audio on (defaults — rows in the table below)208```209210Then the full prompt, then the table `approval-gate.md` specifies, all in one211message.212213## Prompt template214215Load these sections of `../ofox-video-core/references/prompt-structure.md`216first: "Prompt skeleton: header manifest, timeline, closing block",217"Segmenting the timeline", "Camera language", "Consistency locks and the218negative list", "Dialogue and sound", "Endings". The vocabulary — shot sizes,219movements, transition phrases, negative-list items — lives there and is not220repeated. What follows is the short-drama shape laid over that skeleton.221222Gallery evidence for the shape: the eight short-drama prompts (cases 1–8) are223the only category timestamped 8 of 8. Of the 11 short-drama and talking-head224prompts, 8 carry a capture-medium style anchor and 8 carry a negative list —225two overlapping sets of eight, not the same eight. 6 of the 8 prompts with226dialogue attach a delivery note. Chinese-language cases are quoted in227translation.228229### 15–30 seconds: one or several shots230231Slots in `<angle brackets>`; optional lines in `[square brackets]`. Two to232five seconds per shot; most shots carry no line.233234```235[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 flags236STYLE: 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>.237<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>".238<TAG B>: <same fields> — or: heard only, never shown | seen only as a dark, heavily out-of-focus shoulder at frame right.239SCENE: <place, time of day, light direction and colour temperature, one foreground element, weather or room tone>.240ARC: <state 1> → <what she hears or sees> → <wavering> → <the cover: wry smile, looks down> → <the line that turns it> → <the exit action>.241242SHOT 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>243<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>>244SHOT 2 (<a>–<b>s): … [<Tag A> (<tone>): "<line>" — <delivery: quiet, no anger; on "<word>" the eyes steady>.]245SHOT <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>.246247CAMERA: <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>.248SOUND: <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.249CONSISTENCY: <tag A>'s face, hairstyle, <accessory>, <clothing items> identical in every shot; <tag B>'s <items>; positions and light direction do not change.250AVOID: 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.251```252253What each short-drama slot is for, and where it comes from:254255| Slot | Why it is here | Cases |256|---|---|---|257| `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 |258| 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 |259| 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 |260| 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`) |261| 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 |262| 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 |263| Separate `SOUND` block | Room tone plus two or three sounds keyed to actions; music in and out points | 3, 4, 7, 6 |264| `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`) |265| `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) |266| `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 |267| 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 |268269Camera choices that recur in this category, all in the shared "Camera270language" tables: over-the-shoulder at the partner's eye height, held (case2713); a fixed close-up where the reframing comes from an actor stepping back,272not a zoom (3); a close handheld follow that stays just behind and beside (6);273a frontal medium two-shot with a slow push into a close-up (1, 22); `do not274cut to shot/reverse-shot` when the point is one held take (3). The travelling275end of the same tables: a slow orbit of the upper body that carries into the276next actor (2); a close handheld follow that struggles through the same crowd277she does, then releases and settles at her level (6); one movement phase per278segment, written out as its own block — `low-altitude rear FPV pursuit`,279`smooth three-quarter rear tracking`, `continuous rise into a high-angle280wide` (8).281282### Choosing a transition, not defaulting to a cut283284The shared "Transitions" section holds **nine** kinds with the exact phrasing285to copy for each: hard cut; one continuous shot with cuts forbidden;286occlusion; pass-through; morph; flash; match cut; speed ramp; narrative287ordering words. Load it and pick one per boundary. Four of the nine have288short-drama instances among the 63 prompts:289290| Kind | Short-drama cases |291|---|---|292| Hard cut | 1 (nine numbered shots), 4, 5, 7 |293| One continuous shot, cuts forbidden | 2, 3, 6, 8 |294| Occlusion | 2, 3, 8 |295| Pass-through | 8 |296297The other five — morph, flash, match cut, speed ramp, narrative ordering298words — appear only outside this category (ads, fashion, fight and299music-video prompts). Borrowing one is a deliberate choice, not a documented300short-drama convention; say so in the recap if you do.301302A boundary with no transition kind named is not neutral. It renders as a303hard cut, so a timeline of `SHOT 1 … SHOT 2 … SHOT 3` with nothing between304them is a cut list whether or not that was the intent — the same mistake as305leaving the `CAMERA` movement field empty, one line further down.306307**Naming a `HARD CUT` is not a guarantee it renders as one, and the reason is308the rest of the timeline, not that boundary alone.** Six309`bytedance/seedance-2.5` jobs now bear on this, four of them short drama.310Ordered by how large a share of the boundaries were written as hard cuts:311312| Hard-cut share | Job | Hard cuts that rendered as cuts |313|---|---|---|314| 3 of 9 | `4e5c9581-d462-443b-9663-b1aa6d72f527` (30s) | **0 of 3** — the whole clip read as one continuous flow |315| 3 of 8 | `844c9145-9b10-4335-9fdc-ec4937793a2f` (30s) | 3 of 3, within about 1.5s of their stamps |316| 3 of 6 | `036ac3a8-6f68-47ad-a553-86a29aa3e5b8` (20s) | 3 of 3, all seven shots in the written order |317| 5 of 7 | `41f87ac7-d7a6-4c8c-8efd-feb7bdc4818d` (20s) | 5 of 5 |318319The two commerce jobs at 4-of-4 and 6-of-6 kept every cut as well. So the320direction is settled even though the threshold is not: **a boundary's321rendering is not decided independently of the rest of the timeline, and322weighting the mix toward hard cuts is what buys a cutting rhythm.** Five323consistent samples against one is enough to act on; the gap between 3-of-8324(held all three) and 3-of-9 (held none) is a single boundary, so nobody knows325where the line is, and the trigger could still be the boundary count, the326resolution or the particular transition kinds. The full reading is under327"Several shots in one job" in328`../ofox-video-core/references/prompt-structure.md`.329330Two working rules follow. **Write hard cuts as at least half the boundaries331when the beat needs a cutting rhythm**; if the brief's `Camera` answer was332the cut list, that is what it asked for. And **check the draft by reading333frames, not by counting a scene detector's hits** — at threshold 0.3 the334detector misses a cut between two shots in the same place under the same335light, which is exactly what shot/reverse-shot is. It missed the single most336important cut in each of two accepted clips: `41f87ac7` at 9.5s (his337close-up to hers) and `036ac3a8` at 9s (the mother's close-up to the son's),338both plainly visible frame by frame. "Checking the cuts: read frames, never339a detector count alone" in the shared file has the method.340341What none of this establishes: whether the softened cuts are what made the34230-second clip above read, in the repository owner's words, as not well343connected — that is a plausible follow-on hypothesis, not a tested finding,344and this repo has no measurement of viewer-perceived coherence to test it345against.346347### Shot density — pick a register, then count348349The register comes from the brief's `Camera` answer; the shot count follows350from the register and the duration. Per-case measurements behind this table351are in "Shot density, measured per case" in the shared file; these are the352short-drama targets read off them.353354| Register | Per shot | 20s | 30s | Measured on |355|---|---|---|---|---|356| **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 |357| **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 |358| **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 |359| **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 |360361Frequency is not effect: these are counts from prompts good enough to be362collected, not a measured relationship between shot count and how good a363clip is. What they do settle is the floor. **Four 5-second shots in a36420-second clip is the slowest point on this table** — and if each of those365shots also holds the camera still, the result is a slideshow of held frames366that renders exactly as written. Measured here on 2026-09-03, job367`38ca8311-5b2d-47d5-a45d-e8ebea0e6312` (20s, 480p, four static shots, cuts368landing on 5/10/15s as written, consistent characters, clean Mandarin369delivery): technically correct on every axis and discarded for being plain.370That run is why this subsection and the `Camera` register question exist.371372**The one-take rows have a floor of their own, and it is about movement, not373shot count.** A single 20–30 second take needs the camera to *travel* — cases3742, 6 and 8 cross a stage, three club rooms and four locations respectively.375Measured against that on 2026-09-04: job376`16023efe-48d6-45fe-8fd8-f5c6fbfe6519` (20s, 720p, one continuous shot, zero377detected cuts, characters stable throughout) was rejected as too static,378because its whole movement plan was one very slow push while the actors held379a standing position. So when writing this register:380381- give each 5–8s phase **a view the previous phase could not see** — through a382 doorway, past an occlusion, around a corner, from the other side of a room;383- write the movement as travel (`the camera walks with her out of the kitchen384 and into the corridor`), not as distance-closing (`a very slow push`). A385 push is a beat inside a phase, never the plan for the take;386- if the beat genuinely happens in one place on one face, the register you387 want is the **held take** with performance beats — that is what case 3 is,388 at 15 seconds, and it does not pretend to travel.389390Cut counts here are inside the measured envelope: 10 shots in 30 seconds, and391up to 6 hard cuts in one job, have both been run on Ofox ("Shots, cuts and392jobs" above). The `spectacle` row's 10–13 cuts in 30s is still gallery practice —393price a first attempt as an experiment — and on every register, check where394the cuts actually landed on a 480p draft, **by reading frames rather than a395detector count**, before paying for the final.396397### Duration budget — spend the seconds where the beat is398399Shot density says how many shots and how long each one runs; it says nothing400about which shots the story actually needs seconds for, and a clip can obey401every row of that table while still spending more than a third of its402runtime on the parts nobody came to watch. Measured on job403`4e5c9581-d462-443b-9663-b1aa6d72f527` (30s, 720p, ten shots, 3.0s each,404$7.20, accepted but flagged): a 2.5s stand-off, six shots of close-quarters405combat, one 4.5s decisive-strike shot carrying a speed ramp and a freeze406frame, then 7 seconds — close to a quarter of the clip — spent recovering407breath and settling into a stand-down that mirrors the opening shot. The408repository owner's own words on it: "why is 20 to 30 seconds so plain? Don't409compress the best part just to make room for the ending — the ending took41010 seconds, most of it should be the fight." The uniform 3.0s-per-shot411average that produced this — every shot the same length, none longer or412shorter than any other — is itself part of the problem: it is the same413flattening shape "Shot density" already warns against for a static camera,414just spread across duration instead of across shot count.415416**Budget by function, not by shot count**, and check the numbers add up to417the duration before writing a single shot:418419| Register | 20s | 24s | 30s |420|---|---|---|---|421| **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 |422| **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 |423424The two rows are not the same rule with different numbers — they encode425where the payoff sits. An action beat's payoff is the fight itself, so the426close is a stand-down after it rather than the destination, and stays the427smaller number. A dialogue beat's payoff is often the final line or gesture,428so its close is allowed real weight: job429`844c9145-9b10-4335-9fdc-ec4937793a2f` gives its last shot the430sitting-down-and-eating beat the whole scene has been building to, and that431is the close doing its job, not padding. Pick the row that matches the432beat's `Arc`, not the clip's genre label — a dialogue scene that resolves433mid-clip and coasts to a static hold behaves like the action row.434435**Slow motion, speed ramps and freeze frames spend real seconds and have to436come out of this budget, not sit outside it.** The 4.5s decisive-strike shot437above stacked an extreme speed ramp into a flash-freeze into a resume — three438effects on one action — to cover what a single clean strike needed about439half that time for. Cap it: **no more than about 2–3 seconds of440slow-motion/freeze/speed-ramp effect, total, across a 30-second clip**441(scale down for shorter clips — roughly 1.5–2s at 20s, 2–2.5s at 24s), and442default to using the device **once**, on the single best beat, not on every443hit. A second use is defensible only when each instance stays under about4441.5s.445446**A symmetrical bookend — the last shot mirroring the first — is a447deliberate flourish, not the default shape of a close.** It reads well (the448`ARC` line and the shared file's `Endings` section both support it), but it449is not free: in the job above it cost the close roughly half its budget on450two static, held shots that do nothing but face each other. If you use it,451its seconds come **out of** the close row above, not on top of it — a452mirrored bookend in a 30s action clip should still leave the close at 3–4s453total, split between the two bookend shots, not 3–4s each.454455**"The best part gets more shots and more description" is an instruction456about density, not just enthusiasm — apply it unevenly on purpose.** The457counter-example is exactly what produced the flagged clip: ten shots458averaging 3.0s each, uniformly, so the six-shot melee in the middle got the459same per-shot allowance as the stand-off that opened it and the stand-down460that closed it. The fix is not more shots overall — it is fewer, longer461shots outside the core and more, shorter, more specifically described shots462inside it: one shot for the setup, one or two for the close, and the core463written at the dense end of "Shot density" (2–2.5s a shot, one distinct464action verb per shot) while the shots around it sit at the loose end465(4–6s). A prompt where every shot is the same length is easy to write and466hard to notice is flat until the clip is already paid for.467468### Dialogue budget — two tiers469470| Tier | Budget | What the gallery measured |471|---|---|---|472| **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 |473| **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 |474475A script that overruns its tier is the brief's `Lines` question: extend the476duration (within 30s) or trim and show the trimmed lines in the recap.477Compressing the delivery is what produces rushed, garbled speech.478479### Two worked examples, two registers480481Both are legitimate short drama and the brief's `Camera` answer picks between482them. The first is the restrained end: one held take, one face, six spoken483words in fifteen seconds. The second is the dense end: nine shots in484twenty-four seconds, a space the camera travels through, and something other485than a hard cut at three of its eight boundaries. Writing the first when the beat486wanted the second is this skill's most likely failure, because it fails487quietly — every rule obeyed, nothing to look at.488489### Worked example 1 — adapted from case 3 (translated): 15 seconds, one continuous shot490491The original attached a photo of the actress; on Ofox that is refused (real492person), so this version carries her in text. Six spoken words in fifteen493seconds — this is what the drama tier looks like in practice.494495```496STYLE: 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.497HER: 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".498HIM: 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.499SCENE: an apartment doorway at dusk; she is inside, he has just opened the door; quiet street tone outside.500ARC: braced → hears the familiar greeting → a flicker of the old warmth → wry smile as cover → "We're done." → one step back.501502One continuous shot, 15 seconds, no cuts, no shot/reverse-shot.5030.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.5040.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.5053.2–6.0s: A half-breath. The corner of her mouth moves — the start of a smile that does not arrive. Nothing else moves.5066.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.5079.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.50813.0–15.0s: She turns her head a few degrees away. Hold. Room tone only; no music.509510CAMERA: 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.511SOUND: door hinge, knit fabric, distant street; no score. Dialogue in English.512CONSISTENCY: her face, hair knot, hoops, chain, grey turtleneck and apparent age identical throughout; his position and the light direction do not change.513AVOID: 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.514```515516### Worked example 2 — adapted from case 1 (translated): 24 seconds, nine shots, four kinds of transition517518Case519520…(truncated)