diff --git a/CHANGELOG.md b/CHANGELOG.md index 6230416e4..a780f3096 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2025-01-14 +## Update for 2025-01-15 - **Models** - [Qwen-Image-2512](https://huggingface.co/Qwen/Qwen-Image-2512) @@ -10,8 +10,17 @@ LTX-2 is a new very large 19B parameter video generation model from Lightricks using Gemma-3 text encoder available for T2I/I2I workflows in original and SDNQ prequantized variants *note*: audio generation and upsampling are not yet supported (soon) + - [GLM-Image](https://huggingface.co/zai-org/GLM-Image) + GLM-image is a new image generation model that adopts a hybrid autoregressive with diffusion decoder architecture + available in both *original* and *sdnq-dynamic prequantized* variants, thanks @CalamitousFelicitousness + *note*: model requires pre-release versions of `transformers` package: + > pip install --upgrade git+https://github.com/huggingface/transformers.git + > ./webui.sh --experimental - [Nunchaku Z-Image Turbo](https://huggingface.co/nunchaku-tech/nunchaku-z-image-turbo) - **Feaures** + - **SDNQ**: add *dynamic* quantization method + sdnq can dynamically determine best quantization method for each module layer + slower to quantize on-the-fly, but results in better quality with minimal resource usage - **SDNQ** now has *19 int* based and *69 float* based quantization types *note*: not all are exposed via ui purely for simplicity, but all are available via api and scripts - **wildcards**: allow weights, thanks @Tillerz @@ -22,6 +31,7 @@ add support for *thinking* mode where model can reason about the prompt add support for *vision* processing where prompt enhance can also optionally analyze input image add support for *pre-fill* mode where prompt enhance can continue from existing caption + - **chroma**: add inpaint pipeline support - **UI** - kanvas add send-to functionality - kanvas improve support for standardui @@ -40,6 +50,8 @@ - new env variable `SD_VAE_DEFAULT` to force default vae processing - update `nunchaku==1.1.0` - lora switch logic from force-diffusers to allow-native + - split `reference.json` + - print system env on startup - **Fixes** - extension tab: update checker, date handling, formatting etc., thanks @awsr - controlnet with non-english ui locales diff --git a/TODO.md b/TODO.md index 52136a48f..ce8f4adcd 100644 --- a/TODO.md +++ b/TODO.md @@ -13,9 +13,7 @@ - Deploy: Create executable for SD.Next - Feature: Integrate natural language image search [ImageDB](https://github.com/vladmandic/imagedb) -- Feature: Transformers unified cache handler - Feature: Remote Text-Encoder support -- Refactor: [Modular pipelines and guiders](https://github.com/huggingface/diffusers/issues/11915) - Refactor: move sampler options to settings to config - Refactor: [GGUF](https://huggingface.co/docs/diffusers/main/en/quantization/gguf) - Feature: LoRA add OMI format support for SD35/FLUX.1 @@ -28,20 +26,26 @@ - Engine: [mmgp](https://github.com/deepbeepmeep/mmgp) - Engine: [sharpfin](https://github.com/drhead/sharpfin) instead of `torchvision` +## Modular + +- Switch to modular pipelines +- Feature: Transformers unified cache handler +- Refactor: [Modular pipelines and guiders](https://github.com/huggingface/diffusers/issues/11915) +- [MagCache](https://github.com/lllyasviel/FramePack/pull/673/files) +- [SmoothCache](https://github.com/huggingface/diffusers/issues/11135) + ## Features - [Flux.2 TinyVAE](https://huggingface.co/fal/FLUX.2-Tiny-AutoEncoder) - [IPAdapter composition](https://huggingface.co/ostris/ip-composition-adapter) - [IPAdapter negative guidance](https://github.com/huggingface/diffusers/discussions/7167) -- [MagCache](https://github.com/lllyasviel/FramePack/pull/673/files) -- [SmoothCache](https://github.com/huggingface/diffusers/issues/11135) - [STG](https://github.com/huggingface/diffusers/blob/main/examples/community/README.md#spatiotemporal-skip-guidance) - [Video Inpaint Pipeline](https://github.com/huggingface/diffusers/pull/12506) - [Sonic Inpaint](https://github.com/ubc-vision/sonic) ### New models / Pipelines -TODO: *Prioritize*! +TODO: Investigate which models are diffusers-compatible and prioritize! - [LTXVideo 0.98 LongMulti](https://github.com/huggingface/diffusers/pull/12614) - [Cosmos-Predict-2.5](https://huggingface.co/nvidia/Cosmos-Predict2.5-2B) diff --git a/html/reference-cloud.json b/html/reference-cloud.json new file mode 100644 index 000000000..4f8f17fff --- /dev/null +++ b/html/reference-cloud.json @@ -0,0 +1,16 @@ +{ + "Google Gemini 2.5 Flash Nano Banana": { + "path": "gemini-2.5-flash-image", + "desc": "Gemini can generate and process images conversationally. You can prompt Gemini with text, images, or a combination of both allowing you to create, edit, and iterate on visuals with unprecedented control.", + "preview": "gemini-2.5-flash-image.jpg", + "tags": "cloud", + "skip": true + }, + "Google Gemini 3.0 Pro Nano Banana": { + "path": "gemini-3-pro-image-preview", + "desc": "Built on Gemini 3. Create and edit images with studio-quality levels of precision and control", + "preview": "gemini-3-pro-image-preview.jpg", + "tags": "cloud", + "skip": true + } +} \ No newline at end of file diff --git a/html/reference-community.json b/html/reference-community.json new file mode 100644 index 000000000..cf340a0f4 --- /dev/null +++ b/html/reference-community.json @@ -0,0 +1,132 @@ +{ + "Tempest-by-Vlad XL": { + "path": "tempestByVlad_baseV01.safetensors@https://civitai.com/api/download/models/1301775", + "preview": "tempestByVlad_baseV01.jpg", + "desc": "Flexible SDXL model with custom encoder and finetuned for larger landscape resolutions with high details and high contrast.", + "tags": "community", + "size": 6.94, + "date": "2025 January", + "extras": "" + }, + "Tempest-by-Vlad XL Hyper": { + "path": "tempestByVlad_hyperV01.safetensors@https://civitai.com/api/download/models/1343512", + "preview": "tempestByVlad_hyperV01.jpg", + "desc": "Custom distilled variant with goal to get as-normal-as-possible model that works with low steps and guidance-free", + "tags": "community", + "size": 6.94, + "date": "2025 January", + "extras": "" + }, + "Juggernaut XL XI": { + "path": "juggernautXL_juggXIByRundiffusion.safetensors@https://civitai.com/api/download/models/782002", + "preview": "juggernautXL_juggXIByRundiffusion.jpg", + "desc": "Showcase finetuned model based on Stable diffusion XL", + "date": "2024 August", + "size": 6.94, + "tags": "community", + "extras": "sampler: DEIS, steps: 20, cfg_scale: 6.0" + }, + "Juggernaut XL XI Lightning": { + "path": "juggernautXL_juggXILightningByRD.safetensors@https://civitai.com/api/download/models/920957", + "preview": "juggernautXL_juggXILightningByRD.jpg", + "desc": "Showcase finetuned model based on Stable diffusion XL", + "date": "2024 August", + "size": 6.94, + "tags": "community", + "extras": "sampler: DPM SDE, steps: 6, cfg_scale: 2.0" + }, + "Juggernaut SD Reborn": { + "original": true, + "path": "juggernaut_reborn.safetensors@https://civitai.com/api/download/models/274039", + "preview": "juggernaut_reborn.jpg", + "desc": "Showcase finetuned model based on Stable diffusion 1.5", + "date": "2023 December", + "size": 2.28, + "tags": "community", + "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" + }, + "WAI Illustrious XL v15": { + "path": "waiIllustriousSDXL_v150.safetensors@https://civitai.com/api/download/models/2167369", + "preview": "waiIllustriousSDXL_v150.jpg", + "desc": "", + "tags": "community", + "size": 6.94, + "date": "2025 August", + "extras": "" + }, + "Pony Realism XL v2.3": { + "path": "ponyRealism_V23.safetensors@https://civitai.com/api/download/models/1763661", + "preview": "ponyRealism_V23.jpg", + "desc": "", + "tags": "community", + "size": 6.94, + "date": "2025 May", + "extras": "" + }, + "NoobAI XL 1.0 V-Pred": { + "path": "noobaiXLNAIXL_vPred10Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-Vpred-1.0/resolve/main/NoobAI-XL-Vpred-v1.0.safetensors", + "preview": "noobaiXLNAIXL_vPred10Version.jpg", + "desc": "", + "tags": "community", + "size": 6.94, + "date": "2024 December", + "extras": "" + }, + "NoobAI XL 1.1 Epsilon": { + "path": "noobaiXLNAIXL_epsilonPred11Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-1.1/resolve/main/NoobAI-XL-v1.1.safetensors", + "preview": "noobaiXLNAIXL_epsilonPred11Version.jpg", + "desc": "", + "tags": "community", + "size": 6.94, + "date": "2024 November", + "extras": "" + }, + "WAI-Ani-Pony XL v14": { + "path": "waiANIPONYXL_v140.safetensors.safetensors@https://civitai.com/api/download/models/1767402", + "preview": "waiANIPONYXL_v140.jpg", + "desc": "", + "tags": "community", + "size": 6.94, + "date": "2025 May", + "extras": "" + }, + "Tiwaz CenKreChro": { + "path": "Tiwaz/CenKreChro", + "preview": "Tiwaz--CenKreChro.jpg", + "skip": true, + "desc": "Based Centerfold Flux 5, trying to merge in Chroma and Krea.", + "extras": "", + "tags": "community", + "date": "2025 September" + }, + "purplesmartai Pony 7": { + "path": "purplesmartai/pony-v7-base", + "preview": "purplesmartai--pony-v7-base.jpg", + "skip": true, + "desc": "Pony V7 is a versatile character generation model based on AuraFlow architecture. It supports a wide range of styles and species types (humanoid, anthro, feral, and more) and handles character interactions through natural language prompts.", + "extras": "", + "tags": "community", + "date": "October September" + }, + "ShuttleAI Shuttle 3.0 Diffusion": { + "path": "shuttleai/shuttle-3-diffusion", + "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", + "preview": "shuttleai--shuttle-3-diffusion.jpg", + "tags": "community", + "skip": true + }, + "ShuttleAI Shuttle 3.1 Aesthetic": { + "path": "shuttleai/shuttle-3.1-aesthetic", + "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", + "preview": "shuttleai--shuttle-3_1-aestetic.jpg", + "tags": "community", + "skip": true + }, + "ShuttleAI Shuttle Jaguar": { + "path": "shuttleai/shuttle-jaguar", + "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", + "preview": "shuttleai--shuttle-jaguar.jpg", + "tags": "community", + "skip": true + } +} \ No newline at end of file diff --git a/html/reference-distilled.json b/html/reference-distilled.json new file mode 100644 index 000000000..d31e3fdc5 --- /dev/null +++ b/html/reference-distilled.json @@ -0,0 +1,165 @@ +{ + "StabilityAI StableDiffusion XL Turbo": { + "path": "stabilityai/sdxl-turbo", + "preview": "stabilityai--sdxl-turbo.jpg", + "desc": "SDXL-Turbo is a fast generative text-to-image model that can synthesize photorealistic images from a text prompt in a 1-4 steps.", + "skip": true, + "variant": "fp16", + "tags": "distilled", + "extras": "steps: 4, cfg_scale: 0.0" + }, + "StabilityAI Stable Cascade Lite": { + "path": "huggingface/stabilityai/stable-cascade-lite", + "skip": true, + "variant": "bf16", + "desc": "Stable Cascade is a diffusion model built upon the Würstchen architecture and its main difference to other models like Stable Diffusion is that it is working at a much smaller latent space. Why is this important? The smaller the latent space, the faster you can run inference and the cheaper the training becomes. How small is the latent space? Stable Diffusion uses a compression factor of 8, resulting in a 1024x1024 image being encoded to 128x128. Stable Cascade achieves a compression factor of 42, meaning that it is possible to encode a 1024x1024 image to 24x24, while maintaining crisp reconstructions. The text-conditional model is then trained in the highly compressed latent space. Previous versions of this architecture, achieved a 16x cost reduction over Stable Diffusion 1.5", + "preview": "stabilityai--stable-cascade-lite.jpg", + "extras": "sampler: Default, cfg_scale: 4.0, image_cfg_scale: 1.0", + "size": 4.97, + "tags": "distilled", + "date": "2024 February" + }, + "StabilityAI Stable Diffusion 3.5 Turbo": { + "path": "stabilityai/stable-diffusion-3.5-large-turbo", + "skip": true, + "variant": "fp16", + "desc": "Stable Diffusion 3.5 Large Turbo is a Multimodal Diffusion Transformer (MMDiT) text-to-image model with Adversarial Diffusion Distillation (ADD) that features improved performance in image quality, typography, complex prompt understanding, and resource-efficiency, with a focus on fewer inference steps.", + "preview": "stabilityai--stable-diffusion-3_5-large-turbo.jpg", + "tags": "distilled", + "extras": "sampler: Default, cfg_scale: 7.0" + }, + "Tencent FLUX.1 Dev SRPO": { + "path": "vladmandic/flux.1-dev-SRPO", + "preview": "vladmandic--flux.1-dev-SRPO.jpg", + "desc": "FLUX.1 Dev SRPO is Tencent trained with specific technique: Directly Aligning the Full Diffusion Trajectory with Fine-Grained Human Preference", + "tags": "distilled", + "skip": true, + "extras": "sampler: Default, cfg_scale: 4.5" + }, + "Qwen-Image-Lightning": { + "path": "vladmandic/Qwen-Lightning", + "preview": "vladmandic--Qwen-Lightning.jpg", + "desc": "Qwen-Lightning is step-distilled from Qwen-Image to allow for generation in 8 steps.", + "skip": true, + "extras": "steps: 8", + "size": 56.1, + "tags": "distilled", + "date": "2025 August" + }, + "Qwen-Image-Distill": { + "path": "SahilCarterr/Qwen-Image-Distill-Full", + "preview": "SahilCarterr--Qwen-Image-Distill-Full.jpg", + "desc": "Qwen-Image-Distill is a distilled and accelerated version of Qwen-Image by DiffSynth-Studio.", + "skip": true, + "extras": "steps: 15", + "size": 56.1, + "tags": "distilled", + "date": "2025 August" + }, + "Qwen-Image-Lightning-Edit": { + "path": "vladmandic/Qwen-Lightning-Edit", + "preview": "vladmandic--Qwen-Lightning-Edit.jpg", + "desc": "Qwen-Lightning-Edit is step-distilled from Qwen-Image-Edit to allow for generation in 8 steps.", + "skip": true, + "extras": "steps: 8", + "size": 56.1, + "tags": "distilled", + "date": "2025 August" + }, + "Qwen-Image Pruning-12B": { + "path": "OPPOer/Qwen-Image-Pruning", + "subfolder": "Qwen-Image-12B-8steps", + "preview": "OPPOer--Qwen-Image-Pruning.jpg", + "desc": "This open-source project is based on Qwen-Image and has attempted model pruning, removing 20 layers while retaining the weights of 40 layers, resulting in a model size of 12B parameters.", + "skip": true, + "tags": "distilled", + "date": "2025 Ocotober" + }, + "Qwen-Image-Edit Pruning-13B": { + "path": "OPPOer/Qwen-Image-Edit-Pruning", + "subfolder": "Qwen-Image-Edit-13B-4steps", + "preview": "OPPOer--Qwen-Image-Edit-Pruning.jpg", + "desc": "This open-source project is based on Qwen-Image-Edit and has attempted model pruning, removing 20 layers while retaining the weights of 40 layers, resulting in a model size of 13.6B parameters.", + "skip": true, + "tags": "distilled", + "date": "2025 Ocotober" + }, + "Qwen-Image-Edit-2509 Pruning-13B": { + "path": "OPPOer/Qwen-Image-Edit-2509-Pruning", + "subfolder": "Qwen-Image-Edit-2509-13B-4steps", + "preview": "OPPOer--Qwen-Image-Edit-2509-Pruning.jpg", + "desc": "This open-source project is based on Qwen-Image-Edit and has attempted model pruning, removing 20 layers while retaining the weights of 40 layers, resulting in a model size of 13.6B parameters.", + "skip": true, + "tags": "distilled", + "date": "2025 Ocotober" + }, + "lodestones Chroma1 Flash": { + "path": "lodestones/Chroma1-Flash", + "preview": "lodestones--Chroma1-Flash.jpg", + "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. A fine-tuned version of the Chroma1-Base made to find the best way to make these flow matching models faster.", + "skip": true, + "extras": "", + "size": 26.84, + "tags": "distilled", + "date": "2025 July" + }, + "SDXL Flash Mini": { + "path": "SDXL-Flash_Mini.safetensors@https://huggingface.co/sd-community/sdxl-flash-mini/resolve/main/SDXL-Flash_Mini.safetensors?download=true", + "preview": "SDXL-Flash_Mini.jpg", + "desc": "Introducing the new fast model SDXL Flash (Mini), we learned that all fast XL models work fast, but the quality decreases, and we also made a fast model, but it is not as fast as LCM, Turbo, Lightning and Hyper, but the quality is higher.", + "extras": "width: 2048, height: 1024, sampler: DEIS, steps: 40, cfg_scale: 6.0", + "tags": "distilled", + "experimental": true + }, + "NVLabs Sana 1.5 1.6B 1k Sprint": { + "path": "Efficient-Large-Model/Sana_Sprint_1.6B_1024px_diffusers", + "desc": "SANA-Sprint is an ultra-efficient diffusion model for text-to-image (T2I) generation, reducing inference steps from 20 to 1-4 while achieving state-of-the-art performance.", + "preview": "Efficient-Large-Model--Sana15_Sprint_1600M_1024px_diffusers.jpg", + "tags": "distilled", + "skip": true + }, + "Segmind SSD-1B": { + "path": "huggingface/segmind/SSD-1B", + "preview": "segmind--SSD-1B.jpg", + "desc": "The Segmind Stable Diffusion Model (SSD-1B) offers a compact, efficient, and distilled version of the SDXL model. At 50% smaller and 60% faster than Stable Diffusion XL (SDXL), it provides quick and seamless performance without sacrificing image quality.", + "variant": "fp16", + "skip": true, + "extras": "sampler: Default, cfg_scale: 9.0", + "size": 8.72, + "tags": "distilled", + "date": "2023 October" + }, + "Segmind Tiny": { + "path": "segmind/tiny-sd", + "preview": "segmind--tiny-sd.jpg", + "desc": "Segmind's Tiny-SD offers a compact, efficient, and distilled version of Realistic Vision 4.0 and is up to 80% faster than SD1.5", + "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 9.0", + "size": 1.03, + "tags": "distilled", + "date": "2023 July" + }, + "Tencent HunyuanImage 2.1 Distilled": { + "path": "hunyuanvideo-community/HunyuanImage-2.1-Distilled-Diffusers", + "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", + "preview": "hunyuanvideo-community--HunyuanImage-2.1-Distilled-Diffusers.jpg", + "extras": "", + "tags": "distilled", + "skip": true, + "size": 0, + "date": "2025 August" + }, + "Tencent HunyuanDiT 1.2 Distilled": { + "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers-Distilled", + "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", + "preview": "Tencent-Hunyuan--HunyuanDiT-v1.2-Diffusers-Distilled.jpg", + "tags": "distilled", + "extras": "sampler: Default, cfg_scale: 2.0" + }, + "Tencent HunyuanDiT 1.1 Distilled": { + "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers-Distilled", + "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", + "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers-Distilled.jpg", + "tags": "distilled", + "extras": "sampler: Default, cfg_scale: 2.0" + } +} \ No newline at end of file diff --git a/html/reference-quant.json b/html/reference-quant.json new file mode 100644 index 000000000..ef5d51f4e --- /dev/null +++ b/html/reference-quant.json @@ -0,0 +1,219 @@ +{ + "FLUX.1-Dev sdnq-svd-uint4": { + "path": "Disty0/FLUX.1-dev-SDNQ-uint4-svd-r32", + "preview": "Disty0--FLUX.1-dev-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of black-forest-labs/FLUX.1-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "size": 12.60, + "date": "2025 October", + "extras": "" + }, + "FLUX.1-Schnell sdnq-svd-uint4": { + "path": "Disty0/FLUX.1-schnell-SDNQ-uint4-svd-r32", + "preview": "Disty0--FLUX.1-schnell-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of black-forest-labs/FLUX.1-schnell using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "size": 12.60, + "date": "2025 October", + "extras": "" + }, + "FLUX.1-Dev Krea sdnq-svd-uint4": { + "path": "Disty0/FLUX.1-Krea-dev-SDNQ-uint4-svd-r32", + "preview": "Disty0--FLUX.1-Krea-dev-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of black-forest-labs/FLUX.1-Krea-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "size": 12.60, + "date": "2025 October", + "extras": "" + }, + "FLUX.1-Dev Kontext sdnq-svd-uint4": { + "path": "Disty0/FLUX.1-Kontext-dev-SDNQ-uint4-svd-r32", + "preview": "Disty0--FLUX.1-Kontext-dev-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of black-forest-labs/FLUX.1-Kontext-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "size": 12.60, + "date": "2025 October", + "extras": "" + }, + "FLUX.2 Dev sdnq-svd-uint4": { + "path": "Disty0/FLUX.2-dev-SDNQ-uint4-svd-r32", + "preview": "Disty0--FLUX.2-dev-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of black-forest-labs/FLUX.2-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "extras": "", + "size": 31.58, + "date": "2025 November" + }, + "Chroma1-HD sdnq-svd-uint4": { + "path": "Disty0/Chroma1-HD-SDNQ-uint4-svd-r32", + "preview": "Disty0--Chroma1-HD-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of lodestones/Chroma1-HD using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "size": 11.89, + "date": "2025 October", + "extras": "" + }, + "Wan-AI Wan2.2 A14B T2I sdnq-svd-uint4": { + "path": "Disty0/Wan2.2-T2V-A14B-SDNQ-uint4-svd-r32", + "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", + "desc": "Quantization of black-forest-labs/FLUX.1-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "date": "2025 October", + "size": 23.54, + "extras": "" + }, + "Wan-AI Wan2.2 A14B I2I sdnq-svd-uint4": { + "path": "Disty0/Wan2.2-I2V-A14B-SDNQ-uint4-svd-r32", + "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", + "desc": "Quantization of Laxhar/noobai-XL-1.1 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", + "skip": true, + "tags": "quantized", + "date": "2025 October", + "size": 23.55, + "extras": "" + }, + "Z-Image-Turbo sdnq-svd-uint4": { + "path": "Disty0/Z-Image-Turbo-SDNQ-uint4-svd-r32", + "preview": "Disty0--Z-Image-Turbo-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Tongyi-MAI/Z-Image-Turbo using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", + "size": 6.5, + "date": "2025 November" + }, + "Qwen-Image sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-SDNQ-uint4-svd-r32", + "preview": "Qwen--Qwen-Image.jpg", + "desc": "Quantization of Qwen/Qwen-Image using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "date": "2025 October", + "size": 16.09, + "extras": "" + }, + "Qwen-Image-2512 sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-2512-SDNQ-uint4-svd-r32", + "preview": "Disty0--Qwen-Image-2512-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-2512 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "extras": "", + "size": 16.10, + "date": "2025 December" + }, + "Qwen-Image-2512 sdnq-dynamic-uint4": { + "path": "Disty0/Qwen-Image-2512-SDNQ-4bit-dynamic", + "preview": "Disty0--Qwen-Image-2512-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-2512 using SDNQ: sdnq-dynamic 4-bit uint", + "skip": true, + "tags": "quantized", + "extras": "", + "size": 16.10, + "date": "2026 January" + }, + "Qwen-Image-Edit sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-Edit-SDNQ-uint4-svd-r32", + "preview": "Qwen--Qwen-Image-Edit.jpg", + "desc": "Quantization of Qwen/Qwen-Image-Edit using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "date": "2025 October", + "size": 16.10, + "extras": "" + }, + "Qwen-Image-Edit-2509 sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-Edit-2509-SDNQ-uint4-svd-r32", + "preview": "Qwen--Qwen-Image-Edit-2509.jpg", + "desc": "Quantization of Qwen/Qwen-Image-Edit-2509 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "date": "2025 October", + "size": 16.10, + "extras": "" + }, + "Qwen-Image-Edit-2511 sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32", + "preview": "Disty0--Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-Edit-2511 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "date": "2025 December", + "size": 16.10, + "extras": "" + }, + "Qwen-Image-Layered sdnq-svd-uint4": { + "path": "Disty0/Qwen-Image-Layered-SDNQ-uint4-svd-r32", + "preview": "Disty0--Qwen-Image-Layered-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of Qwen/Qwen-Image-Layered using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "skip": true, + "tags": "quantized", + "date": "2025 December", + "size": 16.10, + "extras": "" + }, + "nVidia ChronoEdit sdnq-svd-uint4": { + "path": "Disty0/ChronoEdit-14B-SDNQ-uint4-svd-r32", + "preview": "Disty0--ChronoEdit-14B-SDNQ-uint4-svd-r32.jpg", + "desc": "Quantization of nvidia/ChronoEdit-14B-Diffusers using SDNQ: sdnq-svd 4-bit uint with svd rank 32.", + "skip": true, + "tags": "quantized", + "date": "2025 October", + "size": 18.10, + "extras": "" + }, + "Tencent HunyuanImage 3.0 sdnq-svd-uint4": { + "path": "Disty0/HunyuanImage3-SDNQ-uint4-svd-r32", + "desc": "Quantization of tencent/HunyuanImage-3.0 using SDNQ: sdnq-svd 4-bit uint with svd rank 32.", + "preview": "Disty0--HunyuanImage3-SDNQ-uint4-svd-r32.jpg", + "extras": "", + "skip": true, + "tags": "quantized", + "size": 57.06, + "date": "2025 September" + }, + "Tempest-by-Vlad XL sdnq-svd-uint4": { + "path": "vladmandic/tempestByVlad_baseV01-SDNQ-uint4-svd", + "preview": "vladmandic--tempestByVlad_baseV01-SDNQ-uint4-svd.jpg", + "desc": "Quantization of vladmandic/tempestByVlad_baseV01 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", + "tags": "quantized", + "size": 3.37, + "date": "2025 October", + "extras": "" + }, + "NoobAI-XL v1.1 epsilon sdnq-svd-uint4": { + "path": "Disty0/NoobAI-XL-v1.1-SDNQ-uint4-svd-r128", + "preview": "Disty0--NoobAI-XL-v1.1-SDNQ-uint4-svd-r128.jpg", + "desc": "Quantization of Laxhar/noobai-XL-1.1 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", + "tags": "quantized", + "size": 3.37, + "date": "2025 October", + "extras": "" + }, + "NoobAI-XL v1.0 v-pred sdnq-svd-uint4": { + "path": "Disty0/NoobAI-XL-Vpred-v1.0-SDNQ-uint4-svd-r128", + "preview": "Disty0--NoobAI-XL-Vpred-v1.0-SDNQ-uint4-svd-r128.jpg", + "desc": "Quantization of Laxhar/noobai-XL-Vpred-1.0 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", + "tags": "quantized", + "size": 3.37, + "date": "2025 October", + "extras": "" + }, + "ZAI GLM-Image sdnq-dynamic-uint4": { + "path": "Disty0/GLM-Image-SDNQ-4bit-dynamic", + "preview": "zai-org--GLM-Image.jpg", + "desc": "Quantization of ZAI GLM-Image using SDNQ: sdnq-dynamic 4-bit uint", + "skip": true, + "extras": "sampler: Default, cfg_scale: 1.5, steps: 50", + "size": 15.3, + "tags": "quantized", + "date": "2025 January" + } +} \ No newline at end of file diff --git a/html/reference.json b/html/reference.json index 5b2918455..d86214467 100644 --- a/html/reference.json +++ b/html/reference.json @@ -38,15 +38,6 @@ "size": 6.94, "date": "2023 July" }, - "StabilityAI StableDiffusion XL Turbo": { - "path": "stabilityai/sdxl-turbo", - "preview": "stabilityai--sdxl-turbo.jpg", - "desc": "SDXL-Turbo is a fast generative text-to-image model that can synthesize photorealistic images from a text prompt in a 1-4 steps.", - "skip": true, - "variant": "fp16", - "tags": "distilled", - "extras": "steps: 4, cfg_scale: 0.0" - }, "StabilityAI Stable Cascade": { "path": "huggingface/stabilityai/stable-cascade", "skip": true, @@ -57,17 +48,6 @@ "size": 11.82, "date": "2024 February" }, - "StabilityAI Stable Cascade Lite": { - "path": "huggingface/stabilityai/stable-cascade-lite", - "skip": true, - "variant": "bf16", - "desc": "Stable Cascade is a diffusion model built upon the Würstchen architecture and its main difference to other models like Stable Diffusion is that it is working at a much smaller latent space. Why is this important? The smaller the latent space, the faster you can run inference and the cheaper the training becomes. How small is the latent space? Stable Diffusion uses a compression factor of 8, resulting in a 1024x1024 image being encoded to 128x128. Stable Cascade achieves a compression factor of 42, meaning that it is possible to encode a 1024x1024 image to 24x24, while maintaining crisp reconstructions. The text-conditional model is then trained in the highly compressed latent space. Previous versions of this architecture, achieved a 16x cost reduction over Stable Diffusion 1.5", - "preview": "stabilityai--stable-cascade-lite.jpg", - "extras": "sampler: Default, cfg_scale: 4.0, image_cfg_scale: 1.0", - "size": 4.97, - "tags": "distilled", - "date": "2024 February" - }, "StabilityAI Stable Diffusion 3.0 Medium": { "path": "stabilityai/stable-diffusion-3-medium-diffusers", "skip": true, @@ -98,15 +78,6 @@ "size": 26.98, "date": "2024 October" }, - "StabilityAI Stable Diffusion 3.5 Turbo": { - "path": "stabilityai/stable-diffusion-3.5-large-turbo", - "skip": true, - "variant": "fp16", - "desc": "Stable Diffusion 3.5 Large Turbo is a Multimodal Diffusion Transformer (MMDiT) text-to-image model with Adversarial Diffusion Distillation (ADD) that features improved performance in image quality, typography, complex prompt understanding, and resource-efficiency, with a focus on fewer inference steps.", - "preview": "stabilityai--stable-diffusion-3_5-large-turbo.jpg", - "tags": "distilled", - "extras": "sampler: Default, cfg_scale: 7.0" - }, "Black Forest Labs FLUX.1 Dev": { "path": "black-forest-labs/FLUX.1-dev", @@ -153,20 +124,11 @@ "size": 104.74, "date": "2025 November" }, - "Tencent FLUX.1 Dev SRPO": { - "path": "vladmandic/flux.1-dev-SRPO", - "preview": "vladmandic--flux.1-dev-SRPO.jpg", - "desc": "FLUX.1 Dev SRPO is Tencent trained with specific technique: Directly Aligning the Full Diffusion Trajectory with Fine-Grained Human Preference", - "tags": "distilled", - "skip": true, - "extras": "sampler: Default, cfg_scale: 4.5" - }, "Z-Image-Turbo": { "path": "Tongyi-MAI/Z-Image-Turbo", "preview": "Tongyi-MAI--Z-Image-Turbo.jpg", "desc": "Z-Image-Turbo, a distilled version of Z-Image that matches or exceeds leading competitors with only 8 NFEs (Number of Function Evaluations). It offers sub-second inference latency on enterprise-grade H800 GPUs and fits comfortably within 16G VRAM consumer devices. It excels in photorealistic image generation, bilingual text rendering (English & Chinese), and robust instruction adherence.", - "tags": "distilled", "skip": true, "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", "size": 20.3, @@ -227,63 +189,6 @@ "size": 53.7, "date": "2025 December" }, - "Qwen-Image-Lightning": { - "path": "vladmandic/Qwen-Lightning", - "preview": "vladmandic--Qwen-Lightning.jpg", - "desc": "Qwen-Lightning is step-distilled from Qwen-Image to allow for generation in 8 steps.", - "skip": true, - "extras": "steps: 8", - "size": 56.1, - "tags": "distilled", - "date": "2025 August" - }, - "Qwen-Image-Distill": { - "path": "SahilCarterr/Qwen-Image-Distill-Full", - "preview": "SahilCarterr--Qwen-Image-Distill-Full.jpg", - "desc": "Qwen-Image-Distill is a distilled and accelerated version of Qwen-Image by DiffSynth-Studio.", - "skip": true, - "extras": "steps: 15", - "size": 56.1, - "tags": "distilled", - "date": "2025 August" - }, - "Qwen-Image-Lightning-Edit": { - "path": "vladmandic/Qwen-Lightning-Edit", - "preview": "vladmandic--Qwen-Lightning-Edit.jpg", - "desc": "Qwen-Lightning-Edit is step-distilled from Qwen-Image-Edit to allow for generation in 8 steps.", - "skip": true, - "extras": "steps: 8", - "size": 56.1, - "tags": "distilled", - "date": "2025 August" - }, - "Qwen-Image Pruning-12B": { - "path": "OPPOer/Qwen-Image-Pruning", - "subfolder": "Qwen-Image-12B-8steps", - "preview": "OPPOer--Qwen-Image-Pruning.jpg", - "desc": "This open-source project is based on Qwen-Image and has attempted model pruning, removing 20 layers while retaining the weights of 40 layers, resulting in a model size of 12B parameters.", - "skip": true, - "tags": "distilled", - "date": "2025 Ocotober" - }, - "Qwen-Image-Edit Pruning-13B": { - "path": "OPPOer/Qwen-Image-Edit-Pruning", - "subfolder": "Qwen-Image-Edit-13B-4steps", - "preview": "OPPOer--Qwen-Image-Edit-Pruning.jpg", - "desc": "This open-source project is based on Qwen-Image-Edit and has attempted model pruning, removing 20 layers while retaining the weights of 40 layers, resulting in a model size of 13.6B parameters.", - "skip": true, - "tags": "distilled", - "date": "2025 Ocotober" - }, - "Qwen-Image-Edit-2509 Pruning-13B": { - "path": "OPPOer/Qwen-Image-Edit-2509-Pruning", - "subfolder": "Qwen-Image-Edit-2509-13B-4steps", - "preview": "OPPOer--Qwen-Image-Edit-2509-Pruning.jpg", - "desc": "This open-source project is based on Qwen-Image-Edit and has attempted model pruning, removing 20 layers while retaining the weights of 40 layers, resulting in a model size of 13.6B parameters.", - "skip": true, - "tags": "distilled", - "date": "2025 Ocotober" - }, "lodestones Chroma1 HD": { "path": "lodestones/Chroma1-HD", @@ -303,16 +208,6 @@ "size": 26.84, "date": "2025 July" }, - "lodestones Chroma1 Flash": { - "path": "lodestones/Chroma1-Flash", - "preview": "lodestones--Chroma1-Flash.jpg", - "desc": "Chroma is a 8.9B parameter model based on FLUX.1-schnell. It’s fully Apache 2.0 licensed, ensuring that anyone can use, modify, and build on top of it—no corporate gatekeeping. A fine-tuned version of the Chroma1-Base made to find the best way to make these flow matching models faster.", - "skip": true, - "extras": "", - "size": 26.84, - "tags": "distilled", - "date": "2025 July" - }, "lodestones Chroma1 v50 Preview Annealed": { "path": "vladmandic/chroma-unlocked-v50-annealed", "preview": "vladmandic--chroma-unlocked-v50-annealed.jpg", @@ -442,14 +337,6 @@ "desc": "SDXS: Real-Time One-Step Latent Diffusion Models with Image Conditions", "extras": "width: 512, height: 512, sampler: CMSI, steps: 1, cfg_scale: 0.0" }, - "SDXL Flash Mini": { - "path": "SDXL-Flash_Mini.safetensors@https://huggingface.co/sd-community/sdxl-flash-mini/resolve/main/SDXL-Flash_Mini.safetensors?download=true", - "preview": "SDXL-Flash_Mini.jpg", - "desc": "Introducing the new fast model SDXL Flash (Mini), we learned that all fast XL models work fast, but the quality decreases, and we also made a fast model, but it is not as fast as LCM, Turbo, Lightning and Hyper, but the quality is higher.", - "extras": "width: 2048, height: 1024, sampler: DEIS, steps: 40, cfg_scale: 6.0", - "tags": "distilled", - "experimental": true - }, "NVLabs Sana 1.5 1.6B 1k": { "path": "Efficient-Large-Model/SANA1.5_1.6B_1024px_diffusers", @@ -467,13 +354,6 @@ "size": 15.58, "date": "2025 March" }, - "NVLabs Sana 1.5 1.6B 1k Sprint": { - "path": "Efficient-Large-Model/Sana_Sprint_1.6B_1024px_diffusers", - "desc": "SANA-Sprint is an ultra-efficient diffusion model for text-to-image (T2I) generation, reducing inference steps from 20 to 1-4 while achieving state-of-the-art performance.", - "preview": "Efficient-Large-Model--Sana15_Sprint_1600M_1024px_diffusers.jpg", - "tags": "distilled", - "skip": true - }, "NVLabs Sana 1.0 1.6B 4k": { "path": "Efficient-Large-Model/Sana_1600M_4Kpx_BF16_diffusers", "desc": "Sana is a text-to-image framework that can efficiently generate images up to 4096 × 4096 resolution. Sana can synthesize high-resolution, high-quality images with strong text-image alignment at a remarkably fast speed, deployable on laptop GPU.", @@ -584,26 +464,6 @@ "size": 6.43, "date": "2023 November" }, - "Segmind SSD-1B": { - "path": "huggingface/segmind/SSD-1B", - "preview": "segmind--SSD-1B.jpg", - "desc": "The Segmind Stable Diffusion Model (SSD-1B) offers a compact, efficient, and distilled version of the SDXL model. At 50% smaller and 60% faster than Stable Diffusion XL (SDXL), it provides quick and seamless performance without sacrificing image quality.", - "variant": "fp16", - "skip": true, - "extras": "sampler: Default, cfg_scale: 9.0", - "size": 8.72, - "tags": "distilled", - "date": "2023 October" - }, - "Segmind Tiny": { - "path": "segmind/tiny-sd", - "preview": "segmind--tiny-sd.jpg", - "desc": "Segmind's Tiny-SD offers a compact, efficient, and distilled version of Realistic Vision 4.0 and is up to 80% faster than SD1.5", - "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 9.0", - "size": 1.03, - "tags": "distilled", - "date": "2023 July" - }, "Segmind SegMoE SD 4x2": { "path": "segmind/SegMoE-SD-4x2-v0", "preview": "segmind--SegMoE-SD-4x2-v0.jpg", @@ -663,16 +523,6 @@ "size": 0, "date": "2025 August" }, - "Tencent HunyuanImage 2.1 Distilled": { - "path": "hunyuanvideo-community/HunyuanImage-2.1-Distilled-Diffusers", - "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", - "preview": "hunyuanvideo-community--HunyuanImage-2.1-Distilled-Diffusers.jpg", - "extras": "", - "tags": "distilled", - "skip": true, - "size": 0, - "date": "2025 August" - }, "Tencent HunyuanImage 2.1 Refiner": { "path": "hunyuanvideo-community/HunyuanImage-2.1-Refiner-Diffusers", "desc": "HunyuanImage-2.1, a highly efficient text-to-image model that is capable of generating 2K (2048 × 2048) resolution images.", @@ -690,26 +540,12 @@ "size": 14.09, "date": "2024 May" }, - "Tencent HunyuanDiT 1.2 Distilled": { - "path": "Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers-Distilled", - "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", - "preview": "Tencent-Hunyuan--HunyuanDiT-v1.2-Diffusers-Distilled.jpg", - "tags": "distilled", - "extras": "sampler: Default, cfg_scale: 2.0" - }, "Tencent HunyuanDiT 1.1": { "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers", "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers.jpg", "extras": "sampler: Default, cfg_scale: 2.0" }, - "Tencent HunyuanDiT 1.1 Distilled": { - "path": "Tencent-Hunyuan/HunyuanDiT-v1.1-Diffusers-Distilled", - "desc": "Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.", - "preview": "Tencent-Hunyuan--HunyuanDiT-v1.1-Diffusers-Distilled.jpg", - "tags": "distilled", - "extras": "sampler: Default, cfg_scale: 2.0" - }, "AlphaVLLM Lumina Next SFT": { "path": "Alpha-VLLM/Lumina-Next-SFT-diffusers", @@ -993,358 +829,14 @@ "skip": true }, - "FLUX.1-Dev sdnq-svd-uint4": { - "path": "Disty0/FLUX.1-dev-SDNQ-uint4-svd-r32", - "preview": "Disty0--FLUX.1-dev-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of black-forest-labs/FLUX.1-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", + "ZAI GLM-Image": { + "path": "zai-org/GLM-Image", + "preview": "zai-org--GLM-Image.jpg", + "desc": "GLM-Image is a two-stage image generation model combining autoregressive token generation (9B vision-language encoder) with diffusion refinement (7B DiT transformer). Features strong text rendering and compositional capabilities.", "skip": true, - "tags": "quantized", - "size": 12.60, - "date": "2025 October", - "extras": "" - }, - "FLUX.1-Schnell sdnq-svd-uint4": { - "path": "Disty0/FLUX.1-schnell-SDNQ-uint4-svd-r32", - "preview": "Disty0--FLUX.1-schnell-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of black-forest-labs/FLUX.1-schnell using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "size": 12.60, - "date": "2025 October", - "extras": "" - }, - "FLUX.1-Dev Krea sdnq-svd-uint4": { - "path": "Disty0/FLUX.1-Krea-dev-SDNQ-uint4-svd-r32", - "preview": "Disty0--FLUX.1-Krea-dev-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of black-forest-labs/FLUX.1-Krea-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "size": 12.60, - "date": "2025 October", - "extras": "" - }, - "FLUX.1-Dev Kontext sdnq-svd-uint4": { - "path": "Disty0/FLUX.1-Kontext-dev-SDNQ-uint4-svd-r32", - "preview": "Disty0--FLUX.1-Kontext-dev-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of black-forest-labs/FLUX.1-Kontext-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "size": 12.60, - "date": "2025 October", - "extras": "" - }, - "FLUX.2 Dev sdnq-svd-uint4": { - "path": "Disty0/FLUX.2-dev-SDNQ-uint4-svd-r32", - "preview": "Disty0--FLUX.2-dev-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of black-forest-labs/FLUX.2-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "extras": "", - "size": 31.58, - "date": "2025 November" - }, - "Chroma1-HD sdnq-svd-uint4": { - "path": "Disty0/Chroma1-HD-SDNQ-uint4-svd-r32", - "preview": "Disty0--Chroma1-HD-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of lodestones/Chroma1-HD using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "size": 11.89, - "date": "2025 October", - "extras": "" - }, - "Wan-AI Wan2.2 A14B T2I sdnq-svd-uint4": { - "path": "Disty0/Wan2.2-T2V-A14B-SDNQ-uint4-svd-r32", - "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", - "desc": "Quantization of black-forest-labs/FLUX.1-dev using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "date": "2025 October", - "size": 23.54, - "extras": "" - }, - "Wan-AI Wan2.2 A14B I2I sdnq-svd-uint4": { - "path": "Disty0/Wan2.2-I2V-A14B-SDNQ-uint4-svd-r32", - "preview": "Wan-AI--Wan2.2-T2V-A14B-Diffusers.jpg", - "desc": "Quantization of Laxhar/noobai-XL-1.1 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", - "skip": true, - "tags": "quantized", - "date": "2025 October", - "size": 23.55, - "extras": "" - }, - "Z-Image-Turbo sdnq-svd-uint4": { - "path": "Disty0/Z-Image-Turbo-SDNQ-uint4-svd-r32", - "preview": "Disty0--Z-Image-Turbo-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Tongyi-MAI/Z-Image-Turbo using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "extras": "sampler: Default, cfg_scale: 1.0, steps: 9", - "size": 6.5, - "date": "2025 November" - }, - "Qwen-Image sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-SDNQ-uint4-svd-r32", - "preview": "Qwen--Qwen-Image.jpg", - "desc": "Quantization of Qwen/Qwen-Image using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "date": "2025 October", - "size": 16.09, - "extras": "" - }, - "Qwen-Image-2512 sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-2512-SDNQ-uint4-svd-r32", - "preview": "Disty0--Qwen-Image-2512-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-2512 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "extras": "", - "size": 16.10, - "date": "2025 December" - }, - "Qwen-Image-2512 sdnq-dynamic-uint4": { - "path": "Disty0/Qwen-Image-2512-SDNQ-4bit-dynamic", - "preview": "Disty0--Qwen-Image-2512-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-2512 using SDNQ: sdnq-dynamic 4-bit uint", - "skip": true, - "tags": "quantized", - "extras": "", - "size": 16.10, - "date": "2026 January" - }, - "Qwen-Image-Edit sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-Edit-SDNQ-uint4-svd-r32", - "preview": "Qwen--Qwen-Image-Edit.jpg", - "desc": "Quantization of Qwen/Qwen-Image-Edit using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "date": "2025 October", - "size": 16.10, - "extras": "" - }, - "Qwen-Image-Edit-2509 sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-Edit-2509-SDNQ-uint4-svd-r32", - "preview": "Qwen--Qwen-Image-Edit-2509.jpg", - "desc": "Quantization of Qwen/Qwen-Image-Edit-2509 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "date": "2025 October", - "size": 16.10, - "extras": "" - }, - "Qwen-Image-Edit-2511 sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32", - "preview": "Disty0--Qwen-Image-Edit-2511-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-Edit-2511 using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "date": "2025 December", - "size": 16.10, - "extras": "" - }, - "Qwen-Image-Layered sdnq-svd-uint4": { - "path": "Disty0/Qwen-Image-Layered-SDNQ-uint4-svd-r32", - "preview": "Disty0--Qwen-Image-Layered-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of Qwen/Qwen-Image-Layered using SDNQ: sdnq-svd 4-bit uint with svd rank 32", - "skip": true, - "tags": "quantized", - "date": "2025 December", - "size": 16.10, - "extras": "" - }, - "nVidia ChronoEdit sdnq-svd-uint4": { - "path": "Disty0/ChronoEdit-14B-SDNQ-uint4-svd-r32", - "preview": "Disty0--ChronoEdit-14B-SDNQ-uint4-svd-r32.jpg", - "desc": "Quantization of nvidia/ChronoEdit-14B-Diffusers using SDNQ: sdnq-svd 4-bit uint with svd rank 32.", - "skip": true, - "tags": "quantized", - "date": "2025 October", - "size": 18.10, - "extras": "" - }, - "Tencent HunyuanImage 3.0 sdnq-svd-uint4": { - "path": "Disty0/HunyuanImage3-SDNQ-uint4-svd-r32", - "desc": "Quantization of tencent/HunyuanImage-3.0 using SDNQ: sdnq-svd 4-bit uint with svd rank 32.", - "preview": "Disty0--HunyuanImage3-SDNQ-uint4-svd-r32.jpg", - "extras": "", - "skip": true, - "tags": "quantized", - "size": 57.06, - "date": "2025 September" - }, - "Tempest-by-Vlad XL sdnq-svd-uint4": { - "path": "vladmandic/tempestByVlad_baseV01-SDNQ-uint4-svd", - "preview": "vladmandic--tempestByVlad_baseV01-SDNQ-uint4-svd.jpg", - "desc": "Quantization of vladmandic/tempestByVlad_baseV01 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", - "tags": "quantized", - "size": 3.37, - "date": "2025 October", - "extras": "" - }, - "NoobAI-XL v1.1 epsilon sdnq-svd-uint4": { - "path": "Disty0/NoobAI-XL-v1.1-SDNQ-uint4-svd-r128", - "preview": "Disty0--NoobAI-XL-v1.1-SDNQ-uint4-svd-r128.jpg", - "desc": "Quantization of Laxhar/noobai-XL-1.1 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", - "tags": "quantized", - "size": 3.37, - "date": "2025 October", - "extras": "" - }, - "NoobAI-XL v1.0 v-pred sdnq-svd-uint4": { - "path": "Disty0/NoobAI-XL-Vpred-v1.0-SDNQ-uint4-svd-r128", - "preview": "Disty0--NoobAI-XL-Vpred-v1.0-SDNQ-uint4-svd-r128.jpg", - "desc": "Quantization of Laxhar/noobai-XL-Vpred-1.0 using SDNQ: sdnq-svd 4-bit uint with svd rank 128", - "tags": "quantized", - "size": 3.37, - "date": "2025 October", - "extras": "" - }, - - "Tempest-by-Vlad XL": { - "path": "tempestByVlad_baseV01.safetensors@https://civitai.com/api/download/models/1301775", - "preview": "tempestByVlad_baseV01.jpg", - "desc": "Flexible SDXL model with custom encoder and finetuned for larger landscape resolutions with high details and high contrast.", - "tags": "community", - "size": 6.94, - "date": "2025 January", - "extras": "" - }, - "Tempest-by-Vlad XL Hyper": { - "path": "tempestByVlad_hyperV01.safetensors@https://civitai.com/api/download/models/1343512", - "preview": "tempestByVlad_hyperV01.jpg", - "desc": "Custom distilled variant with goal to get as-normal-as-possible model that works with low steps and guidance-free", - "tags": "community", - "size": 6.94, - "date": "2025 January", - "extras": "" - }, - "Juggernaut XL XI": { - "path": "juggernautXL_juggXIByRundiffusion.safetensors@https://civitai.com/api/download/models/782002", - "preview": "juggernautXL_juggXIByRundiffusion.jpg", - "desc": "Showcase finetuned model based on Stable diffusion XL", - "date": "2024 August", - "size": 6.94, - "tags": "community", - "extras": "sampler: DEIS, steps: 20, cfg_scale: 6.0" - }, - "Juggernaut XL XI Lightning": { - "path": "juggernautXL_juggXILightningByRD.safetensors@https://civitai.com/api/download/models/920957", - "preview": "juggernautXL_juggXILightningByRD.jpg", - "desc": "Showcase finetuned model based on Stable diffusion XL", - "date": "2024 August", - "size": 6.94, - "tags": "community", - "extras": "sampler: DPM SDE, steps: 6, cfg_scale: 2.0" - }, - "Juggernaut SD Reborn": { - "original": true, - "path": "juggernaut_reborn.safetensors@https://civitai.com/api/download/models/274039", - "preview": "juggernaut_reborn.jpg", - "desc": "Showcase finetuned model based on Stable diffusion 1.5", - "date": "2023 December", - "size": 2.28, - "tags": "community", - "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" - }, - "WAI Illustrious XL v15": { - "path": "waiIllustriousSDXL_v150.safetensors@https://civitai.com/api/download/models/2167369", - "preview": "waiIllustriousSDXL_v150.jpg", - "desc": "", - "tags": "community", - "size": 6.94, - "date": "2025 August", - "extras": "" - }, - "Pony Realism XL v2.3": { - "path": "ponyRealism_V23.safetensors@https://civitai.com/api/download/models/1763661", - "preview": "ponyRealism_V23.jpg", - "desc": "", - "tags": "community", - "size": 6.94, - "date": "2025 May", - "extras": "" - }, - "NoobAI XL 1.0 V-Pred": { - "path": "noobaiXLNAIXL_vPred10Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-Vpred-1.0/resolve/main/NoobAI-XL-Vpred-v1.0.safetensors", - "preview": "noobaiXLNAIXL_vPred10Version.jpg", - "desc": "", - "tags": "community", - "size": 6.94, - "date": "2024 December", - "extras": "" - }, - "NoobAI XL 1.1 Epsilon": { - "path": "noobaiXLNAIXL_epsilonPred11Version.safetensors@https://huggingface.co/Laxhar/noobai-XL-1.1/resolve/main/NoobAI-XL-v1.1.safetensors", - "preview": "noobaiXLNAIXL_epsilonPred11Version.jpg", - "desc": "", - "tags": "community", - "size": 6.94, - "date": "2024 November", - "extras": "" - }, - "WAI-Ani-Pony XL v14": { - "path": "waiANIPONYXL_v140.safetensors.safetensors@https://civitai.com/api/download/models/1767402", - "preview": "waiANIPONYXL_v140.jpg", - "desc": "", - "tags": "community", - "size": 6.94, - "date": "2025 May", - "extras": "" - }, - "Tiwaz CenKreChro": { - "path": "Tiwaz/CenKreChro", - "preview": "Tiwaz--CenKreChro.jpg", - "skip": true, - "desc": "Based Centerfold Flux 5, trying to merge in Chroma and Krea.", - "extras": "", - "tags": "community", - "date": "2025 September" - }, - "purplesmartai Pony 7": { - "path": "purplesmartai/pony-v7-base", - "preview": "purplesmartai--pony-v7-base.jpg", - "skip": true, - "desc": "Pony V7 is a versatile character generation model based on AuraFlow architecture. It supports a wide range of styles and species types (humanoid, anthro, feral, and more) and handles character interactions through natural language prompts.", - "extras": "", - "tags": "community", - "date": "October September" - }, - "ShuttleAI Shuttle 3.0 Diffusion": { - "path": "shuttleai/shuttle-3-diffusion", - "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", - "preview": "shuttleai--shuttle-3-diffusion.jpg", - "tags": "community", - "skip": true - }, - "ShuttleAI Shuttle 3.1 Aesthetic": { - "path": "shuttleai/shuttle-3.1-aesthetic", - "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", - "preview": "shuttleai--shuttle-3_1-aestetic.jpg", - "tags": "community", - "skip": true - }, - "ShuttleAI Shuttle Jaguar": { - "path": "shuttleai/shuttle-jaguar", - "desc": "Shuttle uses Flux.1 Schnell as its base. It can produce images similar to Flux Dev or Pro in just 4 steps, and it is licensed under Apache 2. The model was partially de-distilled during training. When used beyond 10 steps, it enters refiner mode enhancing image details without altering the composition", - "preview": "shuttleai--shuttle-jaguar.jpg", - "tags": "community", - "skip": true - }, - - "Google Gemini 2.5 Flash Nano Banana": { - "path": "gemini-2.5-flash-image", - "desc": "Gemini can generate and process images conversationally. You can prompt Gemini with text, images, or a combination of both allowing you to create, edit, and iterate on visuals with unprecedented control.", - "preview": "gemini-2.5-flash-image.jpg", - "tags": "cloud", - "skip": true - }, - "Google Gemini 3.0 Pro Nano Banana": { - "path": "gemini-3-pro-image-preview", - "desc": "Built on Gemini 3. Create and edit images with studio-quality levels of precision and control", - "preview": "gemini-3-pro-image-preview.jpg", - "tags": "cloud", - "skip": true + "extras": "sampler: Default, cfg_scale: 1.5, steps: 50", + "size": 15.3, + "date": "2025 January" } } diff --git a/installer.py b/installer.py index 23749f82a..913c7d357 100644 --- a/installer.py +++ b/installer.py @@ -648,7 +648,7 @@ def check_diffusers(): t_start = time.time() if args.skip_all: return - sha = '7feb4fc791909f4a58b153d6d07c6cb8437b2e58' # diffusers commit hash + sha = '5efb81fa711863fdece9136ad10788440e658b40' # diffusers commit hash # if args.use_rocm or args.use_zluda or args.use_directml: # sha = '043ab2520f6a19fce78e6e060a68dbc947edb9f9' # lock diffusers versions for now pkg = pkg_resources.working_set.by_key.get('diffusers', None) diff --git a/launch.py b/launch.py index 57a1930af..54944a19c 100755 --- a/launch.py +++ b/launch.py @@ -67,11 +67,10 @@ def get_custom_args(): del env['PS1'] installer.log.trace(f'Environment: {installer.print_dict(env)}') env = [f'{k}={v}' for k, v in os.environ.items() if k.startswith('SD_')] - installer.log.debug(f'Env flags: {env}') - ldpreload = os.environ.get('LD_PRELOAD', None) - ldpath = os.environ.get('LD_LIBRARY_PATH', None) - if ldpreload is not None or ldpath is not None: - installer.log.debug(f'Linker flags: preload="{ldpreload}" path="{ldpath}"') + ld = [f'{k}={v}' for k, v in os.environ.items() if k.startswith('LD_')] + compute = [f'{k}={v}' for k, v in os.environ.items() if 'TORCH' in k or 'CUDA' in k or 'ROCM' in k or 'MIOPEN' in k] + installer.log.debug(f'Flags: sd={env} ld={ld} compute={compute}') + installer.log.debug(f'Flags ') rec('args') diff --git a/models/Reference/zai-org--GLM-Image.jpg b/models/Reference/zai-org--GLM-Image.jpg new file mode 100644 index 000000000..526e50338 Binary files /dev/null and b/models/Reference/zai-org--GLM-Image.jpg differ diff --git a/modules/control/units/controlnet.py b/modules/control/units/controlnet.py index 9e026923f..fcd610396 100644 --- a/modules/control/units/controlnet.py +++ b/modules/control/units/controlnet.py @@ -181,7 +181,7 @@ def api_list_models(model_type: str = None): model_list += list(predefined_qwen) if model_type == 'hunyuandit' or model_type == 'all': model_list += list(predefined_hunyuandit) - if model_type == 'z_image': + if model_type == 'zimage': model_list += list(predefined_zimage) model_list += sorted(find_models()) return model_list @@ -207,7 +207,7 @@ def list_models(refresh=False): models = ['None'] + list(predefined_qwen) + sorted(find_models()) elif modules.shared.sd_model_type == 'hunyuandit': models = ['None'] + list(predefined_hunyuandit) + sorted(find_models()) - elif modules.shared.sd_model_type == 'z_image': + elif modules.shared.sd_model_type == 'zimage': models = ['None'] + list(predefined_zimage) + sorted(find_models()) else: log.warning(f'Control {what} model list failed: unknown model type') @@ -273,7 +273,7 @@ class ControlNet(): elif shared.sd_model_type == 'hunyuandit': from diffusers import HunyuanDiT2DControlNetModel as cls config = 'Tencent-Hunyuan/HunyuanDiT-v1.2-ControlNet-Diffusers-Canny' - elif shared.sd_model_type == 'z_image': + elif shared.sd_model_type == 'zimage': from diffusers import ZImageControlNetModel as cls if '2.0' in model_id: config = 'hlky/Z-Image-Turbo-Fun-Controlnet-Union-2.0' diff --git a/modules/loader.py b/modules/loader.py index cbd000987..c6e25a1d3 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -99,14 +99,23 @@ except Exception: _bnb = False timer.startup.record("bnb") +import huggingface_hub # pylint: disable=W0611,C0411 +logging.getLogger("huggingface_hub.file_download").setLevel(logging.ERROR) +if huggingface_hub.__version__.startswith('0.'): + huggingface_hub.is_offline_mode = lambda: False +timer.startup.record("hfhub") + +import accelerate # pylint: disable=W0611,C0411 +timer.startup.record("accelerate") + +import pydantic # pylint: disable=W0611,C0411 +timer.startup.record("pydantic") + import transformers # pylint: disable=W0611,C0411 from transformers import logging as transformers_logging # pylint: disable=W0611,C0411 transformers_logging.set_verbosity_error() timer.startup.record("transformers") -import accelerate # pylint: disable=W0611,C0411 -timer.startup.record("accelerate") - try: import onnxruntime # pylint: disable=W0611,C0411 onnxruntime.set_default_logger_severity(4) @@ -121,9 +130,6 @@ import gradio # pylint: disable=W0611,C0411 timer.startup.record("gradio") errors.install([gradio]) -import pydantic # pylint: disable=W0611,C0411 -timer.startup.record("pydantic") - # patch different progress bars import tqdm as tqdm_lib # pylint: disable=C0411 from tqdm.rich import tqdm # pylint: disable=W0611,C0411 @@ -145,10 +151,6 @@ except Exception as e: errors.log.error('Please restart re-run the installer') sys.exit(1) -import huggingface_hub # pylint: disable=W0611,C0411 -logging.getLogger("huggingface_hub.file_download").setLevel(logging.ERROR) -timer.startup.record("hfhub") - try: import pillow_jxl # pylint: disable=W0611,C0411 except Exception: @@ -185,6 +187,7 @@ def get_packages(): "gradio": gradio.__version__, "transformers": transformers.__version__, "accelerate": accelerate.__version__, + "hub": huggingface_hub.__version__, } try: diff --git a/modules/modeldata.py b/modules/modeldata.py index 29ab6b659..2fcfac26a 100644 --- a/modules/modeldata.py +++ b/modules/modeldata.py @@ -22,7 +22,7 @@ def get_model_type(pipe): model_type = 'sd' # instaflow is compatible with sd elif "AnimateDiffPipeline" in name: model_type = 'sd' # animatediff is compatible with sd - elif "Kandinsky5" in name: + elif "Kandinsky5" in name and '2I' in name: model_type = 'kandinsky5' elif "Kandinsky3" in name: model_type = 'kandinsky3' @@ -41,7 +41,7 @@ def get_model_type(pipe): elif "Flux" in name or "Flex1" in name or "Flex2" in name: model_type = 'f1' elif "ZImage" in name or "Z-Image" in name: - model_type = 'z_image' + model_type = 'zimage' elif "Lumina2" in name: model_type = 'lumina2' elif "Lumina" in name: @@ -78,9 +78,23 @@ def get_model_type(pipe): model_type = 'prx' elif 'LongCat' in name: model_type = 'longcat' + elif 'GlmImage' in name: + model_type = 'glmimage' elif 'Ovis-Image' in name: model_type = 'ovis' + elif 'Wan' in name: + model_type = 'wanai' + elif 'ChronoEdit' in name: + model_type = 'chrono' + elif 'HDM-xut' in name: + model_type = 'hdm' + elif 'HunyuanImage3' in name: + model_type = 'hunyuanimage3' + elif 'HunyuanImage' in name: + model_type = 'hunyuanimage' # video models + elif "Kandinsky5" in name and '2V' in name: + model_type = 'kandinsky5video' elif "CogVideo" in name: model_type = 'cogvideo' elif 'HunyuanVideo15' in name: @@ -93,17 +107,6 @@ def get_model_type(pipe): model_type = 'mochivideo' elif "Allegro" in name: model_type = 'allegrovideo' - # hybrid models - elif 'Wan' in name: - model_type = 'wanai' - elif 'ChronoEdit' in name: - model_type = 'chrono' - elif 'HDM-xut' in name: - model_type = 'hdm' - elif 'HunyuanImage3' in name: - model_type = 'hunyuanimage3' - elif 'HunyuanImage' in name: - model_type = 'hunyuanimage' # cloud models elif 'GoogleVeo' in name: model_type = 'veo3' diff --git a/modules/modelloader.py b/modules/modelloader.py index 9edf51a9d..81138aebb 100644 --- a/modules/modelloader.py +++ b/modules/modelloader.py @@ -45,7 +45,7 @@ def hf_login(token=None): except Exception: pass with contextlib.redirect_stdout(stdout): - hf.login(token=token, add_to_git_credential=False, write_permission=False) + hf.login(token=token, add_to_git_credential=False) os.environ['HF_TOKEN'] = token text = stdout.getvalue() or '' obfuscated_token = 'hf_...' + token[-4:] diff --git a/modules/processing.py b/modules/processing.py index 9f2bc95d7..168372845 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -400,6 +400,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: infotexts = [] output_images = [] output_binary = None + audio = None process_init(p) if p.scripts is not None and isinstance(p.scripts, scripts_manager.ScriptRunner): diff --git a/modules/processing_args.py b/modules/processing_args.py index 9f550fe0e..75c916e89 100644 --- a/modules/processing_args.py +++ b/modules/processing_args.py @@ -156,6 +156,8 @@ def task_specific_kwargs(p, model): task_args['reference_images'] = p.init_images if ('GoogleNanoBananaPipeline' in model_cls) and (p.init_images is not None) and (len(p.init_images) > 0): task_args['image'] = p.init_images[0] + if ('GlmImagePipeline' in model_cls) and (p.init_images is not None) and (len(p.init_images) > 0): + task_args['image'] = p.init_images if 'BlipDiffusionPipeline' in model_cls: if len(p.init_images) == 0: shared.log.error('BLiP diffusion requires init image') diff --git a/modules/sd_detect.py b/modules/sd_detect.py index 2143e34b3..0e93b6d20 100644 --- a/modules/sd_detect.py +++ b/modules/sd_detect.py @@ -143,6 +143,8 @@ def guess_by_name(fn, current_guess): new_guess = 'LongCat' elif 'ovis-image' in fn.lower(): new_guess = 'Ovis-Image' + elif 'glm-image' in fn.lower(): + new_guess = 'GLM-Image' if debug_load: shared.log.trace(f'Autodetect: method=name file="{fn}" previous="{current_guess}" current="{new_guess}"') return new_guess or current_guess diff --git a/modules/sd_models.py b/modules/sd_models.py index da0888431..f0a832dd6 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -439,7 +439,7 @@ def load_diffuser_force(detected_model_type, checkpoint_info, diffusers_load_con from pipelines.model_kandinsky import load_kandinsky3 sd_model = load_kandinsky3(checkpoint_info, diffusers_load_config) allow_post_quant = False - elif model_type in ['Kandinsky 5.0']: + elif model_type in ['Kandinsky 5.0'] and '2I' in model_type: from pipelines.model_kandinsky import load_kandinsky5 sd_model = load_kandinsky5(checkpoint_info, diffusers_load_config) allow_post_quant = False @@ -483,6 +483,10 @@ def load_diffuser_force(detected_model_type, checkpoint_info, diffusers_load_con from pipelines.model_ovis import load_ovis sd_model = load_ovis(checkpoint_info, diffusers_load_config) allow_post_quant = False + elif model_type in ['GLM-Image']: + from pipelines.model_glm import load_glm_image + sd_model = load_glm_image(checkpoint_info, diffusers_load_config) + allow_post_quant = False except Exception as e: shared.log.error(f'Load {op}: path="{checkpoint_info.path}" {e}') if debug_load: diff --git a/modules/sd_samplers_common.py b/modules/sd_samplers_common.py index 8089ad8e1..3cdc91943 100644 --- a/modules/sd_samplers_common.py +++ b/modules/sd_samplers_common.py @@ -9,7 +9,7 @@ from modules import shared, devices, processing, images, sd_vae_approx, sd_vae_t SamplerData = namedtuple('SamplerData', ['name', 'constructor', 'aliases', 'options']) approximation_indexes = { "Simple": 0, "Approximate": 1, "TAESD": 2, "Full VAE": 3 } -flow_models = ['f1', 'f2', 'sd3', 'lumina', 'auraflow', 'sana', 'z_image', 'lumina2', 'cogview4', 'h1', 'cosmos', 'chroma', 'omnigen', 'omnigen2', 'longcat'] +flow_models = ['f1', 'f2', 'sd3', 'lumina', 'auraflow', 'sana', 'zimage', 'lumina2', 'cogview4', 'h1', 'cosmos', 'chroma', 'omnigen', 'omnigen2', 'longcat'] warned = False queue_lock = threading.Lock() diff --git a/modules/sd_vae_remote.py b/modules/sd_vae_remote.py index eb0b32247..7a03bf383 100644 --- a/modules/sd_vae_remote.py +++ b/modules/sd_vae_remote.py @@ -20,7 +20,7 @@ hf_decode_endpoints['auraflow'] = hf_decode_endpoints['sdxl'] hf_decode_endpoints['omnigen'] = hf_decode_endpoints['sdxl'] hf_decode_endpoints['h1'] = hf_decode_endpoints['f1'] hf_decode_endpoints['chroma'] = hf_decode_endpoints['f1'] -hf_decode_endpoints['z_image'] = hf_decode_endpoints['f1'] +hf_decode_endpoints['zimage'] = hf_decode_endpoints['f1'] hf_decode_endpoints['lumina2'] = hf_decode_endpoints['f1'] hf_encode_endpoints = { @@ -35,7 +35,7 @@ hf_encode_endpoints['hunyuandit'] = hf_encode_endpoints['sdxl'] hf_encode_endpoints['auraflow'] = hf_encode_endpoints['sdxl'] hf_encode_endpoints['omnigen'] = hf_encode_endpoints['sdxl'] hf_encode_endpoints['h1'] = hf_encode_endpoints['f1'] -hf_encode_endpoints['z_image'] = hf_encode_endpoints['f1'] +hf_encode_endpoints['zimage'] = hf_encode_endpoints['f1'] hf_encode_endpoints['lumina2'] = hf_encode_endpoints['f1'] dtypes = { @@ -92,7 +92,7 @@ def remote_decode(latents: torch.Tensor, width: int = 0, height: int = 0, model_ params["output_type"] = "pt" params["output_tensor_type"] = "binary" headers["Accept"] = "tensor/binary" - if model_type in {'f1', 'h1', 'z_image', 'lumina2', 'chroma'} and (width > 0) and (height > 0): + if model_type in {'f1', 'h1', 'zimage', 'lumina2', 'chroma'} and (width > 0) and (height > 0): params['width'] = width params['height'] = height if shared.sd_model.vae is not None and shared.sd_model.vae.config is not None: diff --git a/modules/sd_vae_taesd.py b/modules/sd_vae_taesd.py index ec710465c..8067d9136 100644 --- a/modules/sd_vae_taesd.py +++ b/modules/sd_vae_taesd.py @@ -38,7 +38,7 @@ prev_cls = '' prev_type = '' prev_model = '' lock = threading.Lock() -supported = ['sd', 'sdxl', 'sd3', 'f1', 'h1', 'z_image', 'lumina2', 'hunyuanvideo', 'wanai', 'chrono', 'cosmos', 'mochivideo', 'pixartsigma', 'pixartalpha', 'hunyuandit', 'omnigen', 'qwen', 'longcat', 'omnigen2', 'flite', 'ovis'] +supported = ['sd', 'sdxl', 'sd3', 'f1', 'h1', 'z_image', 'lumina2', 'hunyuanvideo', 'wanai', 'chrono', 'cosmos', 'mochivideo', 'pixartsigma', 'pixartalpha', 'hunyuandit', 'omnigen', 'qwen', 'longcat', 'omnigen2', 'flite', 'ovis', 'glmimage'] def warn_once(msg, variant=None): @@ -59,7 +59,7 @@ def get_model(model_type = 'decoder', variant = None): model_cls = 'sd' elif model_cls in {'pixartsigma', 'hunyuandit', 'omnigen', 'auraflow'}: model_cls = 'sdxl' - elif model_cls in {'h1', 'z_image', 'lumina2', 'chroma', 'longcat', 'omnigen2', 'flite', 'ovis'}: + elif model_cls in {'h1', 'z_image', 'lumina2', 'chroma', 'longcat', 'omnigen2', 'flite', 'ovis', 'glmimage'}: model_cls = 'f1' elif model_cls in {'wanai', 'qwen', 'chrono', 'cosmos'}: variant = variant or 'TAE WanVideo' diff --git a/modules/shared_items.py b/modules/shared_items.py index 40e3b768f..b5df05390 100644 --- a/modules/shared_items.py +++ b/modules/shared_items.py @@ -49,6 +49,7 @@ pipelines = { 'HunyuanImage': getattr(diffusers, 'HunyuanImagePipeline', None), 'Z-Image': getattr(diffusers, 'ZImagePipeline', None), 'LongCat': getattr(diffusers, 'LongCatImagePipeline', None), + 'GLM-Image': getattr(diffusers, 'GlmImagePipeline', None), # dynamically imported and redefined later 'Meissonic': getattr(diffusers, 'DiffusionPipeline', None), 'Monetico': getattr(diffusers, 'DiffusionPipeline', None), diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 981490b89..90d056a04 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -326,6 +326,7 @@ class ExtraNetworksPage: else: style = 'network-folder' subdirs_html += f'
' + self.html = '' self.create_items(tabname) versions = sorted({item.get("version", "") for item in self.items if item.get("version")}) diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index 7ade3743e..df6681bca 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -19,6 +19,8 @@ version_map = { "StableDiffusionXL": "SD XL", "WanToVideo": "Wan", "WanVACE": "Wan", + "Z": "Z-Image", + "Glm": "GLM-Image", } class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): @@ -40,7 +42,19 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): shared.log.debug(f'Networks: type="reference" autodownload={shared.opts.sd_checkpoint_autodownload} enable={shared.opts.extra_network_reference_enable}') return [] count = { 'total': 0, 'ready': 0, 'hidden': 0, 'experimental': 0, 'base': 0 } - shared.reference_models = readfile(os.path.join('html', 'reference.json'), as_type="dict") + + reference_base = readfile(os.path.join('html', 'reference.json'), as_type="dict") + reference_quant = readfile(os.path.join('html', 'reference-quant.json'), as_type="dict") + reference_distilled = readfile(os.path.join('html', 'reference-distilled.json'), as_type="dict") + reference_community = readfile(os.path.join('html', 'reference-community.json'), as_type="dict") + reference_cloud = readfile(os.path.join('html', 'reference-cloud.json'), as_type="dict") + shared.reference_models = {} + shared.reference_models.update(reference_base) + shared.reference_models.update(reference_quant) + shared.reference_models.update(reference_community) + shared.reference_models.update(reference_distilled) + shared.reference_models.update(reference_cloud) + for k, v in shared.reference_models.items(): count['total'] += 1 url = v['path'] @@ -79,7 +93,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): ready = reference_downloaded(url) version = "ready" if ready else "download" if tag == 'cloud': - version = 'cloud' + version = 'Cloud' if not ready and shared.opts.offline_mode: count['hidden'] += 1 continue @@ -103,7 +117,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): "version": version, "tags": tag, } - shared.log.debug(f'Networks: type="reference" items={count}') + shared.log.debug(f'Networks: type="reference" {count}') def create_item(self, name): record = None diff --git a/pipelines/model_chroma.py b/pipelines/model_chroma.py index a2a21c34a..bcb2cdcd5 100644 --- a/pipelines/model_chroma.py +++ b/pipelines/model_chroma.py @@ -26,6 +26,7 @@ def load_chroma(checkpoint_info, diffusers_load_config=None): diffusers.pipelines.auto_pipeline.AUTO_TEXT2IMAGE_PIPELINES_MAPPING["chroma"] = diffusers.ChromaPipeline diffusers.pipelines.auto_pipeline.AUTO_IMAGE2IMAGE_PIPELINES_MAPPING["chroma"] = diffusers.ChromaImg2ImgPipeline + diffusers.pipelines.auto_pipeline.AUTO_INPAINT_PIPELINES_MAPPING["chroma"] = diffusers.ChromaInpaintPipeline del text_encoder del transformer sd_hijack_te.init_hijack(pipe) diff --git a/pipelines/model_glm.py b/pipelines/model_glm.py new file mode 100644 index 000000000..31974f75b --- /dev/null +++ b/pipelines/model_glm.py @@ -0,0 +1,137 @@ +import time +import rich.progress as rp +import transformers +import diffusers +from modules import shared, devices, sd_models, model_quant, sd_hijack_te +from pipelines import generic + + +class GLMTokenProgressProcessor(transformers.LogitsProcessor): + """LogitsProcessor that tracks autoregressive token generation progress for GLM-Image.""" + + def __init__(self): + self.total_tokens = 0 + self.current_step = 0 + self.task_id = None + self.pbar = None + self.pbar_task = None + self.start_time = 0 + + def set_total(self, total_tokens: int): + self.total_tokens = total_tokens + self.current_step = 0 + + def __call__(self, input_ids, scores): + if self.current_step == 0: + self.task_id = shared.state.begin('AR Generation') + self.start_time = time.time() + self.pbar = rp.Progress( + rp.TextColumn('[cyan]AR Generation'), + rp.TextColumn('{task.fields[speed]}'), + rp.BarColumn(bar_width=40, complete_style='#327fba', finished_style='#327fba'), + rp.TaskProgressColumn(), + rp.MofNCompleteColumn(), + rp.TimeElapsedColumn(), + rp.TimeRemainingColumn(), + console=shared.console, + ) + self.pbar.start() + self.pbar_task = self.pbar.add_task(description='', total=self.total_tokens, speed='') + self.current_step += 1 + shared.state.sampling_step = self.current_step + shared.state.sampling_steps = self.total_tokens + if self.pbar is not None and self.pbar_task is not None: + elapsed = time.time() - self.start_time + speed = f'{self.current_step / elapsed:.2f}tok/s' if elapsed > 0 else '' + self.pbar.update(self.pbar_task, completed=self.current_step, speed=speed) + if self.current_step >= self.total_tokens: + if self.pbar is not None: + self.pbar.stop() + self.pbar = None + if self.task_id is not None: + shared.state.end(self.task_id) + self.task_id = None + return scores + + +def hijack_vision_language_generate(pipe): + """Wrap vision_language_encoder.generate to add progress tracking.""" + if not hasattr(pipe, 'vision_language_encoder') or pipe.vision_language_encoder is None: + return + + original_generate = pipe.vision_language_encoder.generate + progress_processor = GLMTokenProgressProcessor() + + def wrapped_generate(*args, **kwargs): + # Get max_new_tokens to determine total tokens + max_new_tokens = kwargs.get('max_new_tokens', 0) + progress_processor.set_total(max_new_tokens) + + # Add progress processor to logits_processor list + existing_processors = kwargs.get('logits_processor', None) + if existing_processors is None: + existing_processors = [] + elif not isinstance(existing_processors, list): + existing_processors = list(existing_processors) + kwargs['logits_processor'] = existing_processors + [progress_processor] + + return original_generate(*args, **kwargs) + + pipe.vision_language_encoder.generate = wrapped_generate + + +def load_glm_image(checkpoint_info, diffusers_load_config=None): + if diffusers_load_config is None: + diffusers_load_config = {} + repo_id = sd_models.path_to_repo(checkpoint_info) + sd_models.hf_auth_check(checkpoint_info) + + load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) + shared.log.debug(f'Load model: type=GLM-Image repo="{repo_id}" offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') + + # Load transformer (DiT decoder - 7B) with quantization support + transformer = generic.load_transformer( + repo_id, + cls_name=diffusers.GlmImageTransformer2DModel, + load_config=diffusers_load_config + ) + + # Load text encoder (ByT5 for glyph) - cannot use shared T5 as GLM-Image requires specific ByT5 encoder (1472 hidden size) + text_encoder = generic.load_text_encoder( + repo_id, + cls_name=transformers.T5EncoderModel, + load_config=diffusers_load_config, + allow_shared=False + ) + + # Load vision-language encoder (AR model - 9B) + # Note: This is a conditional generation model, different from typical text encoders + vision_language_encoder = generic.load_text_encoder( + repo_id, + cls_name=transformers.GlmImageForConditionalGeneration, + subfolder="vision_language_encoder", + load_config=diffusers_load_config, + allow_shared=False + ) + + pipe = diffusers.GlmImagePipeline.from_pretrained( + repo_id, + cache_dir=shared.opts.diffusers_dir, + transformer=transformer, + text_encoder=text_encoder, + vision_language_encoder=vision_language_encoder, + **load_args, + ) + + pipe.task_args = { + 'output_type': 'np', + 'generate_kwargs': { + 'eos_token_id': None, # Disable EOS early stopping to ensure all required tokens are generated + }, + } + + del transformer, text_encoder, vision_language_encoder + sd_hijack_te.init_hijack(pipe) + hijack_vision_language_generate(pipe) # Add progress tracking for AR token generation + devices.torch_gc(force=True, reason='load') + return pipe diff --git a/scripts/differential_diffusion.py b/scripts/differential_diffusion.py index db67e8e00..889c3a33a 100644 --- a/scripts/differential_diffusion.py +++ b/scripts/differential_diffusion.py @@ -15,7 +15,7 @@ import PIL.Image import numpy as np import torch import torchvision -from transformers import CLIPFeatureExtractor, CLIPTextModel, CLIPTextModelWithProjection, CLIPTokenizer +from transformers import CLIPImageProcessor, CLIPTextModel, CLIPTextModelWithProjection, CLIPTokenizer from diffusers.image_processor import VaeImageProcessor from diffusers.loaders import FromSingleFileMixin, LoraLoaderMixin, TextualInversionLoaderMixin from diffusers.models import AutoencoderKL, UNet2DConditionModel @@ -1059,7 +1059,7 @@ class StableDiffusionDiffImg2ImgPipeline(DiffusionPipeline): unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, safety_checker: StableDiffusionSafetyChecker, - feature_extractor: CLIPFeatureExtractor, + feature_extractor: CLIPImageProcessor, requires_safety_checker: bool = False, ): super().__init__() @@ -1353,17 +1353,6 @@ class StableDiffusionDiffImg2ImgPipeline(DiffusionPipeline): return prompt_embeds - # Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline.run_safety_checker - def run_safety_checker(self, image, device, dtype): - if self.safety_checker is not None: - safety_checker_input = self.feature_extractor(self.numpy_to_pil(image), return_tensors="pt").to(device) - image, has_nsfw_concept = self.safety_checker( - images=image, clip_input=safety_checker_input.pixel_values.to(dtype) - ) - else: - has_nsfw_concept = None - return image, has_nsfw_concept - # Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline.decode_latents def decode_latents(self, latents): latents = 1 / self.vae.config.scaling_factor * latents diff --git a/wiki b/wiki index ade2ed6ca..89fd01676 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit ade2ed6ca8197d96f14b0aebd1c84fbaa21cdaba +Subproject commit 89fd016763d9b6ad03299e7942be2c675b7b5f1c