Storyboard Compositor
The Node That Actually Finishes the Job
- image_1
- image_2
- image_3
- storyboard
After all the parsing, encoding, and sampling, somebody has to turn three separate images into one readable storyboard - and that's the Storyboard Compositor's whole job. It's the unglamorous glue at the end of the FairyTaler pipeline, and it's arguably the most dependable node in the pack. Give it three IMAGE tensors, pick a layout, and it hands back a single stitched-together image with optional "Scene 1 / Scene 2 / Scene 3" labels. Simple, does what it says, no surprises.
How it works
Under the hood it's PIL doing the lifting. Each incoming tensor is converted back to a PIL image (batch dim stripped, floats scaled to bytes), the canvas size is computed from your layout and spacing, and the three images get pasted in. If add_labels is enabled it draws the scene number in the corner of each panel with the default bitmap font. The output is a fresh IMAGE tensor, so it plugs straight into a Save Image or Preview node like any other image.
The inputs that matter
image_1,image_2,image_3(IMAGE) - your three panels, in order. All required, all assumed to be the same size.layout-vertical(stacked top to bottom),horizontal(side by side), orgrid(2×2 with three cells, bottom-left empty). Grid is the one that reads most like an actual storyboard.spacing- pixels between images, 0–100, default 10.background_color- a plain string passed straight to PIL, so any color name works:white,black,grey,lightblue. Hex strings work too.add_labels-enable/disable. The labels are small and plain, but they make panels readable at a glance.
Output: storyboard (IMAGE).
Installing
It comes with the ComfyUI-FairyTaler pack:
cd ComfyUI/custom_nodes
git clone https://github.com/IIEleven11/ComfyUI-FairyTaler.git
Restart ComfyUI, look under FairyTaler/Storyboard. No requirements.txt, no model downloads - this node only needs the Pillow that ComfyUI already depends on.
Where people get burned
The classic snag is feeding it mismatched image sizes. The layout math is built around the first image's dimensions, so if one panel is 512×512 and another is 1024×768, you'll get ragged edges and overlap that look like a compositor bug but are really a sizing problem - normalize your images before this node. The label font is the tiny built-in bitmap one; it's legible at full size but doesn't scale if you zoom the storyboard. And note the grid layout reserves a 2×2 box for three panels, so don't be surprised by the empty bottom-left corner. None of these are dealbreakers. This is the node you keep when you throw out the rest of the pack.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image_1 | IMAGE | — | |
| image_2 | IMAGE | — | |
| image_3 | IMAGE | — | |
| layout | COMBO | 3 options: vertical, horizontal, grid | |
| spacing | INT | 100–100 | — |
| background_color | STRING | white | — |
| add_labels | COMBO | 2 options: enable, disable | |
| debug | COMBO | 2 options: enable, disable |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| storyboard | IMAGE | — |