Qwen Image 2.1 Character Sheet Designer for ComfyUI
V1.5.4
What's new
Updated the normal and Turbo workflow templates with optional LoRA support. Both require rgthree-comfy for the Power Lora Loader. No LoRA is selected by default.
Updated the standard and Turbo workflows. Set filenames directly in Save Image, with unused auxiliary outputs hidden for a cleaner UI. The legacy V1.2 template remains included.
Batch Out generates selected views individually. Auto uses view-specific sizes; Manual applies width × height to each image.
Three extra references and Sheet Encode support reference roles and explicit source regions.
Per-part controls beneath the cards select clothing, hands and footwear; all default to Auto.
Improved generation prompts cover worn gloves, paired footwear, shoe coverage and Auto clothing-on-wearer views.


Create multi-view character sheets from a single reference image with a simple, intuitive interface. Choose your views, adjust the output size, and add instructions for clothing, hair, accessories, and other details.
Get the latest custom node, sample workflow, and full instructions on GitHub.
Standard Model: qwen_image_2.1_int8_convrot.safetensors
Text Encoder: qwen3vl_8b_int8_convrot.safetensors
Turbo Model: qwen_image_2.1_turbo_int8_convrot.safetensors
This Qwen Image 2.1 version combines your character reference with a mannequin layout image and a generated prompt. The bundled workflow uses no LoRA and requires no character-specific training. Install this custom node, then use the included workflow with ComfyUI’s native Qwen Image 2.1 nodes.
Features
Layout image output: provides Qwen with a visual composition guide alongside your character reference

Seven selectable views: front and profile busts, front/side/back full-body views, hands, and feet or footwear

Part prompts: describe changes to hair, face, upper clothing, back details, lower clothing, hands, footwear, or the overall appearance

Style presets: Anime, Photo, Realistic painting, Semi-realistic anime, Oil painting, Watercolor, Gouache, Colored pencil, and 3D CG. Select None to follow the reference’s visual style

Auto and Manual sizing, with five-view, four-view, and seven-view presets

