utopai-research/story-to-video-workflow
>- Orchestrates story, script, screenplay, concept, product promo, and multi-shot idea work into finished video. Use first when the user asks to make a video from a story or script; asks what next in a story video project; or needs a decision spanning script splitting, image refs, voices or VO, video clips, render strategy, Timeline ordering, or final Timeline handoff. Routes execution to script-compose, image-compose, voice-compose, and video-compose before those skills' CLIs are used.
npx skills add https://github.com/Utopai-Research/pai-pro --skill story-to-video-workflow
generate_* here.Use this ladder unless the user skips, reorders, supplies refs, or asks for a rough direct render:
script-compose production script; existing screenplay -> capture/adapt.script-compose splits <=15s dialogue-aware shots and extracts characters, material variants, detailed locations/location variants, and speaker/VO needs.image-compose creates useful visual anchors: base/variant character sheets and detailed location/detail anchors.voice-compose creates reusable anchors for every speaker and VO/narrator.shot_id when sequence order is unambiguous, then hand off to Timeline.Plan ahead internally, but only ask the next meaningful user-facing choice; the Consent and gates ladder fixes when render path and dispatch become askable.
| Need | Load next |
|---|---|
| Script capture, rewrite, split, or analysis | script-compose |
| Character, location, storyboard, starting frame, or visual anchor | image-compose |
| Narration, dialogue read, character voice, or audio node | voice-compose |
| Clip render, continuation, audio refs, storyboard animation, or video prompt | video-compose |
| Scene/ref grouping or canvas layout frames | groups-compose |
Capability skills own CLI flags, node grammar, refs, and recovery hints. PROJECT_AGENT.md owns shared failure handling.
audio_result.data.text is source of truth only for approved final narration/line reads.video-compose includes spoken text verbatim and treats voice samples as timbre anchors.Follow the project PROJECT_AGENT.md § "Recommendation and choice shape". Recommend one concrete next step. Add a second option only when there is a real tradeoff.
Before recommending refs/video, inspect workflow.json when needed and summarize only:
If the story implies more than roughly 3 minutes, recommend narrowing scope before clip planning.
After shot notes, missing video-bound character/location/voice anchors are the default next step; include a rough-direct skip when speed matters. Once anchors/user refs/rough-direct are settled, offer only a short ref review or clip-plan confirmation if ambiguity remains.
Ask only after the script/shot plan is settled and anchors, usable refs, rough-direct, or a simple single-clip case make rendering real. If anchors are still missing, return to Planning checkpoint.
Use project choice shape:
RenderChoose render path.Straight to video (Recommended)description: Fastest path to motion.
Storyboard firstdescription: Generate storyboard images first for composition control.
For storyboard-first, load image-compose Pattern 6: one composite mosaic per clip/<=15s shot note, subtype storyboard.
Ask only after render path is picked and a multi-clip plan exists. Skip for one clip. Use project choice shape:
DispatchChoose clip dispatch.(Recommended).Hybriddescription: Chain within continuous scenes; render separate scenes independently.
Paralleldescription: Render all clips independently.
Sequentialdescription: Each clip continues from the previous one; boundaries default to a hard cut to a new angle (avoids the same-shot seam) — keep a boundary same-shot only for an unbroken oner.
Signals: continuous scene/state -> sequential (hard-cut handoffs between clips); a single unbroken action the viewer must read as ONE motion -> one ≤15s clip, else sequential with a same-shot handoff; separate scenes/time jumps/wardrobe changes/montage -> parallel; continuous clusters separated by hard cuts -> hybrid. Do not chain video refs across location, time, wardrobe/state, dream/reality, or montage breaks.
After terminal generate_*:
ok:false, follow project failure handling and do not advance the pipeline.ok:true, identify the landed node id from the result or canvas state.workflow.json if shots, refs, voices, clips, or reel order affect the next decision.Typical priority:
Timeline owns reel order. Numeric video_result.data.shot_id means a clip is in the reel. When all planned story clips are ready and order is unambiguous, assign shot_id = 1..N with one updateBatch before handoff:
node "$PAI_REPO_ROOT/server/cli/canvas_mutate.js" \
--op updateBatch \
--payload-json '{"updates":[{"id":"<video_1>","patch":{"shot_id":1}},{"id":"<video_2>","patch":{"shot_id":2}}]}'
Do not use generate_video.js --shot-id for speculative/partial ordering. Assign after clips land. Local export uses reel_stitch.js only on explicit request. Then tell the user to open Timeline to inspect and preview.
Take utopai-research/story-to-video-workflow from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.