From a4c62571242316067ca8ad231120210773f16f28 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 12 Mar 2024 23:51:36 -0400 Subject: [PATCH] full refactor of reference models --- CHANGELOG.md | 24 +- html/reference.json | 292 ++++++++++-------- models/Reference/TempestV0.1-Artistic.jpg | Bin 0 -> 29733 bytes ...E.jpg => dreamshaperXL_v21TurboDPMSDE.jpg} | Bin ...g => juggernautXL_v9Rdphoto2Lightning.jpg} | Bin .../juggernautXL_v9Rundiffusionphoto2.jpg | Bin 0 -> 41737 bytes ...ion-xl-base-1.0.jpg => sd_xl_base_1.0.jpg} | Bin ...ilityai--sdxl-turbo.jpg => sdxl_turbo.jpg} | Bin ...tabilityai--stable-diffusion-2-1-base.jpg} | Bin ... => stabilityai--stable-diffusion-2-1.jpg} | Bin ...-v1-5.jpg => v1-5-pruned-fp16-emaonly.jpg} | Bin modules/modelloader.py | 11 +- modules/prompt_parser_diffusers.py | 11 +- modules/sd_models.py | 24 +- modules/shared.py | 1 + modules/styles.py | 14 +- modules/ui_extra_networks.py | 15 +- modules/ui_extra_networks_checkpoints.py | 3 +- requirements.txt | 4 +- wiki | 2 +- 20 files changed, 239 insertions(+), 162 deletions(-) create mode 100644 models/Reference/TempestV0.1-Artistic.jpg rename models/Reference/{dreamshaperXL_turboDpmppSDE.jpg => dreamshaperXL_v21TurboDPMSDE.jpg} (100%) rename models/Reference/{juggernautXL_v7Rundiffusion.jpg => juggernautXL_v9Rdphoto2Lightning.jpg} (100%) create mode 100644 models/Reference/juggernautXL_v9Rundiffusionphoto2.jpg rename models/Reference/{stabilityai--stable-diffusion-xl-base-1.0.jpg => sd_xl_base_1.0.jpg} (100%) rename models/Reference/{stabilityai--sdxl-turbo.jpg => sdxl_turbo.jpg} (100%) rename models/Reference/{stabilityai--sd-turbo.jpg => stabilityai--stable-diffusion-2-1-base.jpg} (100%) rename models/Reference/{stabilityai--stable-diffusion-2.1-base.jpg => stabilityai--stable-diffusion-2-1.jpg} (100%) rename models/Reference/{runwayml--stable-diffusion-v1-5.jpg => v1-5-pruned-fp16-emaonly.jpg} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a354cc57..113923d59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,20 @@ - items that require `diffusers==0.27.0.dev`: - EDM samplers for Playground 2.5 - Stable Cascade +- move models to script: + - StabilityAI SVD + - StabilityAI SVD XT 1.0 + - StabilityAI SVD XT 1.1 +- fix reference models: + - Warp Wuerstchen: pipeline does not have all components + - Kandinsky 2.1: pipeline does not have all components + - Kandinsky 2.2: pipeline does not have all components + - StabilityAI Stable Cascade Lite: broken decode in diffusers + - Tsinghua UniDiffuser: no model offload +- untested: + - DeepFloyd IF Medium -## Update for 2024-03-11 +## Update for 2024-03-12 - [Playground v2.5](https://huggingface.co/playgroundai/playground-v2.5-1024px-aesthetic) - new model version from Playground: based on SDXL, but with some cool new concepts @@ -16,7 +28,7 @@ - another very fast & light sdxl model where original unet was compressed and distilled to 54% of original size - download using networks -> reference - *note* to download fp16 variant (recommended), set settings -> diffusers -> preferred model variant - [Stable Cascade](https://github.com/Stability-AI/StableCascade) + [Stable Cascade](https://github.com/Stability-AI/StableCascade) *Full* and *Lite* - large multi-stage high-quality model - download using networks -> reference - see [wiki](https://github.com/vladmandic/automatic/wiki/Stable-Cascade) for details @@ -76,13 +88,19 @@ - see *settings -> image options -> watermarking* - invisible watermark: using steganogephy - image watermark: overlaid on top of image +- **Reference models** + - additional reference models available for single-click download & run: + *Stable Cascade, Stable Cascade lite, Stable Video Diffusion XT 1.1* + - reference models will now download *fp16* variation by default + - reference models will print recommended settings to log if present + - new setting in extra network: *use reference values when available* + disabled by default, if enabled will force use of reference settings for models that have them - **Improvements** - **FaceID** extend support for LoRA, HyperTile and FreeU, thanks @Trojaner - **Tiling** now extends to both Unet and VAE producing smoother outputs, thanks @AI-Casanova - new setting in image options: *include mask in output* - improved params parsing from from prompt string and styles - default theme updates and additional built-in theme *black-gray* - - new setting in extra network: "use reference values when available" - support models with their own YAML model config files - support models with their own JSON per-component config files, for example: `playground-v2.5_vae.config` - **ROCm** diff --git a/html/reference.json b/html/reference.json index 0e38c9760..ba53a7b5a 100644 --- a/html/reference.json +++ b/html/reference.json @@ -1,214 +1,251 @@ { - "DreamShaper SD 1.5 v8": { + + "DreamShaper SD v8": { + "original": true, "path": "dreamshaper_8.safetensors@https://civitai.com/api/download/models/128713", - "desc": "Showcase finetuned model based on Stable diffusion 1.5", "preview": "dreamshaper_8.jpg", - "extras": "width: 768, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "original": true - }, - "DreamShaper SD XL Turbo": { - "path": "dreamshaperXL_turboDpmppSDE.safetensors@https://civitai.com/api/download/models/251662", - "desc": "Showcase finetuned model based on Stable diffusion XL", - "extras": "width: 1024, height: 1024, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "preview": "dreamshaperXL_turboDpmppSDE.jpg" - }, - "Juggernaut Reborn": { - "path": "juggernaut_reborn.safetensors@https://civitai.com/api/download/models/274039", "desc": "Showcase finetuned model based on Stable diffusion 1.5", - "preview": "juggernaut_reborn.jpg", - "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "original": true + "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" }, - "Juggernaut XL v7 RunDiffusion": { - "path": "juggernautXL_v7Rundiffusion.safetensors@https://civitai.com/api/download/models/240840", + "Dreamshaper SD v7 LCM": { + "path": "SimianLuo/LCM_Dreamshaper_v7", + "preview": "SimianLuo--LCM_Dreamshaper_v7.jpg", + "desc": "Latent Consistencey Models enable swift inference with minimal steps on any pre-trained LDMs, including Stable Diffusion. By distilling classifier-free guidance into the model's input, LCM can generate high-quality images in very short inference time. LCM can generate quality images in as few as 3-4 steps, making it blazingly fast.", + "extras": "width: 512, height: 512, sampler: LCM, steps: 4, cfg_scale: 0.0" + }, + "DreamShaper SD-XL Turbo": { + "path": "dreamshaperXL_v21TurboDPMSDE.safetensors@https://civitai.com/api/download/models/351306", + "preview": "dreamshaperXL_v21TurboDPMSDE.jpg", "desc": "Showcase finetuned model based on Stable diffusion XL", - "extras": "width: 1024, height: 1024, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "preview": "juggernautXL_v7Rundiffusion.jpg" + "extras": "width: 1024, height: 1024, sampler: DPM SDE, steps: 8, 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", + "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" }, + "Juggernaut SD-XL v9": { + "path": "juggernautXL_v9Rundiffusionphoto2.safetensors@https://civitai.com/api/download/models/348913", + "preview": "juggernautXL_v9Rundiffusionphoto2.jpg", + "desc": "Showcase finetuned model based on Stable diffusion XL", + "extras": "width: 1024, height: 1024, sampler: DEIS, steps: 20, cfg_scale: 6.0" + }, + "Juggernaut SD-XL v9 Lightning": { + "path": "juggernautXL_v9Rdphoto2Lightning.safetensors@https://civitai.com/api/download/models/357609", + "preview": "juggernautXL_v9Rdphoto2Lightning.jpg", + "desc": "Showcase finetuned model based on Stable diffusion XL", + "extras": "width: 1024, height: 1024, sampler: DPM SDE, steps: 6, cfg_scale: 2.0" + }, + "Tempest SD-XL v0.1": { + "path": "TempestV0.1-Artistic.safetensors@https://huggingface.co/dataautogpt3/TempestV0.1/resolve/main/TempestV0.1-Artistic.safetensors?download=true", + "preview": "TempestV0.1-Artistic.jpg", + "desc": "The TempestV0.1 Initiative is a powerhouse in image generation, leveraging an unparalleled dataset of over 6 million images. The collection's vast scale, with resolutions from 1400x2100 to 4800x7200, encompasses 200GB of high-quality content.", + "extras": "width: 2048, height: 1024, sampler: DEIS, steps: 40, cfg_scale: 6.0" + }, + "RunwayML SD 1.5": { - "path": "runwayml/stable-diffusion-v1-5", - "alt": "v1-5-pruned-emaonly.safetensors@https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors?download=true", + "original": true, + "path": "v1-5-pruned-fp16-emaonly.safetensors@https://huggingface.co/Aptronym/SDNext/resolve/main/Reference/v1-5-pruned-fp16-emaonly.safetensors?download=true", + "preview": "v1-5-pruned-fp16-emaonly.jpg", "desc": "Stable Diffusion 1.5 is the base model all other 1.5 checkpoint were trained from. It's a latent text-to-image diffusion model capable of generating photo-realistic images given any text input. The Stable-Diffusion-v1-5 checkpoint was initialized with the weights of the Stable-Diffusion-v1-2 checkpoint and subsequently fine-tuned on 595k steps at resolution 512x512.", - "preview": "runwayml--stable-diffusion-v1-5.jpg", - "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "original": true + "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" }, - "StabilityAI SD 2.1 EMA": { - "path": "stabilityai/stable-diffusion-2-1-base", - "alt": "v2-1_512-ema-pruned.safetensors@https://huggingface.co/stabilityai/stable-diffusion-2-1-base/resolve/main/v2-1_512-ema-pruned.safetensors?download=true", - "desc": "This stable-diffusion-2-1-base model fine-tunes stable-diffusion-2-base (512-base-ema.ckpt) with 220k extra steps taken", - "preview": "stabilityai--stable-diffusion-2.1-base.jpg", - "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "original": true - }, - "StabilityAI SD 2.1 V": { - "path": "stabilityai/stable-diffusion-2-1-base", - "alt": "v2-1_768-ema-pruned.safetensors@https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors?download=true", - "desc": "This stable-diffusion-2 model is resumed from stable-diffusion-2-base (512-base-ema.ckpt) and trained for 150k steps using a v-objective on the same dataset. Resumed for another 140k steps on 768x768 images", - "preview": "stabilityai--stable-diffusion-2.1-base.jpg", - "extras": "width: 768, height: 768, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "original": true - }, - "StabilityAI SD-XL 1.0 Base": { - "path": "huggingface/stabilityai/stable-diffusion-xl-base-1.0", + "StabilityAI SD 2.1": { + "path": "huggingface/stabilityai/stable-diffusion-2-1-base", + "preview": "stabilityai--stable-diffusion-2-1-base.jpg", "skip": true, "variant": "fp16", + "desc": "This stable-diffusion-2-1-base model fine-tunes stable-diffusion-2-base (512-base-ema.ckpt) with 220k extra steps taken", + "extras": "width: 512, height: 512, sampler: DEIS, steps: 20, cfg_scale: 6.0" + }, + "StabilityAI SD 2.1 V": { + "path": "huggingface/stabilityai/stable-diffusion-2-1", + "preview": "stabilityai--stable-diffusion-2-1.jpg", + "skip": true, + "variant": "fp16", + "desc": "This stable-diffusion-2 model is resumed from stable-diffusion-2-base (512-base-ema.ckpt) and trained for 150k steps using a v-objective on the same dataset. Resumed for another 140k steps on 768x768 images", + "extras": "width: 768, height: 768, sampler: DEIS, steps: 20, cfg_scale: 6.0" + }, + "StabilityAI SD-XL 1.0 Base": { + "path": "sd_xl_base_1.0.safetensors@https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors?download=true", + "preview": "sd_xl_base_1.0.jpg", "desc": "Stable Diffusion XL (SDXL) is the latest AI image generation model that is tailored towards more photorealistic outputs with more detailed imagery and composition compared to previous SD models, including SD 2.1. It can make realistic faces, legible text within the images, and better image composition, all while using shorter and simpler prompts at a greatly increased base resolution of 1024x1024. Just like its predecessors, SDXL has the ability to generate image variations using image-to-image prompting, inpainting (reimagining of the selected parts of an image), and outpainting (creating new parts that lie outside the image borders).", - "extras": "width: 1024, height: 1024, sampler: DEIS, steps: 20, cfg_scale: 6.0", - "preview": "stabilityai--stable-diffusion-xl-base-1.0.jpg" - }, - "StabilityAI SD 2.1 Turbo": { - "_path": "stabilityai/sd-turbo", - "path": "sd_turbo.safetensors@https://huggingface.co/stabilityai/sd-turbo/resolve/main/sd_turbo.safetensors?download=true", - "variant": "fp16", - "desc": "SD-Turbo is a distilled version of Stable Diffusion 2.1, trained for real-time synthesis. SD-Turbo is based on a novel training method called Adversarial Diffusion Distillation (ADD) (see the technical report), which allows sampling large-scale foundational image diffusion models in 1 to 4 steps at high image quality. This approach uses score distillation to leverage large-scale off-the-shelf image diffusion models as a teacher signal and combines this with an adversarial loss to ensure high image fidelity even in the low-step regime of one or two sampling steps.", - "preview": "stabilityai--sd-turbo.jpg", - "original": true - }, - "StabilityAI SD-XL Turbo": { - "_path": "stabilityai/sdxl-turbo", - "path": "sdxl_turbo.safetensors@https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0_fp16.safetensors?download=true", - "variant": "fp16", - "desc": "SDXL-Turbo is a distilled version of SDXL 1.0, trained for real-time synthesis. SDXL-Turbo is based on a novel training method called Adversarial Diffusion Distillation (ADD) (see the technical report), which allows sampling large-scale foundational image diffusion models in 1 to 4 steps at high image quality. This approach uses score distillation to leverage large-scale off-the-shelf image diffusion models as a teacher signal and combines this with an adversarial loss to ensure high image fidelity even in the low-step regime of one or two sampling steps.", - "preview": "stabilityai--sdxl-turbo.jpg" - }, - "StabilityAI Stable Video Diffusion": { - "path": "stabilityai/stable-video-diffusion-img2vid", - "desc": "(SVD) Image-to-Video is a latent diffusion model trained to generate short video clips from an image conditioning. This model was trained to generate 14 frames at resolution 576x1024 given a context frame of the same size. We also finetune the widely used f8-decoder for temporal consistency.", - "preview": "stabilityai--stable-video-diffusion-img2vid.jpg" - }, - "StabilityAI Stable Video Diffusion XT": { - "path": "stabilityai/stable-video-diffusion-img2vid-xt", - "desc": "(SVD) Image-to-Video is a latent diffusion model trained to generate short video clips from an image conditioning. This model was trained to generate 25 frames at resolution 576x1024 given a context frame of the same size, finetuned from SVD Image-to-Video [14 frames]. We also finetune the widely used f8-decoder for temporal consistency.", - "preview": "stabilityai--stable-video-diffusion-img2vid-xt.jpg" + "extras": "width: 1024, height: 1024, sampler: DEIS, steps: 20, cfg_scale: 6.0" }, + "StabilityAI Stable Cascade": { "path": "huggingface/stabilityai/stable-cascade", "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.jpg" + "preview": "stabilityai--stable-cascade.jpg", + "extras": "width: 1024, height: 1024, sampler: Default, cfg_scale: 4.0, image_cfg_scale: 1.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.jpg", + "extras": "width: 1024, height: 1024, sampler: Default, cfg_scale: 4.0, image_cfg_scale: 1.0" + }, + + "StabilityAI SVD": { + "path": "stabilityai/stable-video-diffusion-img2vid", + "preview": "stabilityai--stable-video-diffusion-img2vid.jpg", + "desc": "(SVD) Image-to-Video is a latent diffusion model trained to generate short video clips from an image conditioning. This model was trained to generate 14 frames at resolution 576x1024 given a context frame of the same size. We also finetune the widely used f8-decoder for temporal consistency.", + "variant": "fp16", + "extras": "width: 1024, height: 576, sampler: Default, steps: 20" + }, + "StabilityAI SVD XT 1.0": { + "path": "stabilityai/stable-video-diffusion-img2vid-xt", + "preview": "stabilityai--stable-video-diffusion-img2vid-xt.jpg", + "desc": "(SVD) Image-to-Video is a latent diffusion model trained to generate short video clips from an image conditioning. This model was trained to generate 25 frames at resolution 576x1024 given a context frame of the same size, finetuned from SVD Image-to-Video [14 frames]. We also finetune the widely used f8-decoder for temporal consistency.", + "variant": "fp16", + "extras": "width: 1024, height: 576, sampler: Default, steps: 20" + }, + "StabilityAI SVD XT 1.1": { + "path": "stabilityai/stable-video-diffusion-img2vid-xt-1-1", + "preview": "stabilityai--stable-video-diffusion-img2vid-xt.jpg", + "desc": "(SVD 1.1) Image-to-Video is a latent diffusion model trained to generate short video clips from an image conditioning. This model was trained to generate 25 frames at resolution 1024x576 given a context frame of the same size, finetuned from SVD Image-to-Video [25 frames].", + "variant": "fp16", + "extras": "width: 1024, height: 576, sampler: Default, steps: 20" + }, + "Segmind Vega": { - "path": "segmind/Segmind-Vega", + "path": "huggingface/segmind/Segmind-Vega", + "preview": "segmind--Segmind-Vega.jpg", "desc": "The Segmind-Vega Model is a distilled version of the Stable Diffusion XL (SDXL), offering a remarkable 70% reduction in size and an impressive 100% speedup while retaining high-quality text-to-image generation capabilities. Trained on diverse datasets, including Grit and Midjourney scrape data, it excels at creating a wide range of visual content based on textual prompts. Employing a knowledge distillation strategy, Segmind-Vega leverages the teachings of several expert models, including SDXL, ZavyChromaXL, and JuggernautXL, to combine their strengths and produce compelling visual outputs.", - "preview": "segmind--Segmind-Vega.jpg" + "variant": "fp16", + "skip": true, + "extras": "width: 1024, height: 1024, sampler: Default, cfg_scale: 9.0" }, "Segmind SSD-1B": { - "path": "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.", - "preview": "segmind--SSD-1B.jpg" + "variant": "fp16", + "skip": true, + "extras": "width: 1024, height: 1024, sampler: Default, cfg_scale: 9.0" }, "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", - "preview": "segmind--tiny-sd.jpg" + "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 9.0" }, "Segmind SegMoE SD 4x2": { "path": "segmind/SegMoE-SD-4x2-v0", + "preview": "segmind--SegMoE-SD-4x2-v0.jpg", "desc": "SegMoE-SD-4x2-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 4 Expert SD1.5 models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", - "preview": "segmind--SegMoE-SD-4x2-v0.jpg" - }, - "Segmind SegMoE XL 2x1": { - "path": "segmind/SegMoE-2x1-v0", - "desc": "SegMoE-2x1-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 2 Expert SDXL models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", - "preview": "segmind--SegMoE-2x1-v0.jpg" + "extras": "width: 512, height: 512, sampler: Default" }, "Segmind SegMoE XL 4x2": { "path": "segmind/SegMoE-4x2-v0", + "preview": "segmind--SegMoE-4x2-v0.jpg", "desc": "SegMoE-4x2-v0 is an untrained Segmind Mixture of Diffusion Experts Model generated using segmoe from 4 Expert SDXL models. SegMoE is a powerful framework for dynamically combining Stable Diffusion Models into a Mixture of Experts within minutes without training", - "preview": "segmind--SegMoE-4x2-v0.jpg" + "extras": "width: 1024, height: 1024, sampler: Default" }, - "LCM SD-1.5 Dreamshaper 7": { - "path": "SimianLuo/LCM_Dreamshaper_v7", - "desc": "Latent Consistencey Models enable swift inference with minimal steps on any pre-trained LDMs, including Stable Diffusion. By distilling classifier-free guidance into the model's input, LCM can generate high-quality images in very short inference time. LCM can generate quality images in as few as 3-4 steps, making it blazingly fast.", - "preview": "SimianLuo--LCM_Dreamshaper_v7.jpg" - }, - "Pixart-α XL 2 Medium 512": { + + "Pixart-α XL 2 Medium": { "path": "PixArt-alpha/PixArt-XL-2-512x512", "desc": "PixArt-α is a Transformer-based T2I diffusion model whose image generation quality is competitive with state-of-the-art image generators (e.g., Imagen, SDXL, and even Midjourney), and the training speed markedly surpasses existing large-scale T2I models. Extensive experiments demonstrate that PIXART-α excels in image quality, artistry, and semantic control. It can directly generate 512px images from text prompts within a single sampling process.", - "preview": "PixArt-alpha--PixArt-XL-2-512x512.jpg" + "preview": "PixArt-alpha--PixArt-XL-2-512x512.jpg", + "extras": "width: 512, height: 512, sampler: Default, cfg_scale: 2.0" }, - "Pixart-α XL 2 Large 1024": { + "Pixart-α XL 2 Large": { "path": "PixArt-alpha/PixArt-XL-2-1024-MS", "desc": "PixArt-α is a Transformer-based T2I diffusion model whose image generation quality is competitive with state-of-the-art image generators (e.g., Imagen, SDXL, and even Midjourney), and the training speed markedly surpasses existing large-scale T2I models. Extensive experiments demonstrate that PIXART-α excels in image quality, artistry, and semantic control. It can directly generate 1024px images from text prompts within a single sampling process.", - "preview": "PixArt-alpha--PixArt-XL-2-1024-MS.jpg" - }, - "Pixart-α XL 2 Large LCM": { - "path": "PixArt-alpha/PixArt-LCM-XL-2-1024-MS", - "desc": "Pixart-α consists of pure transformer blocks for latent diffusion: It can directly generate 1024px images from text prompts within a single sampling process. LCMs is a diffusion distillation method which predict PF-ODE's solution directly in latent space, achieving super fast inference with few steps. Following LCM LoRA, we illustrative of the generation speed we achieve on various computers. Let us stress again how liberating it is to explore image generation so easily with PixArt-LCM.", - "preview": "PixArt-alpha--PixArt-XL-2-1024-MS.jpg" - }, - "Warp Wuerstchen": { - "path": "warp-ai/wuerstchen", - "desc": "Würstchen is a diffusion model whose text-conditional model works in a highly compressed latent space of images. Why is this important? Compressing data can reduce computational costs for both training and inference by magnitudes. Training on 1024x1024 images, is way more expensive than training at 32x32. Usually, other works make use of a relatively small compression, in the range of 4x - 8x spatial compression. Würstchen takes this to an extreme. Through its novel design, we achieve a 42x spatial compression. Würstchen employs a two-stage compression, what we call Stage A and Stage B. Stage A is a VQGAN, and Stage B is a Diffusion Autoencoder (more details can be found in the paper). A third model, Stage C, is learned in that highly compressed latent space. This training requires fractions of the compute used for current top-performing models, allowing also cheaper and faster inference.", - "preview": "warp-ai--wuerstchen.jpg" + "preview": "PixArt-alpha--PixArt-XL-2-1024-MS.jpg", + "extras": "width: 1024, height: 1024, sampler: Default, cfg_scale: 2.0" }, + "Kandinsky 2.1": { "path": "kandinsky-community/kandinsky-2-1", "desc": "Kandinsky 2.1 is a text-conditional diffusion model based on unCLIP and latent diffusion, composed of a transformer-based image prior model, a unet diffusion model, and a decoder. Kandinsky 2.1 inherits best practices from Dall-E 2 and Latent diffusion while introducing some new ideas. It uses the CLIP model as a text and image encoder, and diffusion image prior (mapping) between latent spaces of CLIP modalities. This approach increases the visual performance of the model and unveils new horizons in blending images and text-guided image manipulation.", - "preview": "kandinsky-community--kandinsky-2-1.jpg" + "preview": "kandinsky-community--kandinsky-2-1.jpg", + "extras": "width: 768, height: 768, sampler: Default" }, "Kandinsky 2.2": { "path": "kandinsky-community/kandinsky-2-2-decoder", "desc": "Kandinsky 2.2 is a text-conditional diffusion model (+0.1!) based on unCLIP and latent diffusion, composed of a transformer-based image prior model, a unet diffusion model, and a decoder. Kandinsky 2.1 inherits best practices from Dall-E 2 and Latent diffusion while introducing some new ideas. It uses the CLIP model as a text and image encoder, and diffusion image prior (mapping) between latent spaces of CLIP modalities. This approach increases the visual performance of the model and unveils new horizons in blending images and text-guided image manipulation.", - "preview": "kandinsky-community--kandinsky-2-2-decoder.jpg" + "preview": "kandinsky-community--kandinsky-2-2-decoder.jpg", + "extras": "width: 768, height: 768, sampler: Default" }, "Kandinsky 3": { "path": "kandinsky-community/kandinsky-3", "desc": "Kandinsky 3.0 is an open-source text-to-image diffusion model built upon the Kandinsky2-x model family. In comparison to its predecessors, Kandinsky 3.0 incorporates more data and specifically related to Russian culture, which allows to generate pictures related to Russin culture. Furthermore, enhancements have been made to the text understanding and visual quality of the model, achieved by increasing the size of the text encoder and Diffusion U-Net models, respectively.", - "preview": "kandinsky-community--kandinsky-3.jpg" + "preview": "kandinsky-community--kandinsky-3.jpg", + "variant": "fp16", + "extras": "width: 1024, height: 1024, sampler: Default" }, + "Playground v1": { "path": "playgroundai/playground-v1", "desc": "Playground v1 is a latent diffusion model that improves the overall HDR quality to get more stunning images.", - "preview": "playgroundai--playground-v1.jpg" + "preview": "playgroundai--playground-v1.jpg", + "extras": "width: 512, height: 512, sampler: Default" }, - "Playground v2 256": { + "Playground v2 Small": { "path": "playgroundai/playground-v2-256px-base", "desc": "Playground v2 is a diffusion-based text-to-image generative model. The model was trained from scratch by the research team at Playground. Images generated by Playground v2 are favored 2.5 times more than those produced by Stable Diffusion XL, according to Playground’s user study.", - "preview": "playgroundai--playground-v2-256px-base.jpg" + "preview": "playgroundai--playground-v2-256px-base.jpg", + "extras": "width: 256, height: 256, sampler: Default" }, - "Playground v2 512": { + "Playground v2 Medium": { "path": "playgroundai/playground-v2-512px-base", "desc": "Playground v2 is a diffusion-based text-to-image generative model. The model was trained from scratch by the research team at Playground. Images generated by Playground v2 are favored 2.5 times more than those produced by Stable Diffusion XL, according to Playground’s user study.", - "preview": "playgroundai--playground-v2-512px-base.jpg" + "preview": "playgroundai--playground-v2-512px-base.jpg", + "extras": "width: 512, height: 512, sampler: Default" }, - "Playground v2 1024": { + "Playground v2 Large": { "path": "playgroundai/playground-v2-1024px-aesthetic", "desc": "Playground v2 is a diffusion-based text-to-image generative model. The model was trained from scratch by the research team at Playground. Images generated by Playground v2 are favored 2.5 times more than those produced by Stable Diffusion XL, according to Playground’s user study.", - "preview": "playgroundai--playground-v2-1024px-aesthetic.jpg" + "preview": "playgroundai--playground-v2-1024px-aesthetic.jpg", + "extras": "width: 1024, height: 1024, sampler: Default" }, "Playground v2.5": { "path": "playground-v2.5-1024px-aesthetic.fp16.safetensors@https://huggingface.co/playgroundai/playground-v2.5-1024px-aesthetic/resolve/main/playground-v2.5-1024px-aesthetic.fp16.safetensors?download=true", "desc": "Playground v2.5 is a diffusion-based text-to-image generative model, and a successor to Playground v2. Playground v2.5 is the state-of-the-art open-source model in aesthetic quality. Our user studies demonstrate that our model outperforms SDXL, Playground v2, PixArt-α, DALL-E 3, and Midjourney 5.2.", - "preview": "playgroundai--playground-v2-1024px-aesthetic.jpg" - }, - "DeepFloyd IF Medium": { - "path": "DeepFloyd/IF-I-M-v1.0", - "desc": "DeepFloyd-IF is a pixel-based text-to-image triple-cascaded diffusion model, that can generate pictures with new state-of-the-art for photorealism and language understanding. The result is a highly efficient model that outperforms current state-of-the-art models, achieving a zero-shot FID-30K score of 6.66 on the COCO dataset. It is modular and composed of frozen text mode and three pixel cascaded diffusion modules, each designed to generate images of increasing resolution: 64x64, 256x256, and 1024x1024.", - "preview": "DeepFloyd--IF-I-M-v1.0.jpg" + "preview": "playgroundai--playground-v2-1024px-aesthetic.jpg", + "extras": "width: 1024, height: 1024, sampler: DPM++ 2M EDM" }, + "aMUSEd 256": { - "path": "amused/amused-256", + "path": "huggingface/amused/amused-256", + "skip": true, "desc": "Amused is a lightweight text to image model based off of the muse architecture. Amused is particularly useful in applications that require a lightweight and fast model such as generating many images quickly at once.", - "preview": "amused--amused-256.jpg" + "preview": "amused--amused-256.jpg", + "extras": "width: 256, height: 256, sampler: Default" }, "aMUSEd 512": { "path": "amused/amused-512", "desc": "Amused is a lightweight text to image model based off of the muse architecture. Amused is particularly useful in applications that require a lightweight and fast model such as generating many images quickly at once.", - "preview": "amused--amused-512.jpg" + "preview": "amused--amused-512.jpg", + "extras": "width: 512, height: 512, sampler: Default" + }, + + "Warp Wuerstchen": { + "path": "warp-ai/wuerstchen", + "desc": "Würstchen is a diffusion model whose text-conditional model works in a highly compressed latent space of images. Why is this important? Compressing data can reduce computational costs for both training and inference by magnitudes. Training on 1024x1024 images, is way more expensive than training at 32x32. Usually, other works make use of a relatively small compression, in the range of 4x - 8x spatial compression. Würstchen takes this to an extreme. Through its novel design, we achieve a 42x spatial compression. Würstchen employs a two-stage compression, what we call Stage A and Stage B. Stage A is a VQGAN, and Stage B is a Diffusion Autoencoder (more details can be found in the paper). A third model, Stage C, is learned in that highly compressed latent space. This training requires fractions of the compute used for current top-performing models, allowing also cheaper and faster inference.", + "preview": "warp-ai--wuerstchen.jpg", + "extras": "width: 1024, height: 1024, sampler: Default, cfg_scale: 4.0, image_cfg_scale: 0.0" }, "KOALA 700M": { "path": "huggingface/etri-vilab/koala-700m-llava-cap", "variant": "fp16", "skip": true, "desc": "Fast text-to-image model, called KOALA, by compressing SDXL's U-Net and distilling knowledge from SDXL into our model. KOALA-700M can generate a 1024x1024 image in less than 1.5 seconds on an NVIDIA 4090 GPU, which is more than 2x faster than SDXL.", - "preview": "etri-vilab--koala-700m-llava-cap.jpg" + "preview": "etri-vilab--koala-700m-llava-cap.jpg", + "extras": "width: 1024, height: 1024, sampler: Default" }, "Tsinghua UniDiffuser": { "path": "thu-ml/unidiffuser-v1", "desc": "UniDiffuser is a unified diffusion framework to fit all distributions relevant to a set of multi-modal data in one transformer. UniDiffuser is able to perform image, text, text-to-image, image-to-text, and image-text pair generation by setting proper timesteps without additional overhead.\nSpecifically, UniDiffuser employs a variation of transformer, called U-ViT, which parameterizes the joint noise prediction network. Other components perform as encoders and decoders of different modalities, including a pretrained image autoencoder from Stable Diffusion, a pretrained image ViT-B/32 CLIP encoder, a pretrained text ViT-L CLIP encoder, and a GPT-2 text decoder finetuned by ourselves.", - "preview": "thu-ml--unidiffuser-v1.jpg" + "preview": "thu-ml--unidiffuser-v1.jpg", + "extras": "width: 512, height: 512, sampler: Default" }, "SalesForce BLIP-Diffusion": { "path": "salesforce/blipdiffusion", @@ -219,5 +256,12 @@ "path": "XCLiu/instaflow_0_9B_from_sd_1_5", "desc": "InstaFlow is an ultra-fast, one-step image generator that achieves image quality close to Stable Diffusion. This efficiency is made possible through a recent Rectified Flow technique, which trains probability flows with straight trajectories, hence inherently requiring only a single step for fast inference.", "preview": "XCLiu--instaflow_0_9B_from_sd_1_5.jpg" + }, + "DeepFloyd IF Medium": { + "path": "DeepFloyd/IF-I-M-v1.0", + "desc": "DeepFloyd-IF is a pixel-based text-to-image triple-cascaded diffusion model, that can generate pictures with new state-of-the-art for photorealism and language understanding. The result is a highly efficient model that outperforms current state-of-the-art models, achieving a zero-shot FID-30K score of 6.66 on the COCO dataset. It is modular and composed of frozen text mode and three pixel cascaded diffusion modules, each designed to generate images of increasing resolution: 64x64, 256x256, and 1024x1024.", + "preview": "DeepFloyd--IF-I-M-v1.0.jpg", + "extras": "width: 1024, height: 1024, sampler: Default" } -} \ No newline at end of file + +} diff --git a/models/Reference/TempestV0.1-Artistic.jpg b/models/Reference/TempestV0.1-Artistic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab045a5caa6e31648dd91f37ebdbf18437c30cee GIT binary patch literal 29733 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

