Story Director
The prompt-writer's prompt writer — one sentence becomes a story plan
- system_prompt
- user_prompt
Story Director doesn't generate anything, and that's the point. It writes the prompts for the prompt writer: you type a short idea in any language, and it produces a clean system_prompt + user_prompt pair that an LLM - typically Ollama - turns into valid story JSON for Story Frame Generator to render. No prompt engineering, no hand-writing the frame schema, no fiddling with JSON escapes. You say "a knight enters a glowing crystal cave at sunset, then draws his sword as shadow creatures approach," and the LLM does the rest.
It sits inside a real pattern, not a gimmick. LLM-assisted prompting is routine in ComfyUI in 2026 - you give a rough idea, a local model rewrites it into structured, model-appropriate output, and that output feeds the encoder. The subtlety here is that Story Director is the structuring layer: it converts your idea into the exact prompt that makes an LLM emit clean, schema-conforming JSON instead of chatty prose with a preamble.
What you set
user_input- your idea, one short sentence, any language (the output prompts are always English).frame_count-auto(the LLM decides how many frames) or a fixed number from 3 to 12. Pick a number and N per-scene boxes appear below the node, each with a t2i/i2i type select;Autokeeps the standard layout (frame 1 = text_to_image, the rest = image_to_image).scene_mode-auto,static_camera,tracking_camera,orbiting_camera,cutscene, orstoryboard. It steers how the shots are staged.style- empty (the LLM chooses) or something likeanime,noir,comic book.has_references- flip on when you've connected a reference image to your Ollama node, so the LLM refers to subjects as "the cat in Picture 1" instead of re-describing them.guide_t2i/guide_i2i- optional, from the pack's Prompt Guide node, to ground prompt wording in model-specific docs.
Wiring it up
Outputs are system_prompt and user_prompt. The canonical chain:
Story Director → Ollama (system / prompt) → Story Frame Generator
That is: system_prompt into your Ollama node's system field, user_prompt into its prompt field, set the LLM's output format to JSON, and feed the result into Story Frame Generator's prompts_json. For an identity-locked story, add the reference-sheet loop first - Asset Sheet Director → Ollama → Sheet Compositor builds a contact sheet, then Story Director (with has_references on) plans the story and Story Frame Generator gets the contact sheet as reference_images.
Install and caveats
Story Director is part of ComfyUI-ZFRNodes. Install via ComfyUI Manager (search "ComfyUI-ZFRNodes") or:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/zfrsgtcu/ComfyUI-ZFRNodes.git
It needs no models itself and never calls a model - but it's only useful with an LLM in the loop. You'll want the ComfyUI Ollama node (github.com/stavsap/comfyui-ollama) and Ollama running, with a vision-capable model like qwen3.5:9b if you want the LLM to actually read the reference contact sheet. The author's testing pairing is Flux2's flux-2-klein on the generation side.
The one thing to know: the per-scene boxes and type selects are UI additions from the pack's frontend script, so a full ComfyUI restart is required after installing (browser refresh isn't enough). And remember the LLM is a separate component - if you get malformed JSON back, that's your model's fault, not this node's, and it's worth tuning what model you're running rather than blaming the wiring.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| user_input | STRING | — | |
| frame_count | COMBO | auto | 11 options: auto, 3, 4, 5, 6, 7, +5 |
| scene_mode | COMBO | auto | 6 options: auto, static_camera, tracking_camera, orbiting_camera, cutscene, storyboard |
| style | STRING | — | |
| has_references | BOOLEAN | false | — |
| scenes | STRING | [] | — |
| guide_t2iopt | STRING | — | |
| guide_i2iopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| system_prompt | STRING | — |
| user_prompt | STRING | — |