Nodes/Storyboard Suite/Storyboard · Frame Grid (Batch)
ComfyUI Node

Storyboard · Frame Grid (Batch)

Render the whole storyboard in one Queue run

By Smyshnikof·Created 2 months ago·Updated 2 months ago· 6
Storyboard · Frame Grid (Batch)
    • prompt
    • name
    • aspect_ratio
    • width
    • height
    • frame_count
    frames_data[ { "id": "frame-1", "name": "opening", "prompt": "wide establishing shot, city skyline at dawn", "aspect": "16:9" }, { "id": "frame-2", "name": "hero", "prompt": "medium shot, protagonist walking through crowd", "aspect": "16:9" }, { "id": "frame-3", "name": "detail", "prompt": "close-up on hands holding a letter", "aspect": "9:16" } ]
    base_resolution1024
    default_aspect16:9

    FrameGrid is for planning one shot at a time. FrameGridBatch is the version that says "screw it, render them all." It takes the same shot list - name, prompt, aspect per frame - and instead of picking a single frame, it outputs every frame's data as parallel lists. One Queue press, every frame in the storyboard runs.

    It's the batch sibling inside Storyboard Suite (Smyshnikof/comfyui-storyboard-suite), @itsmyshnikov's dependency-free pre-production pack. Same drag-sortable card grid editor, same 13 aspect presets, same zero dependencies. The difference is entirely in the outputs and the engine mechanics behind them.

    How it works

    Under the hood it's the OUTPUT_IS_LIST mechanic - the node declares its prompt, name, aspect_ratio, width, and height outputs as lists, and ComfyUI fans those lists out to any downstream node that accepts list inputs. Each frame gets its width/height computed the same way FrameGrid does: long edge = base_resolution, short edge proportional, both rounded down to a multiple of 8. You get one list per output, in the same order as your shots, and the engine iterates the whole chain once per frame.

    There's no select here and no columns - the batch node has no "active frame" concept and no card-grid layout. It's all-or-nothing, which is exactly the point. frame_count is the one scalar output, a plain INT so you know how many shots you're running.

    The inputs that matter

    • frames_data - the shot list, same JSON shape as FrameGrid.
    • base_resolution - the long edge in pixels (default 1024, range 512–2048).
    • default_aspect - fallback aspect for frames that don't set their own.

    The outputs that matter

    • prompt, name, aspect_ratio, width, height - all lists, one entry per frame, in shot order.
    • frame_count - scalar INT.

    The pack's own contact-sheet example shows the intended shape: FrameGridBatch → sampler → StoryboardSheet → Save. Every frame renders, lands on a single labeled contact sheet, and you review the whole shoot in one image instead of ten SaveImage nodes.

    Install

    Identical to the rest of the pack - no dependencies, no models:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Smyshnikof/comfyui-storyboard-suite
    

    or ComfyUI Manager, search "comfyui-storyboard-suite", restart, right-click → Add Node → Storyboard → Frame Grid (Batch).

    Gotchas

    • List outputs only work when the downstream nodes accept lists. A plain CLIP Text Encode isn't list-aware, so you can't just slam this into a normal chain - you need nodes that declare list inputs (the sampler/VAEDecode route in the example workflow qualifies).
    • No per-frame preview: since there's no select, you can't quietly eyeball one shot before committing the whole batch. Use FrameGrid for that, FrameGridBatch for the full run.
    • An empty frames_data returns empty lists and frame_count 0 - nothing crashes, but nothing renders either. Check the board before you Queue.
    • Brand-new, small pack: if the card-grid UI doesn't show after install, hard-refresh the browser; the raw JSON widget underneath still works.
    CategoryStoryboard

    Inputs (3)

    NameTypeDefaultDescription
    frames_dataSTRING[ { "id": "frame-1", "name": "opening", "prompt": "wide establishing shot, city skyline at dawn", "aspect": "16:9" }, { "id": "frame-2", "name": "hero", "prompt": "medium shot, protagonist walking through crowd", "aspect": "16:9" }, { "id": "frame-3", "name": "detail", "prompt": "close-up on hands holding a letter", "aspect": "9:16" } ]
    base_resolutionINT1024512–2048
    default_aspectCOMBO16:913 options: 21:9, 16:9, 16:10, 3:2, 4:3, 5:4, +7

    Outputs (6)

    NameTypeDescription
    promptSTRING
    nameSTRING
    aspect_ratioSTRING
    widthINT
    heightINT
    frame_countINT