AhcbuKEvu$>Q$UBspnU_#6PcYw?! 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 wC)$e)t<6~Sy{NEUt%L7Ye6MOO1zZ}n 768 else None - negative_pooled_prompt_embeds = embedding_providers[-1].get_pooled_embeddings(texts=[neg_prompt_2], - device=device) if \ - negative_prompt_embeds[-1].shape[-1] > 768 else None + try: + pooled_prompt_embeds = embedding_providers[-1].get_pooled_embeddings(texts=[prompt_2], device=device) if prompt_embeds[-1].shape[-1] > 768 else None + negative_pooled_prompt_embeds = embedding_providers[-1].get_pooled_embeddings(texts=[neg_prompt_2], device=device) if negative_prompt_embeds[-1].shape[-1] > 768 else None + except Exception: + pooled_prompt_embeds = None + negative_pooled_prompt_embeds = None prompt_embeds = torch.cat(prompt_embeds, dim=-1) if len(prompt_embeds) > 1 else prompt_embeds[0] negative_prompt_embeds = torch.cat(negative_prompt_embeds, dim=-1) if len(negative_prompt_embeds) > 1 else \ diff --git a/modules/sd_models.py b/modules/sd_models.py index 7a5696f6b..af8f86bf7 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -884,7 +884,7 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No model_name = modelloader.find_diffuser(ckpt_basename) if model_name is not None: shared.log.info(f'Load model {op}: {model_name}') - model_file = modelloader.download_diffusers_model(hub_id=model_name) + model_file = modelloader.download_diffusers_model(hub_id=model_name, variant=diffusers_load_config.get('variant', None)) try: shared.log.debug(f'Model load {op} config: {diffusers_load_config}') sd_model = diffusers.DiffusionPipeline.from_pretrained(model_file, **diffusers_load_config) @@ -914,15 +914,21 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No if 'variant' not in diffusers_load_config and any('diffusion_pytorch_model.fp16' in f for f in files): # deal with diffusers lack of variant fallback when loading diffusers_load_config['variant'] = 'fp16' if model_type in ['Stable Cascade']: # forced pipeline - # TODO experimental stable cascade - try: - shared.log.debug(f'StableCascade experimental: args={diffusers_load_config} device={devices.device} dtype={devices.dtype}') + try: # this is horrible special-case handling for stable-cascade multi-stage pipeline with variants and non-standard revision diffusers_load_config.pop("vae", None) - diffusers_load_config.pop("variant", None) - decoder = diffusers.StableCascadeDecoderPipeline.from_pretrained("stabilityai/stable-cascade", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/44", **diffusers_load_config) - shared.log.debug(f'StableCascade decoder: scale={decoder.latent_dim_scale}') - prior = diffusers.StableCascadePriorPipeline.from_pretrained("stabilityai/stable-cascade-prior", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/2", **diffusers_load_config) - shared.log.debug(f'StableCascade prior: scale={prior.resolution_multiple}') + diffusers_load_config["variant"] = 'bf16' + if 'lite' in checkpoint_info.name: + decoder_unet = diffusers.models.StableCascadeUNet.from_pretrained("stabilityai/stable-cascade", subfolder="decoder_lite", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/44", **diffusers_load_config) + decoder = diffusers.StableCascadeDecoderPipeline.from_pretrained("stabilityai/stable-cascade", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/44", decoder=decoder_unet, **diffusers_load_config) + shared.log.debug(f'StableCascade lite decoder: scale={decoder.latent_dim_scale}') + prior_unet = diffusers.models.StableCascadeUNet.from_pretrained("stabilityai/stable-cascade-prior", subfolder="prior_lite", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/2", **diffusers_load_config) + prior = diffusers.StableCascadePriorPipeline.from_pretrained("stabilityai/stable-cascade-prior", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/2", prior=prior_unet, **diffusers_load_config) + shared.log.debug(f'StableCascade lite prior: scale={prior.resolution_multiple}') + else: + decoder = diffusers.StableCascadeDecoderPipeline.from_pretrained("stabilityai/stable-cascade", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/44", **diffusers_load_config) + shared.log.debug(f'StableCascade decoder: scale={decoder.latent_dim_scale}') + prior = diffusers.StableCascadePriorPipeline.from_pretrained("stabilityai/stable-cascade-prior", cache_dir=shared.opts.diffusers_dir, revision="refs/pr/2", **diffusers_load_config) + shared.log.debug(f'StableCascade prior: scale={prior.resolution_multiple}') sd_model = diffusers.StableCascadeCombinedPipeline( tokenizer=decoder.tokenizer, text_encoder=decoder.text_encoder, diff --git a/modules/shared.py b/modules/shared.py index f3f6fe904..f55072512 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -932,6 +932,7 @@ log.info(f'Engine: backend={backend} compute={devices.backend} device={devices.g log.info(f'Device: {print_dict(devices.get_gpu_info())}') prompt_styles = modules.styles.StyleDatabase(opts) +reference_models = readfile(os.path.join('html', 'reference.json')) cmd_opts.disable_extension_access = (cmd_opts.share or cmd_opts.listen or (cmd_opts.server_name or False)) and not cmd_opts.insecure devices.device, devices.device_interrogate, devices.device_gfpgan, devices.device_esrgan, devices.device_codeformer = (devices.cpu if any(y in cmd_opts.use_cpu for y in [x, 'all']) else devices.get_optimal_device() for x in ['sd', 'interrogate', 'gfpgan', 'esrgan', 'codeformer']) devices.onnx = [opts.onnx_execution_provider] diff --git a/modules/styles.py b/modules/styles.py index 1fe97c113..1f0ece4cf 100644 --- a/modules/styles.py +++ b/modules/styles.py @@ -9,7 +9,6 @@ import random from modules import files_cache, shared -reference_style = None class Style(): def __init__(self, name: str, desc: str = "", prompt: str = "", negative_prompt: str = "", extra: str = "", wildcards: str = "", filename: str = "", preview: str = "", mtime: float = 0): @@ -59,14 +58,24 @@ def apply_wildcards_to_prompt(prompt, all_wildcards): return prompt +def get_reference_style(): + name = shared.sd_model.sd_checkpoint_info.name + name = name.replace('\\', '/').replace('Diffusers/', '') + for k, v in shared.reference_models.items(): + model_file = os.path.splitext(v.get('path', '').split('@')[0])[0].replace('huggingface/', '') + if k == name or model_file == name: + return v.get('extras', None) + return None + + def apply_styles_to_extra(p, style: Style): - global reference_style # pylint: disable=global-statement if style is None: return name_map = { 'sampler': 'sampler_name', } from modules.generation_parameters_copypaste import parse_generation_parameters + reference_style = get_reference_style() extra = parse_generation_parameters(reference_style) if shared.opts.extra_network_reference else {} extra.update(parse_generation_parameters(style.extra)) extra.pop('Prompt', None) @@ -87,7 +96,6 @@ def apply_styles_to_extra(p, style: Style): else: skipped.append(f'{k}={v}') shared.log.debug(f'Applying style: name="{style.name}" extra={fields} skipped={skipped} reference={True if reference_style else False}') - # reference_style = None class StyleDatabase: diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index ead5800c7..985465ee8 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -297,14 +297,14 @@ class ExtraNetworksPage: if os.path.join('models', 'Reference') in path: return path exts = ["jpg", "jpeg", "png", "webp", "tiff", "jp2"] + reference_path = os.path.abspath(os.path.join('models', 'Reference')) + files = list(files_cache.list_files(reference_path, ext_filter=exts, recursive=False)) if shared.opts.diffusers_dir in path: path = os.path.relpath(path, shared.opts.diffusers_dir) - reference_path = os.path.abspath(os.path.join('models', 'Reference')) fn = os.path.join(reference_path, path.replace('models--', '').replace('\\', '/').split('/')[0]) - files = list(files_cache.list_files(reference_path, ext_filter=exts, recursive=False)) else: fn = os.path.splitext(path)[0] - files = list(files_cache.list_files(os.path.dirname(path), ext_filter=exts, recursive=False)) + files += list(files_cache.list_files(os.path.dirname(path), ext_filter=exts, recursive=False)) for file in [f'{fn}{mid}{ext}' for ext in exts for mid in ['.thumb.', '.', '.preview.']]: if file in files: if '.thumb.' not in file: @@ -324,6 +324,7 @@ class ExtraNetworksPage: possible_paths = list(set([os.path.dirname(item['filename']) for item in items] + [reference_path])) exts = ["jpg", "jpeg", "png", "webp", "tiff", "jp2"] all_previews = list(files_cache.list_files(*possible_paths, ext_filter=exts, recursive=False)) + all_previews_fn = [os.path.basename(x) for x in all_previews] for item in items: if item.get('preview', None) is not None: continue @@ -336,11 +337,13 @@ class ExtraNetworksPage: model_path = os.path.join(shared.opts.diffusers_dir, match[0]) item['local_preview'] = f'{os.path.join(model_path, match[1])}.{shared.opts.samples_format}' all_previews += list(files_cache.list_files(model_path, ext_filter=exts, recursive=False)) + base = os.path.basename(base) for file in [f'{base}{mid}{ext}' for ext in exts for mid in ['.thumb.', '.', '.preview.']]: - if file in all_previews: + if file in all_previews_fn: + file_idx = all_previews_fn.index(os.path.basename(file)) if '.thumb.' not in file: - self.missing_thumbs.append(file) - item['preview'] = self.link_preview(file) + self.missing_thumbs.append(all_previews[file_idx]) + item['preview'] = self.link_preview(all_previews[file_idx]) break if item.get('preview', None) is None: item['preview'] = self.link_preview('html/card-no-preview.png') diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index ab11f0f1d..75ad968ed 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -15,8 +15,7 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): shared.refresh_checkpoints() def list_reference(self): # pylint: disable=inconsistent-return-statements - reference_models = shared.readfile(os.path.join('html', 'reference.json')) - for k, v in reference_models.items(): + for k, v in shared.reference_models.items(): if shared.backend != shared.Backend.DIFFUSERS: if not v.get('original', False): continue diff --git a/requirements.txt b/requirements.txt index 996f09d40..2b4ad995e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,7 +47,7 @@ opencv-contrib-python-headless==4.9.0.80 diffusers==0.26.3 einops==0.4.1 gradio==3.43.2 -huggingface_hub==0.20.3 +huggingface_hub==0.21.4 numexpr==2.8.8 numpy==1.26.4 numba==0.59.0 @@ -55,7 +55,7 @@ pandas protobuf==3.20.3 pytorch_lightning==1.9.4 tokenizers==0.15.2 -transformers==4.38.1 +transformers==4.38.2 tomesd==0.1.3 urllib3==1.26.18 Pillow==10.2.0 diff --git a/wiki b/wiki index 65d62097b..c452d6e07 160000 --- a/wiki +++ b/wiki @@ -1 +1 @@ -Subproject commit 65d62097b8d0ed85b9bd79b1a0ab437708e7c360 +Subproject commit c452d6e07bdaec618161d7d5fa2cf30c41f180bb