Files

170 lines
5.4 KiB
Python

try:
from .highsync_wrapper.download_utils import download_or_check_models
except ImportError:
from highsync_wrapper.download_utils import download_or_check_models
DEFAULT_MODELS_DIR = "D:/ComfyUI/models/highsync"
class HighSyncDownloadModels:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"download": ("BOOLEAN", {"default": False}),
}
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("models_dir",)
FUNCTION = "run"
CATEGORY = "video/lipsync"
def run(self, download):
models_dir = download_or_check_models(
models_dir=DEFAULT_MODELS_DIR,
repo_id="saeed-5959/high_sync",
download=download,
)
return (models_dir,)
class HighSyncModelLoader:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"models_dir": ("STRING", {"default": DEFAULT_MODELS_DIR, "multiline": False}),
"weight_dtype": (["fp16", "bf16", "fp32"], {"default": "fp16"}),
}
}
RETURN_TYPES = ("HIGHSYNC_MODEL",)
RETURN_NAMES = ("highsync_model",)
FUNCTION = "load"
CATEGORY = "video/lipsync"
def load(self, models_dir, weight_dtype):
try:
from .highsync_wrapper.model_utils import load_highsync_model
except ImportError:
from highsync_wrapper.model_utils import load_highsync_model
model = load_highsync_model(models_dir=models_dir, weight_dtype=weight_dtype)
return (model,)
class HighSyncLipSync:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"highsync_model": ("HIGHSYNC_MODEL",),
"images": ("IMAGE",),
"audio": ("AUDIO",),
"input_fps": ("INT", {"default": 25, "min": 1, "max": 120, "step": 1}),
"max_frames": ("INT", {"default": 0, "min": 0, "max": 100000, "step": 1}),
}
}
RETURN_TYPES = ("IMAGE", "AUDIO", "INT", "STRING")
RETURN_NAMES = ("images", "audio", "frame_rate", "output_video_path")
FUNCTION = "run"
CATEGORY = "video/lipsync"
def run(self, highsync_model, images, audio, input_fps, max_frames):
try:
from .highsync_wrapper.runner import run_highsync
except ImportError:
from highsync_wrapper.runner import run_highsync
return run_highsync(
highsync_model=highsync_model,
images=images,
audio=audio,
input_fps=input_fps,
max_frames=max_frames,
inference_steps=None,
cfg_scale=None,
seed=42,
preprocess_chunk_frames=1500,
denoise_audio=False,
trim_audio_to_video=True,
keep_intermediate_outputs=True,
)
class HighSyncLipSyncAdvanced(HighSyncLipSync):
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"highsync_model": ("HIGHSYNC_MODEL",),
"images": ("IMAGE",),
"audio": ("AUDIO",),
"input_fps": ("INT", {"default": 25, "min": 1, "max": 120, "step": 1}),
"max_frames": ("INT", {"default": 0, "min": 0, "max": 100000, "step": 1}),
"inference_steps": ("INT", {"default": 20, "min": 1, "max": 100, "step": 1}),
"cfg_scale": ("FLOAT", {"default": 3.5, "min": 0.0, "max": 20.0, "step": 0.1}),
"seed": ("INT", {"default": 42, "min": 0, "max": 0xFFFFFFFF, "step": 1}),
"preprocess_chunk_frames": ("INT", {"default": 1500, "min": 12, "max": 10000, "step": 12}),
"denoise_audio": ("BOOLEAN", {"default": False}),
"trim_audio_to_video": ("BOOLEAN", {"default": True}),
"keep_intermediate_outputs": ("BOOLEAN", {"default": True}),
}
}
FUNCTION = "run_advanced"
CATEGORY = "video/lipsync"
def run_advanced(
self,
highsync_model,
images,
audio,
input_fps,
max_frames,
inference_steps,
cfg_scale,
seed,
preprocess_chunk_frames,
denoise_audio,
trim_audio_to_video,
keep_intermediate_outputs,
):
try:
from .highsync_wrapper.runner import run_highsync
except ImportError:
from highsync_wrapper.runner import run_highsync
return run_highsync(
highsync_model=highsync_model,
images=images,
audio=audio,
input_fps=input_fps,
max_frames=max_frames,
inference_steps=inference_steps,
cfg_scale=cfg_scale,
seed=seed,
preprocess_chunk_frames=preprocess_chunk_frames,
denoise_audio=denoise_audio,
trim_audio_to_video=trim_audio_to_video,
keep_intermediate_outputs=keep_intermediate_outputs,
)
NODE_CLASS_MAPPINGS = {
"HighSyncDownloadModels": HighSyncDownloadModels,
"HighSyncModelLoader": HighSyncModelLoader,
"HighSyncLipSync": HighSyncLipSync,
"HighSyncLipSyncAdvanced": HighSyncLipSyncAdvanced,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"HighSyncDownloadModels": "HighSync Download Models",
"HighSyncModelLoader": "HighSync Model Loader",
"HighSyncLipSync": "HighSync LipSync",
"HighSyncLipSyncAdvanced": "HighSync LipSync Advanced",
}