From f5a29752e78973f9956aad238f5853152908c5fd Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 17 Apr 2023 13:49:18 -0400 Subject: [PATCH] add dynamic themes and preview --- .github/workflows/on_pull_request.yaml | 2 +- .gitignore | 1 + README.md | 2 +- extensions-builtin/sd-extension-system-info | 2 +- extensions-builtin/sd-webui-controlnet | 2 +- .../black-orange.jpg | Bin javascript/gradio-default.jpg | Bin 0 -> 98256 bytes javascript/ui.js | 28 +++++++++++++ modules/script_loading.py | 8 ++-- modules/shared.py | 38 ++++++++++-------- modules/ui.py | 35 +++++++--------- setup.py | 2 +- style.css | 14 +++++++ webui.sh | 2 +- 14 files changed, 91 insertions(+), 45 deletions(-) rename ui-screenshot.jpg => javascript/black-orange.jpg (100%) create mode 100644 javascript/gradio-default.jpg diff --git a/.github/workflows/on_pull_request.yaml b/.github/workflows/on_pull_request.yaml index 9ccbf72df..011fe9b2d 100644 --- a/.github/workflows/on_pull_request.yaml +++ b/.github/workflows/on_pull_request.yaml @@ -23,7 +23,7 @@ jobs: with: python-version: 3.10.6 cache: pip - cache-dependency-path: requirements*txt + cache-dependency-path: requirements.txt - name: Install PyLint run: | python -m pip install --upgrade pip diff --git a/.gitignore b/.gitignore index 030447846..810d1f84d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ __pycache__ /setup.log /style.csv /user.css +/javascript/themes.json venv # all models and temp files diff --git a/README.md b/README.md index f15100d9b..a9526413e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ If you are looking an amazing simple-to-use Stable Diffusion tool, I'd suggest [
-![screenshot](ui-screenshot.jpg) +![screenshot](javscript/black-orange.jpg)
diff --git a/extensions-builtin/sd-extension-system-info b/extensions-builtin/sd-extension-system-info index 44b70636c..cfe15a75a 160000 --- a/extensions-builtin/sd-extension-system-info +++ b/extensions-builtin/sd-extension-system-info @@ -1 +1 @@ -Subproject commit 44b70636c194c5bf6a1a7b23e0b4c6f1bcdc8d7c +Subproject commit cfe15a75ab1654880d6d3726c12fd3e3286c0a5a diff --git a/extensions-builtin/sd-webui-controlnet b/extensions-builtin/sd-webui-controlnet index 0c7998ab0..1dc09b161 160000 --- a/extensions-builtin/sd-webui-controlnet +++ b/extensions-builtin/sd-webui-controlnet @@ -1 +1 @@ -Subproject commit 0c7998ab05101bcb1ac426e41e11dda5f7e7d8a1 +Subproject commit 1dc09b161abc15aeacc7b7cd0933d073aa7476b5 diff --git a/ui-screenshot.jpg b/javascript/black-orange.jpg similarity index 100% rename from ui-screenshot.jpg rename to javascript/black-orange.jpg diff --git a/javascript/gradio-default.jpg b/javascript/gradio-default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb9097be46733665e81c26e24815172cc2c03b9c GIT binary patch literal 98256 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 z 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 literal 0 HcmV?d00001 diff --git a/javascript/ui.js b/javascript/ui.js index 61f75762e..654e6a435 100644 --- a/javascript/ui.js +++ b/javascript/ui.js @@ -367,3 +367,31 @@ function selectCheckpoint(name){ desiredCheckpointName = name; gradioApp().getElementById('change_checkpoint').click() } + +function create_theme_element() { + el = document.createElement('img'); + el.id = 'theme-preview'; + el.className = 'theme-preview'; + el.onclick = () => el.style.display = 'none'; + document.body.appendChild(el); + return el; +} + +function preview_theme() { + const name = gradioApp().getElementById('setting_gradio_theme').querySelectorAll('span')[1].innerText; // ugly but we want current value without the need to set apply + console.log('PREVIEW', name); + if (name === 'black-orange' || name === 'gradio/default') { + el = document.getElementById('theme-preview') || create_theme_element(); + el.style.display = el.style.display === 'block' ? 'none' : 'block'; + if (name === 'black-orange') el.src = '/file=javascript/black-orange.jpg'; + else el.src = '/file=javascript/gradio-default.jpg'; + } else { + fetch('/file=javascript/themes.json') + .then((r) => r.json()) + .then(themes => { + theme = themes.find((t)=> t.id === name); + console.log('FOUND', theme); + window.open(theme.subdomain, '_blank'); + }); + } +} diff --git a/modules/script_loading.py b/modules/script_loading.py index 979844125..d5b809492 100644 --- a/modules/script_loading.py +++ b/modules/script_loading.py @@ -6,8 +6,10 @@ import modules.errors as errors def load_module(path): module_spec = importlib.util.spec_from_file_location(os.path.basename(path), path) module = importlib.util.module_from_spec(module_spec) - module_spec.loader.exec_module(module) - + try: + module_spec.loader.exec_module(module) + except Exception as e: + errors.display(e, f'Module load: {path}') return module @@ -26,4 +28,4 @@ def preload_extensions(extensions_dir, parser): module.preload(parser) except Exception as e: - errors.display(e, f'extension preload: {preload_script}') + errors.display(e, f'Extension preload: {preload_script}') diff --git a/modules/shared.py b/modules/shared.py index f118fd0ba..c8353b6d9 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -55,20 +55,6 @@ ui_reorder_categories = [ "scripts", ] -# https://huggingface.co/datasets/freddyaboulton/gradio-theme-subdomains/resolve/main/subdomains.json -gradio_hf_hub_themes = [ - "gradio/glass", - "gradio/monochrome", - "gradio/seafoam", - "gradio/soft", - "freddyaboulton/dracula_revamped", - "gradio/dracula_test", - "abidlabs/dracula_test", - "abidlabs/pakistan", - "dawood/microsoft_windows", - "ysharma/steampunk" -] - cmd_opts.disable_extension_access = (cmd_opts.share or cmd_opts.listen or cmd_opts.server_name) and not cmd_opts.enable_insecure devices.device, devices.device_interrogate, devices.device_gfpgan, devices.device_esrgan, devices.device_codeformer = \ @@ -222,6 +208,26 @@ def list_samplers(): import modules.sd_samplers # pylint: disable=W0621 return modules.sd_samplers.all_samplers +def list_themes(): + if not os.path.exists(os.path.join('javascript', 'themes.json')): + refresh_themes() + with open(os.path.join('javascript', 'themes.json'), mode='r', encoding='utf=8') as f: + res = json.loads(f.read()) + themes = [x['id'] for x in res if x['status'] == 'RUNNING' and 'test' not in x['id'].lower()] + return themes + +def refresh_themes(): + import requests + try: + req = requests.get('https://huggingface.co/datasets/freddyaboulton/gradio-theme-subdomains/resolve/main/subdomains.json', timeout=5) + if req.status_code == 200: + res = req.json() + with open(os.path.join('javascript', 'themes.json'), mode='w', encoding='utf=8') as f: + f.write(json.dumps(res)) + else: + print('Error refreshing UI themes') + except: + print('Exception refreshing UI themes') hide_dirs = {"visible": not cmd_opts.hide_ui_dir_config} tab_names = [] @@ -378,6 +384,7 @@ options_templates.update(options_section(('extra_networks', "Extra Networks"), { })) options_templates.update(options_section(('ui', "User interface"), { + "gradio_theme": OptionInfo("black-orange", "UI theme", gr.Dropdown, lambda: {"choices": ["black-orange", "gradio/default"] + list_themes()}, refresh=refresh_themes), "return_grid": OptionInfo(True, "Show grid in results for web"), "return_mask": OptionInfo(False, "For inpainting, include the greyscale mask in results for web"), "return_mask_composite": OptionInfo(False, "For inpainting, include masked composite in results for web"), @@ -397,7 +404,6 @@ options_templates.update(options_section(('ui', "User interface"), { "hidden_tabs": OptionInfo([], "Hidden UI tabs", ui_components.DropdownMulti, lambda: {"choices": [x for x in tab_names]}), "ui_reorder": OptionInfo(", ".join(ui_reorder_categories), "txt2img/img2img UI item order"), "ui_extra_networks_tab_reorder": OptionInfo("", "Extra networks tab order"), - "gradio_theme": OptionInfo("black-orange", "UI theme", gr.Dropdown, lambda: {"choices": ["black-orange", "gradio/default"] + gradio_hf_hub_themes}), })) options_templates.update(options_section(('ui', "Live previews"), { @@ -603,7 +609,7 @@ if os.path.exists(config_filename): cmd_opts = cmd_args.compatibility_args(opts, cmd_opts) settings_components = None -"""assinged from ui.py, a mapping on setting anmes to gradio components repsponsible for those settings""" +"""assinged from ui.py, a mapping on setting names to gradio components repsponsible for those settings""" latent_upscale_default_mode = "Latent" latent_upscale_modes = { diff --git a/modules/ui.py b/modules/ui.py index 75b669043..f01627806 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -203,7 +203,7 @@ def connect_reuse_seed(seed: gr.Number, reuse_seed: gr.Button, generation_info: all_seeds = gen_info.get('all_seeds', [-1]) res = all_seeds[index if 0 <= index < len(all_seeds) else 0] - except json.decoder.JSONDecodeError as e: + except json.decoder.JSONDecodeError: if gen_info_string != '': print("Error parsing JSON generation info:", file=sys.stderr) print(gen_info_string, file=sys.stderr) @@ -1389,37 +1389,33 @@ def create_ui(): with gr.Row(): settings_submit = gr.Button(value="Apply settings", variant='primary', elem_id="settings_submit") restart_submit = gr.Button(value="Restart UI", variant='primary', elem_id="restart_submit") - + preview_theme = gr.Button(value="Preview theme", variant='primary', elem_id="settings_preview_theme") + unload_sd_model = gr.Button(value='Unload checkpoint', variant='primary', elem_id="sett_unload_sd_model") + reload_sd_model = gr.Button(value='Reload checkpoint', variant='primary', elem_id="sett_reload_sd_model") + reload_script_bodies = gr.Button(value='Reload scripts', variant='primary', elem_id="settings_reload_script_bodies") result = gr.HTML(elem_id="settings_result") quicksettings_names = [x.strip() for x in opts.quicksettings.split(",")] quicksettings_names = {x: i for i, x in enumerate(quicksettings_names) if x != 'quicksettings'} - quicksettings_list = [] - previous_section = None current_tab = None current_row = None with gr.Tabs(elem_id="settings"): for i, (k, item) in enumerate(opts.data_labels.items()): section_must_be_skipped = item.section[0] is None - if previous_section != item.section and not section_must_be_skipped: elem_id, text = item.section - if current_tab is not None: current_row.__exit__() current_tab.__exit__() - gr.Group() - current_tab = gr.TabItem(elem_id="settings_{}".format(elem_id), label=text) + current_tab = gr.TabItem(elem_id=f"settings_{elem_id}", label=text) current_tab.__enter__() current_row = gr.Column(variant='compact') current_row.__enter__() - previous_section = item.section - if k in quicksettings_names and not shared.cmd_opts.freeze_settings: quicksettings_list.append((i, k, item)) components.append(dummy_component) @@ -1429,23 +1425,15 @@ def create_ui(): component = create_setting_component(k) component_dict[k] = component components.append(component) - if current_tab is not None: current_row.__exit__() current_tab.__exit__() - with gr.TabItem("Actions"): - request_notifications = gr.Button(value='Request browser notifications', elem_id="request_notifications") - reload_script_bodies = gr.Button(value='Reload custom script bodies (No ui updates, No restart)', variant='secondary', elem_id="settings_reload_script_bodies") - with gr.Row(): - unload_sd_model = gr.Button(value='Unload SD checkpoint to free VRAM', elem_id="sett_unload_sd_model") - reload_sd_model = gr.Button(value='Reload the last SD checkpoint back into VRAM', elem_id="sett_reload_sd_model") - + request_notifications = gr.Button(value='Request browser notifications', elem_id="request_notifications", visible=False) + show_all_pages = gr.Button(value="Show all pages", variant='primary', elem_id="settings_show_all_pages") with gr.TabItem("Licenses"): gr.HTML(shared.html("licenses.html"), elem_id="licenses") - gr.Button(value="Show all pages", elem_id="settings_show_all_pages") - def unload_sd_weights(): modules.sd_models.unload_model_weights() @@ -1481,6 +1469,13 @@ def create_ui(): outputs=[] ) + preview_theme.click( + fn=None, + _js='preview_theme', + inputs=[dummy_component], + outputs=[dummy_component] + ) + interfaces = [ (txt2img_interface, "From Text", "txt2img"), diff --git a/setup.py b/setup.py index e826d745b..d039ce28e 100644 --- a/setup.py +++ b/setup.py @@ -155,7 +155,7 @@ def clone(url, folder, commithash=None): # check python version def check_python(): import platform - supported_minors = [10] if platform.system() != "Windows" else [9, 10, 11] + supported_minors = [9, 10] if platform.system() != "Windows" else [9, 10, 11] log.info(f'Python {platform.python_version()} on {platform.system()}') if not (int(sys.version_info.major) == 3 and int(sys.version_info.minor) in supported_minors): raise RuntimeError(f"Incompatible Python version: {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} required 3.9-3.11") diff --git a/style.css b/style.css index de16a7f2f..a9457210c 100644 --- a/style.css +++ b/style.css @@ -830,3 +830,17 @@ footer { .extra-network-cards .card ul a:hover{ color: red; } + +.theme-preview { + display: none; + position: fixed; + border: 4px solid var(--neutral-600); + box-shadow: 2px 2px 2px 2px var(--neutral-700); + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: auto; + max-width: 75vw; + z-index: 999; +} diff --git a/webui.sh b/webui.sh index 59013f3dd..56b7396b2 100755 --- a/webui.sh +++ b/webui.sh @@ -118,7 +118,7 @@ case "$gpu_info" in esac if echo "$gpu_info" | grep -q "AMD" && [[ -z "${TORCH_COMMAND}" ]] then - export TORCH_COMMAND="pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.2" + export TORCH_COMMAND="torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.2" fi for preq in "${GIT}" "${python_cmd}"