Nodes/Qwen Image 2.1 Character Sheet Designer/Qwen Image 2.1 Character Sheet Designer
ComfyUI Node

Qwen Image 2.1 Character Sheet Designer

Qwen Image 2.1 Character Sheet Designer

By ukr8b3g-cmyk·Created 24 days ago·Updated 5 days ago· 9
Qwen Image 2.1 Character Sheet Designer
    • prompt
    • width
    • height
    • layout_image
    ◄state_json{"schema_version":1,"views":["face_front","face_left","body_front","body_left","body_back"],"size":{"mode":"auto","body_height":1120,"manual_width":2208,"manual_height":1280}}►
    ◄use_layout_imagefalse►
    ◄stylenone►

    What this thing actually is

    This node doesn't generate anything. No sampler, no model, no LoRA, no API call. It's a prompt compiler with a drawing attached.

    You give it one photo of a character and tick the views you want - front bust, profile bust, front/side/back full body, hands, feet. It hands back a finished natural-language prompt, the width and height that prompt wants, and a white layout image with grey mannequins in framed panels. The ordinary Core nodes (TextEncodeQwenImage21, EmptyLatentImage, KSampler, VAEDecode) do the actual generating.

    Why bother? A turnaround sheet is a multi-view problem, and the community route has long been bolting a character-sheet LoRA plus a dummy mannequin onto the graph (Brie's Lazy Character Sheet style). This pack's bet is simpler: Qwen Image 2.1 is LLM-encoded with the Qwen3-VL 8B text encoder, so prompt adherence is good enough that a well-written sentence plus a layout guide stands in for a trained LoRA. Reasonable thesis.

    How it works

    Everything is deterministic and local, which is the nicest thing about it. state_json is validated, then the geometry is computed with exact rational arithmetic - panel columns are fractions of your body height, the canvas rounds up to multiples of 32, groups sit left to right. Same input, same output. The prompt prose is authored in the compiler, not filled in from a template, and your part-directive text goes in verbatim.

    The one real switch is use_layout_image. Off, the prompt says "create a character design reference sheet…" and describes panels in words. On, it flips into an edit instruction: keep <image1>'s black frames where they are, hold each mannequin's position, size, direction and crop, and swap the grey mannequins for the character from <image2>. Same source image underneath, two very different asks.

    The inputs that matter

    state_json is the required one, and it's the whole node state - views, size (auto body height or manual width/height), and part_prompts for eight slots (head/hair, face, upper and back clothing, lower body, hands/gloves, feet/footwear, overall). Default is five views at body height 1120, and the node draws its own UI over this field.

    use_layout_image (BOOLEAN, default false) is the one you decide deliberately. Its tooltip is the instruction: enable it when image_1 is your layout_image and image_2 is the character reference in TextEncodeQwenImage21. Adapting a reference-only workflow? Leave it off and wire the character to images.image_1.

    style is a 10-choice dropdown - none, anime, photo, realistic painting, semi-realistic anime, oil/watercolour/gouache/coloured pencil, 3D CG. Per its tooltip it changes only rendering and preserves identity, outfit and layout. It swaps one sentence, so treat it as a nudge, not a guarantee.

    Outputs, and where they go

    prompt → the encoder's prompt input. width and height → EmptyLatentImage (the template deliberately ignores the encoder's own LATENT output, so the Designer owns canvas size). layout_image → the encoder's images.image_1, with your LoadImage character on image_2; it also drops straight into PreviewImage or SaveImage. Expect big canvases: five views at body height 1120 comes out 2816×1280, the four-view preset at 672 gives 1344×768. The README's "Experimental" pixel warning is inherited UI text, not a Qwen limit or a VRAM ceiling.

    Installing it

    Manager first - search the pack title. Otherwise:

    cd <ComfyUI folder>/custom_nodes
    git clone https://github.com/ukr8b3g-cmyk/Qwen-Image-2.1-Character-Sheet-Designer.git
    

    Restart ComfyUI and reload the browser. There are no pip or npm dependencies - pyproject.toml lists an empty array, and Pillow, torch and aiohttp all come with ComfyUI. Don't install a second copy in another folder.

    The models aren't bundled. The template's note points at Comfy-Org/Qwen-Image-2.1 on Hugging Face: a qwen_image_2.1 diffusion file (bf16 or int8_convrot), the qwen3vl_8b text encoder (same two flavours), and qwen_image_2.1_vae_bf16. Pick your own character reference too.

    Where people get burned

    int8_convrot needs a current ComfyUI. ConvRot is a community-invented INT8 format upstream adopted natively in v0.27.0 (July 2026) - better quality than fp8 and faster, and the right pick for 20/30-series cards that have no fp8 acceleration at all. On an older ComfyUI those files won't load.

    The layout image is guidance, not a mask. The author's own GPU run still produced an angled front bust and a side view facing the wrong way. Plan for rerolls.

    The template uses SaveImageAdvanced. No such node in your install? Swap in stock SaveImage.

    Typed numbers commit on Enter or blur. Type "134", click away before the 4 lands, and you've queued something invalid - which is why the node refuses the queue rather than silently fixing your state. Preview failures never roll back saved values.

    Two mismatches to check locally. The template pins the encoder at resolution=1024 while your canvas may be 2816 wide, so layout influence won't line up one-to-one. And if the custom widget UI renders as a bare JSON box, that's probably the Nodes 2.0 frontend situation, not a broken install - the legacy canvas is the workaround.

    One last calibration: this is a solo-authored pack with no community trail yet, so the evidence is its own test suite and one documented GPU run, not upvoted threads.

    CategoryQwen/CharacterSheet

    Inputs (3)

    NameTypeDefaultDescription
    state_jsonSTRING{"schema_version":1,"views":["face_front","face_left","body_front","body_left","body_back"],"size":{"mode":"auto","body_height":1120,"manual_width":2208,"manual_height":1280}}—
    use_layout_imageoptBOOLEANfalseEnable when image_1 is layout_image and image_2 is the character reference in TextEncodeQwenImage21.
    styleoptCOMBOnoneChange only character rendering. None adds no style instruction; identity, outfit and layout are preserved.

    Outputs (4)

    NameTypeDescription
    promptSTRING—
    widthINT—
    heightINT—
    layout_imageIMAGE—