---
name: storyboard-to-film
description: Make a short film from a story. Writes a shot list, generates consistent key frames and one video clip per shot with Kenerate, scores it with generated music, then cuts the finished film locally with a title card, end card, transitions, a colour grade (warm, cool, teal-orange, film, mono), cinemascope letterbox, per-shot captions and a ducked music bed. Use when the user wants a short film, trailer, story video, animated story, cinematic sequence or multi-shot narrative edited into one video.
compatibility: Needs the Kenerate MCP server (paid plan for video) and Python 3.9+ with Pillow and ffmpeg.
metadata:
  author: kenerate
  version: "1.0"
  kenerate-tools: "generate_image generate_video generate_music generate_speech upscale_video estimate_cost wait_for_generation"
---

# Storyboard to film

The MCP prompt `storyboard_to_video` stops at separate clips; this skill finishes the film. Rules:
[references/KENERATE.md](references/KENERATE.md).

## Ask the user
Story or script, number of shots (4-8), look (e.g. "Pixar-like 3D", "gritty 35mm"), format (16:9 default), seconds per
shot, music mood, and title / end card text.

## 1. Shot list
Write the shots (subject, action, one camera move, setting, optional caption or dialogue line). Show them and get a yes.

## 2. Key frames (Kenerate)
- Shot 1: `generate_image(prompt=<shot 1 + style + character description>, aspect_ratio="16:9", model="kenerate/gpt-image-2.5-sunburst")` (`kenerate/seedream-v5.0-pro` for anime / illustration).
- Shots 2..n: `generate_image(prompt=<shot n>, "same character and style as the reference", reference_image_urls=[frame 1], model="kenerate/nano-banana-2.1", aspect_ratio="16:9")` (keeps the character consistent).

## 3. Clips (Kenerate, priced per second)
`estimate_cost("generate_video", {"prompt": ..., "image_url": frame, "model": "kenerate/seedance-2.0", "duration": 5, "aspect_ratio": "16:9", "resolution": "720p"})`
x shots → show the total → confirm. Use the same model, resolution and ratio for every shot (`pick_model` or
[references/MODELS.md](references/MODELS.md): `kenerate/seedance-2.5` for cinematic / multi-shot, `kenerate/seedance-2.0`
for image-to-video and dialogue, `kenerate/wan-3.0` for drafts). The prompt is motion + camera only. Start all the clips,
then wait for each one.
Sound: ask first - native audio from the video model, a score, a voice-over, or silent. Never add music or a voice on
your own. Score (if yes): `generate_music(prompt="<score mood>, cinematic, instrumental", engine="elevenlabs-music-v2.5", instrumental=true, seconds=<film length>)`
and generate the clips with `audio=false`. Narration (if yes): `generate_speech(engine="elevenlabs-eleven-v3", voice=<from pick_voice>)`.
Optional: `upscale_video(resolution="1080p")` on the keepers (9 credits per second).

## 4. Cut the film (local)
Write `shots.json`:
```
{"title": "The Paper Boat", "subtitle": "a Kenerate short", "end": "Made with Kenerate", "music": "<music url>",
 "shots": [{"src": "<clip 1 url>", "in": 0, "out": 4.5, "caption": "Rain on Elm Street"}, {"src": "<clip 2 url>"}]}
```
```
python <skill-dir>/scripts/film.py --shots shots.json --aspect 16:9 --fps 24 \
  --transition fade --xfade 0.6 --grade teal-orange --letterbox 2.39 \
  --out kenerate-out/storyboard-to-film/<project>.mp4
```
- Grades: none, warm, cool, teal-orange, film (contrast + grain), mono. `--letterbox 2.39` adds black bars.
- Images in `shots` become slow push-in shots, which is handy for drafting before paying for video.
- Captions show over each shot (`--caption-style minimal|box|bold|karaoke`); an `.srt` is written as well.

## Progress, output, failures
Relay the 7 steps. A failed clip is refunded: cut the film without it, or with its key frame as a still, and offer a retry.
