diff --git a/.gitignore b/.gitignore
index 0a1b85c..8c92e0e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,5 @@
/csv/history.tsv
+/csv/preset_own.tsv
+
+#
+_*
diff --git a/javascript/js_mbw_each.js b/javascript/js_mbw_each.js
new file mode 100644
index 0000000..51777c1
--- /dev/null
+++ b/javascript/js_mbw_each.js
@@ -0,0 +1,23 @@
+//
+// fix position of sliders
+//
+
+//
+// UI
+//
+onUiUpdate(function () {
+ // check Extension loaded
+ if (gradioApp().querySelector("div#tab_mbw_each") == null ) return;
+
+ // check already done
+ //if (gradioApp().querySelector("#div_mdl_size_a") != null) return;
+
+ // apply
+ let _style = "min-width: min(200px, 100%); flex-grow: 1";
+ gradioApp().querySelector("#sl_IN_A_00").parentElement.parentElement.setAttribute("style", _style)
+ gradioApp().querySelector("#sl_IN_B_00").parentElement.parentElement.setAttribute("style", _style)
+ gradioApp().querySelector("#sl_M_A_00").parentElement.parentElement.setAttribute("style", _style)
+ gradioApp().querySelector("#sl_M_B_00").parentElement.parentElement.setAttribute("style", _style)
+ gradioApp().querySelector("#sl_OUT_A_00").parentElement.parentElement.setAttribute("style", _style)
+ gradioApp().querySelector("#sl_OUT_B_00").parentElement.parentElement.setAttribute("style", _style)
+});
diff --git a/scripts/merge_block_weighted.py b/scripts/mbw/merge_block_weighted.py
similarity index 100%
rename from scripts/merge_block_weighted.py
rename to scripts/mbw/merge_block_weighted.py
diff --git a/scripts/mbw/ui_mbw.py b/scripts/mbw/ui_mbw.py
new file mode 100644
index 0000000..79742c0
--- /dev/null
+++ b/scripts/mbw/ui_mbw.py
@@ -0,0 +1,215 @@
+import gradio as gr
+import os
+
+from modules import sd_models, shared
+from tqdm import tqdm
+
+from scripts.mbw.merge_block_weighted import merge
+from scripts.util.preset_weights import PresetWeights
+from scripts.util.merge_history import MergeHistory
+
+presetWeights = PresetWeights()
+mergeHistory = MergeHistory()
+
+
+def on_ui_tabs():
+ with gr.Column():
+ with gr.Row():
+ with gr.Column(variant="panel"):
+ btn_do_merge_block_weighted = gr.Button(value="Run Merge", variant="primary")
+ btn_clear_weighted = gr.Button(value="Clear values")
+ btn_reload_checkpoint_mbw = gr.Button(value="Reload checkpoint")
+ html_output_block_weight_info = gr.HTML()
+ with gr.Column():
+ dd_preset_weight = gr.Dropdown(label="Preset Weights", choices=presetWeights.get_preset_name_list())
+ txt_block_weight = gr.Text(label="Weight values", placeholder="Put weight sets. float number x 25")
+ btn_apply_block_weithg_from_txt = gr.Button(value="Apply block weight from text", variant="primary")
+ with gr.Row():
+ sl_base_alpha = gr.Slider(label="base_alpha", minimum=0, maximum=1, step=0.00000000001, value=1)
+ chk_verbose_mbw = gr.Checkbox(label="verbose console output", value=False)
+ chk_allow_overwrite = gr.Checkbox(label="Allow overwrite output-model", value=False)
+ with gr.Row():
+ model_A = gr.Dropdown(label="Model A", choices=sd_models.checkpoint_tiles())
+ model_B = gr.Dropdown(label="Model B", choices=sd_models.checkpoint_tiles())
+ txt_model_O = gr.Text(label="Output Model Name")
+ with gr.Row():
+ with gr.Column():
+ sl_IN_00 = gr.Slider(label="IN00", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_01 = gr.Slider(label="IN01", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_02 = gr.Slider(label="IN02", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_03 = gr.Slider(label="IN03", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_04 = gr.Slider(label="IN04", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_05 = gr.Slider(label="IN05", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_06 = gr.Slider(label="IN06", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_07 = gr.Slider(label="IN07", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_08 = gr.Slider(label="IN08", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_09 = gr.Slider(label="IN09", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_10 = gr.Slider(label="IN10", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_IN_11 = gr.Slider(label="IN11", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ with gr.Column():
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ sl_M_00 = gr.Slider(label="M00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="mbw_sl_M00")
+ with gr.Column():
+ sl_OUT_11 = gr.Slider(label="OUT11", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_10 = gr.Slider(label="OUT10", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_09 = gr.Slider(label="OUT09", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_08 = gr.Slider(label="OUT08", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_07 = gr.Slider(label="OUT07", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_06 = gr.Slider(label="OUT06", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_05 = gr.Slider(label="OUT05", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_04 = gr.Slider(label="OUT04", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_03 = gr.Slider(label="OUT03", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_02 = gr.Slider(label="OUT02", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_01 = gr.Slider(label="OUT01", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+ sl_OUT_00 = gr.Slider(label="OUT00", minimum=0, maximum=1, step=0.00000000001, value=0.5)
+
+ sl_IN = [
+ sl_IN_00, sl_IN_01, sl_IN_02, sl_IN_03, sl_IN_04, sl_IN_05,
+ sl_IN_06, sl_IN_07, sl_IN_08, sl_IN_09, sl_IN_10, sl_IN_11]
+ sl_MID = [sl_M_00]
+ sl_OUT = [
+ sl_OUT_00, sl_OUT_01, sl_OUT_02, sl_OUT_03, sl_OUT_04, sl_OUT_05,
+ sl_OUT_06, sl_OUT_07, sl_OUT_08, sl_OUT_09, sl_OUT_10, sl_OUT_11]
+
+ # Events
+ def onclick_btn_do_merge_block_weighted(
+ model_A, model_B,
+ sl_IN_00, sl_IN_01, sl_IN_02, sl_IN_03, sl_IN_04, sl_IN_05,
+ sl_IN_06, sl_IN_07, sl_IN_08, sl_IN_09, sl_IN_10, sl_IN_11,
+ sl_M_00,
+ sl_OUT_00, sl_OUT_01, sl_OUT_02, sl_OUT_03, sl_OUT_04, sl_OUT_05,
+ sl_OUT_06, sl_OUT_07, sl_OUT_08, sl_OUT_09, sl_OUT_10, sl_OUT_11,
+ txt_model_O, sl_base_alpha, chk_verbose_mbw, chk_allow_overwrite
+ ):
+ _weights = ",".join(
+ [str(x) for x in [
+ sl_IN_00, sl_IN_01, sl_IN_02, sl_IN_03, sl_IN_04, sl_IN_05,
+ sl_IN_06, sl_IN_07, sl_IN_08, sl_IN_09, sl_IN_10, sl_IN_11,
+ sl_M_00,
+ sl_OUT_00, sl_OUT_01, sl_OUT_02, sl_OUT_03, sl_OUT_04, sl_OUT_05,
+ sl_OUT_06, sl_OUT_07, sl_OUT_08, sl_OUT_09, sl_OUT_10, sl_OUT_11
+ ]])
+ #
+ if not model_A or not model_B:
+ return gr.update(value=f"ERROR: model not found. [{model_A}][{model_B}]")
+
+ ckpt_dir = shared.cmd_opts.ckpt_dir or sd_models.model_path
+ model_A_info = sd_models.get_closet_checkpoint_match(model_A)
+ if model_A_info:
+ _model_A_name = model_A_info.model_name
+ else:
+ _model_A_name = ""
+ model_B_info = sd_models.get_closet_checkpoint_match(model_B)
+ if model_B_info:
+ _model_B_info = model_B_info.model_name
+ else:
+ _model_B_info = ""
+ model_O = f"bw-merge-{_model_A_name}-{_model_B_info}-{sl_base_alpha}.ckpt" if txt_model_O == "" else txt_model_O
+ if ".ckpt" not in model_O:
+ model_O = model_O + ".ckpt"
+
+ _output = os.path.join(ckpt_dir, model_O)
+ # debug output
+ print( "#### Merge Block Weighted ####")
+ if not chk_allow_overwrite:
+ if os.path.exists(_output):
+ _err_msg = f"ERROR: output_file already exists. overwrite not allowed. abort."
+ print(_err_msg)
+ return gr.update(value=f"{_err_msg} [{_output}]")
+ print(f"model_0 : {model_A}")
+ print(f"model_1 : {model_B}")
+ print(f"base_alpha : {sl_base_alpha}")
+ print(f"output_file: {_output}")
+ print(f"weights : {_weights}")
+
+ result, ret_message = merge(weights=_weights, model_0=model_A, model_1=model_B, allow_overwrite=chk_allow_overwrite, base_alpha=sl_base_alpha, output_file=_output, verbose=chk_verbose_mbw)
+
+ sd_models.list_models()
+ if result:
+ ret_html = "merged.
" + f"{model_A}
" + f"{model_B}
" + f"{model_O}"
+ else:
+ ret_html = ret_message
+
+ # save log to history.tsv
+ model_O_info = sd_models.get_closet_checkpoint_match(model_O)
+ model_O_hash = "" if not model_O_info else model_O_info.hash
+ _names = presetWeights.find_names_by_weight(_weights)
+ if _names and len(_names) > 0:
+ weight_name = _names[0]
+ else:
+ weight_name = ""
+ mergeHistory.add_history(model_A, model_B, model_O, model_O_hash, sl_base_alpha, _weights, "", weight_name)
+
+ return gr.update(value=f"{ret_html}")
+ btn_do_merge_block_weighted.click(
+ fn=onclick_btn_do_merge_block_weighted,
+ inputs=[model_A, model_B] + sl_IN + sl_MID + sl_OUT + [txt_model_O, sl_base_alpha, chk_verbose_mbw, chk_allow_overwrite],
+ outputs=[html_output_block_weight_info]
+ )
+
+ btn_clear_weighted.click(
+ fn=lambda: [gr.update(value=0.5) for _ in range(25)],
+ inputs=[],
+ outputs=[
+ sl_IN_00, sl_IN_01, sl_IN_02, sl_IN_03, sl_IN_04, sl_IN_05,
+ sl_IN_06, sl_IN_07, sl_IN_08, sl_IN_09, sl_IN_10, sl_IN_11,
+ sl_M_00,
+ sl_OUT_00, sl_OUT_01, sl_OUT_02, sl_OUT_03, sl_OUT_04, sl_OUT_05,
+ sl_OUT_06, sl_OUT_07, sl_OUT_08, sl_OUT_09, sl_OUT_10, sl_OUT_11,
+ ]
+ )
+
+ def on_change_dd_preset_weight(dd_preset_weight):
+ _weights = presetWeights.find_weight_by_name(dd_preset_weight)
+ _ret = on_btn_apply_block_weithg_from_txt(_weights)
+ return [gr.update(value=_weights)] + _ret
+ dd_preset_weight.change(
+ fn=on_change_dd_preset_weight,
+ inputs=[dd_preset_weight],
+ outputs=[txt_block_weight,
+ sl_IN_00, sl_IN_01, sl_IN_02, sl_IN_03, sl_IN_04, sl_IN_05,
+ sl_IN_06, sl_IN_07, sl_IN_08, sl_IN_09, sl_IN_10, sl_IN_11,
+ sl_M_00,
+ sl_OUT_00, sl_OUT_01, sl_OUT_02, sl_OUT_03, sl_OUT_04, sl_OUT_05,
+ sl_OUT_06, sl_OUT_07, sl_OUT_08, sl_OUT_09, sl_OUT_10, sl_OUT_11,
+ ]
+ )
+
+ def on_btn_reload_checkpoint_mbw():
+ sd_models.list_models()
+ return [gr.update(choices=sd_models.checkpoint_tiles()), gr.update(choices=sd_models.checkpoint_tiles())]
+ btn_reload_checkpoint_mbw.click(
+ fn=on_btn_reload_checkpoint_mbw,
+ inputs=[],
+ outputs=[model_A, model_B]
+ )
+
+ def on_btn_apply_block_weithg_from_txt(txt_block_weight):
+ if not txt_block_weight or txt_block_weight == "":
+ return [gr.update() for _ in range(25)]
+ _list = [x.strip() for x in txt_block_weight.split(",")]
+ if(len(_list) != 25):
+ return [gr.update() for _ in range(25)]
+ return [gr.update(value=x) for x in _list]
+ btn_apply_block_weithg_from_txt.click(
+ fn=on_btn_apply_block_weithg_from_txt,
+ inputs=[txt_block_weight],
+ outputs=[
+ sl_IN_00, sl_IN_01, sl_IN_02, sl_IN_03, sl_IN_04, sl_IN_05,
+ sl_IN_06, sl_IN_07, sl_IN_08, sl_IN_09, sl_IN_10, sl_IN_11,
+ sl_M_00,
+ sl_OUT_00, sl_OUT_01, sl_OUT_02, sl_OUT_03, sl_OUT_04, sl_OUT_05,
+ sl_OUT_06, sl_OUT_07, sl_OUT_08, sl_OUT_09, sl_OUT_10, sl_OUT_11,
+ ]
+ )
+
diff --git a/scripts/mbw_each/merge_block_weighted_mod.py b/scripts/mbw_each/merge_block_weighted_mod.py
new file mode 100644
index 0000000..ebcaa38
--- /dev/null
+++ b/scripts/mbw_each/merge_block_weighted_mod.py
@@ -0,0 +1,160 @@
+# from https://note.com/kohya_ss/n/n9a485a066d5b
+# kohya_ss
+# original code: https://github.com/eyriewow/merge-models
+
+# use them as base of this code
+# 2022/12/15
+# bbc-mc
+
+import os
+import argparse
+import re
+import torch
+from tqdm import tqdm
+
+from modules import sd_models, shared
+
+
+NUM_INPUT_BLOCKS = 12
+NUM_MID_BLOCK = 1
+NUM_OUTPUT_BLOCKS = 12
+NUM_TOTAL_BLOCKS = NUM_INPUT_BLOCKS + NUM_MID_BLOCK + NUM_OUTPUT_BLOCKS
+
+
+def dprint(str, flg):
+ if flg:
+ print(str)
+
+
+def merge(weight_A:list, weight_B:list, model_0, model_1, device="cpu", base_alpha=0.5,
+ output_file="", allow_overwrite=False, verbose=False):
+
+ def _check_arg_weight(weight):
+ if weight is None:
+ return None
+ else:
+ _weight = [float(w) for w in weight.split(",")]
+ if len(_weight) != NUM_TOTAL_BLOCKS:
+ return None
+ else:
+ return _weight
+
+ weight_A = _check_arg_weight(weight_A)
+ if weight_A is None:
+ _err_msg = f"Weight A invalid. program abort. weights value must be {NUM_TOTAL_BLOCKS}."
+ print(_err_msg)
+ return False, _err_msg
+ weight_B = _check_arg_weight(weight_B)
+ if weight_B is None:
+ _err_msg = f"Weight B invalid. program abort. weights value must be {NUM_TOTAL_BLOCKS}."
+ print(_err_msg)
+ return False, _err_msg
+
+ device = device if device in ["cpu", "cuda"] else "cpu"
+
+ alpha = base_alpha
+ if not output_file or output_file == "":
+ output_file = f'bw-{model_0}-{model_1}-{str(alpha)[2:] + "0"}.ckpt'
+ else:
+ output_file = output_file if ".ckpt" in output_file else output_file + ".ckpt"
+
+ # check if output file already exists
+ if os.path.isfile(output_file) and not allow_overwrite:
+ _err_msg = f"Exiting... [{output_file}]"
+ print(_err_msg)
+ return False, _err_msg
+
+ def load_model(_model, _device):
+ model_info = sd_models.get_closet_checkpoint_match(_model)
+ if model_info:
+ model_file = model_info.filename
+ else:
+ return None
+ cache_enabled = shared.opts.sd_checkpoint_cache > 0
+ if cache_enabled and model_info in sd_models.checkpoints_loaded:
+ print(" load from cache")
+ return sd_models.checkpoints_loaded[model_info].copy()
+ else:
+ print(" loading ...")
+ return sd_models.read_state_dict(model_file, map_location=_device)
+
+ print("loading", model_0)
+ theta_0 = load_model(model_0, device)
+
+ print("loading", model_1)
+ theta_1 = load_model(model_1, device)
+
+ re_inp = re.compile(r'\.input_blocks\.(\d+)\.') # 12
+ re_mid = re.compile(r'\.middle_block\.(\d+)\.') # 1
+ re_out = re.compile(r'\.output_blocks\.(\d+)\.') # 12
+
+ dprint(f"-- start Stage 1/2 --", verbose)
+ count_target_of_basealpha = 0
+ for key in (tqdm(theta_0.keys(), desc="Stage 1/2") if not verbose else theta_0.keys()):
+ if "model" in key and key in theta_1:
+ dprint(f" key : {key}", verbose)
+
+ current_alpha_A = 1 - alpha
+ current_alpha_B = alpha
+ current_alpha_I = 0
+
+ # check weighted and U-Net or not
+ if weight_A is not None and 'model.diffusion_model.' in key:
+ # check block index
+ weight_index = -1
+
+ if 'time_embed' in key:
+ weight_index = 0 # before input blocks
+ elif '.out.' in key:
+ weight_index = NUM_TOTAL_BLOCKS - 1 # after output blocks
+ else:
+ m = re_inp.search(key)
+ if m:
+ inp_idx = int(m.groups()[0])
+ weight_index = inp_idx
+ else:
+ m = re_mid.search(key)
+ if m:
+ weight_index = NUM_INPUT_BLOCKS
+ else:
+ m = re_out.search(key)
+ if m:
+ out_idx = int(m.groups()[0])
+ weight_index = NUM_INPUT_BLOCKS + NUM_MID_BLOCK + out_idx
+
+ if weight_index >= NUM_TOTAL_BLOCKS:
+ print(f"error. illegal block index: {key}")
+ if weight_index >= 0:
+ current_alpha_A = weight_A[weight_index]
+ current_alpha_B = weight_B[weight_index]
+ current_alpha_I = 1 - current_alpha_A - current_alpha_B
+ if verbose:
+ print(f"weighted '{key}': A{current_alpha_A} B{current_alpha_B} I{current_alpha_I}")
+
+ # create I tensor
+ tensor_I_0 = torch.zeros_like(theta_0[key], dtype=theta_0[key].dtype)
+ _var1 = current_alpha_I * tensor_I_0
+ _var2 = current_alpha_A * theta_0[key]
+ _var3 = current_alpha_B * theta_1[key]
+ theta_0[key] = _var1 + _var2 + _var3
+
+ # theta_0[key] = (1 - current_alpha) * theta_0[key] + current_alpha * theta_1[key]
+
+ else:
+ dprint(f" key - {key}", verbose)
+
+ dprint(f"-- start Stage 2/2 --", verbose)
+ for key in tqdm(theta_1.keys(), desc="Stage 2/2"):
+ if "model" in key and key not in theta_0:
+ dprint(f" key : {key}", verbose)
+ theta_0.update({key:theta_1[key]})
+ else:
+ dprint(f" key - {key}", verbose)
+
+ print("Saving...")
+
+ torch.save({"state_dict": theta_0}, output_file)
+
+ print("Done!")
+
+ return True, f"{output_file}
base_alpha applied [{count_target_of_basealpha}] times."
diff --git a/scripts/mbw_each/ui_mbw_each.py b/scripts/mbw_each/ui_mbw_each.py
new file mode 100644
index 0000000..1c353be
--- /dev/null
+++ b/scripts/mbw_each/ui_mbw_each.py
@@ -0,0 +1,426 @@
+import gradio as gr
+import os
+import re
+
+from modules import sd_models, shared
+from tqdm import tqdm
+
+from scripts.mbw_each.merge_block_weighted_mod import merge
+from scripts.util.preset_weights import PresetWeights
+from scripts.util.merge_history import MergeHistory
+
+presetWeights = PresetWeights()
+mergeHistory = MergeHistory()
+
+
+def on_ui_tabs():
+ with gr.Column():
+ with gr.Row():
+ with gr.Column(variant="panel"):
+ with gr.Row():
+ btn_do_merge_block_weighted = gr.Button(value="Run Merge", variant="primary")
+ btn_clear_weighted = gr.Button(value="Clear values")
+ btn_reload_checkpoint_mbw = gr.Button(value="Reload checkpoint")
+ with gr.Row():
+ txt_multi_process_cmd = gr.TextArea(label="Multi Proc Cmd", placeholder="Keep empty if dont use.")
+ html_output_block_weight_info = gr.HTML()
+ with gr.Column():
+ dd_preset_weight = gr.Dropdown(label="Preset_Weights", choices=presetWeights.get_preset_name_list())
+ txt_block_weight = gr.Text(label="Weight_values", placeholder="Put weight sets. float number x 25")
+ btn_apply_block_weithg_from_txt = gr.Button(value="Apply block weight from text", variant="primary")
+ with gr.Row():
+ sl_base_alpha = gr.Slider(label="base_alpha", minimum=0, maximum=1, step=0.00000000001, value=0)
+ chk_verbose_mbw = gr.Checkbox(label="verbose console output", value=False)
+ chk_allow_overwrite = gr.Checkbox(label="Allow overwrite output-model", value=False)
+ with gr.Row():
+ dd_model_A = gr.Dropdown(label="Model_A", choices=sd_models.checkpoint_tiles())
+ dd_model_B = gr.Dropdown(label="Model_B", choices=sd_models.checkpoint_tiles())
+ txt_model_O = gr.Text(label="(O)Output Model Name")
+ with gr.Row():
+ with gr.Column():
+ sl_IN_A_00 = gr.Slider(label="IN_A_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_00")
+ sl_IN_A_01 = gr.Slider(label="IN_A_01", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_01")
+ sl_IN_A_02 = gr.Slider(label="IN_A_02", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_02")
+ sl_IN_A_03 = gr.Slider(label="IN_A_03", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_03")
+ sl_IN_A_04 = gr.Slider(label="IN_A_04", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_04")
+ sl_IN_A_05 = gr.Slider(label="IN_A_05", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_05")
+ sl_IN_A_06 = gr.Slider(label="IN_A_06", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_06")
+ sl_IN_A_07 = gr.Slider(label="IN_A_07", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_07")
+ sl_IN_A_08 = gr.Slider(label="IN_A_08", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_08")
+ sl_IN_A_09 = gr.Slider(label="IN_A_09", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_09")
+ sl_IN_A_10 = gr.Slider(label="IN_A_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_10")
+ sl_IN_A_11 = gr.Slider(label="IN_A_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_11")
+ with gr.Column():
+ sl_IN_B_00 = gr.Slider(label="IN_B_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_00")
+ sl_IN_B_01 = gr.Slider(label="IN_B_01", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_01")
+ sl_IN_B_02 = gr.Slider(label="IN_B_02", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_02")
+ sl_IN_B_03 = gr.Slider(label="IN_B_03", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_03")
+ sl_IN_B_04 = gr.Slider(label="IN_B_04", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_04")
+ sl_IN_B_05 = gr.Slider(label="IN_B_05", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_05")
+ sl_IN_B_06 = gr.Slider(label="IN_B_06", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_06")
+ sl_IN_B_07 = gr.Slider(label="IN_B_07", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_07")
+ sl_IN_B_08 = gr.Slider(label="IN_B_08", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_08")
+ sl_IN_B_09 = gr.Slider(label="IN_B_09", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_09")
+ sl_IN_B_10 = gr.Slider(label="IN_B_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_10")
+ sl_IN_B_11 = gr.Slider(label="IN_B_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_IN_A_11")
+ with gr.Column():
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ sl_M_A_00 = gr.Slider(label="M_A_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_M_A_00")
+ with gr.Column():
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ gr.Slider(visible=False)
+ sl_M_B_00 = gr.Slider(label="M_B_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_M_B_00")
+ with gr.Column():
+ sl_OUT_A_11 = gr.Slider(label="OUT_A_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_11")
+ sl_OUT_A_10 = gr.Slider(label="OUT_A_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_10")
+ sl_OUT_A_09 = gr.Slider(label="OUT_A_09", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_09")
+ sl_OUT_A_08 = gr.Slider(label="OUT_A_08", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_08")
+ sl_OUT_A_07 = gr.Slider(label="OUT_A_07", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_07")
+ sl_OUT_A_06 = gr.Slider(label="OUT_A_06", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_06")
+ sl_OUT_A_05 = gr.Slider(label="OUT_A_05", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_05")
+ sl_OUT_A_04 = gr.Slider(label="OUT_A_04", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_04")
+ sl_OUT_A_03 = gr.Slider(label="OUT_A_03", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_03")
+ sl_OUT_A_02 = gr.Slider(label="OUT_A_02", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_02")
+ sl_OUT_A_01 = gr.Slider(label="OUT_A_01", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_01")
+ sl_OUT_A_00 = gr.Slider(label="OUT_A_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_A_00")
+ with gr.Column():
+ sl_OUT_B_11 = gr.Slider(label="OUT_B_11", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_11")
+ sl_OUT_B_10 = gr.Slider(label="OUT_B_10", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_10")
+ sl_OUT_B_09 = gr.Slider(label="OUT_B_09", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_09")
+ sl_OUT_B_08 = gr.Slider(label="OUT_B_08", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_08")
+ sl_OUT_B_07 = gr.Slider(label="OUT_B_07", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_07")
+ sl_OUT_B_06 = gr.Slider(label="OUT_B_06", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_06")
+ sl_OUT_B_05 = gr.Slider(label="OUT_B_05", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_05")
+ sl_OUT_B_04 = gr.Slider(label="OUT_B_04", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_04")
+ sl_OUT_B_03 = gr.Slider(label="OUT_B_03", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_03")
+ sl_OUT_B_02 = gr.Slider(label="OUT_B_02", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_02")
+ sl_OUT_B_01 = gr.Slider(label="OUT_B_01", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_01")
+ sl_OUT_B_00 = gr.Slider(label="OUT_B_00", minimum=0, maximum=1, step=0.00000000001, value=0.5, elem_id="sl_OUT_B_00")
+
+ # Footer
+ gr.HTML(
+ """
+
+ Merge Block Weighted extension by bbc_mc
+ MBW Each is experimental functions and NO PROOF of effectiveness.
+ You can try it by own, to dig more deeper into Abyss ...
+