From 60d88def0162a1d6f3cf185016101626191ebfb1 Mon Sep 17 00:00:00 2001 From: dxqb Date: Sun, 24 May 2026 23:12:59 +0200 Subject: [PATCH] fix: ignore submodule overrides when continuing fine-tune from backup Continuing a fine-tune from a backup only redirected the base model to the backup path, leaving submodule override fields (e.g. "Override Transformer") pointing at their configured paths. The loader then loaded the override instead of the backup's trained submodule. A backup is a complete internal model, so clear all submodule overrides when continuing a fine-tune from one. Co-Authored-By: Claude Opus 4.7 --- modules/trainer/GenericTrainer.py | 2 ++ modules/util/ModelNames.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/modules/trainer/GenericTrainer.py b/modules/trainer/GenericTrainer.py index ab4926901..c0ba2826f 100644 --- a/modules/trainer/GenericTrainer.py +++ b/modules/trainer/GenericTrainer.py @@ -107,6 +107,8 @@ def start(self): model_names.embedding.model_name = last_backup_path else: # fine-tunes model_names.base_model = last_backup_path + # drop submodule overrides so the backup is loaded in full + model_names.clear_overrides() print(f"Continuing training from backup '{last_backup_path}'...") else: diff --git a/modules/util/ModelNames.py b/modules/util/ModelNames.py index 8dec9a9bf..063841b50 100644 --- a/modules/util/ModelNames.py +++ b/modules/util/ModelNames.py @@ -41,6 +41,17 @@ def __init__( self.include_text_encoder_3 = include_text_encoder_3 self.include_text_encoder_4 = include_text_encoder_4 + # reset all base-model submodule overrides. used when continuing a + # fine-tune from a backup: the backup is a complete internal model, so + # overrides must not shadow it + def clear_overrides(self): + self.prior_model = "" + self.transformer_model = "" + self.effnet_encoder_model = "" + self.decoder_model = "" + self.text_encoder_4 = "" + self.vae_model = "" + def all_embedding(self): if self.embedding is not None: return self.additional_embeddings + [self.embedding]