Spaces:
Running on Zero
Running on Zero
| from __future__ import annotations | |
| import importlib.util | |
| import sys | |
| import types | |
| from pathlib import Path | |
| _WRAPPER_ALIAS = "ComfyUI_WanVideoWrapper" | |
| _WRAPPER_MODULE = None | |
| def _repo_root() -> Path: | |
| return Path(__file__).resolve().parent.parent | |
| def _wrapper_dir() -> Path: | |
| return _repo_root() / "core_anim" / "third_party" / "ComfyUI-WanVideoWrapper" | |
| def _comfy_runtime_dir() -> Path: | |
| return _repo_root() / "core_anim" / "third_party" / "comfy_runtime" | |
| def _install_server_stub() -> None: | |
| if "server" in sys.modules: | |
| return | |
| server = types.ModuleType("server") | |
| class _BinaryEventTypes: | |
| PREVIEW_IMAGE = 1 | |
| class _DummyPromptServer: | |
| instance = None | |
| def __init__(self) -> None: | |
| self.last_node_id = "loop_runner" | |
| self.client_id = None | |
| def send_sync(self, *args, **kwargs): | |
| return None | |
| def send_progress_text(self, *args, **kwargs): | |
| return None | |
| _DummyPromptServer.instance = _DummyPromptServer() | |
| server.PromptServer = _DummyPromptServer | |
| server.BinaryEventTypes = _BinaryEventTypes | |
| sys.modules["server"] = server | |
| def load_wrapper_module(): | |
| global _WRAPPER_MODULE | |
| if _WRAPPER_MODULE is not None: | |
| return _WRAPPER_MODULE | |
| wrapper_dir = _wrapper_dir() | |
| comfy_runtime_dir = _comfy_runtime_dir() | |
| if not wrapper_dir.exists(): | |
| raise FileNotFoundError(f"WanVideoWrapper non trovato: {wrapper_dir}") | |
| if not comfy_runtime_dir.exists(): | |
| raise FileNotFoundError(f"comfy_runtime non trovato: {comfy_runtime_dir}") | |
| if str(comfy_runtime_dir) not in sys.path: | |
| sys.path.insert(0, str(comfy_runtime_dir)) | |
| _install_server_stub() | |
| spec = importlib.util.spec_from_file_location( | |
| _WRAPPER_ALIAS, | |
| wrapper_dir / "__init__.py", | |
| submodule_search_locations=[str(wrapper_dir)], | |
| ) | |
| if spec is None or spec.loader is None: | |
| raise ImportError(f"Impossibile creare spec per {_WRAPPER_ALIAS}") | |
| module = importlib.util.module_from_spec(spec) | |
| sys.modules[_WRAPPER_ALIAS] = module | |
| spec.loader.exec_module(module) | |
| _WRAPPER_MODULE = module | |
| return module | |
| def get_wrapper_node_class(name: str): | |
| module = load_wrapper_module() | |
| try: | |
| return module.NODE_CLASS_MAPPINGS[name] | |
| except KeyError as exc: | |
| raise KeyError(f"Nodo WanVideoWrapper non trovato: {name}") from exc | |