Nodes/Storyboard Suite/Storyboard · Sheet
ComfyUI Node

Storyboard · Sheet

Turn your generated shots into one labeled contact sheet

By Smyshnikof·Created 2 months ago·Updated 2 months ago· 6
Storyboard · Sheet
  • images
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • image_9
  • sheet
columns3
cell_gap8
bg_color#0e0e12
show_labelstrue
label_font_size18
label_bar_height0
label_color#e8e8f0
label_bg_color#1a1a22
labels

You've rendered a storyboard's worth of frames and now you need to actually look at them as a sequence - a contact sheet, labeled, one glance. That's StoryboardSheet. It takes images that already exist in your pipeline - a batch out of the sampler, or a handful of Load Image nodes - and stitches them into a single labeled grid you can save or preview.

It's the "review the shoot" half of Storyboard Suite (Smyshnikof/comfyui-storyboard-suite), @itsmyshnikov's dependency-free planning pack. Everything here runs on plain Python + PIL, no GPU, no model. The sheet builder is genuinely the workhorse of the whole pack - it's the same code the Cells node reuses.

How it works

Feed it images one of two ways: the images input takes a whole IMAGE batch (the natural output of a sampler → VAEDecode chain), or you use the nine optional slots image_1image_9 - connect up to nine Load Image nodes directly, no Batch Images node required. Labels come from the multiline labels input, one line per frame.

For each image the node letterboxes it (fit, not crop - no part of the frame is lost) into a uniform cell, draws a label bar underneath, and tiles the cells into a grid on the background color. It returns a single IMAGE and, because it's an output node, saves a PNG preview to ComfyUI/output/storyboard_suite/ and shows it in the node itself.

The inputs that matter

  • images / image_1 … image_9 - where the pixels come from. Both can be connected at once (batch first, then slots).
  • labels - multiline, one label per image, in order.
  • columns - grid width, 1–8 (default 3).
  • cell_gap - spacing between cells in pixels (default 8).
  • show_labels - master switch for the label bars (on by default).
  • label_font_size, label_bar_height, label_color, label_bg_color - label styling. Set label_bar_height to 0 (the default) and it auto-sizes to the font plus padding. Color fields take hex like #e8e8f0.
  • bg_color - the sheet background (default #0e0e12, a dark review-board look).

A nice touch worth calling out: the pack ships DejaVuSans.ttf, so Cyrillic labels render correctly out of the box instead of turning into boxes.

The output that matters

sheet - a single IMAGE. Wire it to SaveImage or PreviewImage and you're done. It's the natural end of the batch example workflow: FrameGridBatch → sampler → StoryboardSheet → Save.

Install

The whole pack is one dependency-free clone:

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 → Sheet.

Gotchas

  • Labels apply per image in order: extras are dropped, missing ones become blank bars. Keep labels line count in sync with your frame count.
  • image_1…9 slots are optional - an unwired slot is simply skipped, so you can build a 4-shot sheet without creating empty cells.
  • Don't reach for this node when your source images are files rather than pipeline output - that's what StoryboardCells is for (loads files straight into the node). The README is explicit: Sheet is for images from the pipeline, Cells is for files.
  • It's a young, small pack. If the in-node preview doesn't appear, check output/storyboard_suite/ for the saved PNG - the data path works even when the frontend preview hiccups.
CategoryStoryboard

Inputs (19)

NameTypeDefaultDescription
columnsINT31–8
cell_gapINT80–64
bg_colorSTRING#0e0e12
show_labelsBOOLEANtrue
label_font_sizeINT1810–48
label_bar_heightINT00–96
label_colorSTRING#e8e8f0
label_bg_colorSTRING#1a1a22
imagesoptIMAGE
labelsoptSTRING
image_1optIMAGE
image_2optIMAGE
image_3optIMAGE
image_4optIMAGE
image_5optIMAGE
image_6optIMAGE
image_7optIMAGE
image_8optIMAGE
image_9optIMAGE

Outputs (1)

NameTypeDescription
sheetIMAGE