---
license: apache-2.0
base_model:
- pottokao/Qwen-Image-2.1-Text-Encoder-Heretic
tags:
- quantized
- fp8
- gguf
- comfyui
- qwen-image
- abliterated
- text-encoder
---
# Qwen-Image-2.1 Text Encoder (Heretic) — GGUF · FP8 · bf16
> [!IMPORTANT]
> **Got `got input of size [1, 512, 12288]` with the GGUF? It's fixed.**
> The GGUF files were fine all along — ComfyUI-GGUF just didn't load the Qwen3-VL vision tower.
> Install the add-on node **[ComfyUI-GGUF-Qwen3VL-TE](https://github.com/pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE)**,
> make sure the `mmproj` file sits next to the GGUF, restart ComfyUI. No need to re-download anything.
> The same patch also fixes `Unknown model architecture!` for Qwen-Image-2.1 **DiT** GGUFs — so the whole
> pipeline can run on GGUF.
## Made with a simple node
The sample / showcase images in this repo were generated with the technique behind **[ComfyUI-QwenImage-PhotoStyles](https://github.com/pottokao-dotcom/ComfyUI-QwenImage-PhotoStyles)** — a small ComfyUI node (17 photographic styles; one short prompt becomes a full styled prompt via the PE-T2I rewriter). If you're interested in how the images are made, the node and its recipe are there.
## 📥 Which file should I use?
| Your setup | File(s) | Size | Loader |
|---|---|---:|---|
| **Smallest** (GGUF) | `qwen3vl_8b_heretic-Q4_K_M.gguf` **+** `mmproj-qwen3vl_8b_heretic-f16.gguf` | 5.0 + 1.2 GB | `CLIPLoaderGGUF` + [add-on node](https://github.com/pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE) |
| **NVIDIA GPU**, no extra nodes | `qwen3vl_8b_fp8_heretic.safetensors` | 9.3 GB | stock `CLIPLoader` |
| **Mac / non-CUDA**, no extra nodes | `qwen3vl_8b_bf16_heretic.safetensors` | 17.5 GB | stock `CLIPLoader` |
All three are in **this repo**. Every loader uses **type `qwen_image`** and feeds `TextEncodeQwenImage21`.
## ⚙️ Recommended sampler settings
Qwen-Image-2.1 is a full (non-distilled) model. **Use 25 steps** — more steps don't make text sharper
and start to burn the highlights.
- **No text in the image:** plain `KSampler`, **cfg 1.0** (fastest, softest look; the negative prompt is ignored at cfg 1).
- **Text in the image (signs, labels, posters):** switch cfg **partway through** — the first ½–⅔ of the steps
at **cfg 1** lock in composition and materials, the rest at **cfg 3** with a negative prompt redraws the
lettering. You get cfg 1's look *and* cfg 3's readable text, in one pass with one seed.
In ComfyUI that's two chained `KSamplerAdvanced` nodes (same model, seed and steps):
| | `add_noise` | `steps` | `cfg` | `start_at_step` | `end_at_step` | `return_with_leftover_noise` |
|---|---|---:|---:|---:|---:|---|
| 1st | enable | 25 | 1.0 | 0 | **12–17** | enable |
| 2nd | disable | 25 | 3.0 | **12–17** | 25 | disable |
Split later (17) keeps more of the cfg 1 look; split earlier (12) gives crisper text.
Example negative prompt: `oversaturated, overexposed, gibberish text`.
## 🍱 All-GGUF Qwen-Image-2.1
| Part | Where | Loader |
|---|---|---|
| Prompt rewriter *(optional)* | [PE-T2I Heretic GGUF](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-T2I-Heretic-GGUF) | llama.cpp / LLM node |
| Text encoder | **this repo** — Q4_K_M + mmproj | `CLIPLoaderGGUF` + [patch node](https://github.com/pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE) |
| DiT | [Qwen-Image-2.1 DiT GGUF](https://huggingface.co/pottokao/Qwen-Image-2.1-DiT-GGUF) — Q8_0 / Q6_K / Q4_K_M | `UnetLoaderGGUF` — **stock, no patch** |
| VAE | official `qwen_image_2.1_vae_bf16.safetensors` | `VAELoader` |
## 🖼️ Showcase
 Warm Documentary |  Candid B&W Street |  Vivid Everyday Color |
 Black Fury |  Geometry of Light |  Frozen Film Still |
 Deadpan Large-Format |  White Leap |  Corner Elegance |
 Raw B&W Fashion |  Color Behind Glass |  High-Contrast Reportage |
 Lyrical Landscape |  Hyper Chic East |  Street in the Mirror |
 Plain Portrait |  Melancholy B&W |  Fairytale Giants |
 Cold Power |  Cold Power |  Hyper Chic East |
 Fairytale Giants |  Hyper Chic East |  White Leap |
**This is what Q4_K_M across the board looks like** — every image above was made with:
| Part | File |
|---|---|
| PE-T2I rewriter | [`pe_t2i_heretic-Q4_K_M.gguf`](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-T2I-Heretic-GGUF) |
| Text encoder | [`qwen3vl_8b_heretic-Q4_K_M.gguf`](https://huggingface.co/pottokao/Qwen-Image-2.1-Text-Encoder-Heretic-GGUF) + f16 mmproj |
| DiT | [`qwen_image_2.1-Q4_K_M.gguf`](https://huggingface.co/pottokao/Qwen-Image-2.1-DiT-GGUF) |
| VAE | `qwen_image_2.1_vae_bf16.safetensors` (official) |
AI-generated. Style homage only — not affiliated with or endorsed by the photographers.
## GGUF in ComfyUI — 3 steps
1. **Install two custom nodes** into `ComfyUI/custom_nodes/`:
| Node | What it does |
|---|---|
| [city96/ComfyUI-GGUF](https://github.com/city96/ComfyUI-GGUF) | the GGUF loaders (`CLIPLoaderGGUF`, `UnetLoaderGGUF`) — also in ComfyUI Manager |
| [pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE](https://github.com/pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE) | temporary patch for Qwen-Image-2.1 until ComfyUI-GGUF supports it — manual install only |
```bash
cd ComfyUI/custom_nodes
git clone https://github.com/pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE
```
No git? On the GitHub page click **Code → Download ZIP**, unzip it into `ComfyUI/custom_nodes/`.
New to custom nodes: [official guide](https://docs.comfy.org/installation/install_custom_node).
The patch fixes both errors: the text encoder's `[1, 512, 12288]`, and
`Unknown model architecture!` when a Qwen-Image-2.1 **DiT** GGUF has no architecture
metadata (e.g. [unsloth](https://huggingface.co/unsloth/Qwen-Image-2.1-GGUF) / [leejet](https://huggingface.co/leejet/Qwen-Image-2.1-GGUF) builds).
2. **Put both files in `ComfyUI/models/text_encoders/`**
- `qwen3vl_8b_heretic-Q4_K_M.gguf`
- `mmproj-qwen3vl_8b_heretic-f16.gguf` ← the vision tower (**required** — also used for image editing)
**Don't rename either file** — the vision tower is matched by name. If it's missing, the add-on
stops with a `Missing vision tower` error telling you which file to download.
3. **Restart ComfyUI**, then `CLIPLoaderGGUF` → type **`qwen_image`** → `TextEncodeQwenImage21` → the rest of the official workflow.
The console should show `[GGUF-Qwen3VL-TE] added 351 Qwen3-VL vision tensors from mmproj.`
Verified 2026-09-23 on ComfyUI 0.36.0 + ComfyUI-GGUF `6ea2651` (NVIDIA GPU): **text-to-image and
reference-image editing** both work and match the bf16 encoder's output for the same seed up to Q4
quantization noise. Not tested on a Mac.
What the patch changes, and why: see [the bottom of this page](#what-the-patch-handles).
## Files in this repo
| File | Size | Use for |
|---|---:|---|
| `qwen3vl_8b_heretic-Q4_K_M.gguf` | 5.03 GB | ComfyUI via `CLIPLoaderGGUF` + add-on · llama.cpp |
| `qwen3vl_8b_heretic-Q6_K.gguf` | 6.88 GB | higher quality — same loader (`CLIPLoaderGGUF` + add-on + mmproj) |
| `qwen3vl_8b_heretic-Q8_0.gguf` | 8.71 GB | near-lossless — same loader (for spare VRAM) |
| `mmproj-qwen3vl_8b_heretic-f16.gguf` | 1.16 GB | vision tower — **required** next to the GGUF |
| `qwen3vl_8b_fp8_heretic.safetensors` | 9.34 GB | ComfyUI via stock `CLIPLoader` (NVIDIA GPU) |
| `qwen3vl_8b_bf16_heretic.safetensors` | 17.53 GB | ComfyUI via stock `CLIPLoader` (any device, incl. Mac) — full precision |
### Other formats of the same model
| Repo | Format | Size | Note |
|---|---|---:|---|
| [`…-Heretic`](https://huggingface.co/pottokao/Qwen-Image-2.1-Text-Encoder-Heretic) | bf16 | 17.5 GB | HF `transformers` shards (+ the same bf16 single file) |
| [`…-int8-convrot`](https://huggingface.co/pottokao/Qwen-Image-2.1-Text-Encoder-Heretic-int8-convrot) | INT8 convrot | 9.35 GB | official template default format, CUDA |
| [`…-W4A8`](https://huggingface.co/pottokao/Qwen-Image-2.1-Text-Encoder-Heretic-W4A8) | W4A8 | 6.31 GB | CUDA |
| [`…-NVFP4`](https://huggingface.co/pottokao/Qwen-Image-2.1-Text-Encoder-Heretic-NVFP4) | NVFP4 | 6.31 GB | Blackwell GPUs |
## Ablation (inherited from the bf16 source)
| | Refusals | KL divergence |
|---|---:|---:|
| Stock Qwen-Image-2.1 text encoder | 100/100 | 0 *(by definition)* |
| **This family** | **5/100** | **0.0220** |
Produced with [Heretic](https://github.com/p-e-w/heretic) directional ablation
(`o_proj` + `down_proj`), 200 trials / 60 startup trials, knee point of the Pareto
front. Independently re-checked on the bf16 source: **0/20** refusals, **4/4** benign
questions answered correctly. Full methodology in the
[bf16 repo](https://huggingface.co/pottokao/Qwen-Image-2.1-Text-Encoder-Heretic).
## Format details
**GGUF:** Q4_K_M language model, vision tower as a separate f16 `mmproj`.
**FP8:** self-quantized `float8_e4m3fn` (Comfy-Org doesn't ship an FP8 encoder):
| Layers | Count | Precision |
|---|---:|---|
| FFN + attention + embed/lm_head (all 2-D weights) | 254 | **FP8** `e4m3fn` |
| Vision tower | 351 tensors | **bf16 — untouched** |
| norms / biases | — | bf16 |
Remapped to the ComfyUI key layout (`model.layers.…`, no `language_model.` prefix).
Requires a ComfyUI build with `QwenImage21` support (0.36.0 or newer).
## 🎨 Also for Qwen-Image-2.1: the prompt rewriters (Heretic)
Qwen-Image-2.1 ships two **prompt rewriters** — small LLMs that expand a short request into
the detailed prompt the model was trained on. Both are available refusal-ablated, and both have
**GGUF builds that run anywhere llama.cpp runs (Mac included)**:
| Rewriter | What it does | Builds |
|---|---|---|
| **PE-T2I** (text-to-image) | one line in any language → detailed English prompt + aspect ratio | [GGUF](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-T2I-Heretic-GGUF) · [NVFP4](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-T2I-Heretic-NVFP4) · [bf16](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-T2I-Heretic) |
| **PE-I2I** (image editing) | vague edit instruction + input image(s) → precise editing prompt | [GGUF + mmproj](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-I2I-Heretic-GGUF) |
A short request goes in; one JSON line comes out (real output of the PE-T2I GGUF, trimmed):
```text
in: 雨夜的東京小巷,一隻流浪狗,粗粒黑白街拍風格
out: {"rewritten_prompt": "A vertical nighttime street photograph in a gritty grainy black-and-white street style shows a
narrow, rain-soaked urban alley with a stray dog standing in the lower foreground. The scene is
composed with strong depth: dark building walls and utility poles frame the left and right sides,
while the wet pavement stretches into a softly blurred background. … (2,137 characters)",
"wh_ratio": "2:3"}
```
**Showcase** — generated with the **NVFP4** builds through the full pipeline (PE-T2I rewriter →
Qwen-Image-2.1 text encoder → DiT), each from a one-line prompt, one seed per image, no retouching.
Also shown in the [PE-T2I NVFP4 repo](https://huggingface.co/pottokao/Qwen-Image-2.1-PE-T2I-Heretic-NVFP4).
## What the patch handles
[ComfyUI-GGUF-Qwen3VL-TE](https://github.com/pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE) changes nothing on
disk — it only adjusts how ComfyUI-GGUF loads Qwen-Image-2.1 files, in memory, at load time.
**1. Text encoder — `[1, 512, 12288]`**
```
RuntimeError: Given normalized_shape=[4096], expected input with shape [*, 4096],
but got input of size [1, 512, 12288]
```
ComfyUI-GGUF loads the `mmproj` vision tower only for `qwen2vl`, not `qwen3vl`. Without it, ComfyUI
doesn't recognise the encoder as Qwen3-VL, builds the wrong model, and gets 12288-wide hidden states
instead of 4096. The patch loads the matching `mmproj-*.gguf` from the same folder and renames its
tensors to ComfyUI's Qwen3-VL layout (`model.visual.*`). The vision tower is then really used —
reference images for editing go through it.
**2. DiT — `Unknown model architecture!`**
```
ValueError: This model is not currently supported - (Unknown model architecture!)
```
A DiT GGUF without `general.architecture` metadata (stable-diffusion.cpp convention, e.g. unsloth /
leejet) is identified by its tensor names, and ComfyUI-GGUF's list has no Qwen-Image entry. The patch
recognises Qwen-Image-2.1 by `img_in`, `txt_in.in_layer` and `txt_in.text_norm` and loads it as
`qwen_image`. DiT GGUFs that already carry the metadata (e.g. Abiray's) are unaffected.
Once ComfyUI-GGUF handles either case itself, that part of the patch detects it and does nothing.
---
> **Not affiliated with, or endorsed by, Alibaba / Qwen.** Community derivative
> (refusal-ablated) of [`Qwen/Qwen3-VL-8B-Instruct`](https://huggingface.co/Qwen/Qwen3-VL-8B-Instruct)
> — the model Qwen-Image-2.1 uses, unmodified, as its text encoder. Qwen releases that
> model under **Apache-2.0**, so this derivative is redistributed under Apache-2.0
> (see `LICENSE` and `NOTICE`).