ai2764/camera-lab/director-storyboard
Claude Code and agent skill by ai2764/camera-lab
- community
Checking that the SKILL.md file is still in the repository.
Turn a plot/script plus a set of keyframe images into an LTX Director v2 storyboard (global prompt + timed local prompts + image guides), then run Camera Lab's Director workflow. Use when the user wants storyboard analysis, script-to-timeline prompting, keyframe bridging, auto-run Director, or runs /director-storyboard.
Install
npx vskill@latest install ai2764/camera-lab/director-storyboardSKILL.md
/director-storyboard — Script + Images → Director Run
You convert a 剧情脚本 / plot and a 图片集合 (keyframes) into a Director-ready storyboard, then optionally auto-submit it to Camera Lab.
When to use
- User provides a script/story + stills and wants Director prompts
- User wants two (or more) keyframes bridged with continuous motion
- User asks to auto-run LTX Director 2 from images + prompts
- Slash:
/director-storyboard
Pipeline
Step 1 — Gather inputs
Collect:
- Script / plot (scene beats, dialogue, camera intent)
- Image set (ordered keyframes, or unsorted — then you must sort them)
- Optional: target duration, resolution, seed, negative prompt
- Whether to only write the JSON or also run the workflow
If images are unordered, infer order from the script and from visual continuity (same character, lighting, location progression). State the ordering explicitly.
Step 2 — Analyze as a continuous Director shot
Director v2 is not “stitch many I2V clips”. It is:
| Layer | Role | |
|---|---|---|
| Global prompt | Persistent identity, wardrobe, location, lighting, style | |
| Local segment prompt | What happens in this time window only | |
| Keyframe image | Visual guide at that time (model is pulled toward the frame) |
Rules:
- Prefer one continuous cinematic shot per storyboard unless the user wants hard cuts.
- Keep identity + wardrobe + location + lighting stable across keyframes.
- Keyframes are targets the generation should reach, not only start frames.
- Between two keyframes, the local prompt must describe the bridge motion
(how pose/camera gets from A to B), not just re-describe stills.
- Give enough duration for the action (do not pack complex motion into 2s).
Read references/prompting.md for LTX + Prompt Relay guidance.
Step 3 — Map script beats → timeline segments
For N keyframe images:
- Align each image to a script beat (or mark as bridge-only text segment).
- Set
start/durationin seconds so segments cover the full shot without large empty gaps
(gaps get absorbed into neighboring local-prompt lengths).
- Default strengths: 0.78–0.85 for important keyframes. Do not drop below ~0.75
to fix a static / slideshow feel — that trades away keyframe fidelity. Fix static shots in the prompts instead (see Anti-slideshow rules below).
- First image usually at
start: 0. Last image near the end of the timeline
(or own segment near the end) so the shot lands on that composition.
Suggested timing defaults when user does not specify:
| Transition | Duration between keyframes | |
|---|---|---|
| Micro expression / head turn | 1.5–2.5s | |
| Walk a few steps / simple gesture | 2.5–4s | |
| Full pose + camera track | 4–8s |
Step 4 — Write prompts
Global prompt (English, one paragraph)
Structure (LTX official style):
- Continuous shot + subject identity
- Wardrobe / appearance
- Location + time of day / weather
- Lighting + color palette
- Continuity constraints (same person, coherent motion)
Do not put beat-by-beat action only in global. Global is the anchor.
Local prompts (per segment)
- Present-tense verbs (turns, walks, raises, camera tracks…)
- Explicit camera (static / slow push-in / tracks right / handheld)
- Only the events that happen in this segment
- Adjacent segments must relay — same world, progressive action
- Dialogue in quotation marks if needed
- Keep each segment focused (one dominant beat)
Anti-slideshow rules
Multi-cut storyboards (several close-ups, reused reaction images) read as a slideshow unless every beat visibly moves:
- Every segment prompt must contain ongoing motion: light flicker/shift, wind in hair,
breathing, drifting dust/smoke, churning clouds, falling debris.
- The camera is never locked — give each beat a drift, push-in, or tremble.
- When reusing a keyframe for a reaction insert, advance its state (light change, tighter
framing, deeper emotion) instead of re-describing the still.
- Add static terms to the negative prompt: `slideshow, still photograph, freeze frame,
static image, motionless scene`.
- Keep strength high (0.78–0.85) and let the prompt carry the motion.
Negative prompt
Default if user does not specify:
Step 5 — Emit storyboard JSON
Write a file (prefer under tasks/ — gitignored) matching references/storyboard.schema.json.
Minimal shape:
Notes:
imagemay be absolute or repo-relative. The runner stages copies under
tasks/camera_lab_uploads/ so the server accepts them.
- Text-only bridge segments are allowed: omit
image, keepprompt+ timing. - Field aliases accepted by the runner:
image_path,local_prompt,length_seconds. - Video segments:
"video": "path.mp4"(aliasvideo_path) uses an existing take as
a timeline guide — the standard way to extend a good take: video segment at strength ~1.0 covering its original duration, then new tail segments after it.
- A text-only tail after a strength-1.0 video guide is often ignored (the new event
never happens). Anchor the new event with an image guide — extract a frame from a previous good run (ffmpeg -ss <t> -i take.mp4 -frames:v 1 guide.png) and use it with strength ~0.75–0.8.
- Audio segments: top-level `"audio_segments": [{"audio", "start", "duration",
"volume", "trimStart"}], usually with "inpaint_audio": true`.
- The negative prompt must not forbid any event a segment requires (e.g. remove
ship explodes from the negative before adding an explosion beat).
Also show the user a short markdown table:
| # | start–end | image | local prompt (1 line) |
|---|
Step 6 — Run the workflow (when requested)
Prerequisites:
- Camera Lab server running (
python scripts/start_camera_lab.py) - ComfyUI up and Director workflow available
- Storyboard JSON written to disk
Commands:
Notes:
- On Windows, if
pythonresolves to the Microsoft Store stub ("Python was not found"),
use py -3 instead.
- Variant takes for editing: rerun the same storyboard with
--seed <n>overrides
(one take per seed) and log every take (segment, seed, batch_id, dialogue) in tasks/storyboards/takes_manifest.md so the editor can pick shots.
Alternate input without a pre-made JSON:
After submit, report:
batch_id- run status URL path
/api/batches/<batch_id> - output video path when status is
done/completed
If the server is down, still deliver the storyboard JSON and tell the user how to start Camera Lab.
Quality checklist before run
- [ ] Same character / wardrobe / location across keyframes (or deliberate cut explained)
- [ ] Global anchors identity; locals carry motion only
- [ ] Bridge between every pair of keyframes is described
- [ ] Durations match action complexity
- [ ] Strengths not all 1.0 unless user wants hard stickiness
- [ ] Paths resolve; images exist — re-verify right before every submit, including
re-runs of old storyboards (users rename/replace keyframe files between runs)
- [ ] Negative prompt does not forbid any event required by a segment
- [ ] Total duration is intentional (sum of segments / last end time)
Retakes (fixing part of a take)
py -3 tasks/storyboards/_submit_retake.py <config.json> replaces a time window of an existing video (config: base_video, duration, retake_start, retake_length, retake_prompt, global_prompt, negative_prompt, seed, retake_strength).
Hard-won limits:
- The window must start before the artifact first appears. Retake conditions on the
base video — an artifact already in frame at window start persists regardless of seed.
- Strong model priors (e.g. an open wound drifting red) usually survive retakes even with
clean conditioning and heavy negatives. Instead: re-run the batch with the shot ending earlier (stop at the peak, before the drift), or anchor the fix with a corrected guide image extracted from a good take.
- Retake cannot extend duration. To extend a take, use a video segment + tail segments
(see Step 5 notes).
Do not
- Invent ComfyUI model paths or claim generation succeeded without API confirmation
- Put large multi-event monologues into a 2s segment
- Change identity mid-timeline without user intent
- Commit generated videos, uploads, or
tasks/outputs - Skip writing the JSON to disk when the user asked to run (runner needs a file or CLI args)
References
references/prompting.md— LTX Director prompting + keyframe bridgingreferences/storyboard.schema.json— machine schemareferences/example_storyboard.json— sample payload- Repo workflow:
workflows/app/ltx_director_2.json - Server entry:
POST /api/runwithworkflow_id: "ltx_director_2"
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.grok/skills/director-storyboard/SKILL.md
Popularity
- Repository stars
- 57
- Repository forks
- 22
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/ai2764/camera-lab/director-storyboard)