分镜草稿图 · Storyboard Preview
Render the Stick-Figure Draft Again, On Demand
- draft
The loader already gives you a draft image, so a node whose only job is to draw the draft again looks redundant. And honestly, most of the time it is - the draft output on SodaLoadStoryboard is the same sketch. The two cases where it isn't redundant are narrow but real: you're driving the graph from a page_info string you got somewhere other than this pack's loaders, or you want the sketch rendered from a project folder without wiring the whole loader up.
What it renders
A stick-figure storyboard panel - the pack's sketch style, drawn by the core library from the page's panel geometry, character placeholders and text boxes. It's not a render of your generated art, it's the plan: which panels, what shape, who's in each one, where the bubble sits. If you've used a storyboard either in animation or in comics, this is the thing you'd pin to the wall.
The output is a single draft IMAGE at the render's natural size, so it's a real image you can feed into comparison nodes, save, or composite - not just a UI thumbnail. The node also pushes a downscaled copy (long edge 1024) plus the page metadata to its own front-end panel, which is where the bigger viewer in the node's UI comes from.
The precedent worth keeping in mind: for comic work this draft is the cheapest possible place to catch a bad page. Five panels with the same framing, a speech bubble that lands on a face, characters who don't appear where you thought - all of that is visible in a ten-second sketch and invisible until you've burned 50 sampling steps.
The three inputs, in priority order
page_info is optional and, when it's connected, it wins outright. Give it the snapshot string from a loader and the node parses that instead of reading anything off disk. That's the interesting mode: you can render the draft of a page someone else compiled, or a page_info that's been carried through a graph.
project_dir and page_id are the fallback, and they're marked required because ComfyUI needs a widget there - but if page_info is wired, the project fields are ignored. Same project layout as the rest of the pack: a folder with project.json, pages/<page_id>.json, characters/.
Its change detection reflects that priority: with page_info connected it hashes that string, and without it, it hashes the project page's contents. So editing the page file on disk refreshes the draft on the next run, which is genuinely handy while you're reworking a layout.
Wiring
There's exactly one output, draft, and there is no second output to carry page_info forward - this node reads a snapshot, it doesn't produce one. If you need geometry downstream, take page_info from the loader, not from here. Wire draft into a PreviewImage if you just want to look at it, or into an image-comparison node if you're checking that the generated page actually follows the plan.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/cOkieeman/ComfyUI-Soda-Storyboard
cd ComfyUI-Soda-Storyboard && python -m pip install --upgrade soda-storyboard
Or ComfyUI Manager → search Soda Storyboard (comfyui-soda-storyboard), then restart. Windows portable installs the core library with .\python_embeded\python.exe -m pip install -r ...\requirements.txt. No model files are needed to draw a sketch - the renderer is pure Python and Pillow - but the core library is not optional.
Where people get burned
You need one source or the other. With an empty page_info and empty project fields, the project loader raises ("请填写分镜项目目录"), and with a project folder that doesn't exist you'll get the same strict path errors as the rest of the pack - the pack never creates directories for you.
If you're on a remote browser with ComfyUI behind a reverse proxy, the node's viewer is what breaks, not the render: that inline editor path is same-origin only. The draft output still comes through to a normal preview node.
And if you were hoping this node would show you the prompt - it won't. Sketch only. The compiled MOSS JSON lives on the loader's 提示词 tab, and that's where you should be checking it anyway.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| project_dir | STRING | — | |
| page_id | STRING | — | |
| page_infoopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| draft | IMAGE | — |