CoolFace
Modelpublic

radames/flux2-klein-edge-web

sourceHugging Faceotherupdated 8d agoView on Hugging Face
0likes
Model Card

FLUX.2 Klein 4B — browser weights

The weights behind radames/flux-klein-web, a demo that runs the full FLUX.2 Klein 4B pipeline inside a browser tab: the transformer in hand-written WGSL (WebGPU), the distilled text encoder and BFL's distilled VAE through onnxruntime-web. The page streams these files straight into the browser and keeps them in the origin private file system, so a second visit starts in seconds.

This repo holds weights only. The engine is the flux-klein.js npm package (the WGSL transformer, the ONNX text encoder and VAE, the OPFS cache); the demo page lives in the Space. The package fetches from this repo by default:

js
import { createFluxKlein } from "flux-klein.js";
const klein = await createFluxKlein(); // base: https://huggingface.co/radames/flux2-klein-edge-web/resolve/main
const { rgba, width, height } = await klein.generate({ prompt: "a red bicycle", width: 256, height: 256 });

Layout

pathwhatsize
web_weights/int8 transformer, 9 shards + manifest.json: q [N, K] int8 with f32 per-row scales. The desktop build keeps it resident on the GPU.3.8 GB
web_weights_mobile/int4 (group 64, asymmetric) block matmuls + the same small tensors, 6 shards. Streamed through a small GPU ring; the phone build.2.3 GB
web_weights_lora_2step/the 2-step distillation LoRA as a separate rank-64 int8 set, applied at run time on either transformer set96 MB
web_weights_lora_sprint/the SANA-Sprint few-step LoRA as a rank-256 int8 set, applied at run time on either transformer set for the 1–2 step presets0.39 GB
te_onnx/distilled 0.6B text encoder, ONNX with MatMulNBits q8 (desktop)0.96 GB
te_onnx_slim/the same graph minus its embedding table, plus embed_tokens.f16.bin looked up client-side (mobile)0.66 GB
vae_onnx/FLUX.2 small decoder as fixed-shape graphs r128 / r256 / r320 (tiles), reference encoders enc128 / enc256 / enc512, bn_stats.json. model.ort where present is the ORT-format twin of model.onnx + .data.1.2 GB
tokenizer/Qwen3 tokenizer; the chat template is applied client-side15 MB

Every web_weights*/ set is one manifest.json describing tensors as byte ranges into w0.bin … w<n-1>.bin (raw little-endian bytes, 16-byte aligned). Loaders validate each shard's length against the manifest and each cached file against the Hub's ETag, so a re-upload here invalidates browser caches on its own.

What a page downloads on first run: desktop ≈ 5 GB (web_weights, te_onnx, vae_onnx); phone ≈ 3.2 GB (web_weights_mobile, te_onnx_slim, vae_onnx); 2 steps add the LoRA.

Provenance

Quantized from black-forest-labs/FLUX.2-klein-4B. int8 is per-row absmax; int4 is asymmetric group-wise along K. End-to-end parity against the f32-dequantized reference is rel-L2 ≈ 1e-2 (bf16-scale rounding noise).

The weights are released under the FLUX.2 Klein license linked above; using them means accepting it.