---
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": ["<asset id>"],
  "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.
```
