pottokao/Qwen-Image-2.1-Text-Encoder-Heretic-GGUF

🤗 Hugging Face 来源apache-2.049 GBGGUF✓ 6 个校验和今天更新
磁力链接🌱 11

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, 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 — 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
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 llama.cpp / LLM node
Text encoder this repo — Q4_K_M + mmproj CLIPLoaderGGUF + patch node
DiT 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
Text encoder qwen3vl_8b_heretic-Q4_K_M.gguf + f16 mmproj
DiT qwen_image_2.1-Q4_K_M.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 the GGUF loaders (CLIPLoaderGGUF, UnetLoaderGGUF) — also in ComfyUI Manager
    pottokao-dotcom/ComfyUI-GGUF-Qwen3VL-TE temporary patch for Qwen-Image-2.1 until ComfyUI-GGUF supports it — manual install only
    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.

    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 / leejet 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.

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 bf16 17.5 GB HF transformers shards (+ the same bf16 single file)
…-int8-convrot INT8 convrot 9.35 GB official template default format, CUDA
…-W4A8 W4A8 6.31 GB CUDA
…-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 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.

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 · NVFP4 · bf16
PE-I2I (image editing) vague edit instruction + input image(s) → precise editing prompt GGUF + mmproj

A short request goes in; one JSON line comes out (real output of the PE-T2I GGUF, trimmed):

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.

What the patch handles

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 — 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).