From b311e23c0e69bf9785294d145503db089ba10014 Mon Sep 17 00:00:00 2001 From: gaclove Date: Thu, 25 Sep 2025 12:32:12 +0000 Subject: [PATCH] refactor: improve class attribute handling in LightX2VModularInference for better configuration management; streamline access to current runner and config hash --- nodes.py | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/nodes.py b/nodes.py index b2e4ba3..0011f83 100644 --- a/nodes.py +++ b/nodes.py @@ -703,6 +703,11 @@ class LightX2VModularInference: _current_config_hash = None def __init__(self): + if not hasattr(self.__class__, '_current_runner'): + self.__class__._current_runner = None + if not hasattr(self.__class__, '_current_config_hash'): + self.__class__._current_config_hash = None + self.config_builder = ConfigBuilder() self.temp_manager = TempFileManager() self.image_handler = ImageFileHandler() @@ -821,14 +826,19 @@ class LightX2VModularInference: logging.info("lightx2v config: " + json.dumps(config, indent=2, ensure_ascii=False)) config_hash = self._get_config_hash(config) + + # 安全地访问类属性 + current_runner = getattr(self.__class__, '_current_runner', None) + current_config_hash = getattr(self.__class__, '_current_config_hash', None) + needs_reinit = ( - self.__class__._current_runner is None or self.__class__._current_config_hash != config_hash or getattr(config, "lazy_load", False) + current_runner is None or current_config_hash != config_hash or getattr(config, "lazy_load", False) ) - logging.info(f"Needs reinit: {needs_reinit}, old config hash: {self.__class__._current_config_hash}, new config hash: {config_hash}") + logging.info(f"Needs reinit: {needs_reinit}, old config hash: {current_config_hash}, new config hash: {config_hash}") if needs_reinit: - if self.__class__._current_runner is not None: - # self.__class__._current_runner.end_run() + if current_runner is not None: + # current_runner.end_run() del self.__class__._current_runner torch.cuda.empty_cache() gc.collect() @@ -836,25 +846,29 @@ class LightX2VModularInference: self.__class__._current_runner = init_runner(config) self.__class__._current_config_hash = config_hash else: - if hasattr(self.__class__._current_runner, "config"): - self.__class__._current_runner.config = config - self.__class__._current_runner.model.config = config - self.__class__._current_runner.model.scheduler.config = config + if hasattr(current_runner, "config"): + current_runner.config = config + current_runner.model.config = config + current_runner.model.scheduler.config = config progress = ProgressBar(100) def update_progress(current_step, _total): progress.update_absolute(current_step) - if hasattr(self.__class__._current_runner, "set_progress_callback"): - self.__class__._current_runner.set_progress_callback(update_progress) + # 重新获取当前runner,因为可能在reinit过程中发生了变化 + current_runner = getattr(self.__class__, '_current_runner', None) + + if hasattr(current_runner, "set_progress_callback"): + current_runner.set_progress_callback(update_progress) - result_dict = self.__class__._current_runner.run_pipeline() + result_dict = current_runner.run_pipeline() images = result_dict.get("video", None) audio = result_dict.get("audio", None) if getattr(config, "unload_after_inference", False): - del self.__class__._current_runner + if hasattr(self.__class__, '_current_runner'): + del self.__class__._current_runner self.__class__._current_runner = None self.__class__._current_config_hash = None