ComfyUI Node

toobusy Whiteboard

A mood board that actually outputs keyframes

By nicekriss·Created about a year ago·Updated 3 days ago· 16
toobusy Whiteboard
    • image
    • board_data
    • keyframes
    • keyframe_count
    • artboards
    • artboard_count
    board_data{"version": 1, "items": [{"type": "text", "x": 64, "y": 48, "w": 420, "h": 80, "text": "Storyboard / mood board", "fontSize": 36, "color": "#111111"}]}
    width1280
    height720
    background#f8f9fa
    keyframe_fitcrop

    Planning a video or a multi-shot sequence in ComfyUI usually means juggling a second app: arrange your images somewhere, export a reference sheet, import it back, and pray the graph and the board don't drift apart. toobusy Storyboard Board (display name "toobusy Whiteboard") drags that board into the graph - and unlike a glorified notepad, it turns the layout into actual IMAGE tensors you can wire into generation.

    The pitch is in the README's before/after table: it replaces "external board app + capture + import" with "right in the node." You place image cards and text on a board, mark keyframes with a hotkey, and the node hands you the marked frames as real image output. That's the part that separates it from a screenshot tool - the board is a keyframe hub, not a memo.

    How it works

    Everything lives in board_data, a JSON document of positioned items (image cards, text blocks) that the node's backend composites over a background color with Pillow. Because the layout is data, the same board renders identically every time you reopen the workflow. The interesting output plumbing is that the node distinguishes between "the whole board as a picture" (image) and "just the keyframe-marked cards" (keyframes), plus per-artboard outputs.

    Inputs and outputs that matter

    • board_data - the serialized board state. The custom UI owns it.
    • width / height - the board canvas, defaults 1280×720, 256–4096 in steps of 8. This is also the size each keyframe is normalized to.
    • background - the canvas fill, default a light gray #f8f9fa.
    • keyframe_fit - how each keyframe image is fitted to the canvas: crop (fill and center-crop, the default), pad (letterbox on the background color), or stretch (ignore aspect ratio). For keyframes, crop is usually what you want; for reference sheets you might prefer pad so nothing gets cut.

    Six outputs: image (the full board render), board_data (state back out, for chaining), keyframes (the marked frames as an IMAGE batch), keyframe_count, artboards (a list of IMAGEs), and artboard_count.

    Installing it

    Part of nicekriss/toobusy:

    cd ComfyUI/custom_nodes
    git clone https://github.com/nicekriss/toobusy.git toobusy
    

    or search "toobusy" in ComfyUI Manager. Restart ComfyUI, hard-refresh the browser - this is a custom-UI node, so the frontend JS has to reload for the board to render. Dependencies are Pillow, numpy and torch; no optional requirement files involved.

    Where people get burned

    The standing pack caveat applies double here: the board embeds every image into board_data, so a rich storyboard produces a workflow JSON measured in megabytes. Fine on your own machine, obnoxious to share. And don't expect this to be a substitute for a real storyboard app for heavy pre-production - it's a fast in-graph planning surface with clean output plumbing, not an editing suite. If you want images out of the board and into your video generation chain without leaving ComfyUI, that's exactly the gap it fills.

    Categorytoobusy/Plan

    Inputs (5)

    NameTypeDefaultDescription
    board_dataSTRING{"version": 1, "items": [{"type": "text", "x": 64, "y": 48, "w": 420, "h": 80, "text": "Storyboard / mood board", "fontSize": 36, "color": "#111111"}]}
    widthINT1280256–4096
    heightINT720256–4096
    backgroundSTRING#f8f9fa
    keyframe_fitCOMBOcropHow keyframe images are fitted to width x height: crop = fill and center-crop, pad = letterbox on the background color, stretch = ignore aspect.

    Outputs (6)

    NameTypeDescription
    imageIMAGE
    board_dataSTRING
    keyframesIMAGE
    keyframe_countINT
    artboardsIMAGE
    artboard_countINT