H3 Character Sheet Designer Reference 13 Views
One photo in, thirteen views out — the character sheet node that never touches a model
- character_image
- reference_image_1
- reference_image_2
- reference_image_3
- prompt
- width
- height
- layout_image
- character_image
- reference_image_1
- reference_image_2
- reference_image_3
You have one good picture of a character - a decent front-facing portrait, maybe a full-body shot - and you need the other twelve angles for a sprite sheet, a comic bible, or a LoRA dataset. The historical answers are all annoying: train a turnaround LoRA, or stack an edit model with a camera LoRA and stitch panels by hand. This node takes a third route. MiniMax H3 already does reference-image conditioning, so generating isn't the hard part - telling the model exactly which thirteen panels you want, at what sizes, is. That's the whole job here.
What it actually is
A deterministic prompt compiler wearing a GUI. It loads no model, calls no API, downloads nothing - it compiles a state blob into a text prompt, a width, a height, and an optional layout guide, then passes your photos through untouched.
The context: H3 is MiniMax's 33B omni-modal video model, open weights since August 2026 with day-zero ComfyUI support. So a "character sheet" here is technically a five-frame video whose first decoded frame gets saved.
This is the current node in the pack (v1.2.0) - the one to use if you're starting fresh.
The mechanism
Everything the UI does collapses into one state_json string: selected views, size mode, body-part prompt text, and four reference-relative settings (hand_state, clothing_mode, clothing_type, footwear_state). You never type that JSON; the widget writes it as you click. Thirteen views exist - six head views, three full-body, front and rear clothing details, paired hands, paired feet or footwear - each with fixed prose and a camera convention. The anatomical left profile, for instance, states that the nose points to the right edge, because that's the H3 left-view convention and people kept getting mirror-flipped sheets.
Layout is packed on a 32-pixel grid from a requested body height. The default 1120 gives the standard five-view sheet at 2816×1280.
use_layout_image is the fork in the road. Off (default, and where the author says to start): composition is described in words only and the layout_image output is None. On: the node renders a black-framed mannequin guide at your canvas size and sends it as a second reference. Closer panel matching, but the mannequin's proportions can bleed into your character.
Inputs worth setting
character_image- required, one RGB image. A batch gets rejected outright.state_json- the GUI owns this. Hand-edit only for headless scripting.reference_image_1/2/3- optional extra photos of the same character: a back view, an old drawing, an outfit detail.use_layout_image- leavefalseuntil text instructions visibly aren't enough.style- ten choices fromnonetoanime,watercolor,3d. It appends one rendering sentence; it isn't a model switch.
Outputs and how you wire them
Eight single-value outputs. prompt, width, height go into the matching inputs on Core's MiniMaxH3ReferenceToVideo - right-click → Convert widget to input there first, since they're widgets by default.
Then the images: character_image → ref_images.ref_image_0, layout_image → ref_image_1, reference_image_1/2/3 → ref_image_2/3/4. Picture numbering skips absent images, which is what trips people: with the layout off, your character is <Picture 1> and the extras are 2, 3, 4. Keep the guide wire connected even when it's off - the output is None and H3 skips it.
Install
Via ComfyUI Manager, search "H3 Character Sheet Designer". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/ukr8b3g-cmyk/H3-Character-Sheet-Designer.git
Restart ComfyUI, then reload the browser page - the illustrated widget is frontend JS and caches hard. No pip install; the project ships zero runtime dependencies.
The bundled four-image template is saved against Core 0.38.0 / frontend 1.53.10 and needs native MiniMaxH3ReferenceToVideo, SaveImageAdvanced and subgraphs. It also carries an empty rgthree Power Lora Loader, so rgthree-comfy must be installed for it to open cleanly - no LoRA is needed, it's leftover furniture. Models aren't bundled: an H3 diffusion model, a Qwen3-VL 32B-class text encoder, a video VAE. The saved filenames in the template are examples, not a recommendation.
Where people get burned
Feeding it an ImageBatch throws "accepts one image; connect separate LoadImage nodes." One Load Image per reference. Manual dimensions off the 32-pixel grid are rejected, not rounded, and anything past the runtime resolution limit fails at validation - plus a soft warning above about a million pixels.
The honest one: the author's own fixed-seed comparisons kept head and full-body panels stable, but clothing details sometimes came back as extra full-body views or dropped the neckline, and the all-thirteen layout could drop or rearrange panels. Text instructions aren't a geometry constraint. If a panel is wrong, re-roll or tighten the body-part prompt rather than assuming you misconfigured something.
On an old frontend where the custom DOM widget can't render, you'll see a JSON textarea instead of the illustrated chooser. That means update ComfyUI, not that the install failed.
Last thing, and it's not the node's fault: H3's community licence excludes the EU, UK, Korea and the US from its territory. Check that before building a pipeline on it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| state_json | STRING | {"schema_version":3,"views":["face_front","face_left","body_front","body_left","body_back"],"size":{"mode":"auto","body_height":1120,"manual_width":2208,"manual_height":1280},"part_prompts":{},"hand_state":"reference","clothing_mode":"worn","clothing_type":"reference","footwear_state":"reference"} | — |
| character_image | IMAGE | — | |
| reference_image_1opt | IMAGE | — | |
| reference_image_2opt | IMAGE | — | |
| reference_image_3opt | IMAGE | — | |
| use_layout_imageopt | BOOLEAN | false | — |
| styleopt | COMBO | none | 10 options: none, anime, photo, realistic_painting, semi_realistic_anime, oil_painting, +4 |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| width | INT | — |
| height | INT | — |
| layout_image | IMAGE | — |
| character_image | IMAGE | — |
| reference_image_1 | IMAGE | — |
| reference_image_2 | IMAGE | — |
| reference_image_3 | IMAGE | — |