What You'll Build
A local text-to-image setup for Black Forest Labs' FLUX 3 Image Klein on an RTX 5070 Ti, run in ComfyUI v0.41.2 with the distilled int8 transformer (flux3_image_klein_sd_int8_convrot.safetensors), the int8 Qwen3-VL-4B text encoder and the W4A8 prompt upsampler, all from the vendor's own ComfyUI repo. The three models together are 16.5 GiB of weights on disk, so on a 16 GB card they cannot all stay resident at once: the all-resident sum is 0.528 GiB over the card, and the stage-by-stage budget is under Requirements.
Hardware data: RTX 5070 Ti (16 GB VRAM, Blackwell) · 16.5 GiB of weights, derived, not a measured peak · no published seconds-per-image for this card · See benchmark data
⚠️ Name trap: the file without
_sd_is the Base checkpoint, not the distilled one. The vendor's card says: "Files with_sd_in the name are the distilled checkpoint; the others are the base checkpoint." Soflux3_image_klein_int8_convrot.safetensorsis Base (50 steps, CFG 3.5), and the distilled file this recipe uses isflux3_image_klein_sd_int8_convrot.safetensors(16 steps, no guidance). Users in the repo's discussions have already mixed the two up, and one of the vendor's pull requests proposes renaming them the other way round (see Troubleshooting). Check the file table on the model card before you download.
⚠️ License: FLUX Kommunity License v1.0 — non-commercial use, plus commercial output generation for Qualifying Users under US$5M gross annualized revenue, per the ComfyUI repo card. The Qwen3-VL-4B text encoder and the prompt upsampler are Apache-2.0.
Requirements
| Component | Minimum | This recipe |
|---|---|---|
| GPU | 8 GB VRAM: the vendor says the int8 files run on 8 GB cards (quoted under Troubleshooting); the per-stage arithmetic below is consistent with that if ComfyUI loads the stages one after another, which is an assumption and was not measured. The vendor gives no number and no statement about the upsampler | — not measured; budget below is derived (/contribute) |
| RAM | not stated by the vendor | — |
| Storage | 17.75 GB of model files (table below), plus ComfyUI and PyTorch | 17,746,736,091 bytes measured from the HF tree API |
| Software | ComfyUI v0.41.2, PyTorch cu130 | as installed in step 1 |
Weights budget (derived from file sizes, not measured on a card). The sizes are from the HF tree API for diffusion_models/ and text_encoders/; the VAE is 336,211,292 bytes per the HF tree API for vae/.
| File | Bytes | GiB |
|---|---|---|
flux3_image_klein_sd_int8_convrot.safetensors | 5,827,874,779 | 5.428 |
qwen3vl_4b_int8_convrot.safetensors | 4,858,559,240 | 4.525 |
qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors | 6,724,090,780 | 6.262 |
flux2-vae.safetensors | 336,211,292 | 0.313 |
| Total | 17,746,736,091 | 16.528 |
Why min_vram_gb is 8, and what 16 GB buys. It is a filter floor, not a peak, and it is the same floor as the other FLUX 3 Klein pages on this site. It rests on the vendor's sentence that the int8 files run on 8 GB GPUs plus the per-stage sizes: sampling needs the transformer and VAE (5.741 GiB), text encoding needs the encoder (4.525 GiB), and prompt upsampling needs the W4A8 upsampler (6.262 GiB). That the stages are not co-resident is an assumption, supported only by ComfyUI v0.41.2 having dynamic VRAM paging for NVIDIA cards; no run was measured and activation memory is unmeasured. On the RTX 5070 Ti the card is 16 GiB. The all-resident sum of 16.528 GiB is 0.528 GiB over the card, so this recipe cannot assume all three models stay loaded together. What the arithmetic does show: the transformer, encoder and VAE (5.428 + 4.525 + 0.313 = 10.266 GiB) could stay resident together with 5.734 GiB left for activations, the CUDA context and the desktop, and the upsampler (6.262 GiB) fits on its own. Whether ComfyUI keeps them that way, or swaps the upsampler in and out, was not observed. That remainder is arithmetic, not a measured margin.
For the BF16 alternative, the distilled BF16 transformer (11,097,404,512 bytes) plus the BF16 text encoder (8,875,719,408), the W4A8 upsampler and the VAE sum to 25.177 GiB, which is well over 16. The vendor's own reference code reports a peak on a B200 of 31 GB in BF16 with the upsampler off, and notes that "The prompt upsampler adds about 28 GB on an 80 GB GPU." That figure is for a different card and runtime and does not transfer to ComfyUI on an RTX 5070 Ti, which is why this recipe documents the int8 files.
NVFP4 alternative (Blackwell only, not the lead). The repo also ships diffusion_models/flux3_image_klein_sd_nvfp4.safetensors, 5,277,685,632 bytes (4.915 GiB), against 5,827,874,779 (5.428 GiB) for the int8 transformer. The vendor's card says "NVFP4 needs a Blackwell GPU." The RTX 5070 Ti is Blackwell, and comfy-kitchen 0.2.37 registers the CUDA NVFP4 matmul with a minimum compute capability of 10.0, and NVIDIA's CUDA GPUs table lists the GeForce RTX 50 series at 12.0 (the compiled kernels were not inspected). To try it, download that file as well and pick it in the template's transformer loader in place of the int8 one; keep the int8 encoder, W4A8 upsampler and VAE. With the NVFP4 transformer the four files are 17,196,546,944 bytes (16.016 GiB), which is still 0.016 GiB over a 16 GiB card all-resident, so the saving is in the sampling stage (5.228 GiB with the VAE), not in the total. No quality or speed comparison between NVFP4 and int8 exists, so int8 stays the lead.
Installation
1. Install ComfyUI v0.41.2 with a cu130 PyTorch
FLUX 3 support was added by ComfyUI PR #17064, which is in v0.41.0. The vendor's discussion thread says the workflows were fixed in v0.41.2 (see Troubleshooting), so pin that tag. The ComfyUI README says: "Using a cu130 or above version of pytorch is required on Nvidia 20 series and above."
git clone --branch v0.41.2 https://github.com/Comfy-Org/ComfyUI.git
cd ComfyUI
python3 -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu130
pip install -r requirements.txt
requirements.txt at v0.41.2 pins comfy-kitchen==0.2.37 (the library that provides the int8 and W4A8 kernels, no custom node needed) and comfyui-workflow-templates==0.11.86, which carries the FLUX 3 templates used below.
2. Log in to Hugging Face and accept the license
The repo is gated (gated: "auto" in the HF API), and an anonymous request for a file returns 401 with x-error-code: GatedRepo. Open black-forest-labs/flux-3-image-klein-comfy, accept the terms while signed in, then log in on the machine. Same terminal as step 1: inside the ComfyUI folder with the venv active.
pip install -U huggingface_hub
hf auth login
3. Download the four files
Same terminal, still inside the ComfyUI folder. This is the vendor's download command with two changes: --local-dir models instead of ComfyUI/models (because you are already inside ComfyUI), and the W4A8 upsampler in place of the int8 one, because the v0.41.2 distilled template loads the W4A8 file by name.
hf download black-forest-labs/flux-3-image-klein-comfy \
diffusion_models/flux3_image_klein_sd_int8_convrot.safetensors \
text_encoders/qwen3vl_4b_int8_convrot.safetensors \
text_encoders/qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors \
vae/flux2-vae.safetensors \
--local-dir models
The files land in models/diffusion_models/, models/text_encoders/ and models/vae/. The vendor's card lists the int8 upsampler (qwen3.5_9b_flux3_prompt_upsampler_int8_convrot.safetensors, 9,748,113,996 bytes) in its download example instead; with it the four files total 19.343 GiB, more than a 16 GB card holds, so on this card the W4A8 file is the one to use. The W4A8 file appears in the repo tree but not in the card's file table.
Running
Same terminal as before, inside the ComfyUI folder with the venv active:
python main.py
Open http://127.0.0.1:8188, then Workflow → Browse Templates → Image → FLUX 3 Image Klein Distilled: Text to Image. In the template file shipped in comfyui-workflow-templates-json 0.1.112 (the version comfyui-workflow-templates 0.11.86 requires), the text-to-image subgraph is preset as follows:
| Setting | Value in the v0.41.2 template |
|---|---|
| Transformer | flux3_image_klein_sd_int8_convrot.safetensors |
| Text encoder | qwen3vl_4b_int8_convrot.safetensors (loader type flux3) |
| Prompt upsampler | qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors, switch on |
| VAE | flux2-vae.safetensors |
| Size | 1024 × 1024 |
| Sampler | euler / simple, 16 steps, CFG 1 |
The vendor's defaults are "16 steps and no guidance for the distilled checkpoint, 50 steps and CFG 3.5 for the base checkpoint." Keep the upsampler switch on: the model card says "Do not use the model without a prompt upsampler." It takes your short request and writes the full scene caption the model expects; any LLM given the vendor's system_prompts.json can replace it.
Editing: the same template package has FLUX 3 Image Klein Distilled: Image Edit, which uses the same three models and euler, 16 steps, CFG 1, and takes reference images through a ReferenceMultiLatent node. The card says the editing templates have no upsampler branch and tells you to run your own LLM and paste the caption in. The v0.41.2 edit template does contain an upsampler branch (a TextGenerate node with the W4A8 loader and an image-editing system prompt) behind a switch that is off by default, so either route works. The note text inside that template still says 50 steps and CFG 3.5, which disagrees with its own sampler node; the sampler node is the one that runs.
Results
- Speed: omitted. No seconds-per-image or it/s for any consumer card was found, so nothing is quoted for the RTX 5070 Ti (search space in the sidecar: the three vendor repos' discussion tabs including discussions 20 to 25 posted on 2026-10-16, ComfyUI issues updated since 2026-10-15 matched on flux, klein, int8, w4a8, nvfp4 and convrot, and one web search; the model was about a day old at the time of writing). The BFL B200 peak figures above are not a speed and not an RTX 5070 Ti measurement. Report your own run via /contribute.
- VRAM usage: 16.528 GiB of weights if everything is resident, which is more than this 16 GB card (table above). No peak was measured on this card. Activation memory at 1024 × 1024 is unmeasured here.
- Quality notes: launch-week reactions in the vendor's discussion tab were mixed, and BFL staff there attribute poor output to a workflow error in the first ComfyUI release and to running without the prompt upsampler. Judge the model after following step 1 and keeping the upsampler on. No int8-versus-BF16 or W4A8-versus-int8 quality comparison was found.
For the full benchmark data, see /check/flux-3-image-klein/rtx-5070-ti.
Troubleshooting
I downloaded flux3_image_klein_int8_convrot.safetensors and the output is soft or needs more steps
You have the Base checkpoint. Per the card, only names containing _sd_ are distilled. The unsuffixed and _base_ files in the repo have identical sizes (11,076,957,072 bytes for BF16, 5,807,427,339 for int8, 5,257,238,192 for NVFP4), and a user in discussion 18 reports the same hash. Base wants 50 steps and CFG 3.5. A BFL pull request, discussion 4, is marked "DO NOT MERGE YET" and proposes the opposite convention (unsuffixed names for distilled, _base_ for base) together with new workflows. A second change can break the distilled template from the other side: Comfy-Org/workflow_templates PR #1349, open when checked, adds prompt upsampling to the distilled templates and renames their model to flux3_image_klein_int8_convrot…, which today is the Base file. If it merges before the weights are renamed, the distilled template would load Base. If either lands, _sd_ names may disappear: re-read the file table on the model card before downloading and use whatever it then calls the distilled int8 file.
401 or GatedRepo when downloading
The comfy repo is gated. Accept the license on the repo page while signed in, then run hf auth login (step 2). The main repo black-forest-labs/flux-3-image-klein is gated the same way.
Anatomy is badly wrong, or the output looks generic
The vendor's discussion thread has BFL staff saying a workflow error in the first ComfyUI release was being fixed and that prompt upsampling should be used all the time, followed by a later post pointing users at ComfyUI v0.41.2 with updated workflows. Update to that tag, load the template again from Browse Templates (an old saved copy keeps the old graph), and make sure the upsampler switch is on.
The log says You need pytorch with cu130 or higher to use optimized CUDA operations
ComfyUI's comfy/quant_ops.py disables the comfy-kitchen CUDA backend when torch.version.cuda is below 13, which is what the int8 and W4A8 files rely on for their fast path. Reinstall PyTorch with the cu130 command in step 1. At startup the log also prints Found comfy_kitchen backend cuda: {...}; the backend is in use only if that dict says 'disabled': False.
flux3 is not an option in the CLIP loader, or the model fails to load
Your ComfyUI predates PR #17064. Check out v0.41.2 (step 1) and re-run pip install -r requirements.txt.
Does anything in the int8 path exclude this GPU?
No exclusion was found in the code. In comfy-kitchen 0.2.37 the CUDA int8_linear and convrot_w4a4_linear entries are registered with a minimum compute capability of 7.5 (int8_linear only when cuBLASLt is available), and the W4A8 layout has a CUDA w4a8_int8_linear entry with a minimum of 8.0, besides eager and Triton implementations (ComfyUI leaves Triton off unless --enable-triton-backend is passed). The RTX 5070 Ti is a Blackwell consumer card. The compiled CUDA kernels in the wheel were not inspected.
Does the whole template fit 16 GB, and can I go below?
No source found shows it either way. The model card says: "The int8 files run on 8 GB GPUs such as the RTX 3070, and on GPUs without FP8 support (RTX 30 series and older)." ComfyUI's main.py at v0.41.2 contains dynamic VRAM support for NVIDIA cards (dynamic_vram_supported()), which pages weights on demand, but this recipe did not test it. On a 16 GB card the all-resident int8 set is 0.528 GiB over the card, so the question is whether ComfyUI unloads a stage when the next one loads; nothing here measured that. If you test it, submit the result via /contribute.
The upsampler returns an empty prompt
One user, pwnyourace (not BFL staff), wrote in discussion 20: "if you are using the prompt upscaler in comfy don't set the model type to flux3 or the generate text node will output an empty prompt". The shipped distilled template (templates 0.11.86) sets exactly that type, flux3, on the upsampler loader, so the report and the template disagree, and the post names no type that works instead. Neither was tested for this recipe. If the upsampler branch returns an empty caption, turn its switch off and paste a full scene caption written by another LLM with the vendor's system_prompts.json as its system prompt.