| { |
| "schema": "tokforge-sdxl-qnn-npu/manifest@1", |
| "model": "realvisxl-v4.0-lightning", |
| "variant": "fp16-encoders + TAESDXL", |
| "scheduler": "EulerDiscrete", |
| "native_steps": 6, |
| "license": "openrail++", |
| "license_note": "RealVisXL V4.0 Lightning is released under the CreativeML OpenRAIL++-M license. Commercial use permitted; no revenue cap (unlike the prior SDXL-Turbo Stability AI Community License). Use-based restrictions per the OpenRAIL++ schedule apply.", |
| "generated": "2026-06-06T00:00:00Z", |
| "repo": "darkmaniac7/TokForge-SDXL-QNN-NPU", |
| "notes": [ |
| "vc410: 'Faithful' NPU tier = RealVisXL-v4.0-Lightning, replacing cursed base SDXL-Turbo (few-step distillation -> fused heads / doubled bodies). Bin-only swap on the SAME W8A16 NPU recipe + IO contract; the driver default scheduler flips EulerAncestral -> EulerDiscrete (Lightning is distilled for deterministic few-step Euler) and native steps 4 -> 6.", |
| "App reads the device Hexagon arch (dsp_arch) and picks the matching native set. Four native sets ship: v73/v75/v79/v81. Forward-compat still applies (a lower-arch bin runs on a higher-arch DSP) as a fallback.", |
| "source=ours: clean-room RealVisXL -> W8A16 -> QAIRT 2.40 conversion, drop-in for our libsdxl_qnn_driver (graph name 'model', host combined-emb input).", |
| "verified=true = run on real silicon and confirmed coherent (no body-horror). V75 (Lenovo .69) + V81 (RedMagic .82) device-verified. v73/v79 offline-validated, awaiting handsets.", |
| "The 4 per-arch bins (unet/text_encoder_1_fp16/text_encoder_2_fp16/sdxl_emb_mlp) are the only RealVisXL swap; taesdxl_decoder.mnn (universal SDXL tiny-VAE) + the dual CLIP tokenizers + config are checkpoint-agnostic and byte-identical to the prior set." |
| ], |
| "arch_to_socs": { |
| "73": { |
| "name": "Hexagon V73", |
| "socs": [ |
| "SM8550 (Snapdragon 8 Gen 2)", |
| "SM8635 (8s Gen 3)", |
| "SM7475 (7+ Gen 3)" |
| ] |
| }, |
| "75": { |
| "name": "Hexagon V75", |
| "socs": [ |
| "SM8650 (Snapdragon 8 Gen 3)", |
| "SM7675 (7 Gen 4)" |
| ] |
| }, |
| "79": { |
| "name": "Hexagon V79", |
| "socs": [ |
| "SM8750 (Snapdragon 8 Elite)", |
| "SM8750-AB (8 Elite for Galaxy)" |
| ] |
| }, |
| "81": { |
| "name": "Hexagon V81", |
| "socs": [ |
| "SM8850 (Snapdragon 8 Elite Gen 5)" |
| ] |
| } |
| }, |
| "io_contracts": { |
| "ours-sdxl-emb": { |
| "graph_name": "model", |
| "unet_inputs": { |
| "sample": "[1,4,128,128] UFIXED16 (NCHW, raw scheduler latent)", |
| "emb": "[1,1280] UFIXED16 host combined-emb = time_embedding(time_proj(t)) + add_embedding(cat(pooled, add_time_proj(time_ids))); computed host-side via sdxl_emb_mlp.bin", |
| "text_embedding": "[1,77,2048] UFIXED16 = concat CLIP-L last_hidden[1,77,768] ++ bigG last_hidden[1,77,1280]" |
| }, |
| "unet_output": "output [1,4,128,128] UFIXED16", |
| "text_encoder_1": "CLIP-L: in input_ids INT32 [1,77] -> out last_hidden [1,77,768] (penultimate, hidden -2)", |
| "text_encoder_2": "OpenCLIP-bigG (+projection): in input_ids INT32 [1,77] -> out last_hidden [1,77,1280] + pooled [1,1280]", |
| "vae": "TAESDXL CPU tiny-VAE (taesdxl_decoder.mnn), in latent [1,4,128,128] -> out [1,3,1024,1024]; CPU MNN path only (SDXL_VAE_BACKEND=cpu)", |
| "scheduler": "EulerDiscrete (deterministic, sigma_up=0), trailing spacing, epsilon prediction, 6 steps native, guidance_scale 0 (NO CFG -> ONE UNet pass per step)", |
| "vae_scaling_factor": 0.13025, |
| "resolution": 1024, |
| "driver": "libsdxl_qnn_driver.so (#51 ImageGenerationSdxlNpuCliHelper); flags --text_encoder_1/--text_encoder_2/--unet/--vae_mnn/--emb_mlp/--vocab_1/--merges_1/--vocab_2/--merges_2/--backend/--system_library; env SDXL_VAE_BACKEND=cpu" |
| } |
| }, |
| "sets": { |
| "ours/v73": { |
| "source": "ours", |
| "dsp_arch": 73, |
| "representative_soc": "SM8550 (Snapdragon 8 Gen 2)", |
| "soc_model": 43, |
| "qairt_runtime_required": "2.40", |
| "skel": "libQnnHtpV73Skel.so", |
| "io_contract": "ours-sdxl-emb", |
| "verified": false, |
| "verify_note": "Native v73 bins produced from the same arch-agnostic W8A16 DLC as the device-verified V75/V81 sets (only dsp_arch/soc_model differ); offline-validated, awaiting a handset.", |
| "files": { |
| "unet.bin": { |
| "path": "v73/unet.bin", |
| "size": 2637426688, |
| "md5": "704a3831c4b7b0307ebe6e09749e3116" |
| }, |
| "text_encoder_1_fp16.bin": { |
| "path": "v73/text_encoder_1_fp16.bin", |
| "size": 234770432, |
| "md5": "52e4831a9d5cedb5ac5294048baeeb61" |
| }, |
| "text_encoder_2_fp16.bin": { |
| "path": "v73/text_encoder_2_fp16.bin", |
| "size": 1401405440, |
| "md5": "0e007a1c5ea717e1cbd2a269b8551995" |
| }, |
| "sdxl_emb_mlp.bin": { |
| "path": "v73/sdxl_emb_mlp.bin", |
| "size": 29184000, |
| "md5": "4716e990d5f83b194ebe90a0e695f3f5" |
| }, |
| "taesdxl_decoder.mnn": { |
| "path": "v73/taesdxl_decoder.mnn", |
| "size": 2464388, |
| "md5": "bfbfb43faa70fc3885bfef24a60b8882" |
| }, |
| "tokenizer/vocab.json": { |
| "path": "v73/tokenizer/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer/merges.txt": { |
| "path": "v73/tokenizer/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer/special_tokens_map.json": { |
| "path": "v73/tokenizer/special_tokens_map.json", |
| "size": 586, |
| "md5": "f1c97d73dc836331f2138893217d32d8" |
| }, |
| "tokenizer/tokenizer_config.json": { |
| "path": "v73/tokenizer/tokenizer_config.json", |
| "size": 704, |
| "md5": "b0e83247e6c27802b6f2ccce2615e402" |
| }, |
| "tokenizer_2/vocab.json": { |
| "path": "v73/tokenizer_2/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer_2/merges.txt": { |
| "path": "v73/tokenizer_2/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer_2/special_tokens_map.json": { |
| "path": "v73/tokenizer_2/special_tokens_map.json", |
| "size": 460, |
| "md5": "1f2ba80c3ba1db3a1729f82f0c2667ce" |
| }, |
| "tokenizer_2/tokenizer_config.json": { |
| "path": "v73/tokenizer_2/tokenizer_config.json", |
| "size": 855, |
| "md5": "7a07b6cea8034258f7a153860e81bc41" |
| }, |
| "config.json": { |
| "path": "v73/config.json", |
| "size": 941, |
| "md5": "cef955fa8c4175c7c4a540119507a35d" |
| } |
| } |
| }, |
| "ours/v75": { |
| "source": "ours", |
| "dsp_arch": 75, |
| "representative_soc": "SM8650 (Snapdragon 8 Gen 3)", |
| "soc_model": 57, |
| "qairt_runtime_required": "2.40", |
| "skel": "libQnnHtpV75Skel.so", |
| "io_contract": "ours-sdxl-emb", |
| "verified": true, |
| "verify_note": "Device-verified coherent (no body-horror) on real SM8650 (Snapdragon 8 Gen 3)/v75 silicon, RealVisXL-v4.0-Lightning, 6-step EulerDiscrete, ~5s/1024px.", |
| "files": { |
| "unet.bin": { |
| "path": "v75/unet.bin", |
| "size": 2637357056, |
| "md5": "b477ffaed6e507348dc4b4d450c32fdc" |
| }, |
| "text_encoder_1_fp16.bin": { |
| "path": "v75/text_encoder_1_fp16.bin", |
| "size": 234770432, |
| "md5": "7be99090bfe35217bcb98afeb854c125" |
| }, |
| "text_encoder_2_fp16.bin": { |
| "path": "v75/text_encoder_2_fp16.bin", |
| "size": 1401405440, |
| "md5": "8a0df4338971687307d7fd074e5546a4" |
| }, |
| "sdxl_emb_mlp.bin": { |
| "path": "v75/sdxl_emb_mlp.bin", |
| "size": 29184000, |
| "md5": "4716e990d5f83b194ebe90a0e695f3f5" |
| }, |
| "taesdxl_decoder.mnn": { |
| "path": "v75/taesdxl_decoder.mnn", |
| "size": 2464388, |
| "md5": "bfbfb43faa70fc3885bfef24a60b8882" |
| }, |
| "tokenizer/vocab.json": { |
| "path": "v75/tokenizer/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer/merges.txt": { |
| "path": "v75/tokenizer/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer/special_tokens_map.json": { |
| "path": "v75/tokenizer/special_tokens_map.json", |
| "size": 586, |
| "md5": "f1c97d73dc836331f2138893217d32d8" |
| }, |
| "tokenizer/tokenizer_config.json": { |
| "path": "v75/tokenizer/tokenizer_config.json", |
| "size": 704, |
| "md5": "b0e83247e6c27802b6f2ccce2615e402" |
| }, |
| "tokenizer_2/vocab.json": { |
| "path": "v75/tokenizer_2/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer_2/merges.txt": { |
| "path": "v75/tokenizer_2/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer_2/special_tokens_map.json": { |
| "path": "v75/tokenizer_2/special_tokens_map.json", |
| "size": 460, |
| "md5": "1f2ba80c3ba1db3a1729f82f0c2667ce" |
| }, |
| "tokenizer_2/tokenizer_config.json": { |
| "path": "v75/tokenizer_2/tokenizer_config.json", |
| "size": 855, |
| "md5": "7a07b6cea8034258f7a153860e81bc41" |
| }, |
| "config.json": { |
| "path": "v75/config.json", |
| "size": 941, |
| "md5": "8781f507a014bf14d668a911e60345a5" |
| } |
| } |
| }, |
| "ours/v79": { |
| "source": "ours", |
| "dsp_arch": 79, |
| "representative_soc": "SM8750 (Snapdragon 8 Elite)", |
| "soc_model": 69, |
| "qairt_runtime_required": "2.40", |
| "skel": "libQnnHtpV79Skel.so", |
| "io_contract": "ours-sdxl-emb", |
| "verified": false, |
| "verify_note": "Native v79 bins produced from the same arch-agnostic W8A16 DLC as the device-verified V75/V81 sets (only dsp_arch/soc_model differ); offline-validated, awaiting a handset.", |
| "files": { |
| "unet.bin": { |
| "path": "v79/unet.bin", |
| "size": 2636988416, |
| "md5": "602f0e337957ffd3a96cea91d203ee25" |
| }, |
| "text_encoder_1_fp16.bin": { |
| "path": "v79/text_encoder_1_fp16.bin", |
| "size": 234754048, |
| "md5": "9a2b348f99d3bb6a3780507a335c4370" |
| }, |
| "text_encoder_2_fp16.bin": { |
| "path": "v79/text_encoder_2_fp16.bin", |
| "size": 1401307136, |
| "md5": "e412c07bf4fe1b1201173f77d856a26c" |
| }, |
| "sdxl_emb_mlp.bin": { |
| "path": "v79/sdxl_emb_mlp.bin", |
| "size": 29184000, |
| "md5": "4716e990d5f83b194ebe90a0e695f3f5" |
| }, |
| "taesdxl_decoder.mnn": { |
| "path": "v79/taesdxl_decoder.mnn", |
| "size": 2464388, |
| "md5": "bfbfb43faa70fc3885bfef24a60b8882" |
| }, |
| "tokenizer/vocab.json": { |
| "path": "v79/tokenizer/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer/merges.txt": { |
| "path": "v79/tokenizer/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer/special_tokens_map.json": { |
| "path": "v79/tokenizer/special_tokens_map.json", |
| "size": 586, |
| "md5": "f1c97d73dc836331f2138893217d32d8" |
| }, |
| "tokenizer/tokenizer_config.json": { |
| "path": "v79/tokenizer/tokenizer_config.json", |
| "size": 704, |
| "md5": "b0e83247e6c27802b6f2ccce2615e402" |
| }, |
| "tokenizer_2/vocab.json": { |
| "path": "v79/tokenizer_2/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer_2/merges.txt": { |
| "path": "v79/tokenizer_2/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer_2/special_tokens_map.json": { |
| "path": "v79/tokenizer_2/special_tokens_map.json", |
| "size": 460, |
| "md5": "1f2ba80c3ba1db3a1729f82f0c2667ce" |
| }, |
| "tokenizer_2/tokenizer_config.json": { |
| "path": "v79/tokenizer_2/tokenizer_config.json", |
| "size": 855, |
| "md5": "7a07b6cea8034258f7a153860e81bc41" |
| }, |
| "config.json": { |
| "path": "v79/config.json", |
| "size": 941, |
| "md5": "833cad64ed3e35accaecb27c1dd53099" |
| } |
| } |
| }, |
| "ours/v81": { |
| "source": "ours", |
| "dsp_arch": 81, |
| "representative_soc": "SM8850 (Snapdragon 8 Elite Gen 5)", |
| "soc_model": 87, |
| "qairt_runtime_required": "2.40", |
| "skel": "libQnnHtpV81Skel.so", |
| "io_contract": "ours-sdxl-emb", |
| "verified": true, |
| "verify_note": "Device-verified coherent (no body-horror) on real SM8850 (Snapdragon 8 Elite Gen 5)/v81 silicon, RealVisXL-v4.0-Lightning, 6-step EulerDiscrete, ~5s/1024px.", |
| "files": { |
| "unet.bin": { |
| "path": "v81/unet.bin", |
| "size": 2636988416, |
| "md5": "602f0e337957ffd3a96cea91d203ee25" |
| }, |
| "text_encoder_1_fp16.bin": { |
| "path": "v81/text_encoder_1_fp16.bin", |
| "size": 234754048, |
| "md5": "9a2b348f99d3bb6a3780507a335c4370" |
| }, |
| "text_encoder_2_fp16.bin": { |
| "path": "v81/text_encoder_2_fp16.bin", |
| "size": 1401307136, |
| "md5": "e412c07bf4fe1b1201173f77d856a26c" |
| }, |
| "sdxl_emb_mlp.bin": { |
| "path": "v81/sdxl_emb_mlp.bin", |
| "size": 29184000, |
| "md5": "4716e990d5f83b194ebe90a0e695f3f5" |
| }, |
| "taesdxl_decoder.mnn": { |
| "path": "v81/taesdxl_decoder.mnn", |
| "size": 2464388, |
| "md5": "bfbfb43faa70fc3885bfef24a60b8882" |
| }, |
| "tokenizer/vocab.json": { |
| "path": "v81/tokenizer/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer/merges.txt": { |
| "path": "v81/tokenizer/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer/special_tokens_map.json": { |
| "path": "v81/tokenizer/special_tokens_map.json", |
| "size": 586, |
| "md5": "f1c97d73dc836331f2138893217d32d8" |
| }, |
| "tokenizer/tokenizer_config.json": { |
| "path": "v81/tokenizer/tokenizer_config.json", |
| "size": 704, |
| "md5": "b0e83247e6c27802b6f2ccce2615e402" |
| }, |
| "tokenizer_2/vocab.json": { |
| "path": "v81/tokenizer_2/vocab.json", |
| "size": 1059962, |
| "md5": "a3933521163a0e76cee6094f1d72a9cc" |
| }, |
| "tokenizer_2/merges.txt": { |
| "path": "v81/tokenizer_2/merges.txt", |
| "size": 524619, |
| "md5": "d2bc10797e70c920c14c69729ecdab34" |
| }, |
| "tokenizer_2/special_tokens_map.json": { |
| "path": "v81/tokenizer_2/special_tokens_map.json", |
| "size": 460, |
| "md5": "1f2ba80c3ba1db3a1729f82f0c2667ce" |
| }, |
| "tokenizer_2/tokenizer_config.json": { |
| "path": "v81/tokenizer_2/tokenizer_config.json", |
| "size": 855, |
| "md5": "7a07b6cea8034258f7a153860e81bc41" |
| }, |
| "config.json": { |
| "path": "v81/config.json", |
| "size": 941, |
| "md5": "99a5de2749b967ba0880434c1fac6041" |
| } |
| } |
| } |
| }, |
| "driver_required_files": [ |
| "unet.bin", |
| "text_encoder_1_fp16.bin", |
| "text_encoder_2_fp16.bin", |
| "sdxl_emb_mlp.bin", |
| "taesdxl_decoder.mnn", |
| "tokenizer/vocab.json", |
| "tokenizer/merges.txt", |
| "tokenizer_2/vocab.json", |
| "tokenizer_2/merges.txt" |
| ], |
| "install_marker_files": [ |
| "unet.bin", |
| "text_encoder_1_fp16.bin", |
| "text_encoder_2_fp16.bin", |
| "taesdxl_decoder.mnn" |
| ], |
| "bundle_dir_name": "SDXL-QNN-NPU", |
| "model_id": "image-sdxl-qnn-npu", |
| "total_bytes": 17232519072, |
| "total_human": "17.23 GB per arch set (17232519072 bytes summed across 4 sets)", |
| "optional_files": [] |
| } |