From 186bd236f592991cc9d9303689846c6d9eb68bb3 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Thu, 13 Jul 2023 09:50:38 -0400 Subject: [PATCH] js monitor ops --- CHANGELOG.md | 12 +++++++++--- TODO.md | 7 ++----- installer.py | 1 + javascript/ui.js | 26 +++++++++++++++++++++----- modules/sd_models.py | 1 - 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da91d7601..a606bfb16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ # Change Log for SD.Next -## Update for 07/12/2023 +## Update for 07/13/2023 -Another big one, but now improvements to both **diffusers** and **original** backend +Another big one, but now improvements to both **diffusers** and **original** backends as well plus ability to dynamically switch between them! +- swich backend between diffusers and original on-the-fly + - you can still use `--backend ` and now that only means in which mode app will start, + but you can change it anytime in ui settings + - for example, you can even do things like generate image using sd-xl, + then switch to original backend and perform inpaint using a different model - diffusers backend: - separate ui settings for refiner pass with sd-xl you can specify: prompt, negative prompt, steps, denoise start @@ -17,7 +22,8 @@ Another big one, but now improvements to both **diffusers** and **original** bac - other: - major refactoring of the javascript code includes fixes for text selections and navigation - - minor fixes in extra-networks + - minor fixes in extra-networks + - installer handles origin changes for submodules big thanks to @huggingface team for great communication, support and fixing all the reported issues asap! diff --git a/TODO.md b/TODO.md index dccfd7e08..bfa59d418 100644 --- a/TODO.md +++ b/TODO.md @@ -7,29 +7,26 @@ Stuff to be fixed, in no particular order... - SD-XL Lora - SD-XL Img2Img/Inpaint - Kandinsky 2.2 (2.1 is working) -- Refresh `sd_checkpoint` pulldown on backend switch - Misterious Extensions auto-enabling - Misterious Extra network corruptions -- Update submodule upstream: `git submodule sync` ## Features Stuff to be added, in no particular order... -- VAE/UNet dtypes -- Attention head - Update `Wiki` - Create new `GitHub` hooks/actions for CI/CD - Import core repos - Update `train.py` to use `interrogator` - Update `train.py` to use `rembg` -- Create new train UI +- Create new **Lora** train UI - Docker PR - Port `p.all_hr_prompts` - Image watermark using `image-watermark` - Image phash and hdash using `imagehash` - Model merge using `git-rebasin` - Additional upscalers +- XYZ grid upscalers - New image browser - Update `gradio` - Rename repo: **automatic** -> **sdnext** diff --git a/installer.py b/installer.py index fcbfb5e29..c4f9340ec 100644 --- a/installer.py +++ b/installer.py @@ -557,6 +557,7 @@ def install_submodules(): txt = git('submodule') log.info('Continuing setup') git('submodule --quiet update --init --recursive') + git('submodule --quiet sync --recursive') submodules = txt.splitlines() for submodule in submodules: try: diff --git a/javascript/ui.js b/javascript/ui.js index 407c8ea59..7d4e4d7ef 100644 --- a/javascript/ui.js +++ b/javascript/ui.js @@ -7,6 +7,8 @@ let img2img_textarea; const wait_time = 800; const token_timeouts = {}; let uiLoaded = false; +let opts_metadata = {}; +const opts_tabs = {}; function set_theme(theme) { const gradioURL = window.location.href; @@ -226,12 +228,25 @@ function register_drag_drop() { }); } -opts = {}; -let opts_metadata = {}; -const opts_tabs = {}; +const monitoredOpts = [ + { sd_model_checkpoint: null }, + { + sd_backend: () => { + gradioApp().getElementById('refresh_sd_model_checkpoint')?.click(); + }, + }, +]; function updateOpts(json_string) { const settings_data = JSON.parse(json_string); + for (const op of monitoredOpts) { + const key = Object.keys(op)[0]; + const callback = op[key]; + if (opts[key] && opts[key] !== settings_data.values[key]) { + console.log('updateOpts', key, opts[key], settings_data.values[key]); + if (callback) callback(); + } + } opts = settings_data.values; opts_metadata = settings_data.metadata; Object.entries(opts_metadata).forEach(([opt, meta]) => { @@ -253,7 +268,7 @@ function showAllSettings() { }); } -function sort_ui_elements() { +function sortUIElements() { // sort top-level tabs const currSelected = gradioApp()?.querySelector('.tab-nav > .selected')?.innerText; if (currSelected === tabSelected || !opts.ui_tab_reorder) return; @@ -280,6 +295,7 @@ function sort_ui_elements() { const scriptsImg = gradioApp().getElementById('scripts_alwayson_img2img').children; for (const el of Array.from(scriptsImg)) el.style.order = find(el, tabsOrder); + console.log('sortUIElements'); } function markIfModified(setting_name, value) { @@ -318,7 +334,7 @@ function markIfModified(setting_name, value) { } onAfterUiUpdate(async () => { - sort_ui_elements(); + sortUIElements(); if (Object.keys(opts).length !== 0) return; const json_elem = gradioApp().getElementById('settings_json'); if (!json_elem) return; diff --git a/modules/sd_models.py b/modules/sd_models.py index 0cc522410..f78cdf5fb 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -575,7 +575,6 @@ def change_backend(): shared.log.info(f'Pipeline changed: {shared.backend}') unload_model_weights() checkpoints_loaded.clear() - list_models() from modules.sd_samplers import list_samplers list_samplers(shared.backend)