Nodes/H3 Character Sheet Designer/H3 Character Sheet Designer
ComfyUI Node

H3 Character Sheet Designer

The node that writes the turnaround prompt, not the picture

By ukr8b3g-cmyk·Created 25 days ago·Updated about 22 hours ago· 7
H3 Character Sheet Designer
    • prompt
    • width
    • height
    ◄state_json{"schema_version":1,"views":["face_front","body_front","body_left","body_back"],"size":{"mode":"auto","body_height":1120,"manual_width":2240,"manual_height":1280}}►

    Nothing here draws anything. H3 Character Sheet Designer is a prompt compiler with a GUI bolted on: you pick views and a size in its own interface, and it hands you a prompt string plus a width and a height. Those three outputs wire into ComfyUI's core MiniMaxH3ReferenceToVideo node, which does the generating with one reference image you load separately. It's the piece that makes a one-click sheet possible - just not the piece with a GPU attached.

    Which is the useful half. The turnaround sheet is how this community dodges its oldest problem: instead of fighting for the same face across ten separate generations, you generate every angle in one pass, so all panels share one context and one person - and that sheet becomes your downstream reference. H3 does reference conditioning natively, so no LoRA is involved. The hard part is saying "front bust, left profile, full-body front, back" precisely enough that the model complies.

    How it works

    There's exactly one input, state_json, a serialized record of what you clicked. The default is schema version 1 with four views (face_front, body_front, body_left, body_back) at a 1120-pixel panel height, which compiles to 2208 × 1280 - the canvas is rounded up to a 32-pixel grid, which is why the numbers aren't round. Pick another height from the dropdown or switch to Manual, but do it after a preview returns, since Auto copies its numbers into the manual fields first.

    Seven views are selectable: front portrait, anatomical-left portrait (head to chest, nose to the right, one eye), full-body front, full-body left profile, full-body back, hands, and footwear - plus presets for four-view Basic, the standard five-view sheet, a three-view turnaround, all seven, and single-view. The output is one long structured prompt: <Subject 1> pinned to your reference, a JSON block of panel rectangles labelled "semantic guidance, not visible text", per-panel prose, a shared feet baseline, and closing rules against captions, borders, motion and extra views. The eight free-text part fields (head_hair, face, upper_clothing, back_clothing, lower_body, hands, footwear, other) are appended verbatim, with precedence already settled: a named part beats Overall, and back-of-clothing beats upper-body on the rear surface.

    It's a deterministic local compiler - no LLM, no API call, no extra model, byte-identical prompt for the same state - and it never looks at your image. It can't translate, can't see what your character is wearing, and passes Japanese, braces and literal quotes straight through.

    Wiring it and installing it

    prompt, width and height go to the matching inputs on MiniMaxH3ReferenceToVideo, and you'll probably need Convert widget to input there first, since it ships with those as widgets rather than sockets. A connected link overrides whatever text still sits in the downstream widget, so the template's stale prompt text isn't what generates. Your character image doesn't come through this node at all - load it separately into the first image reference (ref_image_0, <Picture 1>).

    cd ComfyUI/custom_nodes
    git clone https://github.com/ukr8b3g-cmyk/H3-Character-Sheet-Designer.git
    

    ComfyUI Manager does the same thing if you search the pack title. Restart, hard-refresh the page, and skip pip install - the repo's only requirements file is developer-only, and the aiohttp, numpy, Pillow and torch it lists already ship with ComfyUI.

    You do need a build with MiniMaxH3ReferenceToVideo, SaveImageAdvanced and subgraph support (the maintainer's saved baseline is Core 0.38.0 / frontend 1.53.10). Drag the repo's bundled workflow JSON onto the canvas, then point it at H3 weights: diffusion model and Qwen3-VL text encoder in models/diffusion_models and models/text_encoders, video VAE in models/vae, all from Comfy-Org/MiniMax-H3. For reference conditioning, take the ref2va checkpoint rather than fl2va, even though the template's saved filenames name the latter. Also know that H3's weights are licensed under a community licence excluding the US, EU, UK and South Korea from its "Applicable Territory" - that's the model's problem, not this node's, but check it before the download.

    Where people get burned

    • Missing nodes after loading the template, or loaders naming someone else's files - update ComfyUI and the frontend (the workflow leans on subgraphs old frontends can't render), then reselect every loader, including the one with a Windows-style minimax\ subfolder.
    • The preview is optional, and so is the UI. It hits a same-server, read-only endpoint, and on frontends whose DOM widgets this node can't render you get a plain STRING input and headless compilation. Either way, it still compiles your saved state - just queue.
    • state_json fails loudly by design. Bad schema versions, non-32-grid manual dimensions, duplicate keys and oversize input all get a visible error, never a silent reset. Caps are 64 KiB of state, 1000 UTF-16 units per part field.
    • "Experimental" shows above 1,032,192 pixels - a warning, not a cap; ComfyUI's MAX_RESOLUTION is the real ceiling, and big sheets cost VRAM and time.
    • The template decodes five frames and saves frame 0, because later frames darken. Narrow margins below the feet are a known open issue in the maintainer's notes.
    CategoryH3/Character Sheet

    Inputs (1)

    NameTypeDefaultDescription
    state_jsonSTRING{"schema_version":1,"views":["face_front","body_front","body_left","body_back"],"size":{"mode":"auto","body_height":1120,"manual_width":2240,"manual_height":1280}}—

    Outputs (3)

    NameTypeDescription
    promptSTRING—
    widthINT—
    heightINT—