From a2b00f34ec541efb59280c99976d9bda9d2d41de Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 29 Sep 2023 09:00:41 -0400 Subject: [PATCH] add vae to en --- CHANGELOG.md | 21 +++++++----- extensions-builtin/sd-extension-system-info | 2 +- javascript/ui.js | 6 ++++ modules/ui.py | 7 ++++ modules/ui_extra_networks.py | 2 ++ modules/ui_extra_networks_checkpoints.py | 1 - .../ui_extra_networks_textual_inversion.py | 1 - modules/ui_extra_networks_vae.py | 34 +++++++++++++++++++ modules/ui_models.py | 2 +- 9 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 modules/ui_extra_networks_vae.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 556e9262d..380d6a9c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,6 @@ **TBD**: Planned before release: - Integrate LoRA/Lyco for *backend:original* -- Add EN provider for VAEs - Add FreeU for *backend:diffusers* This is a big one, with some major changes and new functionality... @@ -30,6 +29,8 @@ Upgrades are still possible and supported, but above is recommended for best exp - can be edited in details view - support for single or multiple styles per json - support for embedded previews + - **VAE** + - VAEs are now also listed as part of extra networks - faster search, ability to show/hide/sort networks - refactored subfolder handling *note*: this will trigger model hash recaclulation on first model use @@ -101,13 +102,17 @@ Upgrades are still possible and supported, but above is recommended for best exp - **GC**: - custom garbage collect threshold to reduce vram memory usage, thanks @Disty0 see *settings -> compute -> gc* -- **Startup** - - All main CLI parameters can now be set as environment variable as well - for example `--data-dir ` can be specified as `SD_DATADIR=` before starting SD.Next -- **Logging** - - get browser session info in server log - - when running with `--debug` flag, log is force-rotated - so each `sdnext.log.*` represents exactly one server run +- **General** + - **Startup** + - All main CLI parameters can now be set as environment variable as well + for example `--data-dir ` can be specified as `SD_DATADIR=` before starting SD.Next + - **Logging** + - get browser session info in server log + - when running with `--debug` flag, log is force-rotated + so each `sdnext.log.*` represents exactly one server run + - **API** + - add end-to-end example how to use API: `cli/simple-txt2img.js` + covers txt2img, upscale, hires, refiner ## Update for 2023-09-13 diff --git a/extensions-builtin/sd-extension-system-info b/extensions-builtin/sd-extension-system-info index 34ada0db1..2647efca7 160000 --- a/extensions-builtin/sd-extension-system-info +++ b/extensions-builtin/sd-extension-system-info @@ -1 +1 @@ -Subproject commit 34ada0db1ba130e96cf6d8c88ed74b79e561e08b +Subproject commit 2647efca7480859edb08d868a19f1dcb7c067b77 diff --git a/javascript/ui.js b/javascript/ui.js index b09d9170a..e10c168e3 100644 --- a/javascript/ui.js +++ b/javascript/ui.js @@ -339,6 +339,12 @@ function selectCheckpoint(name) { gradioApp().getElementById('change_checkpoint').click(); } +let desiredVAEName = null; +function selectVAE(name) { + desiredVAEName = name; + gradioApp().getElementById('change_vae').click(); +} + function currentImg2imgSourceResolution(_a, _b, scaleBy) { const img = gradioApp().querySelector('#mode_img2img > div[style="display: block;"] img'); return img ? [img.naturalWidth, img.naturalHeight, scaleBy] : [0, 0, scaleBy]; diff --git a/modules/ui.py b/modules/ui.py index aebbfda65..f860e55f4 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -1168,6 +1168,13 @@ def create_ui(startup_timer = None): inputs=[component_dict['sd_model_checkpoint'], dummy_component], outputs=[component_dict['sd_model_checkpoint'], text_settings], ) + button_set_vae = gr.Button('Change vae', elem_id='change_vae', visible=False) + button_set_vae.click( + fn=lambda value, _: run_settings_single(value, key='sd_vae'), + _js="function(v){ var res = desiredVAEName; desiredVAEName = ''; return [res || v, null]; }", + inputs=[component_dict['sd_vae'], dummy_component], + outputs=[component_dict['sd_vae'], text_settings], + ) component_keys = [k for k in opts.data_labels.keys() if k in component_dict] diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 39419e516..088893e86 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -326,10 +326,12 @@ def register_pages(): from modules.ui_extra_networks_hypernets import ExtraNetworksPageHypernetworks from modules.ui_extra_networks_checkpoints import ExtraNetworksPageCheckpoints from modules.ui_extra_networks_styles import ExtraNetworksPageStyles + from modules.ui_extra_networks_vae import ExtraNetworksPageVAEs register_page(ExtraNetworksPageCheckpoints()) register_page(ExtraNetworksPageStyles()) register_page(ExtraNetworksPageTextualInversion()) register_page(ExtraNetworksPageHypernetworks()) + register_page(ExtraNetworksPageVAEs()) def get_pages(): diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index d3a157cae..c7fde6ef2 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -1,7 +1,6 @@ import html import json import os - from modules import shared, ui_extra_networks, sd_models diff --git a/modules/ui_extra_networks_textual_inversion.py b/modules/ui_extra_networks_textual_inversion.py index 578b6fcf0..ac37986d1 100644 --- a/modules/ui_extra_networks_textual_inversion.py +++ b/modules/ui_extra_networks_textual_inversion.py @@ -1,6 +1,5 @@ import json import os - from modules import shared, sd_hijack, sd_models, ui_extra_networks from modules.textual_inversion.textual_inversion import Embedding diff --git a/modules/ui_extra_networks_vae.py b/modules/ui_extra_networks_vae.py new file mode 100644 index 000000000..deb795d1b --- /dev/null +++ b/modules/ui_extra_networks_vae.py @@ -0,0 +1,34 @@ +import html +import json +import os +from modules import shared, ui_extra_networks, sd_vae, hashes + + +class ExtraNetworksPageVAEs(ui_extra_networks.ExtraNetworksPage): + def __init__(self): + super().__init__('VAE') + + def refresh(self): + shared.refresh_vaes() + + def list_items(self): + for name, filename in sd_vae.vae_dict.items(): + fn = os.path.splitext(filename)[0] + record = { + "type": 'VAE', + "name": name, + "title": name, + "filename": fn, + "hash": hashes.sha256_from_cache(filename, f"vae/{fn}"), + "search_term": self.search_terms_from_path(fn), + "preview": self.find_preview(fn), + "local_preview": f"{fn}.{shared.opts.samples_format}", + "description": self.find_description(fn), + "info": self.find_info(fn), + "metadata": {}, + "onclick": '"' + html.escape(f"""return selectVAE({json.dumps(name)})""") + '"', + } + yield record + + def allowed_directories_for_previews(self): + return [v for v in [shared.opts.vae_dir] if v is not None] diff --git a/modules/ui_models.py b/modules/ui_models.py index fd02fda17..88b96c435 100644 --- a/modules/ui_models.py +++ b/modules/ui_models.py @@ -339,7 +339,7 @@ def create_ui(): return res def civit_search_metadata(civit_previews_rehash, title): - log.debug('CivitAI download previews') + log.debug(f'CivitAI search metadata: {title if type(title) == str else "all"}') from modules.ui_extra_networks import get_pages from modules.modelloader import download_civit_preview, download_civit_meta res = []