Pro
Seedance Camera Director
Scripts into timed shot lists and multi-shot Seedance 2.0/2.5 prompts that cut together
For filmmakers, ad creatives and storytellers making multi-shot videos with ByteDance Seedance 2.0 or 2.5.
Ask a video model for "cinematic camera work" and you usually get stacked moves that wobble, dialogue cut off at the end of a clip, and shots that don't cut together. This skill makes your agent work like a director of photography. It decides what each shot is for, how long it needs and how it connects, and only then writes prompts in the form Seedance follows.
- Shot list: size, angle, a single motivated camera move, lens feel, action, dialogue, sound and the transition out, with a reason for every choice.
- Timing from content: each shot's length comes from its dialogue word count, its action beats and the minimum time its move needs to read, not from fixed lengths.
- Clip packing: shots are grouped into 4–15 s (2.0) or 4–30 s (2.5) generations, breaking at scene changes and action turning points, with a chaining method for each join (last frame, extension, cut on action).
- Continuity bible: characters, axis, screen direction, light and look lines, repeated word for word in every clip.
- Prompts in both dialects: integer-second timelines for 2.5 and shot-numbered prompts for 2.0.
Included: a SKILL.md workflow, a 30+ move camera lexicon (emotional read, phrasing, minimum duration, clashes), timing rules, transition and continuity guides, 11 coverage recipes, 26 failure modes with fixes, 4 complete worked examples and a dependency-free Python shot timer. Model output still varies; the skill improves your odds without guaranteeing a shot.
Highlights
- Shot lists with size, angle, one motivated move and lens feel per shot
- Shot length derived from dialogue word count and action beats
- Packs shots into 15 s (2.0) or 30 s (2.5) clips with continuity
- 30+ camera moves: what each communicates and how to phrase it
- Stdlib Python shot timer, failure-mode triage and 4 full examples
Example
Kitchen at night. Theo returns the ring box Lena left behind. Four short lines. Make it a Seedance 2.5 scene and tell me how to do it on 2.0.
Intent: Lena's scene. Hold on her back; the only push-in is on Theo when it breaks for him; release with a pull-back. | # | In–out | Size | Move | Action / line | |1|0–3|WS|locked-off|Lena rinsing a mug, back to camera| |2|3–9|MS|locked-off|Theo enters: "You left this on the bathroom shelf."| |3|9–14|MCU|static|Lena half-turns: "I didn't leave it. I put it there."| |4|14–17|CU|slow push-in|Theo: "… So that's it?"| |5|17–20|CU|static|Lena: "That's it."| |6|20–21|insert|static|box set on counter| |7|21–24|WS|slow pull-back|neither moves| Timing: derived from words at 2.5 w/s + lead-in/tail; speech fills 33% of 24 s. 2.5: one clip, duration 24, integer ranges. 2.0: two clips (14 s + 10 s), split after shot 3 at the reverse-angle cut; same bible lines in both; hard cut in the edit.
My Seedance prompt says 'the camera pushes in while panning left and orbiting around her as she talks' and the result is a shaky mess.
Three moves are stacked in one shot, and the orbit happens during dialogue. Seedance follows one move per shot, and orbiting a speaking face hurts lip sync and identity.
Rewrite as two shots:
0–4s: [Medium close-up, slow push-in on Mara, from medium to close-up] She speaks, eyes on the window. Mara (low, in English): {I'm not coming back.}
4–8s: [Wide, half orbit clockwise around Mara, ending on her profile] Silent; she turns from the window.
The push supports the line, and the orbit gets its own silent beat with the 4 s it needs to read.python scripts/shot_timer.py chase.json (9 shots, model 2.0, fast delivery)
{
"model": "2.0", "total_s": 25.0, "clip_count": 2,
"clips": [
{"clip": 1, "duration_param": 15, "warnings": ["5 shots in one 2.0 clip; 2-4 is the reliable range"],
"prompt_skeleton": ["Shot 1: [EWS, slow aerial drift forward] Dusk skyline…", "Shot 2: [MWS, fast side tracking] Nia sprints left to right…", …]},
{"clip": 2, "duration_param": 10, "warnings": [], …}
]
}
Action taken: moved the leap to the start of clip 2 as a cut on action, giving 13 s + 12 s with 4 shots each.What's inside
seedance-camera-director/ ├── agents/ │ └── openai.yaml ├── references/ │ ├── camera-move-lexicon.md │ ├── coverage-recipes.md │ ├── failure-modes.md │ ├── shot-timing.md │ ├── transitions-and-continuity.md │ └── worked-examples.md ├── scripts/ │ └── shot_timer.py ├── LICENSE.txt ├── README.md └── SKILL.md
Install by unzipping into your agent's skills folder. Install guide →