KIE • Script to Shot Draft
Turn a script into a shot list without renting an LLM
- shot_sequence_json
- total_duration
- review_notes
Here's the honest pitch: this node does not understand your script. It doesn't summarise, it doesn't infer meaning, and it doesn't invent shots you didn't write. It splits your text into segments, hands each one a duration, and wraps it in a shot object with camera language attached. That's it - and that's the point.
The alternative most people reach for is an LLM node that "plans" the sequence, which costs a generation, hallucinates a character, and rewrites your dialogue. KIE • Script to Shot Draft is local, deterministic, free, and refuses to be clever. Your words come out the other side unedited.
How the split works
Two modes, and they're both literal:
- paragraphs - blank-line separated blocks. One block becomes one shot.
- one line per shot - every non-empty line is a shot. Handy if you already write in beats.
Then it allocates target_duration seconds across those shots. Short segments get less time, longer ones get more, every shot gets at least 1 second, and no shot can exceed 15 seconds (the ceiling Kling's docs put on a single generated shot - the node won't hand you a plan your video model can't execute). You'll get a longer total than you asked for in exactly one case: too many segments to fit. It raises rather than quietly truncating, which is the behaviour you want.
One hard limit: if your text produces more segments than max_shots, it errors and tells you how many it found. Split the scene or merge paragraphs deliberately - the node doesn't pick which shot to silently drop.
The inputs that matter
- script_or_brief - your text. Up to 30,000 characters; past that, split by scene.
- split_mode -
paragraphsorone line per shot. - target_duration - 1 to 90 seconds. This is your sequence budget, not per-shot.
- max_shots - 1 to 6. Six is the pack's storyboard ceiling.
- visual_rhythm (optional) - the interesting one.
neutral(default) gives every shot identical, deliberately bland camera fields. The other five options - cinematic reveal, documentary observer, product detail, action build, interview coverage - spread an escalating beginning/development/detail pattern across your shot count: wide establishing shot, then medium, then close-up, with matching lens and movement language.
Read the tooltip before you get excited: "Editorial camera suggestion. Existing prompts stay unchanged; model support is checked separately." That's the author being straight with you. The camera fields are prompt guidance. Unless your chosen video model documents a camera-control parameter, it receives them as text, and it's free to ignore them.
Outputs
shot_sequence_json is the JSON array - each shot carries prompt, duration, a camera object (shot size, angle, movement, lens, speed, stabilization), editorial_intent, and direction_mode: "prompt_guidance". total_duration is the summed seconds as an integer, and review_notes is the human-readable summary.
Wire shot_sequence_json into KIE • Shot Plan Review first. That node validates it and lets you hand-edit before anything is spent. From there it feeds KIE • Storyboard Contact Sheet for a visual review, or a Kling Omni manual multi-shot node. For Kling Omni, keep the total between 3 and 15 seconds - the pack's preflight checks that before upload.
Installation
Same pack, same three lines:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart ComfyUI. This node is pure Python with zero extra dependencies - no OpenCV, no model files, no API key, no credits. It sits under KIE Next / Studio / Direction.
Gotchas
"Target duration for 3 shots must be 3–45 seconds." Your budget doesn't divide. Either raise target_duration or cut a segment.
JSON won't validate downstream. You've edited edited_json in Shot Plan Review and dropped a comma. Each shot needs a non-empty prompt and an integer duration from 1 to 15. camera must be an object if present.
Your shots look suspiciously generic. That's visual_rhythm: neutral, which is the default on purpose - it preserves the old behaviour for existing workflows. Pick a rhythm if you want suggestions.
Repeat runs of a scene. The pack's other nodes store their output; this one doesn't. If you want to iterate on the same script, save the JSON yourself (a text node works) rather than re-running and re-editing.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| script_or_brief | STRING | — | |
| split_mode | COMBO | paragraphs | 2 options: paragraphs, one line per shot |
| target_duration | INT | 121–90 | — |
| max_shots | INT | 61–6 | — |
| visual_rhythmopt | COMBO | neutral | Editorial camera suggestion. Existing prompts stay unchanged; model support is checked separately. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| shot_sequence_json | STRING | — |
| total_duration | INT | — |
| review_notes | STRING | — |