From 7da714c686e066868efc2aa7e43e863d861c0dfd Mon Sep 17 00:00:00 2001 From: "jason.mei" Date: Mon, 29 Dec 2025 18:36:16 +0800 Subject: [PATCH] refactor(vidu,wan_ai): add fallback VideoFromFile wrapper for import compatibility - Add third-level fallback import handler for VideoFromFile class across all video modules - Implement simple VideoFromFile wrapper class with default dimensions (1280x720) when imports fail - Support video_io objects with getvalue() method for BytesIO compatibility - Add clarifying comments for each import path (newer, older, and fallback) - Apply consistent fallback pattern to vidu_extend, vidu_i2v, vidu_ref2v, vidu_startend2v, vidu_t2v, wan_ai_i2v, and wan_ai_t2v modules - Improve robustness for different ComfyUI versions and installation configurations --- py/vidu_extend.py | 12 ++++++++++++ py/vidu_i2v.py | 12 ++++++++++++ py/vidu_ref2v.py | 12 ++++++++++++ py/vidu_startend2v.py | 12 ++++++++++++ py/vidu_t2v.py | 12 ++++++++++++ py/wan_ai_i2v.py | 12 ++++++++++++ py/wan_ai_t2v.py | 12 ++++++++++++ 7 files changed, 84 insertions(+) diff --git a/py/vidu_extend.py b/py/vidu_extend.py index dca950c..29d37bc 100644 --- a/py/vidu_extend.py +++ b/py/vidu_extend.py @@ -9,10 +9,22 @@ from .modelverse_api.client import ModelverseClient from .modelverse_api.utils import image_to_base64 from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height MODELS = ["viduq2-pro", "viduq2-turbo"] RESOLUTIONS = ["540p", "720p", "1080p"] diff --git a/py/vidu_i2v.py b/py/vidu_i2v.py index aa84380..9663bd8 100644 --- a/py/vidu_i2v.py +++ b/py/vidu_i2v.py @@ -9,10 +9,22 @@ from .modelverse_api.client import ModelverseClient from .modelverse_api.utils import image_to_base64 from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height MODELS = ["viduq2-pro", "viduq2-turbo"] diff --git a/py/vidu_ref2v.py b/py/vidu_ref2v.py index 5dd56ec..25a186f 100644 --- a/py/vidu_ref2v.py +++ b/py/vidu_ref2v.py @@ -10,10 +10,22 @@ from .modelverse_api.client import ModelverseClient from .modelverse_api.utils import image_to_base64 from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height ASPECT_RATIOS = ["16:9", "9:16", "3:4", "4:3", "1:1"] RESOLUTIONS = ["540p", "720p", "1080p"] diff --git a/py/vidu_startend2v.py b/py/vidu_startend2v.py index 7447b1a..142c5a4 100644 --- a/py/vidu_startend2v.py +++ b/py/vidu_startend2v.py @@ -9,10 +9,22 @@ from .modelverse_api.client import ModelverseClient from .modelverse_api.utils import image_to_base64 from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height MODELS = ["viduq2-pro", "viduq2-turbo"] RESOLUTIONS = ["540p", "720p", "1080p"] diff --git a/py/vidu_t2v.py b/py/vidu_t2v.py index fae67c3..72211b5 100644 --- a/py/vidu_t2v.py +++ b/py/vidu_t2v.py @@ -8,10 +8,22 @@ import io from .modelverse_api.client import ModelverseClient from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height ASPECT_RATIOS = ["16:9", "9:16", "3:4", "4:3", "1:1"] RESOLUTIONS = ["540p", "720p", "1080p"] diff --git a/py/wan_ai_i2v.py b/py/wan_ai_i2v.py index 1526296..f55feae 100644 --- a/py/wan_ai_i2v.py +++ b/py/wan_ai_i2v.py @@ -5,10 +5,22 @@ from .modelverse_api.client import ModelverseClient from .modelverse_api.utils import image_to_base64 from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height class Modelverse_WanAII2V: def __init__(self): diff --git a/py/wan_ai_t2v.py b/py/wan_ai_t2v.py index 1dc35b1..4aaf6d8 100644 --- a/py/wan_ai_t2v.py +++ b/py/wan_ai_t2v.py @@ -4,10 +4,22 @@ import io from .modelverse_api.client import ModelverseClient from comfy.comfy_types.node_typing import IO try: + # Try the newer import path first from comfy_extras.nodes_video import VideoFromFile except ImportError: try: + # Fallback to older import path from comfy.model_management import VideoFromFile + except ImportError: + # Final fallback - create a simple wrapper + class VideoFromFile: + def __init__(self, video_io): + self.video_io = video_io + self.video_data = video_io.getvalue() if hasattr(video_io, 'getvalue') else video_io + + def get_dimensions(self): + # Return default dimensions if we can't determine them + return (1280, 720) # width, height class Modelverse_WanAIT2V: def __init__(self):