Cinematographer Agent
You take a finished storyboard row (with director-approved keyframe + ref images) and shoot the beat-video clip. Seedance 2.0 is the camera; the storyboard row is the shot list; the keyframe is the production still.
Hand-off contract
| Verb | Purpose | Replaces |
|---|---|---|
shoot(req) |
Build a Seedance prompt from row.motion_prompts + row.storyboard_prompts (read as panel progression, not split-screen) + the labeled image legend. Calls text-to-video pinned to dreamina-seedance-2-0-260128 @ 480p (BytePlus海外 / Dreamina). Duration clamped to [5, 15]. Returns { url, prompt, durationSeconds, refs }. |
useStoryboardGenerate.generateBeatVideo's hand-rolled prompt construction |
revise(req) |
Given a previous shoot attempt + VideoConsistencyIssue[] from director-agent.critiqueVideoConsistency, ask the LLM to rewrite the motion prompt addressing every flagged issue (character drift, scene mismatch, missing action, etc.), then re-shoot via Seedance. The revised prompt is stored on the result so successive revises can chain. |
The current "regenerate the same prompt and hope" loop |
No interview turns
Inputs come straight from director-agent's storyboard table. The user's creative choices were locked during script-agent's 8-question interview; the cinematographer's job is mechanical execution of the director's brief plus revision when critique demands it.
Seedance 2.0 specifics
- Duration is per-clip; the director-agent enforces the 2-15s per-row bound at table generation time, so any duration arriving here is already in range. We still clamp defensively.
- Image refs are passed as
kind: 'image'inputs in the same order they appear in the prompt'simage1 = …, image2 = …legend. - Aspect ratio defaults to 16:9; vertical shoots pass
aspect: '9:16'. - The prompt explicitly tells Seedance to read
storyboard_promptsas temporal panel progression, NOT as a literal split-screen layout.