From d1e9f7141a170488b1bb3c159f9e5fdc4d26a74b Mon Sep 17 00:00:00 2001 From: KBRASK Date: Wed, 13 Aug 2025 16:09:35 +0800 Subject: [PATCH] first commit --- README.md | 50 + Stand-In.png | Bin 0 -> 85452 bytes Stand-In_preprocessor.py | 200 +++ requirements.txt | 4 + wanvideo_Stand-In_reference_example.json | 1785 ++++++++++++++++++++++ 5 files changed, 2039 insertions(+) create mode 100644 README.md create mode 100755 Stand-In.png create mode 100644 Stand-In_preprocessor.py create mode 100644 requirements.txt create mode 100644 wanvideo_Stand-In_reference_example.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..0de293a --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# Stand-In Official Preprocessor ComfyUI Nodes +

+ Logo + Stand-In +

+ +[![Project Page](https://img.shields.io/badge/Project_Page-www.stand--in.tech-green)](https://www.stand-in.tech) +[![Main Repo](https://img.shields.io/badge/Main_Repository-Stand--In-blue)](https://github.com/WeChatCV/Stand-In) + +> 🧩 Only images processed with this official preprocessor can fully unleash the power of **Stand-In**. + +--- + +This repository provides a **temporary** ComfyUI node implementation of the Stand-In preprocessor, aiming to correct the misunderstanding of Stand-In’s preprocessing logic in [ComfyUI-WanVideoWrapper](https://github.com/kijai/ComfyUI-WanVideoWrapper). + +We **strongly recommend** using the workflows provided in this repo to ensure proper compatibility and the best identity-preserving performance. + +> **Note**: This is a **temporary node**. Features such as KV cache support and advanced attention mechanisms are **not yet implemented**. We are actively developing the **official full-featured ComfyUI nodes** for Stand-In. + + +## ⚠️ Important Usage Tips + +> **Prompt Writing Tip:** +> If you do **not** wish to alter the subject's facial features, simply use **"a man"** or **"a woman"** without adding extra descriptions of their appearance. +> Prompts support both **Chinese** and **English** input. +> The prompt is intended for generating **frontal, medium-to-close-up videos**. + +> **Input Image Recommendation:** +> For best results, use a **high-resolution frontal face image**. +> There are **no restrictions** on resolution or file extension, as our **built-in preprocessing pipeline** will handle them automatically. + +--- +We are also actively developing a more flexible version of Stand-In. + +--- + +## 🌐 Project Links + +- 📘 **Main Repository**: [WeChatCV/Stand-In](https://github.com/WeChatCV/Stand-In) +- 🏠 **Project Page**: [www.stand-in.tech](https://www.stand-in.tech) + +--- + +## 🚀 Installation +Clone this repository into the `custom_nodes` directory of your ComfyUI installation: + +```bash +git clone https://github.com/WeChatCV/Stand-In_Preprocessor_ComfyUI.git +cd Stand-In_Preprocessor_ComfyUI +pip install -r requirements.txt diff --git a/Stand-In.png b/Stand-In.png new file mode 100755 index 0000000000000000000000000000000000000000..735741ab4d2f90177011f317ffc78e47dfcf259b GIT binary patch literal 85452 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%0D;TLUvm~8a*8?IJB}brov|6vn0=~ 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 literal 0 HcmV?d00001 diff --git a/Stand-In_preprocessor.py b/Stand-In_preprocessor.py new file mode 100644 index 0000000..c329c37 --- /dev/null +++ b/Stand-In_preprocessor.py @@ -0,0 +1,200 @@ +import os +import cv2 +import requests +import torch +import numpy as np +import PIL.Image +import PIL.ImageOps +from insightface.app import FaceAnalysis +from facexlib.parsing import init_parsing_model +from torchvision.transforms.functional import normalize +from typing import Union, Optional +import folder_paths +from huggingface_hub import snapshot_download + +LOADED_PROCESSORS = {} + +def set_extra_config_model_path(extra_config_models_dir_key, models_dir_name: str): + models_dir_default = os.path.join(folder_paths.models_dir, models_dir_name) + if extra_config_models_dir_key not in folder_paths.folder_names_and_paths: + folder_paths.folder_names_and_paths[extra_config_models_dir_key] = ( + [os.path.join(folder_paths.models_dir, models_dir_name)], + folder_paths.supported_pt_extensions, + ) + else: + if not os.path.exists(models_dir_default): + os.makedirs(models_dir_default, exist_ok=True) + folder_paths.add_model_folder_path(extra_config_models_dir_key, models_dir_default, is_default=True) + +set_extra_config_model_path("insightface", "insightface") + +def _img2tensor(img: np.ndarray, bgr2rgb: bool = True) -> torch.Tensor: + if bgr2rgb: + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + img = img.astype(np.float32) / 255.0 + img = np.transpose(img, (2, 0, 1)) + return torch.from_numpy(img) + +def _pad_to_square(img: np.ndarray, pad_color: int = 255) -> np.ndarray: + h, w, _ = img.shape + if h == w: + return img + + if h > w: + pad_size = (h - w) // 2 + padded_img = cv2.copyMakeBorder( + img, 0, 0, pad_size, h - w - pad_size, cv2.BORDER_CONSTANT, value=[pad_color] * 3, + ) + else: + pad_size = (w - h) // 2 + padded_img = cv2.copyMakeBorder( + img, pad_size, w - h - pad_size, 0, 0, cv2.BORDER_CONSTANT, value=[pad_color] * 3, + ) + return padded_img + +def tensor_to_cv2_img(tensor: torch.Tensor) -> np.ndarray: + img_np = tensor.squeeze(0).cpu().numpy() + img_np = (img_np * 255).astype(np.uint8) + img_bgr = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR) + return img_bgr + +def cv2_img_to_tensor(img: np.ndarray) -> torch.Tensor: + img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + img_rgb = img_rgb.astype(np.float32) / 255.0 + return torch.from_numpy(img_rgb).unsqueeze(0) + + +class FaceProcessorLoader: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "antelopev2_path": ("STRING", {"default": "models/insightface"}) + } + } + + RETURN_TYPES = ("FACE_PROCESSOR",) + RETURN_NAMES = ("face_processor",) + FUNCTION = "load_processor" + CATEGORY = "Stand-In" + + def load_processor(self, antelopev2_path="models/insightface"): + if "face_processor" in LOADED_PROCESSORS: + print("Reusing cached FaceProcessor models.") + return (LOADED_PROCESSORS["face_processor"],) + antelopev2_path = folder_paths.get_folder_paths("insightface")[0] + print("Initializing FaceProcessor models...") + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + providers = ["CUDAExecutionProvider"] if device.type == "cuda" else ["CPUExecutionProvider"] + + if not os.path.exists(antelopev2_path): + os.makedirs(antelopev2_path) + print(f"Created insightface model directory at: {antelopev2_path}") + try: + print("Attempting to load FaceAnalysis model from local files...") + app = FaceAnalysis(name="antelopev2", root=antelopev2_path, providers=providers) + except Exception as e: + print(f"Failed to load local FaceAnalysis model: {e}") + if snapshot_download is None: + raise ImportError("huggingface_hub is not installed. Please install it with 'pip install huggingface_hub' to enable automatic model downloading.") from e + + print("Attempting to download model from Hugging Face...") + download_target_path = os.path.join(antelopev2_path, "models", "antelopev2") + snapshot_download( + repo_id="DIAMONIK7777/antelopev2", + local_dir=download_target_path, + ) + print("Model downloaded. Retrying to load FaceAnalysis model...") + app = FaceAnalysis(name="antelopev2", root=antelopev2_path, providers=providers) + + app.prepare(ctx_id=0, det_size=(640, 640)) + + parsing_model = init_parsing_model(model_name="bisenet", device=device) + parsing_model.eval() + + processor_tuple = (app, parsing_model, device) + LOADED_PROCESSORS["face_processor"] = processor_tuple + + print("FaceProcessor models initialized and cached successfully.") + + return (processor_tuple,) + + + +class ApplyFaceProcessor: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "face_processor": ("FACE_PROCESSOR",), + "image": ("IMAGE",), + "resize_to": ("INT", {"default": 512, "min": 64, "max": 2048, "step": 64}), + "border_thresh": ("INT", {"default": 10, "min": 0, "max": 100, "step": 1}), + "face_crop_scale": ("FLOAT", {"default": 1.5, "min": 1.0, "max": 3.0, "step": 0.1}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "apply_processing" + CATEGORY = "FaceUtils" + + def apply_processing(self, face_processor, image, resize_to, border_thresh, face_crop_scale): + app, parsing_model, device = face_processor + + frame = tensor_to_cv2_img(image) + + faces = app.get(frame) + h, w, _ = frame.shape + image_to_process = None + + if not faces: + print("[Warning] No face detected. Using the whole image, padded to square.") + image_to_process = _pad_to_square(frame, pad_color=255) + else: + largest_face = max(faces, key=lambda f: (f.bbox[2] - f.bbox[0]) * (f.bbox[3] - f.bbox[1])) + x1, y1, x2, y2 = map(int, largest_face.bbox) + + is_close_to_border = (x1 <= border_thresh and y1 <= border_thresh and + x2 >= w - border_thresh and y2 >= h - border_thresh) + + if is_close_to_border: + print("[Info] Face is close to border, padding original image to square.") + image_to_process = _pad_to_square(frame, pad_color=255) + else: + cx, cy = (x1 + x2) // 2, (y1 + y2) // 2 + side = int(max(x2 - x1, y2 - y1) * face_crop_scale) + half = side // 2 + + left, top = max(cx - half, 0), max(cy - half, 0) + right, bottom = min(cx + half, w), min(cy + half, h) + + cropped_face = frame[top:bottom, left:right] + image_to_process = _pad_to_square(cropped_face, pad_color=255) + + image_resized = cv2.resize(image_to_process, (resize_to, resize_to), interpolation=cv2.INTER_AREA) + + face_tensor = _img2tensor(image_resized, bgr2rgb=True).unsqueeze(0).to(device) + with torch.no_grad(): + normalized_face = normalize(face_tensor, [0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) + parsing_out = parsing_model(normalized_face)[0] + parsing_mask = parsing_out.argmax(dim=1, keepdim=True) + + mask = (parsing_mask.squeeze().cpu().numpy() == 0).astype(np.uint8) + white_background = np.ones_like(image_resized, dtype=np.uint8) * 255 + mask_3channel = cv2.cvtColor(mask * 255, cv2.COLOR_GRAY2BGR) + result_img_bgr = np.where(mask_3channel == 255, white_background, image_resized) + + result_tensor = cv2_img_to_tensor(result_img_bgr) + + return (result_tensor,) + + +NODE_CLASS_MAPPINGS = { + "FaceProcessorLoader": FaceProcessorLoader, + "ApplyFaceProcessor": ApplyFaceProcessor +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "FaceProcessorLoader": "Stand-In Processor Loader", + "ApplyFaceProcessor": "Apply Stand-In Processor" +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5c7088d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +insightface==0.7.3 +huggingface_hub==0.31.1 +facexlib==0.3.0 +onnxruntime-gpu==1.22.0 \ No newline at end of file diff --git a/wanvideo_Stand-In_reference_example.json b/wanvideo_Stand-In_reference_example.json new file mode 100644 index 0000000..e995d73 --- /dev/null +++ b/wanvideo_Stand-In_reference_example.json @@ -0,0 +1,1785 @@ +{ + "id": "206247b6-9fec-4ed2-8927-e4f388c674d4", + "revision": 0, + "last_node_id": 129, + "last_link_id": 229, + "nodes": [ + { + "id": 50, + "type": "CLIPTextEncode", + "pos": [ + 493.1703796386719, + 1356.8651123046875 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 18, + "mode": 2, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 53 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 55 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.26", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + ] + }, + { + "id": 49, + "type": "CLIPTextEncode", + "pos": [ + 493.1703796386719, + 1106.8651123046875 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 17, + "mode": 2, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 52 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 54 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.26", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "high quality nature video featuring a red panda balancing on a bamboo stem while a bird lands on it's head, on the background there is a waterfall" + ] + }, + { + "id": 36, + "type": "Note", + "pos": [ + 160, + -1010 + ], + "size": [ + 374.3061828613281, + 171.9547576904297 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "fp8_fast seems to cause huge quality degradation\n\nfp_16_fast enables \"Full FP16 Accmumulation in FP16 GEMMs\" feature available in the very latest pytorch nightly, this is around 20% speed boost. \n\nSageattn if you have it installed can be used for almost double inference speed" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 33, + "type": "Note", + "pos": [ + 170, + -1150 + ], + "size": [ + 359.0753479003906, + 88 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Models:\nhttps://huggingface.co/Kijai/WanVideo_comfy/tree/main" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 51, + "type": "Note", + "pos": [ + 163.1707763671875, + 936.8648071289062 + ], + "size": [ + 253.16725158691406, + 88 + ], + "flags": {}, + "order": 2, + "mode": 2, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "You can also use native ComfyUI text encoding with these nodes instead of the original, the models are node specific and can't otherwise be mixed." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 48, + "type": "CLIPLoader", + "pos": [ + 133.1708221435547, + 1106.8651123046875 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 3, + "mode": 2, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 52, + 53 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.26", + "Node name for S&R": "CLIPLoader" + }, + "widgets_values": [ + "t5\\t5xxl_fp8_e4m3fn_scaled.safetensors", + "wan", + "default" + ] + }, + { + "id": 70, + "type": "WanVideoSetBlockSwap", + "pos": [ + 823.8463134765625, + -766.5842895507812 + ], + "size": [ + 201.76815795898438, + 46 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "link": 90 + }, + { + "name": "block_swap_args", + "shape": 7, + "type": "BLOCKSWAPARGS", + "link": 92 + } + ], + "outputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "links": [ + 107 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "5406a72f62adf4a31a8a0a0e4923cc5288399652", + "Node name for S&R": "WanVideoSetBlockSwap" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 27, + "type": "WanVideoSampler", + "pos": [ + 1434.9656982421875, + -536.9714965820312 + ], + "size": [ + 315, + 873.39453125 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "link": 108 + }, + { + "name": "image_embeds", + "type": "WANVIDIMAGE_EMBEDS", + "link": 172 + }, + { + "name": "text_embeds", + "shape": 7, + "type": "WANVIDEOTEXTEMBEDS", + "link": 30 + }, + { + "name": "samples", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "feta_args", + "shape": 7, + "type": "FETAARGS", + "link": null + }, + { + "name": "context_options", + "shape": 7, + "type": "WANVIDCONTEXT", + "link": null + }, + { + "name": "cache_args", + "shape": 7, + "type": "CACHEARGS", + "link": null + }, + { + "name": "flowedit_args", + "shape": 7, + "type": "FLOWEDITARGS", + "link": null + }, + { + "name": "slg_args", + "shape": 7, + "type": "SLGARGS", + "link": null + }, + { + "name": "loop_args", + "shape": 7, + "type": "LOOPARGS", + "link": null + }, + { + "name": "experimental_args", + "shape": 7, + "type": "EXPERIMENTALARGS", + "link": null + }, + { + "name": "sigmas", + "shape": 7, + "type": "SIGMAS", + "link": null + }, + { + "name": "unianimate_poses", + "shape": 7, + "type": "UNIANIMATE_POSE", + "link": null + }, + { + "name": "fantasytalking_embeds", + "shape": 7, + "type": "FANTASYTALKING_EMBEDS", + "link": null + }, + { + "name": "uni3c_embeds", + "shape": 7, + "type": "UNI3C_EMBEDS", + "link": null + }, + { + "name": "multitalk_embeds", + "shape": 7, + "type": "MULTITALK_EMBEDS", + "link": null + }, + { + "name": "freeinit_args", + "shape": 7, + "type": "FREEINITARGS", + "link": null + } + ], + "outputs": [ + { + "name": "samples", + "type": "LATENT", + "slot_index": 0, + "links": [ + 33 + ] + }, + { + "name": "denoised_samples", + "type": "LATENT", + "links": null + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoSampler" + }, + "widgets_values": [ + 4, + 1, + 5, + 44, + "fixed", + true, + "dpm++_sde", + 0, + 1, + "", + "comfy", + 0, + -1, + false + ] + }, + { + "id": 35, + "type": "WanVideoTorchCompileSettings", + "pos": [ + -276.8500671386719, + -1050.6326904296875 + ], + "size": [ + 390.5999755859375, + 202 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "torch_compile_args", + "type": "WANCOMPILEARGS", + "slot_index": 0, + "links": [ + 211 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoTorchCompileSettings" + }, + "widgets_values": [ + "inductor", + false, + "default", + false, + 64, + true, + 128 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 28, + "type": "WanVideoDecode", + "pos": [ + 1446.94677734375, + -808.8124389648438 + ], + "size": [ + 315, + 198 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "WANVAE", + "link": 43 + }, + { + "name": "samples", + "type": "LATENT", + "link": 33 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 218 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoDecode" + }, + "widgets_values": [ + false, + 272, + 272, + 144, + 128, + "default" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 39, + "type": "WanVideoBlockSwap", + "pos": [ + 709.6087646484375, + -658.9224853515625 + ], + "size": [ + 315, + 202 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "block_swap_args", + "type": "BLOCKSWAPARGS", + "slot_index": 0, + "links": [ + 92 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoBlockSwap" + }, + "widgets_values": [ + 15, + false, + false, + true, + 0, + 1, + false + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 42, + "type": "Note", + "pos": [ + 684.2587890625, + -1059.630615234375 + ], + "size": [ + 325.1150207519531, + 196.76773071289062 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Adjust the blocks to swap based on your VRAM, this is a tradeoff between speed and memory usage.\n\nAlternatively there's option to use VRAM management introduced in DiffSynt-Studios. This is usually slower, but saves even more VRAM compared to BlockSwap\n\nFurther VRAM savings are from torch.compile or alternatively using the chunked rope option in the WanVideoSampler -node" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 79, + "type": "WanVideoSetLoRAs", + "pos": [ + 1133.248291015625, + -698.7440795898438 + ], + "size": [ + 239.93698120117188, + 46 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "link": 107 + }, + { + "name": "lora", + "shape": 7, + "type": "WANVIDLORA", + "link": 210 + } + ], + "outputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "links": [ + 108 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "7c93aea182a0d7084bfbc18ae36f039ea3845e73", + "Node name for S&R": "WanVideoSetLoRAs" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 122, + "type": "ImageConcatMulti", + "pos": [ + 1837.2718505859375, + -568.9346313476562 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 218 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 229 + } + ], + "outputs": [ + { + "name": "images", + "type": "IMAGE", + "links": [ + 217 + ] + } + ], + "properties": { + "cnr_id": "comfyui-kjnodes", + "ver": "87d0cf42db7d59992daba4d58a83655b5b359f44" + }, + "widgets_values": [ + 2, + "left", + true, + null + ] + }, + { + "id": 103, + "type": "WanVideoEmptyEmbeds", + "pos": [ + 622.5388793945312, + 137.8038330078125 + ], + "size": [ + 272.431640625, + 126 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "control_embeds", + "shape": 7, + "type": "WANVIDIMAGE_EMBEDS", + "link": null + }, + { + "name": "extra_latents", + "shape": 7, + "type": "LATENT", + "link": null + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 220 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 221 + } + ], + "outputs": [ + { + "name": "image_embeds", + "type": "WANVIDIMAGE_EMBEDS", + "links": [ + 171 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "06863fe2d283e89ba2386260ad2700557dda1897", + "Node name for S&R": "WanVideoEmptyEmbeds" + }, + "widgets_values": [ + 832, + 480, + 81 + ] + }, + { + "id": 123, + "type": "PrimitiveNode", + "pos": [ + -225.1419219970703, + -412.62811279296875 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "widget": { + "name": "width" + }, + "links": [ + 220 + ] + } + ], + "title": "width", + "properties": { + "Run widget replace on values": false + }, + "widgets_values": [ + 832, + "fixed" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 124, + "type": "PrimitiveNode", + "pos": [ + -226.0428009033203, + -278.3983154296875 + ], + "size": [ + 210, + 82 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "widget": { + "name": "height" + }, + "links": [ + 221 + ] + } + ], + "title": "height", + "properties": { + "Run widget replace on values": false + }, + "widgets_values": [ + 480, + "fixed" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 104, + "type": "WanVideoEncode", + "pos": [ + 193.28677368164062, + -85.77310180664062 + ], + "size": [ + 270, + 242 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "WANVAE", + "link": 175 + }, + { + "name": "image", + "type": "IMAGE", + "link": 228 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "samples", + "type": "LATENT", + "links": [ + 174 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "06863fe2d283e89ba2386260ad2700557dda1897", + "Node name for S&R": "WanVideoEncode" + }, + "widgets_values": [ + false, + 272, + 272, + 144, + 128, + 0, + 1 + ] + }, + { + "id": 38, + "type": "WanVideoVAELoader", + "pos": [ + 183.16864013671875, + -261.20465087890625 + ], + "size": [ + 372.7727966308594, + 82 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "WANCOMPILEARGS", + "link": null + } + ], + "outputs": [ + { + "name": "vae", + "type": "WANVAE", + "slot_index": 0, + "links": [ + 43, + 175 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoVAELoader" + }, + "widgets_values": [ + "Wan2.1_VAE.pth", + "bf16" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 69, + "type": "WanVideoLoraSelect", + "pos": [ + -470.2064208984375, + -736.2723388671875 + ], + "size": [ + 583.5029907226562, + 200 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "prev_lora", + "shape": 7, + "type": "WANVIDLORA", + "link": null + }, + { + "name": "blocks", + "shape": 7, + "type": "SELECTEDBLOCKS", + "link": null + } + ], + "outputs": [ + { + "name": "lora", + "type": "WANVIDLORA", + "links": [ + 170 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "6b9565ed6307168c45770ec08517d7df65b61e3f", + "Node name for S&R": "WanVideoLoraSelect" + }, + "widgets_values": [ + "Stand-In_wan2.1_T2V_14B_ver1.0.ckpt", + 1, + false, + false + ] + }, + { + "id": 71, + "type": "WanVideoLoraSelect", + "pos": [ + 1039.67724609375, + -1149.5599365234375 + ], + "size": [ + 583.5029907226562, + 176 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "prev_lora", + "shape": 7, + "type": "WANVIDLORA", + "link": null + }, + { + "name": "blocks", + "shape": 7, + "type": "SELECTEDBLOCKS", + "link": null + } + ], + "outputs": [ + { + "name": "lora", + "type": "WANVIDLORA", + "links": [ + 210 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "6b9565ed6307168c45770ec08517d7df65b61e3f", + "Node name for S&R": "WanVideoLoraSelect" + }, + "widgets_values": [ + "lightx2v_T2V_14B_cfg_step_distill_v2_lora_rank64_bf16.safetensors", + 1, + false, + false + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 102, + "type": "WanVideoAddStandInLatent", + "pos": [ + 515.3641357421875, + -37.543235778808594 + ], + "size": [ + 246.94578552246094, + 57.857322692871094 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [ + { + "name": "embeds", + "type": "WANVIDIMAGE_EMBEDS", + "link": 171 + }, + { + "name": "ip_image_latent", + "type": "LATENT", + "link": 174 + } + ], + "outputs": [ + { + "name": "image_embeds", + "type": "WANVIDIMAGE_EMBEDS", + "links": [ + 172 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "06863fe2d283e89ba2386260ad2700557dda1897", + "Node name for S&R": "WanVideoAddStandInLatent" + }, + "widgets_values": [] + }, + { + "id": 11, + "type": "LoadWanVideoT5TextEncoder", + "pos": [ + 172.5333709716797, + -444.4674987792969 + ], + "size": [ + 377.1661376953125, + 130 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "wan_t5_model", + "type": "WANTEXTENCODER", + "slot_index": 0, + "links": [ + 15 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "LoadWanVideoT5TextEncoder" + }, + "widgets_values": [ + "models_t5_umt5-xxl-enc-bf16.pth", + "bf16", + "offload_device", + "disabled" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 22, + "type": "WanVideoModelLoader", + "pos": [ + 150, + -780 + ], + "size": [ + 535.5307006835938, + 274 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "WANCOMPILEARGS", + "link": 211 + }, + { + "name": "block_swap_args", + "shape": 7, + "type": "BLOCKSWAPARGS", + "link": null + }, + { + "name": "lora", + "shape": 7, + "type": "WANVIDLORA", + "link": 170 + }, + { + "name": "vram_management_args", + "shape": 7, + "type": "VRAM_MANAGEMENTARGS", + "link": null + }, + { + "name": "vace_model", + "shape": 7, + "type": "VACEPATH", + "link": null + }, + { + "name": "fantasytalking_model", + "shape": 7, + "type": "FANTASYTALKINGMODEL", + "link": null + }, + { + "name": "multitalk_model", + "shape": 7, + "type": "MULTITALKMODEL", + "link": null + } + ], + "outputs": [ + { + "name": "model", + "type": "WANVIDEOMODEL", + "slot_index": 0, + "links": [ + 79, + 90 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoModelLoader" + }, + "widgets_values": [ + "Wan2_1-T2V-14B_fp8_e4m3fn.safetensors", + "fp16_fast", + "fp8_e4m3fn_scaled", + "offload_device", + "sdpa" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 16, + "type": "WanVideoTextEncode", + "pos": [ + 936.4089965820312, + -35.84267807006836 + ], + "size": [ + 475.7987976074219, + 355.67169189453125 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "t5", + "shape": 7, + "type": "WANTEXTENCODER", + "link": 15 + }, + { + "name": "model_to_offload", + "shape": 7, + "type": "WANVIDEOMODEL", + "link": 79 + } + ], + "outputs": [ + { + "name": "text_embeds", + "type": "WANVIDEOTEXTEMBEDS", + "slot_index": 0, + "links": [ + 30 + ] + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoTextEncode" + }, + "widgets_values": [ + "一位男性舒适地坐在书桌前,正对着镜头,仿佛在与屏幕前的亲友对话。他的眼神专注而温柔,嘴角带着自然的笑意。背景是他精心布置的个人空间,墙上贴着照片和一张世界地图,传达出一种亲密而现代的沟通感。", + "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + true, + false, + "gpu" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 74, + "type": "VHS_VideoCombine", + "pos": [ + 2258.452392578125, + -658.4154663085938 + ], + "size": [ + 959.076171875, + 691.564453125 + ], + "flags": {}, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 217 + }, + { + "name": "audio", + "shape": 7, + "type": "AUDIO", + "link": null + }, + { + "name": "meta_batch", + "shape": 7, + "type": "VHS_BatchManager", + "link": null + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": null + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui-videohelpersuite", + "ver": "0a75c7958fe320efcb052f1d9f8451fd20c730a8", + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 16, + "loop_count": 0, + "filename_prefix": "WanVideoWrapper_T2V_Stand_In", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "WanVideoWrapper_T2V_Stand_In_00001.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 16, + "workflow": "WanVideoWrapper_T2V_Stand_In_00001.png", + "fullpath": "/FirstIntelligence/home/bowen/ComfyUI/temp/WanVideoWrapper_T2V_Stand_In_00001.mp4" + } + } + } + }, + { + "id": 46, + "type": "WanVideoTextEmbedBridge", + "pos": [ + 943.1697387695312, + 1096.8651123046875 + ], + "size": [ + 315, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 2, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 54 + }, + { + "name": "negative", + "shape": 7, + "type": "CONDITIONING", + "link": 55 + } + ], + "outputs": [ + { + "name": "text_embeds", + "type": "WANVIDEOTEXTEMBEDS", + "links": null + } + ], + "properties": { + "cnr_id": "ComfyUI-WanVideoWrapper", + "ver": "d9b1f4d1a5aea91d101ae97a54714a5861af3f50", + "Node name for S&R": "WanVideoTextEmbedBridge" + }, + "widgets_values": [] + }, + { + "id": 128, + "type": "ApplyFaceProcessor", + "pos": [ + -297.2541198730469, + -77.13932037353516 + ], + "size": [ + 270, + 126 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "face_processor", + "type": "FACE_PROCESSOR", + "link": 223 + }, + { + "name": "image", + "type": "IMAGE", + "link": 226 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 227, + 228, + 229 + ] + } + ], + "properties": { + "Node name for S&R": "ApplyFaceProcessor" + }, + "widgets_values": [ + 512, + 10, + 1.5 + ] + }, + { + "id": 127, + "type": "FaceProcessorLoader", + "pos": [ + -294.2811279296875, + 107.27786254882812 + ], + "size": [ + 270, + 58 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "face_processor", + "type": "FACE_PROCESSOR", + "links": [ + 223 + ] + } + ], + "properties": { + "Node name for S&R": "FaceProcessorLoader" + }, + "widgets_values": [ + "models/insightface" + ] + }, + { + "id": 126, + "type": "MarkdownNote", + "pos": [ + -653.9163818359375, + -382.01556396484375 + ], + "size": [ + 362.6117858886719, + 143.0945281982422 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "LoRA link:\n\n[https://huggingface.co/BowenXue/Stand-In](https://huggingface.co/BowenXue/Stand-In)\n\nThis LoRA is not the traditional kind and it HAS TO connect to the model loader directly." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 121, + "type": "PreviewImage", + "pos": [ + 37.458839416503906, + -72.97832489013672 + ], + "size": [ + 140, + 246 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 227 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 58, + "type": "LoadImage", + "pos": [ + -737.1319580078125, + -174.04302978515625 + ], + "size": [ + 413.10479736328125, + 498.3180847167969 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 226 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.26", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "clipspace/clipspace-mask-379138.7999999998.png [input]", + "image" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 129, + "type": "MarkdownNote", + "pos": [ + 791.3861694335938, + -356.8863830566406 + ], + "size": [ + 362.6117858886719, + 143.0945281982422 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Prompt Writing Tip: If you do not wish to alter the subject's facial features, simply use \"a man\" or \"a woman\" without adding extra descriptions of their appearance. Prompts support both Chinese and English input. The prompt is intended for generating frontal, medium-to-close-up videos.\n\nInput Image Recommendation: For best results, use a high-resolution frontal face image. There are no restrictions on resolution or file extension, as our built-in preprocessing pipeline will handle them automatically.\n\n[https://github.com/WeChatCV/Stand-In](https://github.com/WeChatCV/Stand-In)" + ], + "color": "#322", + "bgcolor": "#533" + } + ], + "links": [ + [ + 15, + 11, + 0, + 16, + 0, + "WANTEXTENCODER" + ], + [ + 30, + 16, + 0, + 27, + 2, + "WANVIDEOTEXTEMBEDS" + ], + [ + 33, + 27, + 0, + 28, + 1, + "LATENT" + ], + [ + 43, + 38, + 0, + 28, + 0, + "VAE" + ], + [ + 52, + 48, + 0, + 49, + 0, + "CLIP" + ], + [ + 53, + 48, + 0, + 50, + 0, + "CLIP" + ], + [ + 54, + 49, + 0, + 46, + 0, + "CONDITIONING" + ], + [ + 55, + 50, + 0, + 46, + 1, + "CONDITIONING" + ], + [ + 79, + 22, + 0, + 16, + 1, + "WANVIDEOMODEL" + ], + [ + 90, + 22, + 0, + 70, + 0, + "WANVIDEOMODEL" + ], + [ + 92, + 39, + 0, + 70, + 1, + "BLOCKSWAPARGS" + ], + [ + 107, + 70, + 0, + 79, + 0, + "WANVIDEOMODEL" + ], + [ + 108, + 79, + 0, + 27, + 0, + "WANVIDEOMODEL" + ], + [ + 170, + 69, + 0, + 22, + 2, + "WANVIDLORA" + ], + [ + 171, + 103, + 0, + 102, + 0, + "WANVIDIMAGE_EMBEDS" + ], + [ + 172, + 102, + 0, + 27, + 1, + "WANVIDIMAGE_EMBEDS" + ], + [ + 174, + 104, + 0, + 102, + 1, + "LATENT" + ], + [ + 175, + 38, + 0, + 104, + 0, + "WANVAE" + ], + [ + 210, + 71, + 0, + 79, + 1, + "WANVIDLORA" + ], + [ + 211, + 35, + 0, + 22, + 0, + "WANCOMPILEARGS" + ], + [ + 217, + 122, + 0, + 74, + 0, + "IMAGE" + ], + [ + 218, + 28, + 0, + 122, + 0, + "IMAGE" + ], + [ + 220, + 123, + 0, + 103, + 2, + "INT" + ], + [ + 221, + 124, + 0, + 103, + 3, + "INT" + ], + [ + 223, + 127, + 0, + 128, + 0, + "FACE_PROCESSOR" + ], + [ + 226, + 58, + 0, + 128, + 1, + "IMAGE" + ], + [ + 227, + 128, + 0, + 121, + 0, + "IMAGE" + ], + [ + 228, + 128, + 0, + 104, + 1, + "IMAGE" + ], + [ + 229, + 128, + 0, + 122, + 1, + "IMAGE" + ] + ], + "groups": [ + { + "id": 1, + "title": "ComfyUI text encoding alternative", + "bounding": [ + 70.3548812866211, + 792.9315185546875, + 1210.621337890625, + 805.9080810546875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.6727499949326107, + "offset": [ + 1220.5620388990717, + 479.6860694347906 + ] + }, + "frontendVersion": "1.24.4", + "node_versions": { + "ComfyUI-WanVideoWrapper": "5a2383621a05825d0d0437781afcb8552d9590fd", + "comfy-core": "0.3.26", + "ComfyUI-KJNodes": "a5bd3c86c8ed6b83c55c2d0e7a59515b15a0137f", + "ComfyUI-VideoHelperSuite": "0a75c7958fe320efcb052f1d9f8451fd20c730a8" + }, + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file