DiffSynth: Qwen Image 2.1 Loader
Qwen Image 2.1 Loader — the unified generation-and-editing Qwen, with weights
- model_configs
- processor_config
- vram_limit
- pipe
Qwen-Image's family history has an annoying wrinkle in it. The 20B v1 line split into a base model and an Edit line that grew its own LoRA library, then Qwen-Image-2.0 collapsed the two back into a single unified generation-plus-editing design - and shipped it API-only in February 2026, with no weights. Everyone who wanted to run the unified thing locally was stuck waiting.
Qwen-Image-2.1 is that wait ending. Qwen/Qwen-Image-2.1 is a real repo with real files, and this loader is the node that turns three or four ModelConfigs into a pipeline you can actually prompt.
Required inputs
model_configs- the merged list from Merge ModelConfigs. The pack's own featured template wires four: transformer (transformer/diffusion_pytorch_model*.safetensors), text encoder (text_encoder/model*.safetensors), VAE (vae/diffusion_pytorch_model*.safetensors), and a fourth ModelConfig for the repo'sprocessor/folder.torch_dtype-bfloat16(default),float16,float32.device-cuda, orcpu.
The optional inputs
processor_config takes a DIFFSYNTH_MODEL_CONFIG - the processor/ ModelConfig, wired separately because it isn't part of the model_configs list the way the transformer is. Same idiom as every other loader in the pack.
vram_limit takes a VRAM Limit node's output. That node is worth understanding rather than ignoring: it reads your actual VRAM and subtracts a buffer_size (0.5 GB by default) to give the loader a budget, which is a much nicer answer to "leave room for the desktop" than hoping.
What you get
A pipe for the Qwen Image 2.1 Inference node. Because 2.1 is a unified model, that one inference node covers both text-to-image and instruction editing - there's an edit_image input on it that simply isn't used in generation mode. That's the convenience the unified design was for, and it means you keep one loader and one inference node in the graph instead of swapping pipelines when the job changes.
Coming from the 20B v1 line: expect it to be different in the ways you'd expect a smaller unified successor to be. Fewer moving parts in the graph, one LoRA story instead of two incompatible ones, and the same architecture-driven rules - CFG 1 by default, resolution that matters because the family's signature is text rendering.
Install
ComfyUI Manager, search DiffSynth-ComfyUI, install, restart. Or manually:
pip install git+https://github.com/modelscope/DiffSynth-Studio.git
cd ComfyUI/custom_nodes
git clone https://github.com/modelscope/DiffSynth-ComfyUI.git
Then either build the wiring by hand or open featured_qwen_image_2_1 from the Template tab and edit it. The template is the better starting point - it already has the VRAM config fan-out and the processor/ node in the right place.
Where people get burned
Mixing 2.1 files with v1 files. The transformer and text encoder come from the same 2.1 repo. Pointing the transformer at Qwen/Qwen-Image-2.1 and the VAE at Qwen/Qwen-Image is a good way to spend an evening on a cryptic load error.
Expecting ComfyUI's model dropdowns to see it. They won't. Everything arrives through the ModelConfig nodes, into DiffSynth's cache.
Copying v1 settings wholesale. 30 steps and CFG 4 is the v1 base's recipe. The 2.1 template runs 50 steps at CFG 1 - a guidance-distilled configuration - and quietly changing CFG to 4 will burn your images without an obvious error message.
Forgetting the processor. It's optional on the node and mandatory in practice; the text path won't be right without it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| torch_dtype | COMBO | bfloat16 | 3 options: bfloat16, float16, float32 |
| device | COMBO | cuda | 2 options: cuda, cpu |
| model_configs | DIFFSYNTH_MODEL_CONFIG_LIST | — | |
| processor_configopt | DIFFSYNTH_MODEL_CONFIG | — | |
| vram_limitopt | DIFFSYNTH_VRAM_LIMIT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | DIFFSYNTH_PIPE | — |