Nodes/Winnougan Nodes/WINT8 Diffuser Loader
ComfyUI Node

WINT8 Diffuser Loader

The INT8 Loader That Quantizes on the Fly — No Pre-Quantized File Required

By Winnougan·Created 5 months ago·Updated 4 months ago· 5
WINT8 Diffuser Loader
    • model
    unet_name
    model_typeflux2
    weight_dtypedefault
    on_the_fly_quantizationfalse
    enable_quarotfalse
    sage_attentionfalse
    quant_modetensorwise

    INT8 is having a real moment. ComfyUI shipped native ConvRot INT8 support in mid-2026 precisely because INT8 is the quant that runs well on the cards fp8 can't touch - your RTX 30-series has no fp8 acceleration, but it has integer matmul hardware, and INT8 quality lands much closer to fp16 than the size difference suggests. WINT8 Diffuser Loader is the author's own take on that idea, and it's the loader his HuggingFace quant packs (Krea 2, Ernie Turbo INT8) are built around. The headline feature, though, is one no other loader in the pack ecosystem has: it doesn't need a pre-quantized file at all. Drop in a plain fp16/bf16 checkpoint, tick on_the_fly_quantization, and it quantizes to INT8 while loading.

    How it works

    The node quantizes weights to int8 with either a single scale per whole weight tensor (tensorwise, fast to load, low memory overhead) or one scale per 128×128 tile (blockwise, finer granularity and better quality on models with activation outliers). It then injects its own ops class as ComfyUI's custom_operations, so the stock load_diffusion_model path does the rest. Fused Triton kernels are used automatically when they're available; otherwise it falls back to torch._int_mm. Nothing exotic required - this works on Windows out of the box.

    Two quality extras live behind toggles. enable_quarot applies a Hadamard rotation (the same idea behind QuaRot 2024 and ConvRot 2025) that spreads outliers across channels before quantization - INT8's failure mode is one big outlier blowing up your scale, and rotation tames it. sage_attention swaps ComfyUI's attention kernel for Sage Attention to cut VRAM; it needs the sageattn package or it logs a warning and skips, it doesn't crash.

    The inputs that matter

    Most of these are fire-and-forget once you get the idea:

    • unet_name - your checkpoint, picked from the diffusion_models folder.
    • model_type - a preset exclusion list for flux2, z-image, chroma, wan, ltx2, qwen, ernie, hidream, or auto. These aren't arbitrary: embedding, modulation, and final layers should not be quantized, and the preset keeps them full-precision so the model doesn't fall apart.
    • on_the_fly_quantization - only turn this on if your file is not already INT8. It's a load-time cost, not a runtime one.
    • quant_mode - tensorwise (default) unless your model shows quality loss from activation outliers, then try blockwise.
    • weight_dtype - default is usually right; fp8/fp16/bf16 override the non-INT8 layers.
    • enable_quarot / sage_attention - the extras above.

    The single output is model, which wires straight into your sampler. That's the whole graph: WINT8 Diffuser Loader → KSampler.

    Install

    Everything comes from the one pack, which is fully self-contained - no int88 or any other external node dependency. Install via ComfyUI Manager (search "Winnougan" - the author's own instruction), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Winnougan/WINT8-ComfyUI
    

    Restart ComfyUI. There's no requirements.txt to babysit: PyTorch 2.1+ and a current ComfyUI are the only hard requirements. Triton, scipy, and sageattn are all optional - Triton gives you the fused kernels (on Windows you'd need triton-windows), scipy makes QuaRot's Hadamard matrices faster to build, and neither is required to run.

    Where people get burned

    • Ticking on_the_fly_quantization on a file that's already INT8 just wastes load time. If you grabbed an INT8 pack, leave it off.
    • Guessing model_type wrong is the classic silent-quality-killer. When in doubt, auto lets the ops class decide from the checkpoint.
    • Expecting QuaRot to be free. Without scipy it still works - the pure-PyTorch Hadamard builder just takes a little longer at load.
    • And the honest caveat: if you're on a 16GB+ card where fp8 fits comfortably, reach for fp8 first. This node's whole point is fitting models on cards where fp8 doesn't fit - that's your 10-14GB territory.
    CategoryWINT8

    Inputs (7)

    NameTypeDefaultDescription
    unet_nameCOMBO0 options:
    model_typeCOMBOflux29 options: flux2, z-image, chroma, wan, ltx2, qwen, +3
    weight_dtypeCOMBOdefault4 options: default, fp8_e4m3fn, fp16, bf16
    on_the_fly_quantizationBOOLEANfalseQuantize fp16/bf16 weights to INT8 at load time. Only needed if your checkpoint is NOT already INT8.
    enable_quarotBOOLEANfalseApply Hadamard (QuaRot) rotation to reduce outliers. Improves quality for heavily quantized models.
    sage_attentionBOOLEANfalseReplace ComfyUI's attention kernel with Sage Attention for reduced VRAM usage. Requires sageattn package.
    quant_modeCOMBOtensorwisetensorwise: one scale per weight tensor (faster load, lower memory). blockwise: one scale per 128×128 tile (finer granularity, better quality).

    Outputs (1)

    NameTypeDescription
    modelMODEL