ComfyUI Node

Comic Page

Comic Page

By lisaks·Created about a year ago·Updated about a year ago· 8
Comic Page
  • row1
  • row2
  • row3
  • row4
  • row5
  • page_image
spacing15
alignment
page_color
page_width1000
page_margin30
title

Comic Page (class PageNode) is the payoff node of Pixstri ComfyUI Comics (lisaks/comfyui-panelforge). Everything upstream exists to feed this thing: it stacks up to five Comic Row strips vertically onto a paper-colored canvas, adds a title, margins, and per-row horizontal alignment, and hands you a finished page. It's the only node in the pack whose output is a document rather than a building block - the endpoint of a workflow that starts with your checkpoints and Comic Frame panels and ends with something you could export as a page.

How it works

Give it row1row5 (each a ROW_DATA dict from RowNode) and it computes the page height as the sum of the row heights plus vertical spacing gaps plus two page_margins. Width is where it's smarter than you'd expect: if the widest row plus margins exceeds your page_width, the page quietly grows to fit instead of clipping. Background is white, off-white (that warm #FCFCF5 newsprint tone), or light-gray. An optional title gets stamped at the top - centered with a crude len(title)*4 pixel estimate, which is fine for ASCII and forget about anything fancy. Each row is then pasted left, center, or right inside the margins.

The inputs that matter

  • row1row5 (optional) - ROW_DATA from Comic Row nodes, in reading order.
  • spacing (0–100, default 15) - vertical gap between rows.
  • alignment - left, center, right. Center is the safe choice unless you're deliberately mixing row widths.
  • page_width (500–3000, default 1000) - target width; the page auto-widens if content overflows.
  • page_margin (0–100, default 30) - the border of blank page around the art.
  • page_color - white, off-white, or light-gray.
  • title (optional) - one-line page title.

The output, and the catch

You get exactly one output, page_image (IMAGE). Wire it to a preview or a save node and you're done. But here's the thing that will bite you the first time: like FrameNode, PageNode emits uint8 tensors, not ComfyUI's standard float-0-to-1 images. In the graph the preview looks perfect; run that same tensor into Save Image and ComfyUI's multiply-by-255 can push the whole page to white. If your saved page comes out blank while the preview looked fine, that's this, not your workflow. Route the page through a normalize step before saving - or pull the intermediate row previews, which are properly float, if you're saving strips.

Installing it

No models, no API keys, nothing heavy. Via ComfyUI Manager search "Pixstri" and install, or:

cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/lisaks/comfyui-panelforge
# restart ComfyUI

Ignore the README's clone command - it's a boilerplate placeholder (yourusername/pixstri.git); the real repo is the URL above. The shipped requirements.txt only lists torch and numpy, though the code needs Pillow, which ComfyUI already brings along. It's a tiny pack that runs entirely on your machine.

Common issues

  • Saved page is white/blank - the uint8 quirk above. Normalize before the save node.
  • Title looks off-center - the centering math is approximate. It's a placeholder feature; don't fight it.
  • Longer than five rows? Build a second page node and stitch the pages yourself.
  • Page came out narrower/wider than you set - that's the auto-grow behavior when content exceeds page_width. Lower it only if you want the page to force-fit (it won't shrink, it grows).
CategoryPixstri/Comics

Inputs (11)

NameTypeDefaultDescription
spacingINT150–100
alignmentCOMBO3 options: left, center, right
page_colorCOMBO3 options: white, off-white, light-gray
page_widthINT1000500–3000
page_marginINT300–100
row1optROW_DATA
row2optROW_DATA
row3optROW_DATA
row4optROW_DATA
row5optROW_DATA
titleoptSTRING

Outputs (1)

NameTypeDescription
page_imageIMAGE