diff --git a/README.md b/README.md index 9981092..fc181c5 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,15 @@ LoRAモデルをX/Y plotの値(選択対象)として使う場合は、カ ## Change History +- 15 Feb. 2023, 2023/2/15 + - Fix a bug that additional networks are applied twice when restarting UI. + - Now the cover image is not copied with ``Copy metadata`` in the metadata editor because it takes time. + - Allow additional networks to be swapped out between batches for other extensions. + - Thanks to space-nuko! + - 各ネットワークがWeb UIの再起動後に二重に適用された状態になるバグを修正しました。 + - メタデータエディタで ``Copy metadata`` ボタンでカバー画像をコピーしなくなりました(処理に時間が掛かるため)。 + - バッチごとにネットワークを切り替えられるようになりました(他の拡張からLoRAを切り替えられます)。 + - space-nuko氏に感謝します。 - 12 Feb. 2023, 2023/2/12 - __Dataset folder structure__ is shown in the metadata editor. Thanks to space-nuko! - メタデータエディタにデータセットのフォルダ構成が表示されるようになりました。space-nuko氏に感謝します。 diff --git a/scripts/additional_networks.py b/scripts/additional_networks.py index a1e5c34..a705d62 100644 --- a/scripts/additional_networks.py +++ b/scripts/additional_networks.py @@ -141,19 +141,22 @@ def set_infotext_fields(self, p, params): f"AddNet Weight B {i+1}": weight_tenc, }) - def process(self, p, *args): + def restore_networks(self, sd_model): + unet = sd_model.model.diffusion_model + text_encoder = sd_model.cond_stage_model + + if len(self.latest_networks) > 0: + print("restoring last networks") + for network, _ in self.latest_networks[::-1]: + network.restore(text_encoder, unet) + self.latest_networks.clear() + + def process_batch(self, p, *args, **kwargs): unet = p.sd_model.model.diffusion_model text_encoder = p.sd_model.cond_stage_model - def restore_networks(): - if len(self.latest_networks) > 0: - print("restoring last networks") - for network, _ in self.latest_networks[::-1]: - network.restore(text_encoder, unet) - self.latest_networks.clear() - if not args[0]: - restore_networks() + self.restore_networks(p.sd_model) return params = [] @@ -174,7 +177,7 @@ def restore_networks(): break if models_changed: - restore_networks() + self.restore_networks(p.sd_model) self.latest_params = params self.latest_model_hash = p.sd_model.sd_model_hash @@ -215,6 +218,14 @@ def restore_networks(): self.set_infotext_fields(p, self.latest_params) +def on_script_unloaded(): + if shared.sd_model: + for s in scripts.scripts_txt2img.alwayson_scripts: + if isinstance(s, Script): + s.restore_networks(shared.sd_model) + break + + def on_ui_tabs(): global addnet_paste_params with gr.Blocks(analytics_enabled=False) as additional_networks_interface: @@ -280,6 +291,7 @@ def on_infotext_pasted(infotext, params): xyz_grid_support.initialize(Script) +script_callbacks.on_script_unloaded(on_script_unloaded) script_callbacks.on_ui_tabs(on_ui_tabs) script_callbacks.on_ui_settings(on_ui_settings) script_callbacks.on_infotext_pasted(on_infotext_pasted) diff --git a/scripts/metadata_editor.py b/scripts/metadata_editor.py index 144e707..5f3e07d 100644 --- a/scripts/metadata_editor.py +++ b/scripts/metadata_editor.py @@ -164,14 +164,10 @@ def copy_metadata_to_all(module, model_path, copy_dir, same_session_only, missin } for k, v in metadata.items(): - if k.startswith("ssmd_"): + if k.startswith("ssmd_") and k != "ssmd_cover_images": updates[k] = v model_util.write_model_metadata(path, module, updates) - # if cover_image is None: - # delete_webui_model_preview_image(model_path) - # else: - # write_webui_model_preview_image(model_path, cover_image) count += 1 print(f"[MetadataEditor] Updated {count} models in directory {copy_dir}.")