Add setting to "Skip merge if same name checkpoint already exists". (#4)
parent
c997af012e
commit
9aec9ef27b
|
|
@ -54,6 +54,13 @@
|
|||
|
||||

|
||||
|
||||
- "Skip Merge if same name checkpoint already exists"
|
||||
|
||||

|
||||
|
||||
- When checked, Merge-Board check "Output checkpoint name" at start of merging, and skip this lane if checkpoint already exists.
|
||||

|
||||
|
||||
## Recipe
|
||||
|
||||

|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.7 KiB |
|
|
@ -37,7 +37,7 @@ def on_ui_tabs():
|
|||
A8, B8, C8, M8, S8, F8, O8, CF8, \
|
||||
A9, B9, C9, M9, S9, F9, O9, CF9, \
|
||||
A10,B10,C10,M10,S10,F10,O10,CF10, \
|
||||
_checkpoint_listener = ui_merge.on_ui_tabs()
|
||||
_checkpoint_listener, chk_skip_merge_if_exists = ui_merge.on_ui_tabs()
|
||||
|
||||
# UI:Recipe
|
||||
txt_recipe, txt_parse_result, btn_send_recipe_to_multi_merge, \
|
||||
|
|
@ -117,7 +117,8 @@ def on_ui_tabs():
|
|||
A7, B7, C7, M7, S7, F7, O7, CF7,
|
||||
A8, B8, C8, M8, S8, F8, O8, CF8,
|
||||
A9, B9, C9, M9, S9, F9, O9, CF9,
|
||||
A10,B10,C10,M10,S10,F10,O10,CF10
|
||||
A10,B10,C10,M10,S10,F10,O10,CF10,
|
||||
chk_skip_merge_if_exists
|
||||
):
|
||||
merge_ope = MergeOperation()
|
||||
merge_ope.add_merge(1, A1, B1, C1, M1, S1, F1, O1, CF1)
|
||||
|
|
@ -138,7 +139,7 @@ def on_ui_tabs():
|
|||
print(f"Start Merge processes. Total process num: {_process_total} .")
|
||||
|
||||
# run merge
|
||||
_ret_all = merge_ope.run_merge()
|
||||
_ret_all = merge_ope.run_merge(skip_merge_if_exists=chk_skip_merge_if_exists)
|
||||
|
||||
print(f"All Multi-Merge process finished. {len(_ret_all)} files.")
|
||||
for _ret in _ret_all:
|
||||
|
|
@ -163,7 +164,8 @@ def on_ui_tabs():
|
|||
A7, B7, C7, M7, S7, F7, O7, CF7,
|
||||
A8, B8, C8, M8, S8, F8, O8, CF8,
|
||||
A9, B9, C9, M9, S9, F9, O9, CF9,
|
||||
A10,B10,C10,M10,S10,F10,O10,CF10
|
||||
A10,B10,C10,M10,S10,F10,O10,CF10,
|
||||
chk_skip_merge_if_exists
|
||||
],
|
||||
outputs=[submit_result]
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class MergeOperation:
|
|||
def get_process_num(self):
|
||||
return len(self.recipes)
|
||||
|
||||
def run_merge(self):
|
||||
def run_merge(self, skip_merge_if_exists=False):
|
||||
_ret_all = []
|
||||
_vars = {} # {"__A1__": "sd-v1-5-pruned.ckpt"}
|
||||
for _index, _recipe in self.recipes.items():
|
||||
|
|
@ -29,7 +29,7 @@ class MergeOperation:
|
|||
# apply current variables
|
||||
_recipe.apply_variables(_vars)
|
||||
# run merge
|
||||
_ret = _recipe.run_merge(_index)
|
||||
_ret = _recipe.run_merge(_index, skip_merge_if_exists)
|
||||
_ret_all.append(_ret)
|
||||
# update vars
|
||||
_vars.update(_recipe.get_vars())
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import math
|
|||
import os
|
||||
import sys
|
||||
|
||||
from modules import sd_models, extras
|
||||
from modules import sd_models, extras, shared
|
||||
|
||||
S_WS = "Weighted sum"
|
||||
S_AD = "Add difference"
|
||||
|
|
@ -56,8 +56,15 @@ class MergeRecipe():
|
|||
self.B = _apply(self.row_B, _vars)
|
||||
self.C = _apply(self.row_C, _vars)
|
||||
|
||||
def run_merge(self, index):
|
||||
def run_merge(self, index, skip_merge_if_exists):
|
||||
sd_models.list_models()
|
||||
if skip_merge_if_exists and self._check_ckpt_exists():
|
||||
_filename = self.O + "." + self.CF if self.O != "" else self._estimate_ckpt_name()
|
||||
_result = f"Checkpoint already exist: {_filename}"
|
||||
print(f"Merge skipped. Same name checkpoint already exists.")
|
||||
print(f" O: {_filename}")
|
||||
self._update_o_filename(index, _result)
|
||||
return [f"[skipped] {_filename}", f"[skipped] {_filename}"]
|
||||
|
||||
print( "Starting merge under settings below,")
|
||||
print( " A: {}".format(f"{self.A}" if self.A == self.row_A else f"{self.row_A} -> {self.A}"))
|
||||
|
|
@ -66,7 +73,7 @@ class MergeRecipe():
|
|||
print(f" S: {self.S}")
|
||||
print(f" M: {self.M}")
|
||||
print(f" F: {self.F}")
|
||||
print(f" O: {self.O}")
|
||||
print( " O: {}".format(f"{self.O}" if self.O != "" else f" -> {self._estimate_ckpt_name()}"))
|
||||
print(f" CF: {self.CF}")
|
||||
|
||||
try:
|
||||
|
|
@ -160,3 +167,36 @@ class MergeRecipe():
|
|||
def _alpha_of_inv_sigmoid(self, alpha):
|
||||
alpha = float(alpha)
|
||||
return 0.5 - math.sin(math.asin(1.0 - 2.0 * alpha) / 3.0)
|
||||
|
||||
def _check_ckpt_exists(self):
|
||||
if self.O == "":
|
||||
_O = self._estimate_ckpt_name()
|
||||
else:
|
||||
_O = self.O + "." + self.CF
|
||||
ckpt_dir = shared.cmd_opts.ckpt_dir or sd_models.model_path
|
||||
output_modelname = os.path.join(ckpt_dir, _O)
|
||||
if os.path.exists(ckpt_dir) and os.path.exists(output_modelname) and os.path.isfile(output_modelname):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def _estimate_ckpt_name(self):
|
||||
_A = sd_models.get_closet_checkpoint_match(self.A)
|
||||
_B = sd_models.get_closet_checkpoint_match(self.B)
|
||||
_M = self.M
|
||||
_S = self.S
|
||||
_CF = self.CF
|
||||
|
||||
# File name generation code from
|
||||
#
|
||||
# AUTO 685f963
|
||||
# modules/extras.py
|
||||
# def run_modelmerger
|
||||
# L314
|
||||
_filename = \
|
||||
_A.model_name + '_' + str(round(1-_M, 2)) + '-' + \
|
||||
_B.model_name + '_' + str(round(_M, 2)) + '-' + \
|
||||
_S.replace(" ", "_") + \
|
||||
'-merged.' + \
|
||||
_CF
|
||||
return _filename
|
||||
|
|
|
|||
|
|
@ -25,7 +25,11 @@ def on_ui_tabs():
|
|||
btn_send_to_recipe = gr.Button("Send to Recipe", variant="primary")
|
||||
btn_reload_checkpoints = gr.Button("Reload Checkpoints")
|
||||
btn_clear_merge_settings = gr.Button("Clear inputs")
|
||||
submit_result = gr.HTML(elem_id="modelmerger_result", show_label=False)
|
||||
with gr.Row():
|
||||
with gr.Column(scale=6):
|
||||
submit_result = gr.HTML(elem_id="modelmerger_result", show_label=False)
|
||||
with gr.Column(scale=1):
|
||||
chk_skip_merge_if_exists = gr.Checkbox(label="Skip merge if same-name ckpt already exists", value=False, interactive=True)
|
||||
|
||||
with gr.Row():
|
||||
with gr.Column():
|
||||
|
|
@ -206,4 +210,4 @@ def on_ui_tabs():
|
|||
A8, B8, C8, M8, S8, F8, O8, CF8, \
|
||||
A9, B9, C9, M9, S9, F9, O9, CF9, \
|
||||
A10,B10,C10,M10,S10,F10,O10,CF10,\
|
||||
_checkpoint_listener
|
||||
_checkpoint_listener, chk_skip_merge_if_exists
|
||||
|
|
|
|||
Loading…
Reference in New Issue