parent
f59c60fd5c
commit
c4eeb1607b
15
README.md
15
README.md
|
|
@ -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
|
||||
|
||||

|
||||
|
|
@ -59,10 +53,11 @@
|
|||
|
||||
- bad example) in second lane, `modelA(A2): __O3__`
|
||||
|
||||
|  | Select checkpoint by Dropdown. You can select Output checkpoint of each lane by variables like `__O1__`. |
|
||||
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|  | Multiplier digit is extended to 0.001 step. |
|
||||
|  | 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. |
|
||||
|  | Select checkpoint by Dropdown. You can select Output checkpoint of each lane by variables like `__O1__`. |
|
||||
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|  | Multiplier digit is extended to 0.001 step. |
|
||||
|  | 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. |
|
||||
|  | Add information of used models as metadata of 'safetensors'. |
|
||||
|
||||
- "Checkpoint format"
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 3.4 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, 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]
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue