self-hosted/ai
§01·recipe · image

FLUX 3 Image Klein on RTX 5090: ComfyUI Distilled BF16 with the Prompt Upsampler

imageintermediate32GB+ VRAM
Oct 16, 2026

This intermediate recipe sets up FLUX 3 Image Klein on the RTX 5090, needing about 32 GB of VRAM.

models
tools
prerequisites
  • NVIDIA RTX 5090 (32 GB VRAM), Blackwell
  • ComfyUI v0.41.2 or newer, with its requirements.txt installed and a PyTorch build for CUDA 13.0 or newer
  • A Hugging Face account that has accepted the access conditions on black-forest-labs/flux-3-image-klein-comfy, and the hf CLI logged in
  • About 28 GB of free disk for the four files below

What You'll Build

Text-to-image generation with Black Forest Labs' FLUX 3 Image Klein (5.55 B parameters, BF16) on an RTX 5090, in ComfyUI, using the first-party flux-3-image-klein-comfy repository. The recipe pins the distilled checkpoint (_sd_ in the file name), the BF16 Qwen3-VL-4B text encoder, and the W4A8 prompt upsampler (the file the ComfyUI templates load) that the vendor says the model must be used with.

Hardware data: RTX 5090 (32 GB VRAM) · 25.177 GiB of weights if every file were resident at once (derived below, not a measured peak) · no speed measurement exists yet · See benchmark data

