From 1fc774505de50499b9ee6930397ef7dc461e9681 Mon Sep 17 00:00:00 2001 From: toto Date: Mon, 23 Oct 2023 19:28:41 +0800 Subject: [PATCH] update workflow --- __init__.py | 60 +- portrait/model_holder.py | 57 ++ portrait/nodes.py | 84 +- workflows/easyphoto.json | 1792 ++++++++++++++++---------------------- 4 files changed, 865 insertions(+), 1128 deletions(-) create mode 100644 portrait/model_holder.py diff --git a/__init__.py b/__init__.py index 5c523b0..c94bb8b 100644 --- a/__init__.py +++ b/__init__.py @@ -59,38 +59,38 @@ for url, filename in zip(urls, filenames): urldownload_progressbar(url, filename) NODE_CLASS_MAPPINGS = { - "PMRetainFace": RetainFace, - "FaceFusionPM": FaceFusionPM, - "RatioMerge2Image": RatioMerge2Image, - "MaskMerge2Image": MaskMerge2Image, - "ReplaceBoxImg": ReplaceBoxImg, - "ExpandMaskBox": ExpandMaskFaceWidth, - "BoxCropImage": BoxCropImage, - "ColorTransfer": ColorTransfer, - "FaceSkin": FaceSkin, - "MaskDilateErode": MaskDilateErode, - "SkinRetouching": SkinRetouching, - "PortraitEnhancement": PortraitEnhancement, - "ImageScaleShort": ImageScaleShort, - "ImageResizeTarget": ImageResizeTarget, - "GetImageInfo": GetImageInfo, + "PM_RetinaFace": RetinaFacePM, + "PM_FaceFusion": FaceFusionPM, + "PM_RatioMerge2Image": RatioMerge2ImagePM, + "PM_MaskMerge2Image": MaskMerge2ImagePM, + "PM_ReplaceBoxImg": ReplaceBoxImgPM, + "PM_ExpandMaskBox": ExpandMaskFaceWidthPM, + "PM_BoxCropImage": BoxCropImagePM, + "PM_ColorTransfer": ColorTransferPM, + "PM_FaceSkin": FaceSkinPM, + "PM_MaskDilateErode": MaskDilateErodePM, + "PM_SkinRetouching": SkinRetouchingPM, + "PM_PortraitEnhancement": PortraitEnhancementPM, + "PM_ImageScaleShort": ImageScaleShortPM, + "PM_ImageResizeTarget": ImageResizeTargetPM, + "PM_GetImageInfo": GetImageInfoPM, } NODE_DISPLAY_NAME_MAPPINGS = { - "RetainFace": "RetainFace PM", - "FaceFusionPM": "FaceFusion PM", - "RatioMerge2Image": "RatioMerge2Image PM", - "MaskMerge2Image": "MaskMerge2Image PM", - "ReplaceBoxImg": "ReplaceBoxImg PM", - "ExpandMaskBox": "ExpandMaskBox PM", - "BoxCropImage": "BoxCropImage PM", - "ColorTransfer": "ColorTransfer PM", - "FaceSkin": "FaceSkin PM", - "MaskDilateErode": "MaskDilateErode PM", - "SkinRetouching": "SkinRetouching PM", - "PortraitEnhancement": "PortraitEnhancement PM", - "ImageScaleShort": "ImageScaleShort PM", - "ImageResizeTarget": "ImageResizeTarget PM", - "GetImageInfo": "GetImageInfo PM", + "PM_RetinaFace": "RetinaFace PM", + "PM_FaceFusion": "FaceFusion PM", + "PM_RatioMerge2Image": "RatioMerge2Image PM", + "PM_MaskMerge2Image": "MaskMerge2Image PM", + "PM_ReplaceBoxImg": "ReplaceBoxImg PM", + "PM_ExpandMaskBox": "ExpandMaskBox PM", + "PM_BoxCropImage": "BoxCropImage PM", + "PM_ColorTransfer": "ColorTransfer PM", + "PM_FaceSkin": "FaceSkin PM", + "PM_MaskDilateErode": "MaskDilateErode PM", + "PM_SkinRetouching": "SkinRetouching PM", + "PM_PortraitEnhancement": "PortraitEnhancement PM", + "PM_ImageScaleShort": "ImageScaleShort PM", + "PM_ImageResizeTarget": "ImageResizeTarget PM", + "PM_GetImageInfo": "GetImageInfo PM", } __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] diff --git a/portrait/model_holder.py b/portrait/model_holder.py new file mode 100644 index 0000000..0e7b62c --- /dev/null +++ b/portrait/model_holder.py @@ -0,0 +1,57 @@ +from modelscope.pipelines import pipeline +from modelscope.utils.constant import Tasks +import insightface +from insightface.app import FaceAnalysis +from .utils.face_process_utils import Face_Skin + +from .config import * + +retinaface_detection = None +image_face_fusion = None +face_analysis = None +face_skin = None +roop = None +skin_retouching = None +portrait_enhancement = None + +def get_retinaface_detection(): + global retinaface_detection + if retinaface_detection is None: + retinaface_detection = pipeline(Tasks.face_detection, 'damo/cv_resnet50_face-detection_retinaface', model_revision='v2.0.2') + return retinaface_detection + +def get_image_face_fusion(): + global image_face_fusion + if image_face_fusion is None: + image_face_fusion = pipeline(Tasks.image_face_fusion, model='damo/cv_unet-image-face-fusion_damo', model_revision='v1.3') + return image_face_fusion + +def get_face_analysis(): + global face_analysis + if face_analysis is None: + face_analysis = FaceAnalysis(name='buffalo_l') + return face_analysis + +def get_roop(): + global roop + if roop is None: + roop = insightface.model_zoo.get_model('inswapper_128.onnx', download=True, download_zip=True, root=root_path) + return roop + +def get_face_skin(): + global face_skin + if face_skin is None: + face_skin = Face_Skin(os.path.join(models_path, "face_skin.pth")) + return face_skin + +def get_skin_retouching(): + global skin_retouching + if skin_retouching is None: + skin_retouching = pipeline('skin-retouching-torch', model='damo/cv_unet_skin_retouching_torch', model_revision='v1.0.2') + return skin_retouching + +def get_portrait_enhancement(): + global portrait_enhancement + if portrait_enhancement is None: + portrait_enhancement = pipeline(Tasks.image_portrait_enhancement, model='damo/cv_gpen_image-portrait-enhancement', model_revision='v1.0.0') + return portrait_enhancement diff --git a/portrait/nodes.py b/portrait/nodes.py index 980bc65..8a88e33 100644 --- a/portrait/nodes.py +++ b/portrait/nodes.py @@ -1,24 +1,15 @@ -import os - import cv2 import numpy as np from PIL import Image from modelscope.outputs import OutputKeys -from modelscope.pipelines import pipeline -from modelscope.utils.constant import Tasks from .utils.face_process_utils import call_face_crop, color_transfer, Face_Skin from .utils.img_utils import img_to_tensor, tensor_to_img, tensor_to_np, np_to_tensor, np_to_mask, img_to_mask -from .config import * -import insightface -from insightface.app import FaceAnalysis +from .model_holder import * -import pydevd_pycharm -pydevd_pycharm.settrace('49.7.62.197', port=10090, stdoutToServer=True, stderrToServer=True) - -class RetainFace: - def __init__(self): - self.retinaface_detection = pipeline(Tasks.face_detection, 'damo/cv_resnet50_face-detection_retinaface', model_revision='v2.0.2') +# import pydevd_pycharm +# pydevd_pycharm.settrace('49.7.62.197', port=10090, stdoutToServer=True, stderrToServer=True) +class RetinaFacePM: @classmethod def INPUT_TYPES(s): return {"required": {"image": ("IMAGE",), @@ -33,17 +24,12 @@ class RetainFace: def retain_face(self, image, multi_user_facecrop_ratio): np_image = np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8) image = Image.fromarray(np_image) - retinaface_boxes, retinaface_keypoints, retinaface_masks, retinaface_tensor = call_face_crop(self.retinaface_detection, image, multi_user_facecrop_ratio) + retinaface_boxes, retinaface_keypoints, retinaface_masks, retinaface_tensor = call_face_crop(get_retinaface_detection(), image, multi_user_facecrop_ratio) crop_image = image.crop(retinaface_boxes[0]) return (img_to_tensor(crop_image), retinaface_tensor, retinaface_boxes[0]) class FaceFusionPM: - def __init__(self): - self.image_face_fusion = None - self.face_analysis = None - self.roop = None - @classmethod def INPUT_TYPES(s): return {"required": {"source_image": ("IMAGE",), @@ -58,29 +44,22 @@ class FaceFusionPM: def img_face_fusion(self, source_image, swap_image, mode): if mode == "ali": - if self.image_face_fusion is None: - self.image_face_fusion = pipeline(Tasks.image_face_fusion, model='damo/cv_unet-image-face-fusion_damo', model_revision='v1.3') source_image = tensor_to_img(source_image) swap_image = tensor_to_img(swap_image) - fusion_image = self.image_face_fusion(dict(template=source_image, user=swap_image))[ + fusion_image = get_image_face_fusion()(dict(template=source_image, user=swap_image))[ OutputKeys.OUTPUT_IMG] - # swap_face(target_img=output_image, source_img=roop_image, model="inswapper_128.onnx", upscale_options=UpscaleOptions()) result_image = Image.fromarray(cv2.cvtColor(fusion_image, cv2.COLOR_BGR2RGB)) return (img_to_tensor(result_image),) else: - if self.face_analysis is None: - self.face_analysis = FaceAnalysis(name='buffalo_l') - self.face_analysis.prepare(ctx_id=0, det_size=(640, 640)) - if self.roop is None: - self.roop = insightface.model_zoo.get_model('inswapper_128.onnx', download=True, download_zip=True, root=root_path) + get_face_analysis().prepare(ctx_id=0, det_size=(640, 640)) source_image = tensor_to_np(source_image) - faces = self.face_analysis.get(source_image) + faces = get_face_analysis().get(source_image) swap_image = tensor_to_np(swap_image) - swap_face = self.face_analysis.get(swap_image) - result_image = self.roop.get(source_image, faces[0], swap_face[0], paste_back=True) + swap_face = get_face_analysis().get(swap_image) + result_image = get_roop().get(source_image, faces[0], swap_face[0], paste_back=True) return (np_to_tensor(result_image),) -class RatioMerge2Image: +class RatioMerge2ImagePM: def __init__(self): pass @@ -100,7 +79,7 @@ class RatioMerge2Image: rate_fusion_image = image1 * (1 - fusion_rate) + image2 * fusion_rate return (rate_fusion_image,) -class ReplaceBoxImg: +class ReplaceBoxImgPM: def __init__(self): pass @@ -120,7 +99,7 @@ class ReplaceBoxImg: origin_image[:, box_area[1]:box_area[3], box_area[0]:box_area[2], :] = replace_image return (origin_image,) -class MaskMerge2Image: +class MaskMerge2ImagePM: def __init__(self): pass @@ -142,7 +121,7 @@ class MaskMerge2Image: image1 = image1 * mask + image2 * (1 - mask) return (image1,) -class ExpandMaskFaceWidth: +class ExpandMaskFaceWidthPM: @classmethod def INPUT_TYPES(s): return {"required": {"mask": ("MASK",), @@ -169,7 +148,7 @@ class ExpandMaskFaceWidth: new_mask[0, copy_box[1]:copy_box[3], copy_box[0]:copy_box[2]] = 255 return (new_mask, copy_box) -class BoxCropImage: +class BoxCropImagePM: @classmethod def INPUT_TYPES(s): @@ -187,10 +166,7 @@ class BoxCropImage: image = image[:, box[1]:box[3], box[0]:box[2], :] return (image,) -class ColorTransfer: - - def __init__(self): - pass +class ColorTransferPM: @classmethod def INPUT_TYPES(s): @@ -208,10 +184,7 @@ class ColorTransfer: transfer_result = color_transfer(tensor_to_np(transfer_from), tensor_to_np(transfer_to)) # 进行颜色迁移 return (np_to_tensor(transfer_result),) -class FaceSkin: - def __init__(self): - self.retinaface_detection = pipeline(Tasks.face_detection, 'damo/cv_resnet50_face-detection_retinaface', model_revision='v2.0.2') - self.face_skin = Face_Skin(os.path.join(models_path, "face_skin.pth")) +class FaceSkinPM: @classmethod def INPUT_TYPES(s): @@ -225,10 +198,10 @@ class FaceSkin: CATEGORY = "protrait/model" def face_skin_mask(self, image): - face_skin_one = self.face_skin.detect(tensor_to_img(image), self.retinaface_detection, [1, 2, 3, 4, 5, 10, 12, 13]) + face_skin_one = get_face_skin().detect(tensor_to_img(image), get_retinaface_detection(), [1, 2, 3, 4, 5, 10, 12, 13]) return (face_skin_one,) -class MaskDilateErode: +class MaskDilateErodePM: @classmethod def INPUT_TYPES(s): @@ -245,10 +218,7 @@ class MaskDilateErode: out_mask = Image.fromarray(np.uint8(cv2.dilate(tensor_to_np(mask), np.ones((96, 96), np.uint8), iterations=1) - cv2.erode(tensor_to_np(mask), np.ones((48, 48), np.uint8), iterations=1))) return (img_to_mask(out_mask),) -class SkinRetouching: - - def __init__(self): - self.skin_retouching = pipeline('skin-retouching-torch', model='damo/cv_unet_skin_retouching_torch', model_revision='v1.0.2') +class SkinRetouchingPM: @classmethod def INPUT_TYPES(s): @@ -261,13 +231,11 @@ class SkinRetouching: CATEGORY = "protrait/model" def skin_retouching_pass(self, image): - output_image = cv2.cvtColor(self.skin_retouching(tensor_to_img(image))[OutputKeys.OUTPUT_IMG], cv2.COLOR_BGR2RGB) + output_image = cv2.cvtColor(get_skin_retouching()(tensor_to_img(image))[OutputKeys.OUTPUT_IMG], cv2.COLOR_BGR2RGB) return (np_to_tensor(output_image),) -class PortraitEnhancement: +class PortraitEnhancementPM: - def __init__(self): - self.portrait_enhancement = pipeline(Tasks.image_portrait_enhancement, model='damo/cv_gpen_image-portrait-enhancement', model_revision='v1.0.0') @classmethod def INPUT_TYPES(s): @@ -281,10 +249,10 @@ class PortraitEnhancement: CATEGORY = "protrait/model" def protrait_enhancement_pass(self, image): - output_image = cv2.cvtColor(self.portrait_enhancement(tensor_to_img(image))[OutputKeys.OUTPUT_IMG], cv2.COLOR_BGR2RGB) + output_image = cv2.cvtColor(get_portrait_enhancement()(tensor_to_img(image))[OutputKeys.OUTPUT_IMG], cv2.COLOR_BGR2RGB) return (np_to_tensor(output_image),) -class ImageScaleShort: +class ImageScaleShortPM: @classmethod def INPUT_TYPES(s): @@ -311,7 +279,7 @@ class ImageScaleShort: input_image = input_image.resize([new_width, new_height], Image.Resampling.LANCZOS) return (img_to_tensor(input_image),) -class ImageResizeTarget: +class ImageResizeTargetPM: @classmethod def INPUT_TYPES(s): return {"required": { @@ -331,7 +299,7 @@ class ImageResizeTarget: out = imagepi.resize([width, height], Image.Resampling.LANCZOS) return (img_to_tensor(out),) -class GetImageInfo: +class GetImageInfoPM: @classmethod def INPUT_TYPES(s): return {"required": { diff --git a/workflows/easyphoto.json b/workflows/easyphoto.json index 7cd324c..8fb5a22 100644 --- a/workflows/easyphoto.json +++ b/workflows/easyphoto.json @@ -1,128 +1,7 @@ { - "last_node_id": 188, - "last_link_id": 327, + "last_node_id": 190, + "last_link_id": 337, "nodes": [ - { - "id": 8, - "type": "RetainFace", - "pos": [ - 237.12492081907521, - 576.3413489785981 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 6 - } - ], - "outputs": [ - { - "name": "crop_image", - "type": "IMAGE", - "links": [ - 11 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "crop_mask", - "type": "MASK", - "links": [ - 12 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "crop_box", - "type": "BOX", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "RetainFace" - }, - "widgets_values": [ - 1.5 - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 15, - "type": "MaskToImage", - "pos": [ - 860.1249208190752, - 228.3413489785981 - ], - "size": { - "0": 177.68850708007812, - "1": 26 - }, - "flags": {}, - "order": 22, - "mode": 0, - "inputs": [ - { - "name": "mask", - "type": "MASK", - "link": 12 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 13 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "MaskToImage" - }, - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 16, - "type": "PreviewImage", - "pos": [ - 855.1249208190752, - 296.34134897859803 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 31, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 13 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "color": "#322", - "bgcolor": "#533" - }, { "id": 56, "type": "VAEEncode", @@ -135,7 +14,7 @@ "1": 46 }, "flags": {}, - "order": 47, + "order": 42, "mode": 0, "inputs": [ { @@ -178,7 +57,7 @@ "1": 46 }, "flags": {}, - "order": 53, + "order": 47, "mode": 0, "inputs": [ { @@ -209,41 +88,6 @@ "color": "#323", "bgcolor": "#535" }, - { - "id": 46, - "type": "VAELoader", - "pos": [ - 1663.2232990321354, - 516.5286931795088 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "VAE", - "type": "VAE", - "links": [ - 141, - 142 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAELoader" - }, - "widgets_values": [ - "VAE/vae-ft-mse-840000-ema-pruned.ckpt" - ], - "color": "#323", - "bgcolor": "#535" - }, { "id": 50, "type": "CLIPTextEncode", @@ -256,7 +100,7 @@ "1": 117.13148498535156 }, "flags": {}, - "order": 14, + "order": 12, "mode": 0, "inputs": [ { @@ -298,7 +142,7 @@ "1": 131.79443359375 }, "flags": {}, - "order": 15, + "order": 13, "mode": 0, "inputs": [ { @@ -339,7 +183,7 @@ "1": 166 }, "flags": {}, - "order": 54, + "order": 48, "mode": 0, "inputs": [ { @@ -408,7 +252,7 @@ "1": 166 }, "flags": {}, - "order": 61, + "order": 54, "mode": 0, "inputs": [ { @@ -469,7 +313,7 @@ "1": 111.6351547241211 }, "flags": {}, - "order": 1, + "order": 0, "mode": 0, "outputs": [ { @@ -503,7 +347,7 @@ "1": 82 }, "flags": {}, - "order": 48, + "order": 43, "mode": 0, "inputs": [ { @@ -534,84 +378,6 @@ "color": "#323", "bgcolor": "#535" }, - { - "id": 102, - "type": "ControlNetLoader", - "pos": [ - 2649.223299032132, - -283.47130682049124 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 165 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control_v11p_sd15_openpose.pth" - ], - "color": "#323", - "bgcolor": "#535" - }, - { - "id": 108, - "type": "OpenposePreprocessor", - "pos": [ - 2651.223299032132, - -127.47130682049105 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 49, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 179 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 181 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "OpenposePreprocessor" - }, - "widgets_values": [ - "enable", - "enable", - "enable", - 512 - ], - "color": "#323", - "bgcolor": "#535" - }, { "id": 105, "type": "ControlNetApplyAdvanced", @@ -624,7 +390,7 @@ "1": 166 }, "flags": {}, - "order": 59, + "order": 52, "mode": 0, "inputs": [ { @@ -645,7 +411,7 @@ { "name": "image", "type": "IMAGE", - "link": null + "link": 328 } ], "outputs": [ @@ -677,33 +443,6 @@ "color": "#323", "bgcolor": "#535" }, - { - "id": 110, - "type": "PreviewImage", - "pos": [ - 2685.223299032132, - 281.5286931795085 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 56, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 181 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "color": "#323", - "bgcolor": "#535" - }, { "id": 109, "type": "PreviewImage", @@ -716,7 +455,7 @@ "1": 246 }, "flags": {}, - "order": 55, + "order": 49, "mode": 0, "inputs": [ { @@ -743,7 +482,7 @@ "1": 58 }, "flags": {}, - "order": 3, + "order": 1, "mode": 0, "outputs": [ { @@ -765,41 +504,6 @@ "color": "#323", "bgcolor": "#535" }, - { - "id": 137, - "type": "VAELoader", - "pos": [ - 2847.803313096945, - 3315.7026275637395 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 4, - "mode": 0, - "outputs": [ - { - "name": "VAE", - "type": "VAE", - "links": [ - 239, - 245 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAELoader" - }, - "widgets_values": [ - "VAE/vae-ft-mse-840000-ema-pruned.ckpt" - ], - "color": "#323", - "bgcolor": "#535" - }, { "id": 139, "type": "CLIPTextEncode", @@ -812,7 +516,7 @@ "1": 117.13148498535156 }, "flags": {}, - "order": 16, + "order": 14, "mode": 0, "inputs": [ { @@ -853,7 +557,7 @@ "1": 131.79443359375 }, "flags": {}, - "order": 17, + "order": 15, "mode": 0, "inputs": [ { @@ -894,7 +598,7 @@ "1": 46 }, "flags": {}, - "order": 82, + "order": 75, "mode": 0, "inputs": [ { @@ -937,7 +641,7 @@ "1": 46 }, "flags": {}, - "order": 79, + "order": 72, "mode": 0, "inputs": [ { @@ -980,7 +684,7 @@ "1": 126 }, "flags": {}, - "order": 18, + "order": 16, "mode": 0, "inputs": [ { @@ -1037,7 +741,7 @@ "1": 111.6351547241211 }, "flags": {}, - "order": 5, + "order": 2, "mode": 0, "outputs": [ { @@ -1071,7 +775,7 @@ "1": 82 }, "flags": {}, - "order": 78, + "order": 71, "mode": 0, "inputs": [ { @@ -1114,7 +818,7 @@ "1": 246 }, "flags": {}, - "order": 81, + "order": 74, "mode": 0, "inputs": [ { @@ -1141,7 +845,7 @@ "1": 58 }, "flags": {}, - "order": 6, + "order": 3, "mode": 0, "outputs": [ { @@ -1175,7 +879,7 @@ "1": 166 }, "flags": {}, - "order": 80, + "order": 73, "mode": 0, "inputs": [ { @@ -1244,7 +948,7 @@ "1": 166 }, "flags": {}, - "order": 83, + "order": 76, "mode": 0, "inputs": [ { @@ -1307,7 +1011,7 @@ "1": 474.0000305175781 }, "flags": {}, - "order": 84, + "order": 77, "mode": 0, "inputs": [ { @@ -1370,7 +1074,7 @@ "1": 542.2775268554688 }, "flags": {}, - "order": 86, + "order": 79, "mode": 0, "inputs": [ { @@ -1397,7 +1101,7 @@ "1": 126 }, "flags": {}, - "order": 24, + "order": 20, "mode": 0, "inputs": [ { @@ -1440,7 +1144,7 @@ }, { "id": 124, - "type": "MaskDilateErode", + "type": "PM_MaskDilateErode", "pos": [ 2981.9867954854844, 1613.9854756356353 @@ -1450,7 +1154,7 @@ "1": 26 }, "flags": {}, - "order": 44, + "order": 39, "mode": 0, "inputs": [ { @@ -1472,38 +1176,11 @@ } ], "properties": { - "Node name for S&R": "MaskDilateErode" + "Node name for S&R": "PM_MaskDilateErode" }, "color": "#223", "bgcolor": "#335" }, - { - "id": 14, - "type": "PreviewImage", - "pos": [ - 591.7007018298591, - 230.61377135182522 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 21, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 11 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "color": "#322", - "bgcolor": "#533" - }, { "id": 11, "type": "PreviewImage", @@ -1516,7 +1193,7 @@ "1": 289.4002990722656 }, "flags": {}, - "order": 25, + "order": 21, "mode": 0, "inputs": [ { @@ -1533,7 +1210,7 @@ }, { "id": 10, - "type": "RetainFace", + "type": "PM_RetinaFace", "pos": [ 480, 801 @@ -1543,7 +1220,7 @@ "1": 98 }, "flags": {}, - "order": 19, + "order": 17, "mode": 0, "inputs": [ { @@ -1579,7 +1256,7 @@ } ], "properties": { - "Node name for S&R": "RetainFace" + "Node name for S&R": "PM_RetinaFace" }, "widgets_values": [ 1.5 @@ -1601,7 +1278,7 @@ "flags": { "collapsed": true }, - "order": 26, + "order": 22, "mode": 0, "inputs": [ { @@ -1639,7 +1316,7 @@ "1": 306.4241943359375 }, "flags": {}, - "order": 32, + "order": 27, "mode": 0, "inputs": [ { @@ -1666,7 +1343,7 @@ "1": 246 }, "flags": {}, - "order": 36, + "order": 31, "mode": 0, "inputs": [ { @@ -1695,7 +1372,7 @@ "flags": { "collapsed": true }, - "order": 30, + "order": 26, "mode": 0, "inputs": [ { @@ -1723,7 +1400,7 @@ }, { "id": 29, - "type": "RetainFace", + "type": "PM_RetinaFace", "pos": [ 2006.7649383660842, 1589.4806456978997 @@ -1733,7 +1410,7 @@ "1": 98 }, "flags": {}, - "order": 33, + "order": 28, "mode": 0, "inputs": [ { @@ -1774,7 +1451,7 @@ } ], "properties": { - "Node name for S&R": "RetainFace" + "Node name for S&R": "PM_RetinaFace" }, "widgets_values": [ 1.1 @@ -1794,7 +1471,7 @@ "1": 402.9619140625 }, "flags": {}, - "order": 37, + "order": 32, "mode": 0, "inputs": [ { @@ -1821,7 +1498,7 @@ "1": 346.0450439453125 }, "flags": {}, - "order": 50, + "order": 44, "mode": 0, "inputs": [ { @@ -1848,7 +1525,7 @@ "1": 26 }, "flags": {}, - "order": 43, + "order": 38, "mode": 0, "inputs": [ { @@ -1876,7 +1553,7 @@ }, { "id": 38, - "type": "ExpandMaskBox", + "type": "PM_ExpandMaskBox", "pos": [ 2656.2929683525563, 1604.391312488511 @@ -1886,7 +1563,7 @@ "1": 78 }, "flags": {}, - "order": 39, + "order": 34, "mode": 0, "inputs": [ { @@ -1926,7 +1603,7 @@ } ], "properties": { - "Node name for S&R": "ExpandMaskBox" + "Node name for S&R": "PM_ExpandMaskBox" }, "widgets_values": [ 0.1 @@ -1934,33 +1611,6 @@ "color": "#223", "bgcolor": "#335" }, - { - "id": 35, - "type": "PreviewImage", - "pos": [ - 2063.010690393335, - 1017.4705347958931 - ], - "size": { - "0": 221.13848876953125, - "1": 366.3678894042969 - }, - "flags": {}, - "order": 40, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 30 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "color": "#432", - "bgcolor": "#653" - }, { "id": 37, "type": "PreviewImage", @@ -1973,7 +1623,7 @@ "1": 395.15997314453125 }, "flags": {}, - "order": 46, + "order": 41, "mode": 0, "inputs": [ { @@ -1990,7 +1640,7 @@ }, { "id": 42, - "type": "BoxCropImage", + "type": "PM_BoxCropImage", "pos": [ 2957.376674112845, 940.3405968769166 @@ -2000,7 +1650,7 @@ "1": 46 }, "flags": {}, - "order": 45, + "order": 40, "mode": 0, "inputs": [ { @@ -2028,7 +1678,7 @@ } ], "properties": { - "Node name for S&R": "BoxCropImage" + "Node name for S&R": "PM_BoxCropImage" }, "color": "#432", "bgcolor": "#653" @@ -2045,7 +1695,7 @@ "1": 26 }, "flags": {}, - "order": 51, + "order": 45, "mode": 0, "inputs": [ { @@ -2083,7 +1733,7 @@ "1": 371.5691833496094 }, "flags": {}, - "order": 57, + "order": 50, "mode": 0, "inputs": [ { @@ -2110,7 +1760,7 @@ "1": 26 }, "flags": {}, - "order": 38, + "order": 33, "mode": 0, "inputs": [ { @@ -2148,7 +1798,7 @@ "1": 366.7618713378906 }, "flags": {}, - "order": 42, + "order": 37, "mode": 0, "inputs": [ { @@ -2165,7 +1815,7 @@ }, { "id": 116, - "type": "FaceSkin", + "type": "PM_FaceSkin", "pos": [ 3947.6971165729174, 916.3812217888392 @@ -2175,7 +1825,7 @@ "1": 26 }, "flags": {}, - "order": 66, + "order": 59, "mode": 0, "inputs": [ { @@ -2197,7 +1847,7 @@ } ], "properties": { - "Node name for S&R": "FaceSkin" + "Node name for S&R": "PM_FaceSkin" }, "color": "#432", "bgcolor": "#653" @@ -2214,7 +1864,7 @@ "1": 26 }, "flags": {}, - "order": 68, + "order": 61, "mode": 0, "inputs": [ { @@ -2242,7 +1892,7 @@ }, { "id": 129, - "type": "MaskMerge2Image", + "type": "PM_MaskMerge2Image", "pos": [ 4173.697116572917, 917.3812217888392 @@ -2252,7 +1902,7 @@ "1": 86 }, "flags": {}, - "order": 69, + "order": 62, "mode": 0, "inputs": [ { @@ -2289,7 +1939,7 @@ } ], "properties": { - "Node name for S&R": "MaskMerge2Image" + "Node name for S&R": "PM_MaskMerge2Image" }, "color": "#432", "bgcolor": "#653" @@ -2306,7 +1956,7 @@ "1": 474.0000305175781 }, "flags": {}, - "order": 58, + "order": 51, "mode": 0, "inputs": [ { @@ -2369,7 +2019,7 @@ "1": 46 }, "flags": {}, - "order": 60, + "order": 53, "mode": 0, "inputs": [ { @@ -2414,7 +2064,7 @@ "1": 542.2775268554688 }, "flags": {}, - "order": 62, + "order": 55, "mode": 0, "inputs": [ { @@ -2441,7 +2091,7 @@ "1": 289.9919128417969 }, "flags": {}, - "order": 70, + "order": 63, "mode": 0, "inputs": [ { @@ -2468,7 +2118,7 @@ "1": 272.66497802734375 }, "flags": {}, - "order": 71, + "order": 64, "mode": 0, "inputs": [ { @@ -2495,7 +2145,7 @@ "1": 312.9284362792969 }, "flags": {}, - "order": 73, + "order": 66, "mode": 0, "inputs": [ { @@ -2510,59 +2160,9 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 131, - "type": "ReplaceBoxImg", - "pos": [ - 4468.597659337641, - 923.3256351495594 - ], - "size": { - "0": 241.79998779296875, - "1": 66 - }, - "flags": {}, - "order": 72, - "mode": 0, - "inputs": [ - { - "name": "origin_image", - "type": "IMAGE", - "link": 222 - }, - { - "name": "box_area", - "type": "BOX", - "link": 223 - }, - { - "name": "replace_image", - "type": "IMAGE", - "link": 224 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 225, - 231, - 233 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ReplaceBoxImg" - }, - "color": "#432", - "bgcolor": "#653" - }, { "id": 112, - "type": "BoxCropImage", + "type": "PM_BoxCropImage", "pos": [ 3332.2530565053057, 923.3917764620863 @@ -2572,7 +2172,7 @@ "1": 46 }, "flags": {}, - "order": 63, + "order": 56, "mode": 0, "inputs": [ { @@ -2601,7 +2201,7 @@ } ], "properties": { - "Node name for S&R": "BoxCropImage" + "Node name for S&R": "PM_BoxCropImage" }, "color": "#432", "bgcolor": "#653" @@ -2618,7 +2218,7 @@ "1": 309.7984313964844 }, "flags": {}, - "order": 52, + "order": 46, "mode": 0, "inputs": [ { @@ -2633,126 +2233,6 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 133, - "type": "FaceFusionPM", - "pos": [ - 4792, - 919 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 74, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 231 - }, - { - "name": "user_image", - "type": "IMAGE", - "link": 230 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 232, - 234 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FaceFusionPM" - }, - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 134, - "type": "RatioMerge2Image", - "pos": [ - 5024, - 916 - ], - "size": { - "0": 315, - "1": 78 - }, - "flags": {}, - "order": 75, - "mode": 0, - "inputs": [ - { - "name": "image1", - "type": "IMAGE", - "link": 233 - }, - { - "name": "image2", - "type": "IMAGE", - "link": 232 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 235, - 263, - 267, - 268 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "RatioMerge2Image" - }, - "widgets_values": [ - 0.5 - ], - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 136, - "type": "PreviewImage", - "pos": [ - 5042, - 1041 - ], - "size": { - "0": 193.42605590820312, - "1": 325.4287414550781 - }, - "flags": {}, - "order": 77, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 235 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - }, - "color": "#432", - "bgcolor": "#653" - }, { "id": 135, "type": "PreviewImage", @@ -2765,13 +2245,13 @@ "1": 313.27972412109375 }, "flags": {}, - "order": 76, + "order": 68, "mode": 0, "inputs": [ { "name": "images", "type": "IMAGE", - "link": 234 + "link": 332 } ], "properties": { @@ -2792,7 +2272,7 @@ "1": 332.3785095214844 }, "flags": {}, - "order": 64, + "order": 57, "mode": 0, "inputs": [ { @@ -2809,7 +2289,7 @@ }, { "id": 111, - "type": "ColorTransfer", + "type": "PM_ColorTransfer", "pos": [ 3597, 923 @@ -2819,7 +2299,7 @@ "1": 46 }, "flags": {}, - "order": 65, + "order": 58, "mode": 0, "inputs": [ { @@ -2846,7 +2326,7 @@ } ], "properties": { - "Node name for S&R": "ColorTransfer" + "Node name for S&R": "PM_ColorTransfer" }, "color": "#432", "bgcolor": "#653" @@ -2863,7 +2343,7 @@ "1": 311.90179443359375 }, "flags": {}, - "order": 67, + "order": 60, "mode": 0, "inputs": [ { @@ -2878,55 +2358,6 @@ "color": "#432", "bgcolor": "#653" }, - { - "id": 36, - "type": "RatioMerge2Image", - "pos": [ - 2395, - 905 - ], - "size": { - "0": 315, - "1": 78 - }, - "flags": {}, - "order": 41, - "mode": 0, - "inputs": [ - { - "name": "image1", - "type": "IMAGE", - "link": 306 - }, - { - "name": "image2", - "type": "IMAGE", - "link": 32 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 33, - 159, - 176, - 179 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "RatioMerge2Image" - }, - "widgets_values": [ - 0.5 - ], - "color": "#432", - "bgcolor": "#653" - }, { "id": 28, "type": "PreviewImage", @@ -2939,7 +2370,7 @@ "1": 457.4342346191406 }, "flags": {}, - "order": 35, + "order": 29, "mode": 0, "inputs": [ { @@ -2956,7 +2387,7 @@ }, { "id": 159, - "type": "BoxCropImage", + "type": "PM_BoxCropImage", "pos": [ 5123.203406087166, 1582.268527825492 @@ -2966,7 +2397,7 @@ "1": 46 }, "flags": {}, - "order": 87, + "order": 80, "mode": 0, "inputs": [ { @@ -2994,7 +2425,7 @@ } ], "properties": { - "Node name for S&R": "BoxCropImage" + "Node name for S&R": "PM_BoxCropImage" }, "color": "#233", "bgcolor": "#355" @@ -3011,7 +2442,7 @@ "1": 246 }, "flags": {}, - "order": 88, + "order": 81, "mode": 0, "inputs": [ { @@ -3028,7 +2459,7 @@ }, { "id": 161, - "type": "ColorTransfer", + "type": "PM_ColorTransfer", "pos": [ 5363.203406087166, 1580.268527825492 @@ -3038,7 +2469,7 @@ "1": 46 }, "flags": {}, - "order": 89, + "order": 82, "mode": 0, "inputs": [ { @@ -3066,14 +2497,14 @@ } ], "properties": { - "Node name for S&R": "ColorTransfer" + "Node name for S&R": "PM_ColorTransfer" }, "color": "#233", "bgcolor": "#355" }, { "id": 163, - "type": "FaceSkin", + "type": "PM_FaceSkin", "pos": [ 5704.203406087166, 1585.268527825492 @@ -3083,7 +2514,7 @@ "1": 26 }, "flags": {}, - "order": 91, + "order": 84, "mode": 0, "inputs": [ { @@ -3105,7 +2536,7 @@ } ], "properties": { - "Node name for S&R": "FaceSkin" + "Node name for S&R": "PM_FaceSkin" }, "color": "#233", "bgcolor": "#355" @@ -3122,7 +2553,7 @@ "1": 26 }, "flags": {}, - "order": 92, + "order": 85, "mode": 0, "inputs": [ { @@ -3160,7 +2591,7 @@ "1": 246 }, "flags": {}, - "order": 90, + "order": 83, "mode": 0, "inputs": [ { @@ -3187,7 +2618,7 @@ "1": 246 }, "flags": {}, - "order": 94, + "order": 87, "mode": 0, "inputs": [ { @@ -3214,7 +2645,7 @@ "1": 246 }, "flags": {}, - "order": 95, + "order": 88, "mode": 0, "inputs": [ { @@ -3241,7 +2672,7 @@ "1": 390.3131408691406 }, "flags": {}, - "order": 97, + "order": 90, "mode": 0, "inputs": [ { @@ -3256,133 +2687,6 @@ "color": "#233", "bgcolor": "#355" }, - { - "id": 34, - "type": "FaceFusionPM", - "pos": [ - 2059, - 919 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 34, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 305 - }, - { - "name": "user_image", - "type": "IMAGE", - "link": 29 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 30, - 32 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "FaceFusionPM" - }, - "color": "#432", - "bgcolor": "#653" - }, - { - "id": 7, - "type": "LoadImage", - "pos": [ - 229.70070182985916, - 220.61377135182522 - ], - "size": { - "0": 315, - "1": 314 - }, - "flags": {}, - "order": 7, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 6 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "2_face_id_img.png", - "image" - ], - "color": "#322", - "bgcolor": "#533" - }, - { - "id": 6, - "type": "LoadImage", - "pos": [ - 224.87218531719975, - -201.79718863294983 - ], - "size": { - "0": 303.5721130371094, - "1": 314 - }, - "flags": {}, - "order": 8, - "mode": 0, - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 29, - 230 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "MASK", - "type": "MASK", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadImage" - }, - "widgets_values": [ - "1_roop_image.png", - "image" - ], - "color": "#322", - "bgcolor": "#533" - }, { "id": 96, "type": "LoraLoader", @@ -3395,7 +2699,7 @@ "1": 126 }, "flags": {}, - "order": 13, + "order": 11, "mode": 0, "inputs": [ { @@ -3452,7 +2756,7 @@ "1": 126 }, "flags": {}, - "order": 23, + "order": 19, "mode": 0, "inputs": [ { @@ -3505,7 +2809,7 @@ "1": 98 }, "flags": {}, - "order": 9, + "order": 4, "mode": 0, "outputs": [ { @@ -3558,7 +2862,7 @@ "1": 98 }, "flags": {}, - "order": 10, + "order": 5, "mode": 0, "outputs": [ { @@ -3601,7 +2905,7 @@ }, { "id": 166, - "type": "MaskMerge2Image", + "type": "PM_MaskMerge2Image", "pos": [ 5972.203406087166, 1576.268527825492 @@ -3611,7 +2915,7 @@ "1": 86 }, "flags": {}, - "order": 93, + "order": 86, "mode": 0, "inputs": [ { @@ -3648,7 +2952,7 @@ } ], "properties": { - "Node name for S&R": "MaskMerge2Image" + "Node name for S&R": "PM_MaskMerge2Image" }, "color": "#233", "bgcolor": "#355" @@ -3665,7 +2969,7 @@ "1": 46 }, "flags": {}, - "order": 85, + "order": 78, "mode": 0, "inputs": [ { @@ -3698,52 +3002,6 @@ "color": "#323", "bgcolor": "#535" }, - { - "id": 182, - "type": "ImageScaleShort", - "pos": [ - 1392, - 943 - ], - "size": { - "0": 315, - "1": 82 - }, - "flags": {}, - "order": 28, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 308 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 304, - 305, - 306, - 307, - 309 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "ImageScaleShort" - }, - "widgets_values": [ - 512, - false - ], - "color": "#232", - "bgcolor": "#353" - }, { "id": 18, "type": "PreviewImage", @@ -3756,7 +3014,7 @@ "1": 379.23468017578125 }, "flags": {}, - "order": 27, + "order": 23, "mode": 0, "inputs": [ { @@ -3783,7 +3041,7 @@ "1": 451.2484130859375 }, "flags": {}, - "order": 11, + "order": 6, "mode": 0, "inputs": [], "outputs": [ @@ -3818,7 +3076,7 @@ }, { "id": 17, - "type": "RetainFace", + "type": "PM_RetinaFace", "pos": [ 496, 1316 @@ -3828,7 +3086,7 @@ "1": 98 }, "flags": {}, - "order": 20, + "order": 18, "mode": 0, "inputs": [ { @@ -3869,7 +3127,7 @@ } ], "properties": { - "Node name for S&R": "RetainFace" + "Node name for S&R": "PM_RetinaFace" }, "widgets_values": [ 3 @@ -3879,7 +3137,7 @@ }, { "id": 168, - "type": "ReplaceBoxImg", + "type": "PM_ReplaceBoxImg", "pos": [ 6250, 1578 @@ -3889,7 +3147,7 @@ "1": 66 }, "flags": {}, - "order": 96, + "order": 89, "mode": 0, "inputs": [ { @@ -3922,14 +3180,14 @@ } ], "properties": { - "Node name for S&R": "ReplaceBoxImg" + "Node name for S&R": "PM_ReplaceBoxImg" }, "color": "#233", "bgcolor": "#355" }, { "id": 187, - "type": "ReplaceBoxImg", + "type": "PM_ReplaceBoxImg", "pos": [ 6403.457330302668, 495.25006011167324 @@ -3939,7 +3197,7 @@ "1": 66 }, "flags": {}, - "order": 100, + "order": 93, "mode": 0, "inputs": [ { @@ -3971,14 +3229,14 @@ } ], "properties": { - "Node name for S&R": "ReplaceBoxImg" + "Node name for S&R": "PM_ReplaceBoxImg" }, "color": "#2a363b", "bgcolor": "#3f5159" }, { "id": 185, - "type": "GetImageInfo", + "type": "PM_GetImageInfo", "pos": [ 5761.457330302668, 524.2500601116733 @@ -3988,7 +3246,7 @@ "1": 46 }, "flags": {}, - "order": 29, + "order": 25, "mode": 0, "inputs": [ { @@ -4018,14 +3276,14 @@ } ], "properties": { - "Node name for S&R": "GetImageInfo" + "Node name for S&R": "PM_GetImageInfo" }, "color": "#2a363b", "bgcolor": "#3f5159" }, { "id": 179, - "type": "ImageResizeTarget", + "type": "PM_ImageResizeTarget", "pos": [ 6045.457330302668, 501.25006011167324 @@ -4035,7 +3293,7 @@ "1": 82 }, "flags": {}, - "order": 98, + "order": 91, "mode": 0, "inputs": [ { @@ -4073,7 +3331,7 @@ } ], "properties": { - "Node name for S&R": "ImageResizeTarget" + "Node name for S&R": "PM_ImageResizeTarget" }, "widgets_values": [ 512, @@ -4089,12 +3347,12 @@ 7030, 586 ], - "size": [ - 262.59469973389605, - 362.46118824673806 - ], + "size": { + "0": 262.5946960449219, + "1": 362.461181640625 + }, "flags": {}, - "order": 105, + "order": 98, "mode": 0, "inputs": [ { @@ -4111,7 +3369,7 @@ }, { "id": 177, - "type": "PortraitEnhancement", + "type": "PM_PortraitEnhancement", "pos": [ 7058, 507 @@ -4121,7 +3379,7 @@ "1": 26 }, "flags": {}, - "order": 104, + "order": 97, "mode": 0, "inputs": [ { @@ -4142,14 +3400,14 @@ } ], "properties": { - "Node name for S&R": "PortraitEnhancement" + "Node name for S&R": "PM_PortraitEnhancement" }, "color": "#2a363b", "bgcolor": "#3f5159" }, { "id": 175, - "type": "SkinRetouching", + "type": "PM_SkinRetouching", "pos": [ 6757, 506 @@ -4159,7 +3417,7 @@ "1": 26 }, "flags": {}, - "order": 102, + "order": 95, "mode": 0, "inputs": [ { @@ -4181,7 +3439,7 @@ } ], "properties": { - "Node name for S&R": "SkinRetouching" + "Node name for S&R": "PM_SkinRetouching" }, "color": "#2a363b", "bgcolor": "#3f5159" @@ -4193,12 +3451,12 @@ 6740, 599 ], - "size": [ - 241.12958015883214, - 340.8521809223266 - ], + "size": { + "0": 241.12957763671875, + "1": 340.8521728515625 + }, "flags": {}, - "order": 103, + "order": 96, "mode": 0, "inputs": [ { @@ -4220,12 +3478,12 @@ 6413, 627 ], - "size": [ - 238.61389568516825, - 313.24336879908617 - ], + "size": { + "0": 238.6138916015625, + "1": 313.2433776855469 + }, "flags": {}, - "order": 101, + "order": 94, "mode": 0, "inputs": [ { @@ -4247,12 +3505,12 @@ 6089, 638 ], - "size": [ - 251.21209716796875, - 246 - ], + "size": { + "0": 251.21209716796875, + "1": 246 + }, "flags": {}, - "order": 99, + "order": 92, "mode": 0, "inputs": [ { @@ -4266,17 +3524,497 @@ }, "color": "#2a363b", "bgcolor": "#3f5159" + }, + { + "id": 36, + "type": "PM_RatioMerge2Image", + "pos": [ + 2395, + 905 + ], + "size": { + "0": 315, + "1": 78 + }, + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 306 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 333 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 33, + 159, + 176, + 328 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PM_RatioMerge2Image" + }, + "widgets_values": [ + 0.5 + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 102, + "type": "ControlNetLoader", + "pos": [ + 2653, + -73 + ], + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 7, + "mode": 0, + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 165 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "control_v11p_sd15_openpose.pth" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 131, + "type": "PM_ReplaceBoxImg", + "pos": [ + 4468.597659337641, + 923.3256351495594 + ], + "size": { + "0": 241.79998779296875, + "1": 66 + }, + "flags": {}, + "order": 65, + "mode": 0, + "inputs": [ + { + "name": "origin_image", + "type": "IMAGE", + "link": 222 + }, + { + "name": "box_area", + "type": "BOX", + "link": 223 + }, + { + "name": "replace_image", + "type": "IMAGE", + "link": 224 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 225, + 233, + 329, + 332 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PM_ReplaceBoxImg" + }, + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 189, + "type": "PM_FaceFusion", + "pos": [ + 4783, + 907 + ], + "size": { + "0": 315, + "1": 78 + }, + "flags": {}, + "order": 67, + "mode": 0, + "inputs": [ + { + "name": "source_image", + "type": "IMAGE", + "link": 329 + }, + { + "name": "swap_image", + "type": "IMAGE", + "link": 330 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 331 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PM_FaceFusion" + }, + "widgets_values": [ + "ali" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 136, + "type": "PreviewImage", + "pos": [ + 5155, + 1038 + ], + "size": { + "0": 193.42605590820312, + "1": 325.4287414550781 + }, + "flags": {}, + "order": 70, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 235 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 134, + "type": "PM_RatioMerge2Image", + "pos": [ + 5139, + 915 + ], + "size": { + "0": 315, + "1": 78 + }, + "flags": {}, + "order": 69, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 233 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 331 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 235, + 263, + 267, + 268 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PM_RatioMerge2Image" + }, + "widgets_values": [ + 0.5 + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 182, + "type": "PM_ImageScaleShort", + "pos": [ + 1392, + 943 + ], + "size": { + "0": 315, + "1": 82 + }, + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 308 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 304, + 306, + 307, + 309, + 334 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PM_ImageScaleShort" + }, + "widgets_values": [ + 512, + false + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 6, + "type": "LoadImage", + "pos": [ + 682.605236049619, + 370.3025996971252 + ], + "size": [ + 303.5721130371094, + 314.0000114440918 + ], + "flags": {}, + "order": 8, + "mode": 0, + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 330, + 335 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "1_roop_image.png", + "image" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 35, + "type": "PreviewImage", + "pos": [ + 1900, + 1041 + ], + "size": { + "0": 221.13848876953125, + "1": 366.3678894042969 + }, + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 337 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 137, + "type": "VAELoader", + "pos": [ + 2847.803313096945, + 3315.7026275637395 + ], + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 9, + "mode": 0, + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 239, + 245 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "vae-ft-mse-840000-ema-pruned.ckpt" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 46, + "type": "VAELoader", + "pos": [ + 1663.2232990321354, + 516.5286931795088 + ], + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 10, + "mode": 0, + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 141, + 142 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "vae-ft-mse-840000-ema-pruned.ckpt" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 190, + "type": "PM_FaceFusion", + "pos": [ + 1892, + 915 + ], + "size": { + "0": 315, + "1": 78 + }, + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [ + { + "name": "source_image", + "type": "IMAGE", + "link": 334 + }, + { + "name": "swap_image", + "type": "IMAGE", + "link": 335 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 333, + 337 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PM_FaceFusion" + }, + "widgets_values": [ + "ali" + ], + "color": "#432", + "bgcolor": "#653" } ], "links": [ - [ - 6, - 7, - 0, - 8, - 0, - "IMAGE" - ], [ 7, 9, @@ -4309,30 +4047,6 @@ 0, "IMAGE" ], - [ - 11, - 8, - 0, - 14, - 0, - "IMAGE" - ], - [ - 12, - 8, - 1, - 15, - 0, - "MASK" - ], - [ - 13, - 15, - 0, - 16, - 0, - "IMAGE" - ], [ 14, 17, @@ -4389,30 +4103,6 @@ 0, "IMAGE" ], - [ - 29, - 6, - 0, - 34, - 1, - "IMAGE" - ], - [ - 30, - 34, - 0, - 35, - 0, - "IMAGE" - ], - [ - 32, - 34, - 0, - 36, - 1, - "IMAGE" - ], [ 33, 36, @@ -4677,22 +4367,6 @@ 0, "IMAGE" ], - [ - 179, - 36, - 0, - 108, - 0, - "IMAGE" - ], - [ - 181, - 108, - 0, - 110, - 0, - "IMAGE" - ], [ 188, 38, @@ -4877,30 +4551,6 @@ 0, "IMAGE" ], - [ - 230, - 6, - 0, - 133, - 1, - "IMAGE" - ], - [ - 231, - 131, - 0, - 133, - 0, - "IMAGE" - ], - [ - 232, - 133, - 0, - 134, - 1, - "IMAGE" - ], [ 233, 131, @@ -4909,14 +4559,6 @@ 0, "IMAGE" ], - [ - 234, - 133, - 0, - 135, - 0, - "IMAGE" - ], [ 235, 134, @@ -5301,14 +4943,6 @@ 0, "IMAGE" ], - [ - 305, - 182, - 0, - 34, - 0, - "IMAGE" - ], [ 306, 182, @@ -5428,30 +5062,92 @@ 179, 0, "IMAGE" + ], + [ + 328, + 36, + 0, + 105, + 3, + "IMAGE" + ], + [ + 329, + 131, + 0, + 189, + 0, + "IMAGE" + ], + [ + 330, + 6, + 0, + 189, + 1, + "IMAGE" + ], + [ + 331, + 189, + 0, + 134, + 1, + "IMAGE" + ], + [ + 332, + 131, + 0, + 135, + 0, + "IMAGE" + ], + [ + 333, + 190, + 0, + 36, + 1, + "IMAGE" + ], + [ + 334, + 182, + 0, + 190, + 0, + "IMAGE" + ], + [ + 335, + 6, + 0, + 190, + 1, + "IMAGE" + ], + [ + 337, + 190, + 0, + 35, + 0, + "IMAGE" ] ], "groups": [ { "title": "Roop Image", "bounding": [ - 214, - -277, + 672, + 295, 333, 410 ], "color": "#A88", - "font_size": 24 - }, - { - "title": "FaceIdImage", - "bounding": [ - 224, - 158, - 905, - 540 - ], - "color": "#A88", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Template", @@ -5462,7 +5158,8 @@ 1146 ], "color": "#8A8", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Resize 512 InputImage ", @@ -5473,10 +5170,11 @@ 715 ], "color": "#8A8", - "font_size": 24 + "font_size": 24, + "locked": false }, { - "title": "RetainFace 1.1", + "title": "PM_RetinaFace 1.1", "bounding": [ 1989, 1516, @@ -5484,18 +5182,20 @@ 690 ], "color": "#88A", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "First Face Fusion", "bounding": [ - 2048, - 849, - 252, - 546 + 1877, + 836, + 366, + 580 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Ratio Merge InputImage and first face fusion", @@ -5506,7 +5206,8 @@ 600 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Expand InputMask 0.15", @@ -5517,7 +5218,8 @@ 680 ], "color": "#88A", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "BoxCrop", @@ -5528,7 +5230,8 @@ 524 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "First Inpainting", @@ -5539,7 +5242,8 @@ 1042 ], "color": "#a1309b", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Color transfer", @@ -5550,10 +5254,11 @@ 526 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { - "title": "FaceSkin", + "title": "PM_FaceSkin", "bounding": [ 3933, 841, @@ -5561,7 +5266,8 @@ 531 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "FirstFusionResult", @@ -5572,18 +5278,20 @@ 527 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Second Fusion", "bounding": [ 4780, 844, - 571, - 527 + 745, + 539 ], "color": "#b58b2a", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Second inpainting", @@ -5594,10 +5302,11 @@ 1223 ], "color": "#a1309b", - "font_size": 24 + "font_size": 24, + "locked": false }, { - "title": "Just like the previous process, color transfer ->faceskin-> mask merge-> replace box image", + "title": "Just like the previous process, color transfer ->PM_FaceSkin-> mask merge-> replace box image", "bounding": [ 5089, 1498, @@ -5605,7 +5314,8 @@ 752 ], "color": "#8AA", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "dilate and erode mask", @@ -5616,7 +5326,8 @@ 670 ], "color": "#88A", - "font_size": 24 + "font_size": 24, + "locked": false }, { "title": "Final processor", @@ -5627,7 +5338,8 @@ 585 ], "color": "#3f789e", - "font_size": 24 + "font_size": 24, + "locked": false } ], "config": {},