Load Dual CLIP INT8 (W8A8)
Load Dual CLIP INT8 — the Flux text stack, without the VRAM bill
- CLIP
If you've ever built a Flux workflow, you've met the problem this node exists to solve: two text encoders. Flux conditions on a small CLIP-L and a huge T5-XXL - and for Flux 2 Dev that big one is a 24B Mistral encoder, around 18GB on its own - which is quietly why the stock DualCLIPLoader is so heavy. DualCLIPLoaderINT8 is the same two-slot loader, but every linear layer in both encoders runs as W8A8 - 8-bit weights, 8-bit activations - through the pack's fast INT8 ops.
It's the two-encoder sibling of CLIPLoaderINT8 (literally: it subclasses it), so the mechanism is identical. Each slot is loaded through ComfyUI's native text-encoder path with Int8TensorwiseOps swapped in as the custom operations, using torch._int_mm plus a Triton kernel. The neat part is that every layer is detected independently by whether it carries its own weight_scale, which means the two slots don't have to be the same format.
The inputs that matter
- clip_name1 / clip_name2 - the two encoder files, both pulled from
text_encodersorclip. The classic Flux combo isclip_l.safetensorsin one slot andt5xxl_fp16.safetensors(or an INT8 conversion) in the other. - type - the stock dropdown; defaults to
flux. Pick the family and the node works out the right CLIPType for both. - on_the_fly_quantization - leave OFF for already-quantized files. Flip ON only when you're handing it plain bf16/fp16 encoders and want them quantized at load.
- enable_convrot - ConvRot rotation for the on-the-fly path (default ON). Pre-quantized files carry their own flag per layer and ignore it.
- weight_dtype - compute dtype,
defaultfollows the encoders' dtype.
One CLIP output, wired into CLIPTextEncode exactly like the stock loader's. The real win: you can run a plain CLIP-L alongside an INT8 T5-XXL and the loader doesn't care - it checks each file on its own. Since T5-XXL is the memory hog in Flux, that's usually the one worth quantizing.
Install
Shared pack install. ComfyUI Manager → search ComfyUI-INT8-Fast-ROCM-ConvRot → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/DrBearJew/ComfyUI-INT8-Fast-ROCM-ConvRot
No pip dependencies declared - it rides on your ComfyUI install, so keep it current and make sure Triton is present. This is the ROCm-validated INT8-Fast fork of patientx's pack; the CLIP nodes aren't AMD-exclusive, but that's the environment it's tested in.
Where people get burned
- Scaled-FP8 in either slot throws. The node refuses to mix scaled-FP8 with the INT8 ops, same as the single version. Use INT8 or plain bf16 files.
- The dropdowns are empty - wrong folder.
text_encodersorclip, notdiffusion_models. - Watch typography when quantizing on the fly. Encoder precision dies first in the text that renders in the image. ConvRot recovers a lot of it - it's the whole reason the pack recommends on-the-fly ConvRot quant over the older tensorwise files - but if your prompt's punchline is a sign, check it before you trust the render.
- Don't over-engineer. If both encoders already fit in bf16, this node buys you nothing except a slightly different failure mode. It's for the setups where T5-XXL alone decides whether the model runs at all.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_name1 | COMBO | 0 options: | |
| clip_name2 | COMBO | 0 options: | |
| type | COMBO | 28 options: stable_diffusion, stable_cascade, sd3, stable_audio, mochi, ltxv, +22 | |
| weight_dtype | COMBO | 4 options: default, fp16, bf16, fp32 | |
| on_the_fly_quantization | BOOLEAN | false | — |
| enable_convrot | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CLIP | CLIP | — |