From ff9b8bc062e917a70b1f51eef254e3b5100d6ea1 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 26 Jul 2023 15:51:19 -0400 Subject: [PATCH] api endpoint refresh vaes --- CHANGELOG.md | 17 +++++++++++++++-- modules/api/api.py | 6 +++++- modules/sd_models.py | 1 + modules/sd_vae.py | 1 + modules/shared.py | 3 +++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 056c368c4..7fa4e65cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ ## Update for 07/22/2023 +This is a big one, new models, new diffusers, new features and updated UI... + +First, **SD-XL 1.0** is released and yes, SD.Next supports it out of the box! + +- [SD-XL Base](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors) +- [SD-XL Refiner](https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/blob/main/sd_xl_refiner_1.0.safetensors) + +Also fresh is new **Kandinsky 2.2** model that does look quite nice: + +- [Kandinsky Decoder](https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder) +- [Kandinsky Prior](kandinsky-community/kandinsky-2-2-prior) + +Actual changelog is: + - general: - new loading screens and artwork - major ui simplification for both txt2img and img2img @@ -17,6 +31,7 @@ - fix hires secondary sampler this now fully obsoletes `fallback_sampler` and `force_latent_sampler` - diffusers: + - we're out of experimental phase and diffusers backend is considered stable - implement img2img and inpainting (experimental) actual support and qualiy depends on model it works as expected for sd 1.5, but not so much for sd-xl for now @@ -30,8 +45,6 @@ - sd-xl: loading vae now applies to both base and refiner and saves a bit of vram - vae: enable loading of pure-safetensors vae files without config also enable *automatic* selection to work with diffusers -- diffusers: future-proof - requires `diffusers==0.19.dev`, not yet released, but can be installed manually - sd-xl: denoising_start/denoising_end - sd-xl: enable dual prompts dual prompt is used if set regardless if refiner is enabled/loaded diff --git a/modules/api/api.py b/modules/api/api.py index 0e509bb6c..c4bc4d49b 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -132,6 +132,7 @@ class Api: self.add_api_route("/sdapi/v1/prompt-styles", self.get_prompt_styles, methods=["GET"], response_model=List[models.PromptStyleItem]) self.add_api_route("/sdapi/v1/embeddings", self.get_embeddings, methods=["GET"], response_model=models.EmbeddingsResponse) self.add_api_route("/sdapi/v1/refresh-checkpoints", self.refresh_checkpoints, methods=["POST"]) + self.add_api_route("/sdapi/v1/refresh-vaes", self.refresh_vaes, methods=["POST"]) self.add_api_route("/sdapi/v1/create/embedding", self.create_embedding, methods=["POST"], response_model=models.CreateResponse) self.add_api_route("/sdapi/v1/create/hypernetwork", self.create_hypernetwork, methods=["POST"], response_model=models.CreateResponse) self.add_api_route("/sdapi/v1/preprocess", self.preprocess, methods=["POST"], response_model=models.PreprocessResponse) @@ -498,7 +499,10 @@ class Api: } def refresh_checkpoints(self): - shared.refresh_checkpoints() + return shared.refresh_checkpoints() + + def refresh_vaes(self): + return shared.refresh_vaes() def create_embedding(self, args: dict): try: diff --git a/modules/sd_models.py b/modules/sd_models.py index 58654217e..32dd8fddb 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -573,6 +573,7 @@ def change_backend(): checkpoints_loaded.clear() from modules.sd_samplers import list_samplers list_samplers(shared.backend) + list_models() from modules.sd_vae import refresh_vae_list refresh_vae_list() diff --git a/modules/sd_vae.py b/modules/sd_vae.py index 513d8f6e4..d0a2ec847 100644 --- a/modules/sd_vae.py +++ b/modules/sd_vae.py @@ -99,6 +99,7 @@ def refresh_vae_list(): else: vae_dict[name] = filepath shared.log.info(f"Available VAEs: {vae_path} {len(vae_dict)}") + return vae_dict def find_vae_near_checkpoint(checkpoint_file): diff --git a/modules/shared.py b/modules/shared.py index 9dd30b233..029714d45 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -240,6 +240,9 @@ def refresh_checkpoints(): import modules.sd_models # pylint: disable=W0621 return modules.sd_models.list_models() +def refresh_vaes(): + import modules.sd_vae # pylint: disable=W0621 + modules.sd_vae.refresh_vae_list() def list_samplers(): import modules.sd_samplers # pylint: disable=W0621