Ideogram 4 Text Encoder (Heretic Qwen3-VL-8B) β DHQ GGUF
DHQ = Dual-Head Quant. The heretic (abliterated) Qwen3-VL-8B from
Qwen-Image-2.1-Text-Encoder-Heretic, quantized
so that every tensor gets the precision that matters to what the Ideogram 4 DiT actually reads (13 interleaved hidden layers + the final-norm output), measured per
tensor with gradients through the DiT's text input stage. Each file is exactly the size of the standard llama.cpp
file of the same name.
Tuned for Ideogram 4 only. For Qwen-Image-2.1 use
Qwen-Image-2.1-Text-Encoder-Heretic-DHQ-GGUF.
About the DHQ series
DHQ files are quantized for use as a diffusion model's text encoder: each tensor's precision is chosen by how
much its quantization error changes what the target DiT reads (measured through the DiT's own text-input stage),
not by next-token loss. They stay normal LLM GGUFs, so the same file can still write or rewrite prompts: where a
model is also used as a prompt enhancer (Z-Image-Engineer-V6, the heretic Qwen3-VL-8B), every file is also checked
for that (the PE column) and the tables show where it gets worse.
DHQ repos: Qwen-Image-2.1 Β·
Ideogram 4 Β·
Z-Image-Engineer-V6 Β·
Qwen3-4B (Z-Image / FLUX.2 klein 4B)
We also built Dual-Head Dragon (ComfyUI-DualHead-Dragon), a ComfyUI node that runs one GGUF as both the text encoder and the prompt
enhancer (llama.cpp inside). It is public but still in testing, including its LoRA support
(separate LoRAs for the encoding and the rewriting head) and DFlash speculative decoding for faster rewriting.
The files here work without it (see How to load).
Results
Same heretic bf16 source, same size. Standard = llama.cpp default rules + the same imatrix.
TE = relative error of the text conditioning after Ideogram 4's own text input stage, on 36 held-out prompts never
used to build or pick anything (lower is better). PE = mean KL divergence of next-token predictions vs bf16 on
80 prompt-rewrite samples, i.e. how well the same file still works as a prompt enhancer (lower is better).
Ideogram 4 reads 13 interleaved middle layers, and the bits it needs are not the ones prompt writing needs: an
allocation driven by Ideogram 4 alone made prompt writing worse at several sizes. Q3_K_M, IQ3_M and IQ2_M are
therefore balanced with a second ruler for prompt writing (the model's own next-token predictions), so they beat the
standard file on both columns; the text-encoder error is only 0.1β0.6 points higher than the Ideogram-only
allocation. IQ3_S is a tie on PE. IQ4_XS is also balanced, but at that size no balance beat the standard file on both columns: the
text-encoder gain (6.9% β 6.6%) is within measurement noise (Β±0.5 points) and prompt writing is slightly worse
(0.0185 β 0.0204). It is here for completeness; the standard IQ4_XS is just as good a pick.
K or IQ?
Each size step comes in two series built the same way, with different llama.cpp formats:
- K files (
Q*_K*): simple block formats. Fast to decode everywhere β GPU, CPU, Metal, Vulkan β and on the GPU
in ComfyUI-GGUF.
- IQ files (
IQ*): codebook formats. For a similar error the file is smaller (compare the rows above), but
decoding is heavier: fine on llama.cpp GPU backends, slower on CPU, and ComfyUI-GGUF decodes IQ3/IQ2 tensors on
the CPU (tens of seconds per prompt). Our IQ4_XS files also contain some IQ3 (and in some repos IQ2) tensors,
so they are slow in ComfyUI-GGUF too.
ComfyUI-GGUF β use a K file. llama.cpp (or Dual-Head Dragon) β either; IQ if you want the smallest file for a
given error.
How to load
Dual-Head Dragon / llama.cpp: these are standard qwen3vl GGUFs; the scores above were measured this way.
ComfyUI: needs ComfyUI-GGUF and the add-on
ComfyUI-GGUF-Qwen3VL-TE (commit 1f52b00 or later).
Put the GGUF and mmproj-ideogram4-te-heretic-dhq-f16.gguf (this repo) in models/text_encoders/ without renaming
them (the mmproj is found by file-name prefix), then CLIPLoaderGGUF with type ideogram4.
[!WARNING]
Without the add-on (or with an older version) ComfyUI does not see the vision tower, treats the file as plain
Qwen3-8B and builds the wrong text encoder without an error: ideogram4 falls back to its text-only encoder (per-token cos 0.84β0.87 vs bf16).
With the add-on the conditioning matches the bf16 safetensors encoder (cos 0.9999, checked with a Q8_0 GGUF).
Reproducibility
recipes/ has one recipe per file: source repo and revision, llama.cpp commit, importance matrix (sha256), and the
type of every tensor as built. These files were built on aarch64 (GB10); rebuilding a recipe on aarch64 gives a
bit-identical file (checked for every uploaded file). On x86_64 llama.cpp rounds a few blocks differently.
License
Apache-2.0, same as the base weights (Qwen3-VL-8B-Instruct, Alibaba Cloud / Qwen). See LICENSE and NOTICE.