170 lines
5.4 KiB
Python
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",
|
|
}
|