import os from modules.call_queue import wrap_gradio_call from modules.hypernetworks.ui import keys import modules.scripts as scripts from modules import script_callbacks, shared, sd_hijack import gradio as gr from modules.paths import script_path from modules.ui import create_refresh_button, gr_show import patches.clip_hijack as clip_hijack import patches.textual_inversion as textual_inversion import patches.ui as ui import patches.shared as shared_patch import patches.external_pr.ui as external_patch_ui from webui import wrap_gradio_gpu_call setattr(shared.opts,'pin_memory', False) def create_extension_tab(params=None): with gr.Tab(label="Create Beta hypernetwork") as create_beta: new_hypernetwork_name = gr.Textbox(label="Name") new_hypernetwork_sizes = gr.CheckboxGroup(label="Modules", value=["768", "320", "640", "1024", "1280"], choices=["768", "320", "640", "1024", "1280"]) new_hypernetwork_layer_structure = gr.Textbox("1, 2, 1", label="Enter hypernetwork layer structure", placeholder="1st and last digit must be 1. ex:'1, 2, 1'") new_hypernetwork_activation_func = gr.Dropdown(value="linear", label="Select activation function of hypernetwork. Recommended : Swish / Linear(none)", choices=keys) new_hypernetwork_initialization_option = gr.Dropdown(value="Normal", label="Select Layer weights initialization. Recommended: Kaiming for relu-like, Xavier for sigmoid-like, Normal otherwise", choices=["Normal", "KaimingUniform", "KaimingNormal", "XavierUniform", "XavierNormal"]) show_additional_options = gr.Checkbox( label='Show advanced options') with gr.Row(visible=False) as weight_options: generation_seed = gr.Number(label='Weight initialization seed, set -1 for default', value=-1, precision=0) normal_std = gr.Textbox(label="Standard Deviation for Normal weight initialization", placeholder="must be positive float", value="0.01") show_additional_options.change( fn=lambda show: gr_show(show), inputs=[show_additional_options], outputs=[weight_options],) new_hypernetwork_add_layer_norm = gr.Checkbox(label="Add layer normalization") new_hypernetwork_use_dropout = gr.Checkbox( label="Use dropout. Might improve training when dataset is small / limited.") new_hypernetwork_dropout_structure = gr.Textbox("0, 0, 0", label="Enter hypernetwork Dropout structure (or empty). Recommended : 0~0.35 incrementing sequence: 0, 0.05, 0.15", placeholder="1st and last digit must be 0 and values should be between 0 and 1. ex:'0, 0.01, 0'") skip_connection = gr.Checkbox(label="Use skip-connection. Won't work without extension!") optional_info = gr.Textbox("", label="Optional information about Hypernetwork", placeholder="Training information, dateset, etc") overwrite_old_hypernetwork = gr.Checkbox(value=False, label="Overwrite Old Hypernetwork") with gr.Row(): with gr.Column(scale=3): gr.HTML(value="") with gr.Column(): create_hypernetwork = gr.Button(value="Create hypernetwork", variant='primary') setting_name = gr.Textbox(label="Setting file name", value="") save_setting = gr.Button(value="Save hypernetwork setting to file") ti_output = gr.Text(elem_id="ti_output2", value="", show_label=False) ti_outcome = gr.HTML(elem_id="ti_error2", value="") save_setting.click( fn=wrap_gradio_call(external_patch_ui.save_hypernetwork_setting), inputs=[ setting_name, new_hypernetwork_sizes, overwrite_old_hypernetwork, new_hypernetwork_layer_structure, new_hypernetwork_activation_func, new_hypernetwork_initialization_option, new_hypernetwork_add_layer_norm, new_hypernetwork_use_dropout, new_hypernetwork_dropout_structure, optional_info, generation_seed if generation_seed.visible else None, normal_std if normal_std.visible else 0.01, skip_connection], outputs=[ ti_output, ti_outcome, ] ) create_hypernetwork.click( fn=ui.create_hypernetwork, inputs=[ new_hypernetwork_name, new_hypernetwork_sizes, overwrite_old_hypernetwork, new_hypernetwork_layer_structure, new_hypernetwork_activation_func, new_hypernetwork_initialization_option, new_hypernetwork_add_layer_norm, new_hypernetwork_use_dropout, new_hypernetwork_dropout_structure, optional_info, generation_seed if generation_seed.visible else None, normal_std if normal_std.visible else 0.01, skip_connection ], outputs=[ new_hypernetwork_name, ti_output, ti_outcome, ] ) return [(create_beta, "Create_beta", "create_beta")] def create_extension_tab2(params=None): with gr.Blocks(analytics_enabled=False) as CLIP_test_interface: with gr.Tab(label="CLIP-test") as clip_test: with gr.Row(): clipTextModelPath = gr.Textbox("openai/clip-vit-large-patch14", label="CLIP Text models. Set to empty to not change.") # see https://huggingface.co/openai/clip-vit-large-patch14 and related pages to find model. change_model = gr.Checkbox(label="Enable clip model change. This will be triggered from next model changes.") change_model.change( fn=clip_hijack.trigger_sd_hijack, inputs=[ change_model, clipTextModelPath ], outputs=[] ) return [(CLIP_test_interface, "CLIP_test", "clip_test")] def on_ui_settings(): shared.opts.add_option("disable_ema", shared.OptionInfo(False, "Detach grad from conditioning models", section=('training', "Training"))) if not hasattr(shared.opts, 'training_enable_tensorboard'): shared.opts.add_option("training_enable_tensorboard", shared.OptionInfo(False, "Enable tensorboard logging", section=('training', "Training"))) #script_callbacks.on_ui_train_tabs(create_training_tab) # Deprecate Beta Training script_callbacks.on_ui_train_tabs(create_extension_tab) script_callbacks.on_ui_train_tabs(external_patch_ui.on_train_gamma_tab) script_callbacks.on_ui_train_tabs(external_patch_ui.on_train_tuning) script_callbacks.on_ui_tabs(create_extension_tab2) script_callbacks.on_ui_settings(on_ui_settings) class Script(scripts.Script): def title(self): return "Hypernetwork Monkey Patch" def show(self, _): return scripts.AlwaysVisible