⚠️ Known issue: the file name without _sd_ is the Base checkpoint, not the distilled one. On the comfy repository the unsuffixed flux3_image_klein_bf16.safetensors has the same bytes as flux3_image_klein_base_bf16.safetensors (same size, 11,076,957,072 B, and the same git object id, the LFS pointer that embeds the content hash, in the repository's tree API; the distilled _sd_ file has a different one). Base is the 50-step, CFG 3.5 checkpoint meant for fine-tuning. Users in the repository's discussions hit exactly this confusion. An open BFL pull request (#4) proposes to flip the convention later (unsuffixed becoming distilled) together with a weight rename. This recipe was written on 2026-10-16; if you read it later, check the file table on the repository card before downloading. A second open change points the same way: Comfy-Org/workflow_templates PR #1349 ("Add prompt upsampling to the FLUX 3 Image Klein distilled templates", opened 2026-10-16) renames the distilled templates' model to flux3_image_klein_int8_convrot…, which today is the Base file; if it merges before the Hugging Face rename, a distilled template would load Base. After any ComfyUI or template update, re-check that the unet_name widget still reads _sd_.

⚠️ Known issue: launch-week quality complaints were traced to the ComfyUI workflow. BFL's Stephen Batifol (stephenbtl) said in a discussion on the comfy repository that there was an error in the ComfyUI workflow and that "Prompt Upsampling should be used all the time." A later comment in the same discussion from BFL's Maanav D (maanavdalal) says "We've worked hard with Comfy to release v0.41.2, with much better and updated workflows." The v0.41.2 tag's only changes since v0.41.0 are a Krea node and workflow-template bumps. Use v0.41.2 or newer, not the v0.41.0 the model support first landed in.

Requirements

ComponentMinimumThis recipe
GPU32 GB VRAM for the all-BF16 file set in this recipe (derivation below). The vendor's smaller int8 and NVFP4 files lower this, see the lower-VRAM noteRTX 5090 (32 GB), not measured: the budget below is derived (/contribute)
RAMNot stated by the vendor—
Storage27,033,425,992 B (25.177 GiB) for the four filessame
SoftwareComfyUI v0.41.2+, hf CLI, accepted Hugging Face access conditions—

Memory budget, from the file sizes in the comfy repository's tree API:

FileBytesGiB
diffusion_models/flux3_image_klein_sd_bf16.safetensors11,097,404,51210.335
text_encoders/qwen3vl_4b_bf16.safetensors8,875,719,4088.266
vae/flux2-vae.safetensors336,211,2920.313
text_encoders/qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors6,724,090,7806.262
Total27,033,425,99225.177

Against a 32 GiB card that leaves 6.823 GiB, before activations, the latent, CUDA context and the desktop. That is a sum of file sizes, not a peak: it ignores everything that is not a weight. The vendor's own peak figure is for different software: the model card states, for the reference code on a B200 at 1024x1024 with the upsampler off, "31 GB in BF16, 26 GB in FP8, 25 GB in NVFP4", and says the upsampler adds about 28 GB on an 80 GB GPU. That is not ComfyUI and not a 32 GB card, so it neither shows that this set fits nor that it does not. I found no ComfyUI peak on any card. The prompt is upsampled before the image model runs, so in principle the files need not all be resident at once, but I did not open the workflow JSON (gated) and have seen no measurement of ComfyUI's unload behaviour for this model; treat 32 GB as the floor this recipe can defend, not as a tested fit.

Lower-VRAM note. The vendor card says "The int8 files run on 8 GB GPUs such as the RTX 3070, and on GPUs without FP8 support" and that NVFP4 needs a Blackwell GPU. The RTX 5090 is Blackwell, so flux3_image_klein_sd_nvfp4.safetensors (5,277,685,632 B) with qwen3vl_4b_int8_convrot.safetensors (4,858,559,240 B) is the smaller option: with the same VAE and upsampler the four files sum to 16.016 GiB. Neither combination has a published 5090 speed or quality comparison, so BF16 is the lead here only because it is the vendor's reference precision.

Installation

1. Update ComfyUI to v0.41.2 or newer

Run from your ComfyUI checkout. The int8, NVFP4 and W4A8 layouts are implemented by the comfy-kitchen package that ComfyUI's own requirements.txt pins (0.2.37 at v0.41.2; the package's tensor module contains TensorWiseINT8Layout, TensorCoreConvRotW4A4Layout and AsymW4A8Int8Layout), so no custom node is needed, but a stale environment needs the requirements re-installed.

cd ComfyUI
git fetch --tags
git checkout v0.41.2
pip install -r requirements.txt
cd ..

Blackwell also needs a PyTorch built for a recent CUDA. The ComfyUI README at v0.41.2 says a cu130 or newer PyTorch is required on Nvidia 20 series and above, and gives this command for the stable build (skip it only if python -c "import torch; print(torch.version.cuda)" already prints 13.0 or higher):

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu130

2. Log in to Hugging Face

The comfy repository is gated (gated: auto): open the repository page, accept the conditions, then authenticate the CLI.

hf auth login

3. Download the four files

Run this from the directory that contains the ComfyUI/ folder, not from inside it: --local-dir is relative, and running it inside ComfyUI/ creates ComfyUI/ComfyUI/models. The command is the one from the vendor card with the first two file names swapped to the BF16 pair (the card says to swap those two names to change precision).

hf download black-forest-labs/flux-3-image-klein-comfy \
  diffusion_models/flux3_image_klein_sd_bf16.safetensors \
  text_encoders/qwen3vl_4b_bf16.safetensors \
  vae/flux2-vae.safetensors \
  text_encoders/qwen3.5_9b_flux3_prompt_upsampler_w4a8.safetensors \
  --local-dir ComfyUI/models

Check that ComfyUI/models/diffusion_models/flux3_image_klein_sd_bf16.safetensors is 11,097,404,512 bytes. The upsampler is the W4A8 file because that is the one all four shipped FLUX 3 Image Klein templates load. The vendor card's file table lists only an int8 upsampler (qwen3.5_9b_flux3_prompt_upsampler_int8_convrot.safetensors, 9,748,113,996 B) and does not describe the W4A8 file or its GPU requirements; the card's "int8 runs on 8 GB" sentence therefore does not cover it, and I found no statement of which GPUs run W4A8. I did not run it on an RTX 5090. If it fails to load, download the int8 file instead and repoint the upsampler loader (clip_name_1 inside the subgraph) to it; that adds 3,024,023,216 B (2.816 GiB), making the set 27.993 GiB.

Running

cd ComfyUI
python main.py --listen

Open http://localhost:8188 and load the distilled text-to-image template (image_flux3_klein_distilled_t2i, in ComfyUI's template browser). Its JSON ships in the public comfyui-workflow-templates-json==0.1.112 wheel that ComfyUI v0.41.2 pins through comfyui-workflow-templates==0.11.86, and I read it there. The template's subgraph defaults to the int8 transformer and encoder, so change two loader widgets to match the BF16 files you downloaded: unet_name to flux3_image_klein_sd_bf16.safetensors and clip_name to qwen3vl_4b_bf16.safetensors. The VAE (flux2-vae.safetensors) and the upsampler loader (clip_name_1, W4A8) already match. The template's defaults are 1024x1024, 16 steps, euler / simple. Per the card:

  • Distilled checkpoint: 16 steps, no guidance.
  • Leave the upsampler switch on. In the shipped template JSON the distilled text-to-image switch defaults to on; the card says the base template ships with it off. The card says "Do not use the model without a prompt upsampler."
  • Editing: the card says the editing templates have no upsampler branch, but the shipped image_flux3_klein_distilled_image_edit template at the pinned version does contain one (a W4A8 upsampler loader, a TextGenerate node and an image-editing system-prompt node behind a switch whose default is off). Turn that switch on, or write the full caption yourself or run the instruction and reference images through another LLM and paste the result as the prompt. That template's sampler node is 16 steps, CFG 1, euler / simple, while its Notes text still says 50 steps and CFG 3.5: follow the sampler node and the card (distilled: 16 steps, no guidance). Any LLM can do this job with the system_prompts.json file from the upsampler repository (Apache-2.0, 9 B parameters).

Expect a slow first generation: the four files total 25.177 GiB and all of them are read from disk on first use.

Results

  • Speed: omitted. I found no measured seconds per image or it/s for this model on an RTX 5090 or any comparable card. A community timing exists in a discussion on the comfy repository but it states no GPU, so it cannot be attributed to a card.
  • VRAM usage: no peak measured on this card. Derived weight total 25.177 GiB (table above); vendor peak 31 GB in BF16 is a B200 reference-code figure with the upsampler off. See /check/flux-3-image-klein/rtx-5090 for any benchmark that lands later.
  • Quality notes: reception in launch week was mixed; the same discussion contains reports of bad anatomy and replies that blame the missing upsampler or the old workflow. BFL's v0.41.2 comment above says the updated workflows should work better with their defaults; I did not test that. Treat quality claims from before v0.41.2 as unreliable.
  • License: FLUX Kommunity License v1.0: non-commercial, plus commercial output for Qualifying Users under US$5M gross annualized revenue, per the model card. The text encoder and upsampler are Apache-2.0.

For the full benchmark data, see /check/flux-3-image-klein/rtx-5090.

Troubleshooting

Output looks generic, or anatomy is badly wrong

Check three things in order: ComfyUI is v0.41.2 or newer, the upsampler switch is on, and the diffusion file has _sd_ in its name. Running the Base weights through the distilled settings (16 steps, no guidance) is an easy mistake because the unsuffixed names are Base.

hf download fails with 401 or 403

The repository is gated. Accept the conditions on the web page with the same account you used for hf auth login.

Files landed in ComfyUI/ComfyUI/models

The download command was run from inside ComfyUI/. Move the files up or re-run it from the parent directory.

Out of memory

No OOM report for this model turned up in the ComfyUI issue tracker or the Hugging Face discussion titles for the three FLUX 3 Klein repositories (searched 2026-10-16). If the all-BF16 set does not fit your build, swap in the int8 or NVFP4 files from the lower-VRAM note; the card says to swap the first two file names.

Report problems via submission form.

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.

share this recipe
Share
common questions
How much VRAM does FLUX 3 Image Klein need?

About 32 GB — the minimum this recipe targets.

Which GPUs is FLUX 3 Image Klein tested on?

RTX 5090 (32 GB).

How hard is this setup?

Intermediate — follow the steps above.

next