--- name: short-film description: "Direct a narrative scene, short film, or trailer in NodeTool with characters, dialogue, and score. For product ads, use product-commercial." --- **Load `/storyboard-core` first.** It carries the loop, the tool contract and the gating this skill assumes. Everything below is what narrative work adds on top. ## What makes this job type its own An ad needs a board. A narrative piece needs the **screenplay framing** around it: title, logline, style bible, narration and a music prompt. Those live on the board's screenplay, and that has one writer. **`ui_storyboard_set_screenplay` is the only tool that writes them.** `edit_storyboard` `set_board` takes `brief`, `style`, `aspect_ratio`, `entity_ids`, `image_model` and `video_model` — and refuses the rest. So: - Board open in a browser tab → `ui_storyboard_set_screenplay` with the whole screenplay object, framing and shots together, in one call. - Headless → create the board with `create_storyboard`, put the look in `style` and the premise in `brief`, keep the words on each shot's `dialogue` and `narration`, and tell the user that the title, logline and music prompt need the board open. Do not pretend they were set. This matters at assembly: `assemble_storyboard_timeline` turns the screenplay's narration and music into draft audio clips ready to generate. With no screenplay there are no draft clips, and you add the score yourself with `generate_music` plus `edit_timeline` → `add_track` + `add_media_clip`. ## The screenplay object ```json { "type": "screenplay", "title": "Night Drop", "logline": "A courier discovers the package was never meant to arrive.", "brief": "40-second neo-noir teaser", "styleBible": "wet asphalt, sodium and cyan, anamorphic flare, 2.39:1 crop, heavy grain", "aspectRatio": "16:9", "narration": "", "musicPrompt": "sparse low synth pulse, one rising note at 0:32, no drums", "entityIds": [""], "shots": [ { "slug": "1a", "action": "Wide. Mara stands alone under a sodium lamp on wet asphalt, the city behind her out of focus", "camera": { "framing": "wide", "lens": "40mm anamorphic", "angle": "low", "movement": "slow push" }, "motion": "she turns her head once toward the sound off-frame; rain falls steadily", "dialogue": "", "durationSeconds": 7 } ] } ``` `style` is accepted as an alias of `styleBible`. Only `action` is required per shot; ids, indexes and statuses are filled in. ## Shot pattern Six shots for forty seconds is a workable ratio — long enough to hold, few enough to afford. **Open wide, end close.** The wide establishes the world, the close is what the audience leaves with. - Give shots room: 5–8 seconds each. Narrative shots that run 2 seconds read as an ad. - Write blocking as physical events with counts — `she turns her head once`, `he sets the case down and does not let go` — and keep emotion out of `motion`. "Tense" is not a motion; a held stillness is. - Dialogue goes in the shot's `dialogue` field, not in `action`. That keeps the option open to lift the words into a real script with `extract_script_from_storyboard` and voice them per `/script-video`. - The style bible carries the grade. Do not restate it per shot — it is appended to every still prompt already. ## Casting Each character is a character entity: generate a reference, show the user, then `create_entity`. Add every one to the board with `set_board {entity_ids}`. A character seasons only the shots whose text names them, which is what you want in a scene where one person is alone. Recurring locations are worth a **location entity** — those apply to every shot on the board, which is how a single street stays the same street across six cuts. ## Direct mode earns its place here Dialogue that must look synced, and heavy camera movement, both come out stiffer from a still. Set those shots to `render_mode: "direct"` and put the framing and the style into the action text, since no still carries them in. Keep the establishing and static shots on `keyframe` — they are the ones where holding the look matters most. ## Brief Adapt these examples to the user's brief. Example deliverables, style choices, and approval checkpoints apply only when the user adopts them. ``` Direct a 40-second [genre] short: [LOGLINE]. Six shots, open wide, end close, 5-8 seconds each. Write the full framing as well as the shots: title, logline, style bible, aspect ratio, and a music prompt. If the board is open in a tab, set all of it with ui_storyboard_set_screenplay in one call; if not, say so and keep the look in the board style and the words on the shots. Cast every character as an entity from a reference you show me first, plus a location entity for the street. Set the shots that carry spoken lines to render_mode direct. If I gave no logline: a night courier loses the package. Wet asphalt, sodium and cyan, and she whispers "That wasn't a drop." Stop after the board. Stills before clips. ```