Add checkbox for 'Embed model merge metadata' function

- #18
master
bbc_mc 2023-05-10 21:15:00 +09:00
parent f59c60fd5c
commit c4eeb1607b
6 changed files with 44 additions and 41 deletions

View File

@ -13,8 +13,6 @@
- **Multiple step marge** support ( up to 10 step)
- Save and Load your merging combination as `Recipe`, which is simple text.
## Recent Update
2022/12/28
@ -23,8 +21,6 @@
- you can find your logfile on `(extension's dir)/csv/history.tsv`
## How to Install
- Go to `Extensions` tab on your web UI
@ -33,8 +29,6 @@
- Install
## Multi-Marge
![](misc/ss01.png)
@ -59,10 +53,11 @@
- bad example) in second lane, `modelA(A2): __O3__`
| ![](misc/ss01_ABC.png) | Select checkpoint by Dropdown. You can select Output checkpoint of each lane by variables like `__O1__`. |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](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. |
| ![](misc/ss01_ABC.png) | Select checkpoint by Dropdown. You can select Output checkpoint of each lane by variables like `__O1__`. |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](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. |
| ![](misc/ss01_meta.png) | Add information of used models as metadata of 'safetensors'. |
- "Checkpoint format"

BIN
misc/ss01_meta.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -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, chk_skip_merge_if_exists, radio_config_source \
_checkpoint_listener, chk_skip_merge_if_exists, radio_config_source, chk_save_metadata \
= ui_merge.on_ui_tabs()
# UI:Recipe
@ -119,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, radio_config_source
chk_skip_merge_if_exists, radio_config_source, chk_save_metadata
):
merge_ope = MergeOperation()
merge_ope.add_merge(1, A1, B1, C1, M1, S1, F1, O1, CF1)
@ -140,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, config_source=radio_config_source)
_ret_all = merge_ope.run_merge(skip_merge_if_exists=chk_skip_merge_if_exists, config_source=radio_config_source, save_metadata=chk_save_metadata)
print(f"All Multi-Merge process finished. {len(_ret_all)} files.")
for _ret in _ret_all:
@ -166,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, radio_config_source
chk_skip_merge_if_exists, radio_config_source, chk_save_metadata
],
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, config_source=0):
def run_merge(self, skip_merge_if_exists=False, config_source=0, save_metadata=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, skip_merge_if_exists, config_source)
_ret = _recipe.run_merge(_index, skip_merge_if_exists, config_source, save_metadata)
_ret_all.append(_ret)
# update vars
_vars.update(_recipe.get_vars())

View File

@ -71,7 +71,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, config_source):
def run_merge(self, index, skip_merge_if_exists, config_source, save_metadata):
sd_models.list_models()
if skip_merge_if_exists:
_filename = self.O + "." + self.CF if self.O != "" else self._estimate_ckpt_name()
@ -111,47 +111,54 @@ class MergeRecipe():
print(f" CF: {self.CF}")
id_task = None
discard_weights = ""
bake_in_vae = "None"
try:
discard_weights = ""
bake_in_vae = "None"
# backward compatibility for change of run_model_merger
# 2023/01/22
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/112416d04171e4bee673f0adc9bd3aeba87ec71a
# def run_modelmerger(id_task, primary_model_name, secondary_model_name, tertiary_model_name, interp_method, multiplier, save_as_half, custom_name, checkpoint_format, config_source, bake_in_vae, discard_weights):
results = extras.run_modelmerger(id_task, self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source, bake_in_vae, discard_weights)
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/d132481058f8a827cd407f2121f128a2bb862f7a
# def run_modelmerger(id_task, primary_model_name, secondary_model_name, tertiary_model_name, interp_method, multiplier, save_as_half, custom_name, checkpoint_format, config_source, bake_in_vae, discard_weights, save_metadata):
results = extras.run_modelmerger(id_task, self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source, bake_in_vae, discard_weights, save_metadata)
except TypeError as te:
print(te)
print("Try to use old 'run_modelmerger' params. ")
try:
# backward compatibility for change of run_model_merger
# 2023/01/19
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/0f5dbfffd0b7202a48e404d8e74b5cc9a3e5b135
# run_modelmerger(id_task, primary_model_name, secondary_model_name, tertiary_model_name, interp_method, multiplier, save_as_half, custom_name, checkpoint_format, config_source, bake_in_vae
results = extras.run_modelmerger(id_task, self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source, bake_in_vae)
# 2023/01/22
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/112416d04171e4bee673f0adc9bd3aeba87ec71a
# def run_modelmerger(id_task, primary_model_name, secondary_model_name, tertiary_model_name, interp_method, multiplier, save_as_half, custom_name, checkpoint_format, config_source, bake_in_vae, discard_weights):
results = extras.run_modelmerger(id_task, self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source, bake_in_vae, discard_weights)
except TypeError as te:
print(te)
print("Try to use old 'run_modelmerger' params.")
print("Try to use old 'run_modelmerger' params. ")
try:
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source)
# backward compatibility for change of run_model_merger
# 2023/01/19
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/0f5dbfffd0b7202a48e404d8e74b5cc9a3e5b135
# run_modelmerger(id_task, primary_model_name, secondary_model_name, tertiary_model_name, interp_method, multiplier, save_as_half, custom_name, checkpoint_format, config_source, bake_in_vae
results = extras.run_modelmerger(id_task, self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source, bake_in_vae)
except TypeError as te:
# backward compatibility for change of run_modelmerger
# 2023/01/11
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/954091697fce7a1b7997d5f3d73551f793f6bebc
print(te)
print("Try to use old 'run_modelmerger' params. 'config_source' is ignored")
print("Try to use old 'run_modelmerger' params.")
try:
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF)
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O, self.CF, config_source)
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'")
# 2023/01/11
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/954091697fce7a1b7997d5f3d73551f793f6bebc
print(te)
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'")
print(te)
return ["Error <TypeError>", "Error <TypeError>"]
try:
results = extras.run_modelmerger(self.A, self.B, self.C, self.S, self.M, self.F, self.O)
except TypeError as te:
print(te)
return ["Error <TypeError>", "Error <TypeError>"]
except Exception as e:
print("Error: at recipe.run_merge: ", file=sys.stderr)
print(type(e), file=sys.stderr)

View File

@ -31,6 +31,7 @@ def on_ui_tabs():
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)
chk_save_metadata = gr.Checkbox(value=True, label="Save metadata (.safetensors only)")
with gr.Row():
with gr.Column():
@ -211,4 +212,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, radio_config_source
_checkpoint_listener, chk_skip_merge_if_exists, radio_config_source, chk_save_metadata