{ "model_name": "flux.2-klein-4b", "model_variant": "klein-4b-distilled-onnx-webgpu-q4", "runtime": "onnxruntime-webgpu", "ort_python_version": "1.25.1", "num_steps": 4, "guidance": 1.0, "context_clip": 0, "text_seq_len": 512, "context_dim": 7680, "latent_channels": 128, "latent_downsample": 16, "default_width": 256, "default_height": 256, "target_shard_bytes": 2147483648, "tokenizer_dir": "tokenizer", "tokenizer_source_model": "black-forest-labs/FLUX.2-klein-4B", "tokenizer_source_subfolder": "tokenizer", "models": { "text_encoder": { "file": "flux2-klein-4b-text-encoder-q4.onnx", "manifest": "text-encoder-q4-manifest.json", "dtype": "float16-activations-int4-weights", "source_model": "black-forest-labs/FLUX.2-klein-4B", "source_subfolder": "text_encoder", "inputs": [ "input_ids", "attention_mask" ], "outputs": [ "ctx" ], "execution_provider": "webgpu", "quantization": { "format": "MatMulNBits", "bits": 4, "block_size": 16, "is_symmetric": false, "op_types_to_quantize": [ "MatMul" ], "matmul_nbits_nodes": 189, "remaining_matmul_nodes": 55, "flattened_matmul_nbits_inputs": 189, "flattened_matmul_nbits_zero_points": 189, "accuracy_level": 0, "streaming_source": true }, "shards": { "count": 2, "total_bytes": 2566461440, "largest_bytes": 2136381440 } }, "transformer": { "file": "flux2-klein-4b-transformer-q4.onnx", "manifest": "transformer-q4-manifest.json", "dtype": "float16-activations-selective-fp32-int4-weights", "activation_dtype": "float16-selective-fp32", "inputs": [ "x", "x_ids", "timesteps", "ctx", "ctx_ids" ], "outputs": [ "pred" ], "execution_provider": "webgpu", "quantization": { "format": "MatMulNBits", "algorithm": "ORT", "bits": 4, "block_size": 16, "is_symmetric": false, "op_types_to_quantize": [ "MatMul" ], "matmul_nbits_nodes": 89, "remaining_matmul_nodes": 100, "flattened_matmul_nbits_inputs": 89, "flattened_matmul_nbits_zero_points": 89, "rope_fp32_rewrites": { "position_id_inputs": 0, "position_id_casts": 0, "rope_frequency_constants": 0 }, "accuracy_level": 4, "streaming_source": true }, "attention_scale_fix": { "type": "fixed_split_scale", "head_dim": 128, "scale_name": "flux2_attention_split_scale_f32", "scale_dtype": "float32", "scale": 0.29730177875068026, "patched_attention_matmuls": 50, "patched_scale_mul_inputs": 100, "matmul_names": [ "/model/MatMul", "/model/MatMul_2", "/model/MatMul_4", "/model/MatMul_6", "/model/MatMul_8", "/model/MatMul_10", "/model/MatMul_12", "/model/MatMul_14", "/model/MatMul_16", "/model/MatMul_18", "/model/MatMul_20", "/model/MatMul_22", "/model/MatMul_24", "/model/MatMul_26", "/model/MatMul_28", "/model/MatMul_30", "/model/MatMul_32", "/model/MatMul_34", "/model/MatMul_36", "/model/MatMul_38", "/model/MatMul_40", "/model/MatMul_42", "/model/MatMul_44", "/model/MatMul_46", "/model/MatMul_48", "/model/MatMul_50", "/model/MatMul_52", "/model/MatMul_54", "/model/MatMul_56", "/model/MatMul_58", "/model/MatMul_60", "/model/MatMul_62", "/model/MatMul_64", "/model/MatMul_66", "/model/MatMul_68", "/model/MatMul_70", "/model/MatMul_72", "/model/MatMul_74", "/model/MatMul_76", "/model/MatMul_78", "/model/MatMul_80", "/model/MatMul_82", "/model/MatMul_84", "/model/MatMul_86", "/model/MatMul_88", "/model/MatMul_90", "/model/MatMul_92", "/model/MatMul_94", "/model/MatMul_96", "/model/MatMul_98" ], "mul_names": [ "/model/Mul_8", "/model/Mul_9", "/model/Mul_10", "/model/Mul_11", "/model/Mul_26", "/model/Mul_27", "/model/Mul_28", "/model/Mul_29", "/model/Mul_44", "/model/Mul_45", "/model/Mul_46", "/model/Mul_47", "/model/Mul_62", "/model/Mul_63", "/model/Mul_64", "/model/Mul_65", "/model/Mul_80", "/model/Mul_81", "/model/Mul_82", "/model/Mul_83", "/model/Mul_97", "/model/Mul_98", "/model/Mul_99", "/model/Mul_100", "/model/Mul_109", "/model/Mul_110", "/model/Mul_111", "/model/Mul_112", "/model/Mul_121", "/model/Mul_122", "/model/Mul_123", "/model/Mul_124", "/model/Mul_133", "/model/Mul_134", "/model/Mul_135", "/model/Mul_136", "/model/Mul_145", "/model/Mul_146", "/model/Mul_147", "/model/Mul_148", "/model/Mul_157", "/model/Mul_158", "/model/Mul_159", "/model/Mul_160", "/model/Mul_169", "/model/Mul_170", "/model/Mul_171", "/model/Mul_172", "/model/Mul_181", "/model/Mul_182", "/model/Mul_183", "/model/Mul_184", "/model/Mul_193", "/model/Mul_194", "/model/Mul_195", "/model/Mul_196", "/model/Mul_205", "/model/Mul_206", "/model/Mul_207", "/model/Mul_208", "/model/Mul_217", "/model/Mul_218", "/model/Mul_219", "/model/Mul_220", "/model/Mul_229", "/model/Mul_230", "/model/Mul_231", "/model/Mul_232", "/model/Mul_241", "/model/Mul_242", "/model/Mul_243", "/model/Mul_244", "/model/Mul_253", "/model/Mul_254", "/model/Mul_255", "/model/Mul_256", "/model/Mul_265", "/model/Mul_266", "/model/Mul_267", "/model/Mul_268", "/model/Mul_277", "/model/Mul_278", "/model/Mul_279", "/model/Mul_280", "/model/Mul_289", "/model/Mul_290", "/model/Mul_291", "/model/Mul_292", "/model/Mul_301", "/model/Mul_302", "/model/Mul_303", "/model/Mul_304", "/model/Mul_313", "/model/Mul_314", "/model/Mul_315", "/model/Mul_316", "/model/Mul_325", "/model/Mul_326", "/model/Mul_327", "/model/Mul_328" ] }, "attention_score_fp32": { "score_matmuls": 50, "scale_muls": 100, "input_casts": 100, "softmax_casts": 50 }, "export_image_seq_len": 256, "shards": { "count": 2, "total_bytes": 2543824896, "largest_bytes": 2128121856 } }, "vae_decoder_pre": { "file": "flux2-klein-4b-vae-decoder-pre-attn-fp16.onnx", "dtype": "float16", "inputs": [ "z" ], "outputs": [ "/decoder/block_1/Add_output_0", "/decoder/attn_1/Mul_6_output_0", "/decoder/attn_1/Mul_7_output_0", "/decoder/attn_1/Reshape_2_output_0" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 11352251 } }, "vae_decoder_attn_chunk": { "file": "flux2-klein-4b-vae-decoder-attn-chunk-fp16.onnx", "dtype": "float16", "chunk_size": 1024, "head_dim": 512, "inputs": [ "q_chunk", "kt", "v" ], "outputs": [ "attn_chunk" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 480 } }, "vae_decoder_post_stage_0": { "file": "flux2-klein-4b-vae-decoder-post-stage0-fp16.onnx", "dtype": "float16", "inputs": [ "/decoder/block_1/Add_output_0", "/decoder/attn_1/MatMul_1_output_0" ], "outputs": [ "/decoder/block.2_2/Add_output_0" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 85202062 } }, "vae_decoder_post_stage_1": { "file": "flux2-klein-4b-vae-decoder-post-stage1-fp16.onnx", "dtype": "float16", "inputs": [ "/decoder/block.2_2/Add_output_0" ], "outputs": [ "/decoder/block.0_3/Add_output_0" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 2141312 } }, "vae_decoder_post_stage_2": { "file": "flux2-klein-4b-vae-decoder-post-stage2-fp16.onnx", "dtype": "float16", "inputs": [ "/decoder/block.0_3/Add_output_0" ], "outputs": [ "/decoder/block.2_3/Add_output_0" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 1196419 } }, "vae_decoder_post_stage_3": { "file": "flux2-klein-4b-vae-decoder-post-stage3-fp16.onnx", "dtype": "float16", "inputs": [ "/decoder/block.2_3/Add_output_0" ], "outputs": [ "image" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 10460 } }, "transformer_fused_4step": { "file": "flux2-klein-4b-transformer-q4-fused-4step.onnx", "manifest": "transformer-q4-manifest.json", "dtype": "float16-activations-selective-fp32-int4-weights", "activation_dtype": "float16-selective-fp32", "inputs": [ "x", "x_ids", "timesteps", "ctx", "ctx_ids" ], "outputs": [ "latent" ], "execution_provider": "webgpu", "quantization": { "format": "MatMulNBits", "algorithm": "ORT", "bits": 4, "block_size": 16, "is_symmetric": false, "op_types_to_quantize": [ "MatMul" ], "matmul_nbits_nodes": 89, "remaining_matmul_nodes": 100, "flattened_matmul_nbits_inputs": 89, "flattened_matmul_nbits_zero_points": 89, "rope_fp32_rewrites": { "position_id_inputs": 0, "position_id_casts": 0, "rope_frequency_constants": 0 }, "accuracy_level": 4, "streaming_source": true }, "attention_scale_fix": { "type": "fixed_split_scale", "head_dim": 128, "scale_name": "flux2_attention_split_scale_f32", "scale_dtype": "float32", "scale": 0.29730177875068026, "patched_attention_matmuls": 50, "patched_scale_mul_inputs": 100, "matmul_names": [ "/model/MatMul", "/model/MatMul_2", "/model/MatMul_4", "/model/MatMul_6", "/model/MatMul_8", "/model/MatMul_10", "/model/MatMul_12", "/model/MatMul_14", "/model/MatMul_16", "/model/MatMul_18", "/model/MatMul_20", "/model/MatMul_22", "/model/MatMul_24", "/model/MatMul_26", "/model/MatMul_28", "/model/MatMul_30", "/model/MatMul_32", "/model/MatMul_34", "/model/MatMul_36", "/model/MatMul_38", "/model/MatMul_40", "/model/MatMul_42", "/model/MatMul_44", "/model/MatMul_46", "/model/MatMul_48", "/model/MatMul_50", "/model/MatMul_52", "/model/MatMul_54", "/model/MatMul_56", "/model/MatMul_58", "/model/MatMul_60", "/model/MatMul_62", "/model/MatMul_64", "/model/MatMul_66", "/model/MatMul_68", "/model/MatMul_70", "/model/MatMul_72", "/model/MatMul_74", "/model/MatMul_76", "/model/MatMul_78", "/model/MatMul_80", "/model/MatMul_82", "/model/MatMul_84", "/model/MatMul_86", "/model/MatMul_88", "/model/MatMul_90", "/model/MatMul_92", "/model/MatMul_94", "/model/MatMul_96", "/model/MatMul_98" ], "mul_names": [ "/model/Mul_8", "/model/Mul_9", "/model/Mul_10", "/model/Mul_11", "/model/Mul_26", "/model/Mul_27", "/model/Mul_28", "/model/Mul_29", "/model/Mul_44", "/model/Mul_45", "/model/Mul_46", "/model/Mul_47", "/model/Mul_62", "/model/Mul_63", "/model/Mul_64", "/model/Mul_65", "/model/Mul_80", "/model/Mul_81", "/model/Mul_82", "/model/Mul_83", "/model/Mul_97", "/model/Mul_98", "/model/Mul_99", "/model/Mul_100", "/model/Mul_109", "/model/Mul_110", "/model/Mul_111", "/model/Mul_112", "/model/Mul_121", "/model/Mul_122", "/model/Mul_123", "/model/Mul_124", "/model/Mul_133", "/model/Mul_134", "/model/Mul_135", "/model/Mul_136", "/model/Mul_145", "/model/Mul_146", "/model/Mul_147", "/model/Mul_148", "/model/Mul_157", "/model/Mul_158", "/model/Mul_159", "/model/Mul_160", "/model/Mul_169", "/model/Mul_170", "/model/Mul_171", "/model/Mul_172", "/model/Mul_181", "/model/Mul_182", "/model/Mul_183", "/model/Mul_184", "/model/Mul_193", "/model/Mul_194", "/model/Mul_195", "/model/Mul_196", "/model/Mul_205", "/model/Mul_206", "/model/Mul_207", "/model/Mul_208", "/model/Mul_217", "/model/Mul_218", "/model/Mul_219", "/model/Mul_220", "/model/Mul_229", "/model/Mul_230", "/model/Mul_231", "/model/Mul_232", "/model/Mul_241", "/model/Mul_242", "/model/Mul_243", "/model/Mul_244", "/model/Mul_253", "/model/Mul_254", "/model/Mul_255", "/model/Mul_256", "/model/Mul_265", "/model/Mul_266", "/model/Mul_267", "/model/Mul_268", "/model/Mul_277", "/model/Mul_278", "/model/Mul_279", "/model/Mul_280", "/model/Mul_289", "/model/Mul_290", "/model/Mul_291", "/model/Mul_292", "/model/Mul_301", "/model/Mul_302", "/model/Mul_303", "/model/Mul_304", "/model/Mul_313", "/model/Mul_314", "/model/Mul_315", "/model/Mul_316", "/model/Mul_325", "/model/Mul_326", "/model/Mul_327", "/model/Mul_328" ] }, "attention_score_fp32": { "score_matmuls": 50, "scale_muls": 100, "input_casts": 100, "softmax_casts": 50 }, "export_image_seq_len": 256, "shards": { "count": 2, "total_bytes": 2543824896, "largest_bytes": 2128121856 }, "fused_steps": 4 }, "vae_encoder": { "file": "flux2-klein-4b-vae-encoder-fp16.onnx", "dtype": "float16", "source_model": "black-forest-labs/FLUX.2-klein-4B", "source_subfolder": "vae", "inputs": [ "image" ], "outputs": [ "z" ], "execution_provider": "webgpu", "shards": { "count": 0, "total_bytes": 0, "onnx_bytes": 68964001 } } }, "notes": "WebGPU bundle: q4 text encoder, q4 transformer with fp16 activations, fp32 attention score/softmax math, fixed attention split-scale constants, and fp16 VAE decoder split into pre-attention, attention-chunk, and post-attention stages so each session can be created and released independently.", "vae_decoder_post_stage_keys": [ "vae_decoder_post_stage_0", "vae_decoder_post_stage_1", "vae_decoder_post_stage_2", "vae_decoder_post_stage_3" ], "supports_img2img": true }