Prompt preview, saved settings, Undo, and English/Japanese UI
Installation
Open a terminal in your ComfyUI/custom_nodes folder and run:
git clone https://github.com/ukr8b3g-cmyk/Qwen-Image-2.1-Character-Sheet-Designer.gitRestart ComfyUI and refresh your browser. Load the sample workflow, then select your reference image and installed model files.
A compatible ComfyUI version with Qwen Image 2.1 support is required. Model files are not included.
Tips
Start with the standard five-view layout. Add hand or footwear close-ups only when needed, or select a single view for an individual image.
The layout image and style presets guide the result, but exact placement, viewing direction, and character consistency are not guaranteed. Prompt adjustments may be needed, especially when changing clothing or adding details that are not visible in the reference.
The included workflow is a starting point. Feel free to customize the nodes inside its subgraph for your own setup.
For detailed usage, requirements, and future updates, please check the GitHub README.
Description
FAQ
Comments (8)
workflow gives me an error:
# ComfyUI Error Report ## Error Details - Node ID: 27:10 - Node Type: QwenImage21CharacterSheetEncode - Exception Type: AttributeError - Exception Message: AttributeError: module 'tensorflow' has no attribute 'Tensor'
Thanks for reporting this issue!
I've checked the implementation of Qwen 2.1 Sheet Encode. This node calls ComfyUI's built-in TextEncodeQwenImage21 and does not directly depend on TensorFlow.
The error:
AttributeError: module 'tensorflow' has no attribute 'Tensor'
may be caused by an incomplete or broken TensorFlow installation, or by another Python module conflicting with TensorFlow.
Could you please try the following checks?
1. Check the installed packages
Open PowerShell in your ComfyUI portable installation folder and run:
```powershell
.\python_embeded\python.exe -m pip show tensorflow tensorflow-intel tensorflow-cpu einops
```
If you use a virtual environment or another ComfyUI installation method, please use the Python executable that ComfyUI actually runs.
2. Check whether TensorFlow is working correctly
Run:
```powershell
.\python_embeded\python.exe -c "import sys; import tensorflow as tf; print('Python:', sys.executable); print('Version:', getattr(tf, '__version__', None)); print('Path:', getattr(tf, '__file__', None)); print('Tensor:', hasattr(tf, 'Tensor')); print('Variable:', hasattr(tf, 'Variable'))"
```
How to interpret the results:
* Tensor: True / Variable: True — The main TensorFlow types are available. This does not guarantee that the entire installation is healthy, but the reported error needs further investigation.
* Tensor: False or Variable: False — The imported TensorFlow module is missing expected attributes. This suggests an incomplete installation, a corrupted package, or a conflicting module.
* Version: None or Path: None — Python may be importing an incomplete package or a namespace package instead of a normal TensorFlow installation. This requires further investigation.
* Path points to an unexpected folder — A local file or another package may be shadowing the actual TensorFlow installation.
* ModuleNotFoundError: No module named 'tensorflow' — TensorFlow is not available in the Python environment being checked. Please verify that this is the same Python environment used by ComfyUI.
These results can help identify the problem, but they do not prove that TensorFlow is corrupted.
3. Test the standard ComfyUI encoder
Please also try replacing Qwen 2.1 Sheet Encode with ComfyUI's built-in Text Encode Qwen Image 2.1 node, using the same CLIP, VAE, reference image, and prompt.
If the same error occurs with the standard encoder, the issue is more likely related to the ComfyUI environment, its dependencies, or the Core encoding process rather than this custom node.
4. Please share the results
It would be very helpful if you could provide:
* The output of both commands above.
* Your ComfyUI version.
* Whether the standard Text Encode Qwen Image 2.1 node produces the same error.
The *complete traceback from the ComfyUI console**, especially the lines showing which Python file raised the exception.
Similar errors have occurred when einops encounters an incomplete or conflicting TensorFlow module.
However, I would prefer to confirm the actual traceback before recommending any package changes.
Please don't uninstall or reinstall TensorFlow yet, as other custom nodes may depend on it.
Thanks for your help! Once we have these results, we should be able to narrow down the cause and determine the safest fix.
@ukr8b3g201 I am running comfyui easy, and response with "WARNING: Package(s) not found: tensorflow-cpu", but your h3 minimax charsheet version is running fine. But I would prefer the qwen version, because I hope i produces more consistent face characteristics.
@Jojo0Gojo Thanks for checking! The “tensorflow-cpu not found” warning alone doesn’t mean TensorFlow is broken or that you need to install the CPU package. The Qwen Character Sheet node itself doesn’t require TensorFlow.
When you say “ComfyUI easy,” do you mean ComfyUI Easy Install or the Easy Use custom nodes? A link to the version you use would help.
Could you also share the full traceback from the ComfyUI console when the Qwen workflow fails, along with the exact command you ran for the package check? The check needs to use the same Python environment as ComfyUI.
It’s helpful to know the H3 version works, but the Qwen workflow can use a different processing path. Let’s check the log first before installing or removing any packages.
@ukr8b3g201 Its ComfyUI Easy Install, and it's actually at ComfyUI 0.39.2. I need to run the wf again for the error message.
[ERROR] !!! Exception during processing !!! module 'tensorflow' has no attribute 'Tensor'
[ERROR] Traceback (most recent call last):
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\execution.py", line 547, in execute
output_data, output_ui, has_subgraph, has_pending_tasks = await get_output_data(prompt_id, unique_id, obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\execution.py", line 352, in get_output_data
return_values = await asyncmap_node_over_list(prompt_id, unique_id, obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\execution.py", line 326, in asyncmap_node_over_list
await process_inputs(input_dict, i)
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\execution.py", line 314, in process_inputs
result = f(**inputs)
^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\custom_nodes\Qwen-Image-2.1-Character-Sheet-Designer\qwen_image21_character_sheet\sheet_encode.py", line 46, in encode
output = TextEncodeQwenImage21.execute(clip=clip, prompt=prompt, negative_prompt=negative_prompt,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy_extras\nodes_qwen.py", line 173, in execute
ref_latents.append(vae.encode(s))
^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\sd.py", line 1443, in encode
model_management.raise_non_oom(e)
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\model_management.py", line 399, in raise_non_oom
raise e
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\sd.py", line 1436, in encode
out = self.first_stage_model.encode(pixels_in)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\ldm\wan\vae2_2.py", line 717, in encode
return self.conv1(self.encoder(x)).chunk(2, dim=1)[0].squeeze(2)
^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\torch\nn\modules\module.py", line 1779, in wrappedcall_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\torch\nn\modules\module.py", line 1790, in callimpl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\ldm\wan\vae2_2.py", line 509, in forward
x = layer(x)
^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\torch\nn\modules\module.py", line 1779, in wrappedcall_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\torch\nn\modules\module.py", line 1790, in callimpl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\ldm\wan\vae2_2.py", line 369, in forward
x = module(x, feat_cache, feat_idx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\torch\nn\modules\module.py", line 1779, in wrappedcall_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\torch\nn\modules\module.py", line 1790, in callimpl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\comfy\ldm\wan\vae2_2.py", line 99, in forward
x = rearrange(x, "b c t h w -> (b t) c h w")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\einops\einops.py", line 616, in rearrange
return reduce(tensor, pattern, reduction="rearrange", **axes_lengths)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\einops\einops.py", line 535, in reduce
backend = get_backend(tensor)
^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\einops\_backends.py", line 58, in get_backend
if backend.is_appropriate_type(tensor):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\python_embeded\Lib\site-packages\einops\_backends.py", line 360, in is_appropriate_type
return isinstance(tensor, (self.tf.Tensor, self.tf.Variable))
^^^^^^^^^^^^^^
AttributeError: module 'tensorflow' has no attribute 'Tensor'
[INFO] Prompt executed in 2.98 seconds
@Jojo0Gojo Thanks for sharing the log! Could you try running the Qwen workflow once without any reference images connected and let me know whether it works? No package installation or removal is needed for this test.
@ukr8b3g201 ok, ive disabled/bypassed all ref images:
# ComfyUI Error Report
## Error Details
- Node ID: 5
- Node Type: QwenImage21CharacterSheetDesignerReferenceV13
- Exception Type: D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\custom_nodes\Qwen-Image-2_x_1-Character-Sheet-Designer.qwen_image21_character_sheet.common.state.StateValidationError
- Exception Message: D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\custom_nodes\Qwen-Image-2_x_1-Character-Sheet-Designer.qwen_image21_character_sheet.common.state.StateValidationError: Connect character_image or an applicable part reference for: face_front, face_left, body_front, body_left, body_back
## Stack Trace
```
File "D:\ComfyUI-Easy\ComfyUI-Easy-Install\ComfyUI\execution.py", line 547, in execute
output_data, output_ui, has_subgraph, has_pending_tasks = await get_output_data(prompt_id, unique_id, obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)


