Update and Fix

update: update for new "run_modelmerger" function (#1) with backward compatibility for old-style run_modelmerger
add: add support for "Checkpoint format", UI and recipe
fix: "fp16" on recipe now applied to UI correctly
refact: add cmd line print of error
master
bbc_mc 2022-11-28 23:40:00 +09:00
parent f323b7ea55
commit 1ccbbcbde4
10 changed files with 210 additions and 162 deletions

View File

@ -39,7 +39,7 @@
- i.e.) in second lane, you can specify model as `modelA(A2): __O1__`
- can not use future output as variable
- can not use future(not yet generated) output as variable
- bad example) in second lane, `modelA(A2): __O3__`
@ -48,6 +48,12 @@
| ![](misc/ss01_M.png) | Multiplier digit is extended to 0.001 step. |
| ![](misc/ss01_S1.png) | Merging method. Weighted Sum, Add difference, Sigmoid. Implementation of "Sigmoid" is from old-days A1111 code, and this value is exchanged by inv-sigmoid in merging process and used as Weighted Sum. |
- "Checkpoint format"
- For backward compatibility, if old "run_modelmerger" found, force "ckpt" as "(CF)Checkpoint format" setting
![](misc/ss04.png)
## Recipe
![](misc/ss02.png)
@ -105,9 +111,9 @@
```
# Sample Recipe
a14 = __SD14__ + __F222__, 0.5
a15 = __SD15__ + __F222__, 0.5
mix14 = __O1__ + __WD13__ + __SD14__, 1.0
mix15 = __O2__ + __WD13__ + __SD14__, 1.0
a15 = __SD15__ + __F222__, 0.5, fp16
mix14 = __O1__ + __WD13__ + __SD14__, 1.0, safetensors
mix15 = __O2__ + __WD13__ + __SD14__, 1.0, fp16, safetensors
# variables
__F222__ # You can use F111 instead.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 16 KiB

BIN
misc/ss04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -27,16 +27,16 @@ def on_ui_tabs():
#UI:Multi-Merge
btn_run_merge, btn_reload_checkpoints, btn_send_to_recipe, submit_result, btn_clear_merge_settings, \
A1, B1, C1, M1, S1, F1, O1, \
A2, B2, C2, M2, S2, F2, O2, \
A3, B3, C3, M3, S3, F3, O3, \
A4, B4, C4, M4, S4, F4, O4, \
A5, B5, C5, M5, S5, F5, O5, \
A6, B6, C6, M6, S6, F6, O6, \
A7, B7, C7, M7, S7, F7, O7, \
A8, B8, C8, M8, S8, F8, O8, \
A9, B9, C9, M9, S9, F9, O9, \
A10,B10,C10,M10,S10,F10,O10,\
A1, B1, C1, M1, S1, F1, O1, CF1, \
A2, B2, C2, M2, S2, F2, O2, CF2, \
A3, B3, C3, M3, S3, F3, O3, CF3, \
A4, B4, C4, M4, S4, F4, O4, CF4, \
A5, B5, C5, M5, S5, F5, O5, CF5, \
A6, B6, C6, M6, S6, F6, O6, CF6, \
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, \
_checkpoint_listener = ui_merge.on_ui_tabs()
# UI:Recipe
@ -108,28 +108,28 @@ def on_ui_tabs():
#
# == Multi Merge ==
def modelmerger(
A1, B1, C1, M1, S1, F1, O1,
A2, B2, C2, M2, S2, F2, O2,
A3, B3, C3, M3, S3, F3, O3,
A4, B4, C4, M4, S4, F4, O4,
A5, B5, C5, M5, S5, F5, O5,
A6, B6, C6, M6, S6, F6, O6,
A7, B7, C7, M7, S7, F7, O7,
A8, B8, C8, M8, S8, F8, O8,
A9, B9, C9, M9, S9, F9, O9,
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1,
A2, B2, C2, M2, S2, F2, O2, CF2,
A3, B3, C3, M3, S3, F3, O3, CF3,
A4, B4, C4, M4, S4, F4, O4, CF4,
A5, B5, C5, M5, S5, F5, O5, CF5,
A6, B6, C6, M6, S6, F6, O6, CF6,
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
):
merge_ope = MergeOperation()
merge_ope.add_merge(1, A1, B1, C1, M1, S1, F1, O1)
merge_ope.add_merge(2, A2, B2, C2, M2, S2, F2, O2)
merge_ope.add_merge(3, A3, B3, C3, M3, S3, F3, O3)
merge_ope.add_merge(4, A4, B4, C4, M4, S4, F4, O4)
merge_ope.add_merge(5, A5, B5, C5, M5, S5, F5, O5)
merge_ope.add_merge(6, A6, B6, C6, M6, S6, F6, O6)
merge_ope.add_merge(7, A7, B7, C7, M7, S7, F7, O7)
merge_ope.add_merge(8, A8, B8, C8, M8, S8, F8, O8)
merge_ope.add_merge(9, A9, B9, C9, M9, S9, F9, O9)
merge_ope.add_merge(10,A10,B10,C10,M10,S10,F10,O10)
merge_ope.add_merge(1, A1, B1, C1, M1, S1, F1, O1, CF1)
merge_ope.add_merge(2, A2, B2, C2, M2, S2, F2, O2, CF2)
merge_ope.add_merge(3, A3, B3, C3, M3, S3, F3, O3, CF3)
merge_ope.add_merge(4, A4, B4, C4, M4, S4, F4, O4, CF4)
merge_ope.add_merge(5, A5, B5, C5, M5, S5, F5, O5, CF5)
merge_ope.add_merge(6, A6, B6, C6, M6, S6, F6, O6, CF6)
merge_ope.add_merge(7, A7, B7, C7, M7, S7, F7, O7, CF7)
merge_ope.add_merge(8, A8, B8, C8, M8, S8, F8, O8, CF8)
merge_ope.add_merge(9, A9, B9, C9, M9, S9, F9, O9, CF9)
merge_ope.add_merge(10,A10,B10,C10,M10,S10,F10,O10,CF10)
if not merge_ope.can_process():
return "Error loading merge settings. A or B missing."
@ -154,16 +154,16 @@ def on_ui_tabs():
btn_run_merge.click(
fn=modelmerger,
inputs=[
A1, B1, C1, M1, S1, F1, O1,
A2, B2, C2, M2, S2, F2, O2,
A3, B3, C3, M3, S3, F3, O3,
A4, B4, C4, M4, S4, F4, O4,
A5, B5, C5, M5, S5, F5, O5,
A6, B6, C6, M6, S6, F6, O6,
A7, B7, C7, M7, S7, F7, O7,
A8, B8, C8, M8, S8, F8, O8,
A9, B9, C9, M9, S9, F9, O9,
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1,
A2, B2, C2, M2, S2, F2, O2, CF2,
A3, B3, C3, M3, S3, F3, O3, CF3,
A4, B4, C4, M4, S4, F4, O4, CF4,
A5, B5, C5, M5, S5, F5, O5, CF5,
A6, B6, C6, M6, S6, F6, O6, CF6,
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
],
outputs=[submit_result]
)
@ -179,42 +179,42 @@ def on_ui_tabs():
# on UI:Merge to UI:Recipe
def on_send_to_recipe(
A1, B1, C1, M1, S1, F1, O1,
A2, B2, C2, M2, S2, F2, O2,
A3, B3, C3, M3, S3, F3, O3,
A4, B4, C4, M4, S4, F4, O4,
A5, B5, C5, M5, S5, F5, O5,
A6, B6, C6, M6, S6, F6, O6,
A7, B7, C7, M7, S7, F7, O7,
A8, B8, C8, M8, S8, F8, O8,
A9, B9, C9, M9, S9, F9, O9,
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1,
A2, B2, C2, M2, S2, F2, O2, CF2,
A3, B3, C3, M3, S3, F3, O3, CF3,
A4, B4, C4, M4, S4, F4, O4, CF4,
A5, B5, C5, M5, S5, F5, O5, CF5,
A6, B6, C6, M6, S6, F6, O6, CF6,
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
):
_parser = RecipeParser()
_parser.send_to_recipe(A1, B1, C1, O1, M1, S1, F1)
_parser.send_to_recipe(A2, B2, C2, O2, M2, S2, F2)
_parser.send_to_recipe(A3, B3, C3, O3, M3, S3, F3)
_parser.send_to_recipe(A4, B4, C4, O4, M4, S4, F4)
_parser.send_to_recipe(A5, B5, C5, O5, M5, S5, F5)
_parser.send_to_recipe(A6, B6, C6, O6, M6, S6, F6)
_parser.send_to_recipe(A7, B7, C7, O7, M7, S7, F7)
_parser.send_to_recipe(A8, B8, C8, O8, M8, S8, F8)
_parser.send_to_recipe(A9, B9, C9, O9, M9, S9, F9)
_parser.send_to_recipe(A10,B10,C10,O10,M10,S10,F10)
_parser.send_to_recipe(A1, B1, C1, O1, M1, S1, F1, CF1)
_parser.send_to_recipe(A2, B2, C2, O2, M2, S2, F2, CF2)
_parser.send_to_recipe(A3, B3, C3, O3, M3, S3, F3, CF3)
_parser.send_to_recipe(A4, B4, C4, O4, M4, S4, F4, CF4)
_parser.send_to_recipe(A5, B5, C5, O5, M5, S5, F5, CF5)
_parser.send_to_recipe(A6, B6, C6, O6, M6, S6, F6, CF6)
_parser.send_to_recipe(A7, B7, C7, O7, M7, S7, F7, CF7)
_parser.send_to_recipe(A8, B8, C8, O8, M8, S8, F8, CF8)
_parser.send_to_recipe(A9, B9, C9, O9, M9, S9, F9, CF9)
_parser.send_to_recipe(A10,B10,C10,O10,M10,S10,F10,CF10)
return [gr.update(value=_parser.output_txt()), gr.update(value="")]
btn_send_to_recipe.click(
fn=on_send_to_recipe,
inputs=[
A1, B1, C1, M1, S1, F1, O1,
A2, B2, C2, M2, S2, F2, O2,
A3, B3, C3, M3, S3, F3, O3,
A4, B4, C4, M4, S4, F4, O4,
A5, B5, C5, M5, S5, F5, O5,
A6, B6, C6, M6, S6, F6, O6,
A7, B7, C7, M7, S7, F7, O7,
A8, B8, C8, M8, S8, F8, O8,
A9, B9, C9, M9, S9, F9, O9,
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1,
A2, B2, C2, M2, S2, F2, O2, CF2,
A3, B3, C3, M3, S3, F3, O3, CF3,
A4, B4, C4, M4, S4, F4, O4, CF4,
A5, B5, C5, M5, S5, F5, O5, CF5,
A6, B6, C6, M6, S6, F6, O6, CF6,
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
],
outputs=[txt_recipe, txt_parse_result],
_js="select_tab_recipe"
@ -284,16 +284,16 @@ def on_ui_tabs():
fn=on_send_recipe_to_merge,
inputs=[txt_recipe] + vars_list,
outputs=[
A1, B1, C1, M1, S1, F1, O1,
A2, B2, C2, M2, S2, F2, O2,
A3, B3, C3, M3, S3, F3, O3,
A4, B4, C4, M4, S4, F4, O4,
A5, B5, C5, M5, S5, F5, O5,
A6, B6, C6, M6, S6, F6, O6,
A7, B7, C7, M7, S7, F7, O7,
A8, B8, C8, M8, S8, F8, O8,
A9, B9, C9, M9, S9, F9, O9,
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1,
A2, B2, C2, M2, S2, F2, O2, CF2,
A3, B3, C3, M3, S3, F3, O3, CF3,
A4, B4, C4, M4, S4, F4, O4, CF4,
A5, B5, C5, M5, S5, F5, O5, CF5,
A6, B6, C6, M6, S6, F6, O6, CF6,
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
],
_js="select_tab_merge"
)

View File

@ -12,9 +12,9 @@ class MergeOperation:
_ret = _ret and _recipe.can_process()
return _ret
def add_merge(self, index, A, B, C, M, S, F, O):
def add_merge(self, index, A, B, C, M, S, F, O, CF):
if index and index != "" and index >= 0:
_recipe = MergeRecipe(A, B, C, O, M, S, F)
_recipe = MergeRecipe(A, B, C, O, M, S, F, CF)
if _recipe.can_process():
self.recipes.update({index: _recipe})

View File

@ -11,7 +11,7 @@ choise_of_method = [S_WS, S_AD, S_SG]
class MergeRecipe():
def __init__(self, A, B, C, O, M, S, F):
def __init__(self, A, B, C, O, M, S, F:bool, CF):
if C == None:
C = ""
if O == None:
@ -23,6 +23,7 @@ class MergeRecipe():
self.row_M = M
self.row_S = S
self.row_F = F
self.row_CF = CF if CF in ["ckpt", "safetensors"] else "ckpt"
self.A = A
self.B = B
@ -30,7 +31,8 @@ class MergeRecipe():
self.O = O
self.S = self._adjust_method(method=S, model_C=C)
self.M = self._adjust_multi_by_method(method=S, multi=M)
self.F = (F == "True")
self.F = self.row_F
self.CF = self.row_CF
self.vars = {} # runtime variables
@ -65,6 +67,7 @@ class MergeRecipe():
print(f" M: {self.M}")
print(f" F: {self.F}")
print(f" O: {self.O}")
print(f" CF: {self.CF}")
try:
results = extras.run_modelmerger(
@ -74,12 +77,34 @@ class MergeRecipe():
self.S,
self.M,
self.F,
self.O
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("Error loading/saving model file:", file=sys.stderr)
print(type(e))
print(e)
sd_models.list_models() # to remove the potentially missing models from the list
return "Error: loading/saving model file. It doesn't exist or the name contains illegal characters"
return ["Error: loading/saving model file. It doesn't exist or the name contains illegal characters"] *2
# update vars
self._update_o_filename(index, results[0])

View File

@ -18,7 +18,7 @@ class RecipeParser():
# self.recipes = {} # {"1": recipe_1}
self.recipes, self.vars_system, self.vars_user, self.vars_txt = self._parse_recipe(self.txt_recipe)
def send_to_recipe(self, A, B, C, O, M, S, F):
def send_to_recipe(self, A, B, C, O, M, S, F, CF):
def _get_modelname(X):
if X and X != "":
_model = sd_models.get_closet_checkpoint_match(X)
@ -26,7 +26,7 @@ class RecipeParser():
return os.path.splitext(os.path.basename(_model.filename))[0]
return X
_recipe = MergeRecipe(A, B, C, O, M, S, F)
_recipe = MergeRecipe(A, B, C, O, M, S, F, CF)
if _recipe.can_process():
_index = len(self.recipes) + 1
if re.search("__[O]{1}\d+__", _recipe.A):
@ -52,9 +52,10 @@ class RecipeParser():
else:
_ret += f"{_recipe.O} = {_recipe.A} + {_recipe.B}, {_recipe.M}"
if _recipe.F:
_ret += ", fp16\n"
else:
_ret += "\n"
_ret += ", fp16"
if _recipe.CF:
_ret += f", {_recipe.CF}"
_ret += "\n"
#
_ret += "\n# Variables(System) \n"
for _item in self.vars_system.keys():
@ -77,29 +78,34 @@ class RecipeParser():
_C = None
_M = _line_recipe.strip().split("=")[1].split(",")[1]
try:
_F = _line_recipe.strip().split("=")[1].split(",")[2]
_F = True if "fp16" in [x.strip() for x in _line_recipe.strip().split("=")[1].split(",")[2:]] else False
except:
_F = None
_F = False
try:
_CF = "safetensors" if "safetensors" in [x.strip() for x in _line_recipe.strip().split("=")[1].split(",")[2:]] else "ckpt"
except:
_CF = "ckpt"
if not _C:
_S = S_WS
else:
_S = S_AD
if _F:
_F = True
else:
_F = False
_ret = {"A": _A, "B": _B, "C": _C, "O": _O, "M": _M, "F": _F, "S": _S}
_ret = {"A": _A, "B": _B, "C": _C, "O": _O, "M": _M, "F": _F, "S": _S, "CF": _CF}
# check vals
_vars_system = {}
_vars_user = {}
for value in _ret.values():
if value and len(value.strip().split("__")) > 2:
if re.search("__[O]{1}\d+__", value):
_vars_system.update({value:""})
else:
_vars_user.update({value:""})
_ret_recipe = MergeRecipe(_A, _B, _C, _O, _M, _S, _F)
try:
if value and len(value.strip().split("__")) > 2:
if re.search("__[O]{1}\d+__", value):
_vars_system.update({value:""})
else:
_vars_user.update({value:""})
except:
pass
_ret_recipe = MergeRecipe(_A, _B, _C, _O, _M, _S, _F, _CF)
return _ret_recipe, _vars_system, _vars_user
def _dispatch_variable(_line_variable):
@ -179,16 +185,16 @@ class RecipeParser():
def output_grupdate_uimerge(self):
"""
update gr in UI:Multi-Merge
A1, B1, C1, M1, S1, F1, O1,
A2, B2, C2, M2, S2, F2, O2,
A3, B3, C3, M3, S3, F3, O3,
A4, B4, C4, M4, S4, F4, O4,
A5, B5, C5, M5, S5, F5, O5,
A6, B6, C6, M6, S6, F6, O6,
A7, B7, C7, M7, S7, F7, O7,
A8, B8, C8, M8, S8, F8, O8,
A9, B9, C9, M9, S9, F9, O9,
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1,
A2, B2, C2, M2, S2, F2, O2, CF2,
A3, B3, C3, M3, S3, F3, O3, CF3,
A4, B4, C4, M4, S4, F4, O4, CF4,
A5, B5, C5, M5, S5, F5, O5, CF5,
A6, B6, C6, M6, S6, F6, O6, CF6,
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
"""
def _get_model_title(X):
if X and X != "" and X != None:
@ -209,10 +215,11 @@ class RecipeParser():
_ret.append(gr.update(value=_recipe.S))
_ret.append(gr.update(value=_recipe.F))
_ret.append(gr.update(value=_recipe.O))
_ret.append(gr.update(value=_recipe.CF))
_ret_all += _ret
index += 1
for i in range(index, 10):
_ret = [None,None,None,None,None,None,None]
_ret = [None,None,None,None,None,None,None,None]
_ret_all += _ret
return _ret_all

View File

@ -39,7 +39,8 @@ def on_ui_tabs():
O1 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M1 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S1 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F1 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F1 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF1 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A1, B1, C1]
with gr.Row():
with gr.Column():
@ -51,7 +52,8 @@ def on_ui_tabs():
O2 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M2 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S2 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F2 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F2 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF2 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A2, B2, C2]
with gr.Row():
with gr.Column():
@ -63,7 +65,8 @@ def on_ui_tabs():
O3 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M3 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S3 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F3 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F3 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF3 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A3, B3, C3]
with gr.Row():
with gr.Column():
@ -75,7 +78,8 @@ def on_ui_tabs():
O4 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M4 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S4 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F4 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F4 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF4 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A4, B4, C4]
with gr.Row():
with gr.Column():
@ -87,7 +91,8 @@ def on_ui_tabs():
O5 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M5 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S5 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F5 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F5 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF5 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A5, B5, C5]
with gr.Row():
with gr.Column():
@ -99,7 +104,8 @@ def on_ui_tabs():
O6 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M6 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S6 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F6 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F6 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF6 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A6, B6, C6]
with gr.Row():
with gr.Column():
@ -111,7 +117,8 @@ def on_ui_tabs():
O7 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M7 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S7 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F7 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F7 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF7 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A7, B7, C7]
with gr.Row():
with gr.Column():
@ -123,7 +130,8 @@ def on_ui_tabs():
O8 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M8 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S8 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F8 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F8 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF8 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A8, B8, C8]
with gr.Row():
with gr.Column():
@ -135,7 +143,8 @@ def on_ui_tabs():
O9 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M9 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S9 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F9 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F9 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF9 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A9, B9, C9]
with gr.Row():
with gr.Column():
@ -147,7 +156,8 @@ def on_ui_tabs():
O10 = gr.Textbox(label=f"(O{_line_number}) Output ckpt Name", interactive=True)
M10 = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label=f'(M{_line_number}) Multiplier', value=0.5, interactive=True)
S10 = gr.Dropdown(choices=choise_of_method, interactive=True, value=choise_of_method[0], label=f"(S{_line_number}) Inter-Method")
F10 = gr.Checkbox(value=False, interactive=True, label="Save as float16")
F10 = gr.Checkbox(value=False, interactive=True, label=f"(F{_line_number}) Save as float16")
CF10 = gr.Radio(choices=["ckpt", "safetensors"], interactive=True, value="ckpt", label=f"(CF{_line_number}) Checkpoint format")
_checkpoint_listener += [A10, B10, C10]
#
@ -155,45 +165,45 @@ def on_ui_tabs():
#
def on_clear_settings():
_ret = [
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value="")
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt"),
gr.update(value=""),gr.update(value=""),gr.update(value=""),gr.update(value=0.5),gr.update(value=S_WS),gr.update(value=False),gr.update(value=""),gr.update(value="ckpt")
]
return _ret
btn_clear_merge_settings.click(
fn=on_clear_settings,
inputs=[],
outputs=[
A1, B1, C1, M1, S1, F1, O1, \
A2, B2, C2, M2, S2, F2, O2, \
A3, B3, C3, M3, S3, F3, O3, \
A4, B4, C4, M4, S4, F4, O4, \
A5, B5, C5, M5, S5, F5, O5, \
A6, B6, C6, M6, S6, F6, O6, \
A7, B7, C7, M7, S7, F7, O7, \
A8, B8, C8, M8, S8, F8, O8, \
A9, B9, C9, M9, S9, F9, O9, \
A10,B10,C10,M10,S10,F10,O10
A1, B1, C1, M1, S1, F1, O1, CF1, \
A2, B2, C2, M2, S2, F2, O2, CF2, \
A3, B3, C3, M3, S3, F3, O3, CF3, \
A4, B4, C4, M4, S4, F4, O4, CF4, \
A5, B5, C5, M5, S5, F5, O5, CF5, \
A6, B6, C6, M6, S6, F6, O6, CF6, \
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
]
)
return \
btn_run_merge, btn_reload_checkpoints, btn_send_to_recipe, submit_result, btn_clear_merge_settings, \
A1, B1, C1, M1, S1, F1, O1, \
A2, B2, C2, M2, S2, F2, O2, \
A3, B3, C3, M3, S3, F3, O3, \
A4, B4, C4, M4, S4, F4, O4, \
A5, B5, C5, M5, S5, F5, O5, \
A6, B6, C6, M6, S6, F6, O6, \
A7, B7, C7, M7, S7, F7, O7, \
A8, B8, C8, M8, S8, F8, O8, \
A9, B9, C9, M9, S9, F9, O9, \
A10,B10,C10,M10,S10,F10,O10,\
A1, B1, C1, M1, S1, F1, O1, CF1, \
A2, B2, C2, M2, S2, F2, O2, CF2, \
A3, B3, C3, M3, S3, F3, O3, CF3, \
A4, B4, C4, M4, S4, F4, O4, CF4, \
A5, B5, C5, M5, S5, F5, O5, CF5, \
A6, B6, C6, M6, S6, F6, O6, CF6, \
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,\
_checkpoint_listener

View File

@ -9,9 +9,9 @@ default_recipe = " \
SD-WD Fix = __SD15__ + __WD13__, 0.05 \n\
SW-F = __O1__ + __F222__ + __SD15__, 1.0 \n\
r34gg = __r34__ + __gg__, 0.5 \n\
r34gg-wd = __O3__ + __WD13__, 0.5 \n\
gwf = __O4__ + __F222__, 0.5 \n\
test06 = __O2__ + __O5__, 0.3\
r34gg-wd = __O3__ + __WD13__, 0.5, fp16\n\
gwf = __O4__ + __F222__, 0.5, safetensors\n\
test06 = __O2__ + __O5__, 0.3, fp16, safetensors\
"
choice_of_models = [ x.title for x in sd_models.checkpoints_list.values()]