Decide whether a model is quantized before you download it
Download 12 GB, run it, find out your GPU cannot. A 172 KB read answers that first.
It is all in the header
A safetensors file goes: eight bytes of header length, then a JSON header, then the tensor data. That JSON names every tensor with its dtype and its position in the file, so the whole composition is readable without touching the data section.
And ComfyUI does not put its quantization settings in the metadata — it writes them as tensors. Each quantized layer gets a U8 tensor named comfy_quant whose contents are JSON.
| double_blocks.0.img_attn.qkv.comfy_quant | {"format":"int8_tensorwise","per_row":true,"convrot":true,"convrot_groupsize":256} |
|---|
The name is in the header, so the yes/no is settled there; the header also carries data_offsets, so pulling the JSON itself costs one more request of a few dozen bytes.
Measured
2026-07-25Measured against the live files on Hugging Face over HTTP Range. “Read” is the number of bytes it actually took to reach the verdict.
| Model | Size | Read | Share | dtype mix | Verdict |
|---|---|---|---|---|---|
| Comfy-Org/Qwen-Image_ComfyUI qwen_image_distill_full_bf16.safetensors | 38,968 MiB | 229 KB | 0.0006% | BF16 ×1,933 | not quantized |
| AX1Y2JP/FLUX.1-dev-INT8-ConvRot flux1-dev-int8-convrot.safetensors | 11,767 MiB | 172 KB | 0.0014% | F32 ×266 / BF16 ×514 / I8 ×266 / U8 ×266 | int8_tensorwise + per_row + convrot |
| martin-rizzo/Z-Image-Turbo-INT8-ConvRot-ComfyUI z_image_turbo_int8_convrot_bf16emixed.safetensors | 5,888 MiB | 92 KB | 0.0015% | F32 ×204 / BF16 ×249 / I8 ×204 / U8 ×204 | int8_tensorwise + convrot |
| martin-rizzo/Qwen3-4B-INT8-ConvRot-ComfyUI qwen3-4b_int8_convrot_fp16emixed.safetensors | 4,211 MiB | 102 KB | 0.0023% | F32 ×252 / F16 ×146 / I8 ×252 / U8 ×252 | int8_tensorwise + convrot |
| dummy9996/qwen3-0.6b-4b-mxfp8-nvfp4-int8-convrot-comfyui qwen_3_06b_base-int8cr.safetensors | 717 MiB | 84 KB | 0.0111% | BF16 ×114 / F32 ×196 / I8 ×196 / U8 ×196 | int8_tensorwise(convrot なし) |
The first row is a plain BF16 model, included as a control. It is 39 GB, and 229 KB is enough to establish that nothing in it is quantized.
The filename is not evidence
Look at the last row. The file is called int8cr and the repository name says convrot, yet the config inside carries no convrot at all. Twelve layers were sampled to be sure; every one of them agreed.
| qwen_3_06b_base-int8cr | {"format":"int8_tensorwise"} |
|---|---|
| flux1-dev-int8-convrot | {"format":"int8_tensorwise","per_row":true,"convrot":true,"convrot_groupsize":256} |
Within a single file the config has been consistent in everything measured so far — the variation is between files, not inside them. Either way, the header is the thing to read, not the name.
An INT8 model is not INT8 throughout
In every quantized file, I8 and U8 come in equal counts, with BF16 or F16 sitting alongside them. The I8 tensors are quantized weights, U8 holds the config, F32 the scales — and the rest are layers that were left alone. FLUX.1-dev carries 266 I8 tensors against 514 BF16 ones, so by count most of it is still at the original precision.
That is what bf16emixed and fp16emixed in the filenames refer to — the precision of what remains. Reading the header also tells you whether the filename is telling the truth.
What the GPU has to be
Whether the ConvRot INT8 path is enabled at all is decided in ComfyUI's comfy/quant_ops.py. Reading it, the conditions are:
| NVIDIA / CUDA | PyTorch built against cu130 or newer; anything older is disabled with a warning. Turing and later. |
|---|---|
| AMD / ROCm | Triton 3.7+ and a matrix-core GPU (WMMA on RDNA3 and later, MFMA on CDNA). RDNA1 and RDNA2 have no WMMA and hang on the INT8 path, so they are excluded. |
| Apple Silicon / MPS | It loads, and the quantization algorithms do register (measured on an M2 Max with torch 2.13). It just will not be faster. comfy-kitchen ships no CUDA extension for macOS and Triton does not install, which leaves the eager backend; and PyTorch's INT8 matmul, aten::_int_mm, is unimplemented on MPS, so the weights are taken back to float before the multiply. |
A Hugging Face model page does not tell you any of this. The header check moves that discovery to before the download.
Try it on your own file
Drop a .safetensors file into the viewer on this site, or paste a Hugging Face URL, and it shows the dtype mix, the tensor structure and the metadata entirely in your browser. Nothing is uploaded.
Bring a still image to life.
An image you generated or a favourite shot — just upload it and AI gently sets it in motion.
Try it free →Sign in with Google · Free credit for your first clipFAQ
- Why can this be answered without downloading the file?
- A safetensors file is laid out as an 8-byte header length, then a JSON header, then the tensor data. That JSON header names every tensor with its dtype and position. ComfyUI stores its quantization settings as a tensor inside the file, so the name shows up in the header — which means the header alone settles it.
- Does an I8 tensor mean the file is INT8-quantized?
- Not on its own. The thing to look for is a comfy_quant tensor. In all three quantized files measured here, I8 and U8 appear in equal counts (weights and scales) while more than half the tensors stay BF16 or F16. An INT8 model is not INT8 all the way through.
- What do bf16emixed and fp16emixed in the filename mean?
- They record the precision the un-quantized layers kept. The header's dtype mix confirms it: Z-Image-Turbo's bf16emixed still holds 249 BF16 tensors, and Qwen3-4B's fp16emixed holds 146 F16 ones.
- What is ConvRot?
- An INT8 quantization scheme added in ComfyUI v0.27.0. The config carries a convrot_groupsize (256 in every file measured here), which reads like a rotation applied per group before quantizing — though that reading comes from the name and the value, not from documentation. The implementation lives in comfy/quant_ops.py and the comfy-kitchen package.
- Will it run on my GPU?
- The fast INT8 kernels need either NVIDIA with PyTorch built against cu130 or newer (Turing and later), or AMD with Triton 3.7+ and a matrix-core GPU (RDNA3 and later, or CDNA). A Mac will load the file, but it will not go faster.
- So what actually happens on a Mac?
- Measured on an M2 Max with torch 2.13: the file loads cleanly (702 tensors, weights in torch.int8) and the quantization algorithms register. But the only comfy-kitchen backend available is eager — the CUDA extension is not shipped for macOS (_C.abi3.so is absent) and Triton does not install. On top of that, PyTorch's INT8 matmul aten::_int_mm is unimplemented on MPS, so there is no path that keeps the maths in INT8. You get the smaller file; you do not get the speed.
Sources
- comfy/quant_ops.py — quantization layouts and backend gating
- PR #14636 “Support int8 models.” — how comfy_quant is read, and the comfy-kitchen dependency
- PR #14662 “int8 support on turing GPUs.”
- safetensors — the format itself (Rust implementation)
PR If you'd like to see your generated images move, there's also the AI video studio Ugokashi Shikibu — one image is enough.