Nodes/ComfyUI-ZFRNodes/Story Director
ComfyUI Node

Story Director

The prompt-writer's prompt writer — one sentence becomes a story plan

By zfrsgtcu·Created 3 months ago·Updated 2 months ago· 31
Story Director
    • system_prompt
    • user_prompt
    user_input
    frame_countauto
    scene_modeauto
    style
    has_referencesfalse
    scenes[]
    guide_t2i
    guide_i2i

    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; Auto keeps the standard layout (frame 1 = text_to_image, the rest = image_to_image).
    • scene_mode - auto, static_camera, tracking_camera, orbiting_camera, cutscene, or storyboard. It steers how the shots are staged.
    • style - empty (the LLM chooses) or something like anime, 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.

    Categoryzfr-nodes

    Inputs (8)

    NameTypeDefaultDescription
    user_inputSTRING
    frame_countCOMBOauto11 options: auto, 3, 4, 5, 6, 7, +5
    scene_modeCOMBOauto6 options: auto, static_camera, tracking_camera, orbiting_camera, cutscene, storyboard
    styleSTRING
    has_referencesBOOLEANfalse
    scenesSTRING[]
    guide_t2ioptSTRING
    guide_i2ioptSTRING

    Outputs (2)

    NameTypeDescription
    system_promptSTRING
    user_promptSTRING