FLUX 3 Image Klein on a DGX Spark and an RTX 5090
Time per image for FLUX 3 Image Klein with the prompt upsampler switched on, in BF16, INT8 and NVFP4, at 2048 and 1024 pixels, on one DGX Spark 128 GB and one RTX 5090 32 GB. Same seed and prompts on both devices, but the upsampler wrote different captions on the two, so the pictures differ.

Not ranked. Measured on the devices shown here only. Simpler protocol than the image test v2 of 20 Oct 2026: 6 prompts, one seed, median of 6, prompt upsampler on. Shown separately and not ranked.
RTX 5090 32 GB · BF16 · 2048×2048
one RTX 5090 32 GB
RTX 5090 32 GB · INT8 · 2048×2048
one RTX 5090 32 GB
RTX 5090 32 GB · NVFP4 · 2048×2048
one RTX 5090 32 GB
RTX 5090 32 GB · BF16 · 1024×1024
one RTX 5090 32 GB
RTX 5090 32 GB · INT8 · 1024×1024
one RTX 5090 32 GB
RTX 5090 32 GB · NVFP4 · 1024×1024
one RTX 5090 32 GB
DGX Spark 128 GB · BF16 · 2048×2048
one DGX Spark (GB10) 128 GB
DGX Spark 128 GB · INT8 · 2048×2048
one DGX Spark (GB10) 128 GB
DGX Spark 128 GB · NVFP4 · 2048×2048
one DGX Spark (GB10) 128 GB
DGX Spark 128 GB · BF16 · 1024×1024
one DGX Spark (GB10) 128 GB
DGX Spark 128 GB · INT8 · 1024×1024
one DGX Spark (GB10) 128 GB
DGX Spark 128 GB · NVFP4 · 1024×1024
one DGX Spark (GB10) 128 GB
Real outputs








