Add "config source" radio select

add: Add backward compatibility of "run_modelmerger" func for while.
master
bbc_mc 2023-01-12 00:15:00 +09:00
parent cbb713c0b5
commit 5a5b84eca1
4 changed files with 49 additions and 53 deletions

View File

@ -37,7 +37,8 @@ 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, chk_skip_merge_if_exists = ui_merge.on_ui_tabs()
_checkpoint_listener, chk_skip_merge_if_exists, radio_config_source \
= ui_merge.on_ui_tabs()
# UI:Recipe
txt_recipe, txt_parse_result, btn_send_recipe_to_multi_merge, \
@ -118,7 +119,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,
chk_skip_merge_if_exists
chk_skip_merge_if_exists, radio_config_source
):
merge_ope = MergeOperation()
merge_ope.add_merge(1, A1, B1, C1, M1, S1, F1, O1, CF1)
@ -139,7 +140,7 @@ def on_ui_tabs():
print(f"Start Merge processes. Total process num: {_process_total} .")
# run merge
_ret_all = merge_ope.run_merge(skip_merge_if_exists=chk_skip_merge_if_exists)
_ret_all = merge_ope.run_merge(skip_merge_if_exists=chk_skip_merge_if_exists, config_source=radio_config_source)
print(f"All Multi-Merge process finished. {len(_ret_all)} files.")
for _ret in _ret_all:
@ -165,7 +166,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,
chk_skip_merge_if_exists
chk_skip_merge_if_exists, radio_config_source
],
outputs=[submit_result]
)

View File

@ -21,7 +21,7 @@ class MergeOperation:
def get_process_num(self):
return len(self.recipes)
def run_merge(self, skip_merge_if_exists=False):
def run_merge(self, skip_merge_if_exists=False, config_source=0):
_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, skip_merge_if_exists)
_ret = _recipe.run_merge(_index, skip_merge_if_exists, config_source)
_ret_all.append(_ret)
# update vars
_vars.update(_recipe.get_vars())

View File

@ -66,7 +66,7 @@ class MergeRecipe():
self.B = _apply(self.row_B, _vars)
self.C = _apply(self.row_C, _vars)
def run_merge(self, index, skip_merge_if_exists):
def run_merge(self, index, skip_merge_if_exists, config_source):
sd_models.list_models()
if skip_merge_if_exists:
_filename = self.O + "." + self.CF if self.O != "" else self._estimate_ckpt_name()
@ -89,55 +89,48 @@ class MergeRecipe():
print(f" CF: {self.CF}")
try:
results = extras.run_modelmerger(
self.A,
self.B,
self.C,
self.S,
self.M,
self.F,
self.O,
self.CF
)
except TypeError as te:
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source)
except TypeError:
# backward compatibility for change of run_modelmerger
# 2022/11/27
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/dac9b6f15de5e675053d9490a20e0457dcd1a23e/modules/extras.py#L253
print("Try to use old 'run_modelmerger' params. 'Checkpoint format is forced to 'ckpt'")
# 2023/01/11
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/954091697fce7a1b7997d5f3d73551f793f6bebc
print("Try to use old 'run_modelmerger' params. 'config_source' is ignored")
try:
results = extras.run_modelmerger(
self.A,
self.B,
self.C,
self.S,
self.M,
self.F,
self.O
)
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF)
except TypeError as te:
# backward compatibility for change of run_modelmerger
# 2022/11/27
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/dac9b6f15de5e675053d9490a20e0457dcd1a23e/modules/extras.py#L253
print("Try to use old 'run_modelmerger' params. 'Checkpoint format is forced to 'ckpt'")
try:
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O)
except Exception as e:
print(type(e))
print(e)
return ["Error", "Error"]
except Exception as e:
print(type(e))
print(e)
return ["Error", "Error"]
except Exception as e:
print("Error: at recipe.run_merge: ", file=sys.stderr)
print(type(e), file=sys.stderr)
print(e, file=sys.stderr)
sd_models.list_models() # to remove the potentially missing models from the list
print("Error: at recipe.run_merge: ", file=sys.stderr)
print(type(e), file=sys.stderr)
print(e, file=sys.stderr)
sd_models.list_models() # to remove the potentially missing models from the list
# try to figure out whats going on
def _dprint_model_exists(header, model):
if model != "" and sd_models.get_closet_checkpoint_match(model) is not None:
if os.path.exists(sd_models.get_closet_checkpoint_match(model).filename):
print(" {}: is exists:True [{}]".format(header, model), file=sys.stderr)
# try to figure out whats going on
def _dprint_model_exists(header, model):
if model != "" and sd_models.get_closet_checkpoint_match(model) is not None:
if os.path.exists(sd_models.get_closet_checkpoint_match(model).filename):
print(" {}: is exists:True [{}]".format(header, model), file=sys.stderr)
else:
print(" {}: is exists:False [{}]".format(header, model), file=sys.stderr)
else:
print(" {}: is exists:False [{}]".format(header, model), file=sys.stderr)
else:
print(" {}: not found: [{}]".format(header, model), file=sys.stderr)
_dprint_model_exists("A", self.A)
_dprint_model_exists("B", self.B)
_dprint_model_exists("C", self.C)
print(" {}: not found: [{}]".format(header, model), file=sys.stderr)
_dprint_model_exists("A", self.A)
_dprint_model_exists("B", self.B)
_dprint_model_exists("C", self.C)
return ["Error: at recipe.run_merge. "] *2
return ["Error: at recipe.run_merge. "] *2
except Exception as e:
print(e)
# update vars
self._update_o_filename(index, results[0])

View File

@ -25,10 +25,12 @@ def on_ui_tabs():
btn_reload_checkpoints = gr.Button("Reload Checkpoints")
btn_clear_merge_settings = gr.Button("Clear inputs")
with gr.Row():
with gr.Column(scale=6):
with gr.Column(scale=1):
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():
radio_config_source = gr.Radio(choices=["A, B or C", "B", "C", "Don't"], value="A, B or C", label="Copy config from", type="index")
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():
@ -209,4 +211,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, chk_skip_merge_if_exists
_checkpoint_listener, chk_skip_merge_if_exists, radio_config_source