## //Vorst Cavry// ## import os import json import time import ipywidgets as widgets from ipywidgets import widgets, Layout, Label, Button, VBox, HBox from IPython.display import display, HTML, Javascript, clear_output # ================= DETECT ENV ================= def detect_environment(): free_plan = (os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') / (1024. ** 3) <= 20) environments = { 'COLAB_GPU': ('Google Colab', "/root" if free_plan else "/content"), 'KAGGLE_URL_BASE': ('Kaggle', "/kaggle/working/content") } for env_var, (environment, path) in environments.items(): if env_var in os.environ: return environment, path, free_plan env, root_path, free_plan = detect_environment() webui_path = f"{root_path}/sdw" get_ipython().system('mkdir -p {root_path}') # ---------------------------------------------- # ==================== CSS JS ==================== # custom background images V1.5 import argparse parser = argparse.ArgumentParser(description='This script processes an background image.') parser.add_argument('-i', '--image', type=str, help='URL of the image to process', metavar='') parser.add_argument('-o', '--opacity', type=float, help='Opacity level for the image, between 0 and 1', metavar='', default=0.3) parser.add_argument('-b', '--blur', type=str, help='Blur level for the image', metavar='', default=0) parser.add_argument('-y', type=int, help='Y coordinate for the image in px', metavar='', default=0) parser.add_argument('-x', type=int, help='X coordinate for the image in px', metavar='', default=0) parser.add_argument('-s', '--scale', type=int, help='Scale image in %%', metavar='', default=100) parser.add_argument('-m', '--mode', action='store_true', help='Removes repetitive image tiles') parser.add_argument('-t', '--transparent', action='store_true', help='Makes input/selection fields 35%% more transparent') parser.add_argument('-bf', '--blur-fields', type=str, help='Background blur level for input/selection fields', metavar='', default=2) args = parser.parse_args() """---""" url_img = args.image opacity_img = args.opacity blur_img = args.blur y_img = args.y x_img = args.x scale_img = args.scale blur_fields = args.blur_fields ## --- """ WTF KAGGLE - WHAT THE FUCK IS THE DIFFERENCE OF 35 PIXELS!?!?!? """ fix_heigh_img = "-810px" if env == "Kaggle" else "-775px" """ transperent fields """ t_bg_alpha = "1" if not args.transparent else "0.65" """ mode img - repeats """ mode_img = "repeat" if not args.mode else "no-repeat" ## --- container_background = f''' ''' display(HTML(CSS)) # ==================== CSS JS ==================== # ==================== WIDGETS ==================== # --- global widgets --- style = {'description_width': 'initial'} layout = widgets.Layout(min_width='1047px') HR = widgets.HTML('
') # --- MODEL --- model_header = widgets.HTML('
Model Selection
') model_options = ['none', '1.Anime (by XpucT) + INP', '2.BluMix [Anime] [V7] + INP', '3.Cetus-Mix [Anime] [V4] + INP', '4.Counterfeit [Anime] [V3] + INP', '5.CuteColor [Anime] [V3]', '6.Dark-Sushi-Mix [Anime]', '7.Deliberate [Realism] [V6] + INP', '8.Meina-Mix [Anime] [V11] + INP', '9.Mix-Pro [Anime] [V4] + INP'] # --- Model_widget = widgets.Dropdown(options=model_options, value='4.Counterfeit [Anime] [V3] + INP', description='Model:', style=style, layout=layout) Model_Num_widget = widgets.Text(description='Model Number:', placeholder='Enter the model numbers to be downloaded using comma/space.', style=style, layout=layout) Inpainting_Model_widget = widgets.Checkbox(value=False, description='Inpainting Models', style=style) ''' Display Model''' all_model_box = widgets.VBox([model_header, Model_widget, Model_Num_widget, Inpainting_Model_widget]).add_class("container").add_class("image_1") display(all_model_box) # --- VAE --- vae_header = widgets.HTML('
VAE Selection
') vae_options = ['none', '1.Anime.vae', '2.Anything.vae', '3.Blessed2.vae', '4.ClearVae.vae', '5.WD.vae'] Vae_widget = widgets.Dropdown(options=vae_options, value='3.Blessed2.vae', description='Vae:', style=style, layout=layout) Vae_Num_widget = widgets.Text(description='Vae Number:', placeholder='Enter the vae numbers to be downloaded using comma/space.', style=style, layout=layout) ''' Display Vae''' all_vae_box= widgets.VBox([vae_header, Vae_widget, Vae_Num_widget]).add_class("container").add_class("image_2") display(all_vae_box) # --- ADDITIONAL --- additional_header = widgets.HTML('
Additional
') latest_webui_widget = widgets.Checkbox(value=True, description='Update WebUI', style=style) latest_exstensions_widget = widgets.Checkbox(value=True, description='Update Extensions', style=style) detailed_download_widget = widgets.Dropdown(options=['off', 'on'], value='off', description='Detailed Download:', style=style) latest_changes_widget = HBox([latest_webui_widget, latest_exstensions_widget, detailed_download_widget], layout=widgets.Layout(justify_content='space-between')) controlnet_options = ['none', 'ALL', '1.canny', '2.openpose', '3.depth', '4.normal_map', '5.mlsd', '6.lineart', '7.soft_edge', '8.scribble', '9.segmentation', '10.shuffle', '11.tile', '12.inpaint', '13.instruct_p2p'] # --- controlnet_widget = widgets.Dropdown(options=controlnet_options, value='none', description='ControlNet:', style=style, layout=layout) controlnet_Num_widget = widgets.Text(description='ControlNet Number:', placeholder='Enter the ControlNet model numbers to be downloaded using comma/space.', style=style, layout=layout) commit_hash_widget = widgets.Text(description='Commit Hash:', style=style, layout=layout) optional_huggingface_token_widget = widgets.Text(description='HuggingFace Token:', style=style, layout=layout) ngrok_token_widget = widgets.Text(description='Ngrok Token:', style=style, layout=widgets.Layout(width='1047px')) ngrock_button = widgets.HTML('Get Ngrok Token').add_class("button_ngrok") ngrok_widget = widgets.HBox([ngrok_token_widget, ngrock_button], style=style, layout=layout) zrok_token_widget = widgets.Text(description='Zrok Token:', style=style, layout=widgets.Layout(width='1047px')) zrok_button = widgets.HTML('Reg Zrok Token').add_class("button_ngrok") zrok_widget = widgets.HBox([zrok_token_widget, zrok_button], style=style, layout=layout) # --- commandline_arguments_options = "--listen --enable-insecure-extension-access --theme dark --no-half-vae --disable-console-progressbars --xformers --skip-torch-cuda-test" commandline_arguments_widget = widgets.Text(description='Arguments:', value=commandline_arguments_options, style=style, layout=layout) ''' Display Additional''' additional_widget_list = [additional_header, latest_changes_widget, HR, controlnet_widget, controlnet_Num_widget, commit_hash_widget, optional_huggingface_token_widget, ngrok_widget, zrok_widget, HR, commandline_arguments_widget] if free_plan and env == "Google Colab": # remove ngrok from colab additional_widget_list.remove(ngrok_widget) # ``` all_additional_box = widgets.VBox(additional_widget_list).add_class("container").add_class("image_3") display(all_additional_box) # --- CUSTOM DOWNLOAD --- custom_download_header_popup = widgets.HTML('''
Custom Download
INFO
''') # --- Model_url_widget = widgets.Text(description='Model:', style=style, layout=layout) Vae_url_widget = widgets.Text(description='Vae:', style=style, layout=layout) LoRA_url_widget = widgets.Text(description='LoRa:', style=style, layout=layout) Embedding_url_widget = widgets.Text(description='Embedding:', style=style, layout=layout) Extensions_url_widget = widgets.Text(description='Extensions:', style=style, layout=layout) custom_file_urls_widget = widgets.Text(description='File (txt):', style=style, layout=layout) ''' Display CustomDl''' all_custom_box = widgets.VBox([ custom_download_header_popup, Model_url_widget, Vae_url_widget, LoRA_url_widget, Embedding_url_widget, Extensions_url_widget, custom_file_urls_widget ]).add_class("container").add_class("image_4").add_class("container_custom_downlad") display(all_custom_box) # --- Save Button --- save_button = widgets.Button(description='Save').add_class("button_save") display(save_button) # ============ Load / Save - Settings V2 ============ SETTINGS_FILE = f'{root_path}/settings.json' settings_keys = [ 'Model', 'Model_Num', 'Inpainting_Model', 'Vae', 'Vae_Num', 'latest_webui', 'latest_exstensions', 'detailed_download', 'controlnet', 'controlnet_Num', 'commit_hash', 'optional_huggingface_token', 'ngrok_token', 'zrok_token', 'commandline_arguments', 'Model_url', 'Vae_url', 'LoRA_url', 'Embedding_url', 'Extensions_url', 'custom_file_urls' ] def save_settings(): settings = {key: globals()[f"{key}_widget"].value for key in settings_keys} with open(SETTINGS_FILE, 'w') as f: json.dump(settings, f, indent=2) def load_settings(): if os.path.exists(SETTINGS_FILE): with open(SETTINGS_FILE, 'r') as f: settings = json.load(f) for key in settings_keys: globals()[f"{key}_widget"].value = settings.get(key) def save_data(button): save_settings() # --- uhh - hide... --- widgets_list = [all_model_box, all_vae_box, all_additional_box, all_custom_box, save_button] for widget in widgets_list: widget.add_class("hide") time.sleep(0.5) widgets.Widget.close_all() settings = load_settings() save_button.on_click(save_data)