PSNR in dB between the GB10 image and the RTX 5090 image, same seed 42 and same prompt. Column 4: each device used its own upsampled caption. Column 5: the RTX 5090 re-ran the image stage with the caption written on the GB10 (1024 px, BF16 and INT8 only). Higher means closer, no pair is pixel-identical.
| Set | Prompt | Same caption on both devices | PSNR, own captions (dB) | PSNR, GB10 caption on 5090 (dB) |
|---|---|---|---|---|
| BF16 2048×2048 | pc-build | no | 14.6 | not run |
| BF16 2048×2048 | assault-rifle | no | 26.9 | not run |
| BF16 2048×2048 | porsche-964 | no | 11.2 | not run |
| BF16 2048×2048 | ducati-panigale | no | 14.0 | not run |
| BF16 2048×2048 | cigar-whisky | yes | 42.3 | not run |
| BF16 2048×2048 | ribeye-steak | no | 14.1 | not run |
| INT8 2048×2048 | pc-build | no | 17.0 | not run |
| INT8 2048×2048 | assault-rifle | no | 15.1 | not run |
| INT8 2048×2048 | porsche-964 | no | 14.4 | not run |
| INT8 2048×2048 | ducati-panigale | no | 14.7 | not run |
| INT8 2048×2048 | cigar-whisky | no | 18.0 | not run |
| INT8 2048×2048 | ribeye-steak | no | 12.8 | not run |
| NVFP4 2048×2048 | pc-build | no | 15.0 | not run |
| NVFP4 2048×2048 | assault-rifle | no | 27.9 | not run |
| NVFP4 2048×2048 | porsche-964 | no | 10.8 | not run |
| NVFP4 2048×2048 | ducati-panigale | no | 13.9 | not run |
| NVFP4 2048×2048 | cigar-whisky | yes | 30.4 | not run |
| NVFP4 2048×2048 | ribeye-steak | no | 14.3 | not run |
| BF16 1024×1024 | pc-build | no | 14.1 | 31.8 |
| BF16 1024×1024 | assault-rifle | no | 38.3 | 38.0 |
| BF16 1024×1024 | porsche-964 | no | 11.5 | 44.8 |
| BF16 1024×1024 | ducati-panigale | no | 13.8 | 38.9 |
| BF16 1024×1024 | cigar-whisky | yes | 45.8 | 45.8 |
| BF16 1024×1024 | ribeye-steak | no | 14.2 | 38.8 |
| INT8 1024×1024 | pc-build | no | 16.4 | 32.3 |
| INT8 1024×1024 | assault-rifle | no | 16.9 | 29.0 |
| INT8 1024×1024 | porsche-964 | no | 12.4 | 23.6 |
| INT8 1024×1024 | ducati-panigale | no | 13.4 | 30.0 |
| INT8 1024×1024 | cigar-whisky | no | 18.4 | 38.0 |
| INT8 1024×1024 | ribeye-steak | no | 12.3 | 35.1 |
| NVFP4 1024×1024 | pc-build | no | 14.5 | not run |
| NVFP4 1024×1024 | assault-rifle | no | 27.7 | not run |
| NVFP4 1024×1024 | porsche-964 | no | 11.6 | not run |
| NVFP4 1024×1024 | ducati-panigale | no | 14.1 | not run |
| NVFP4 1024×1024 | cigar-whisky | yes | 29.2 | not run |
| NVFP4 1024×1024 | ribeye-steak | no | 13.9 | not run |
How it was run
- Model files: official BFL ComfyUI package (flux-3-image-klein-comfy), sha256 checked. Text encoder Qwen3-VL-4B, prompt upsampler Qwen3.5-9B fine-tune from BFL.
- BF16 = BF16 transformer, BF16 text encoder, BF16 upsampler. INT8 = int8 transformer and text encoder, w4a8 upsampler. NVFP4 = the BF16 setup with only the transformer swapped for the official NVFP4 file.
- Resolution 2048×2048 (what the shipped ComfyUI workflow sets) and 1024×1024 (reference code). Distilled model, 16 steps, euler/simple, cfg 1.0, timestep shift alpha 16 (workflow default).
- Prompt upsampler on (BFL says to always run it). Same 6 short prompts and seed 42 on both devices.
- ComfyUI v0.44.1 release, NVIDIA PyTorch container 26.07, no custom nodes. One fresh container per set.
- Method: 1 warm-up image discarded, then the 6 prompts one after another, median of 6. Time = request until the image is finished, upsampler included.
What to keep in mind
The upsampler wrote different captions on the two devices. Of the 36 prompt and set pairs shown, only 4 got identical captions (the cigar and whisky prompt, BF16 and NVFP4, both resolutions). Different caption means different picture, so the images on the two devices are not the same scene, and the upsampler time depends on caption length.
Same seed means the same recipe, not the same pixels. Even with the GB10 caption fed to the RTX 5090, no image was pixel-identical (PSNR 31.8 to 45.8 dB for BF16 and 23.6 to 38.0 dB for INT8 at 1024 px). INT8 differs more than BF16. Each device repeats its own images exactly.
INT8 uses a different upsampler file (w4a8) than BF16 and NVFP4, so INT8 pictures show a different caption and scene. Only BF16 against NVFP4 uses the same caption on one device. PSNR NVFP4 against BF16 (median, range): GB10 2048 px 21.5 dB (range 18.2 to 24.0), GB10 1024 px 22.2 dB (range 21.0 to 25.3), RTX 5090 2048 px 21.5 dB (range 20.4 to 24.6), RTX 5090 1024 px 21.8 dB (range 19.3 to 25.0). PSNR measures numeric difference, not image quality, and we did not score quality.
NVFP4 ran on both devices. It is not an author workflow: BFL ships no NVFP4 workflow, so we swapped only the transformer file in the BF16 workflow. On the RTX 5090, BF16 and NVFP4 peaked at about 30 GB of the 32 GB card (ComfyUI moves weights in and out as needed). All 14 sets (7 per device) finished without errors. Twelve are shown here; the two sets with a different alpha setting (6.93) are left out of this page.
The graph is a hand-built API version of the two sub-graphs of the author workflow (prompt upsampler and diffusion), not the workflow file loaded in the ComfyUI interface. Settings were checked against the workflow file (resolution selector 4.0 MP, 16 steps, cfg 1.0, euler/simple, upsampler decoding with top_k 1, top_p 0.95, presence penalty 1.5).
The upsampler is a large part of the time on the GB10: median 28.5 s of 87.5 s at 2048 px in BF16, and 28.7 s of 40.2 s at 1024 px. On the RTX 5090 it is 3.6 s to 4.7 s. The INT8 upsampler needs about 9 s on the GB10.
GB10 memory finding: our first GB10 run right after downloading 59 GB of weights was thrown away. The downloaded files sat in the page cache, ComfyUI on the GB10 only counted truly free memory, loaded the models partly and swapped them in and out per image (warm-up image 311.3 s with a 89.3 s upsampler stage, against 241.7 s and 22.7 s in the valid run). Before each set we now drop the page cache of our own weight files without root rights. Whoever starts ComfyUI on a GB10 right after a big download measures this effect.
Only 6 prompts without people. Community reports about distorted faces at low resolution were not tested here. Image quality is not scored. Timings are one setup (ComfyUI v0.44.1), not a statement about other engines.
License: FLUX Kommunity License v1.0, non-commercial use and commercial use of outputs only under its conditions, see the license text in the model repository.
