diff --git a/node_io.py b/node_io.py index 21ac6d0..747d4d3 100644 --- a/node_io.py +++ b/node_io.py @@ -17,7 +17,7 @@ from .helpers.imgutil import scale_tensor_image # ============================================================================== -# adpated from ComfyUI SaveImagne node +# adpated from ComfyUI SaveImage node # ============================================================================== class PseudoSaveImageWithEmbeddedMasks: def __init__(self): diff --git a/node_processing.py b/node_processing.py index 7cac3e4..47d0921 100644 --- a/node_processing.py +++ b/node_processing.py @@ -122,7 +122,12 @@ class PseudoProcessMaterialPrompts: mat_msks = mat_msks_lst # if scale_to is a list, use the first element - if isinstance(scale_msk_to, list) and len(scale_msk_to)>0: scale_msk_to = scale_msk_to[0] + if isinstance(scale_msk_to, list) and len(scale_msk_to)>0: scale_msk_to = scale_msk_to[0] + + # verify scale_to value - ComfyUI is behaving weirdly about the default value + if not scale_img_to or scale_img_to not in ["512", "1024"]: + scale_img_to = "1024" + # Convert scale_to from string to int scale_to_int = int(scale_msk_to) if scale_to_int not in [512, 1024]: @@ -190,6 +195,10 @@ class PseudoProcessImagePrompt: def func(self, img, scale_img_to): print(f"[pseudocomfy] ProcessImagePrompt\n\tscale_to: {scale_img_to}\n\timg: {tuple(img.shape)}") + # verify scale_to value - ComfyUI is behaving weirdly about the default value + if not scale_img_to or scale_img_to not in ["512", "1024"]: + scale_img_to = "1024" + # Convert scale_to from string to int scale_to_int = int(scale_img_to) if scale_to_int not in [512, 1024]: diff --git a/node_utils.py b/node_utils.py index c409c3d..22d0378 100644 --- a/node_utils.py +++ b/node_utils.py @@ -30,7 +30,7 @@ class PseudoMaskBlur: def INPUT_TYPES(s): return { "required": { - "msk": ("MASK",), + "msks_list": ("MASK",), "blur_radius": ("INT", { "default": 1, "min": 1, @@ -47,48 +47,64 @@ class PseudoMaskBlur: }, } + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True,) RETURN_TYPES = ("MASK",) - RETURN_NAMES = ("msk",) + RETURN_NAMES = ("msks",) FUNCTION = "blur" CATEGORY = "Pseudocomfy/Utils" - def blur(self, msk: torch.Tensor, blur_radius: int, sigma: float, invert): + def blur(self, msks_list, blur_radius: int, sigma: float, invert): """ - Expects (1, H, W) or (B, H, W) + Apply Gaussian blur to a list of masks. + Expects each mask to be (1, H, W) or (B, H, W) """ - print(f"[pseudocomfy] BlurMask blur_radius:{blur_radius} sigma:{sigma} msk shape:{tuple(msk.shape)}") + # given that INPUT_IS_LIST, msks_list is a list of masks + # if inputs that are meant to be singletons are a list, use the first element + if isinstance(blur_radius, list) and len(blur_radius)>0: blur_radius = blur_radius[0] + if isinstance(sigma, list) and len(sigma)>0: sigma = sigma[0] + if isinstance(invert, list) and len(invert)>0: invert = invert[0] - if blur_radius == 0: - return (msk,) + + print(f"[pseudocomfy] BlurMask blur_radius:{blur_radius} sigma:{sigma}") - device = msk.device + results = [] + for msk in msks_list: + print(f"\tmsk shape:{tuple(msk.shape)}") - # Ensure batch dimension - if msk.ndim == 2: - msk = msk.unsqueeze(0) # (1, H, W) + if blur_radius == 0: + results.append(msk) + continue - B, H, W = msk.shape + device = msk.device - # Add channel dimension for conv2d - msk = msk.unsqueeze(1) # (B, 1, H, W) + # Ensure batch dimension + if msk.ndim == 2: + msk = msk.unsqueeze(0) # (1, H, W) - kernel_size = blur_radius * 2 + 1 - kernel = self.gaussian_kernel(kernel_size, sigma, device=device) - kernel = kernel.expand(1, 1, kernel_size, kernel_size) + B, H, W = msk.shape - pad = blur_radius - padded_image = F.pad(msk, (pad, pad, pad, pad), mode='reflect') - blurred = F.conv2d(padded_image, kernel, padding=0, groups=1) - blurred = blurred[:, :, pad:-pad, pad:-pad] # Remove extra padding + # Add channel dimension for conv2d + msk = msk.unsqueeze(1) # (B, 1, H, W) - # Remove channel dimension - result = blurred.squeeze(1) # (B, H, W) + kernel_size = blur_radius * 2 + 1 + kernel = self.gaussian_kernel(kernel_size, sigma, device=device) + kernel = kernel.expand(1, 1, kernel_size, kernel_size) - if invert: - result = 1.0 - result - result = torch.clamp(result, 0.0, 1.0) + pad = blur_radius + padded_image = F.pad(msk, (pad, pad, pad, pad), mode='reflect') + blurred = F.conv2d(padded_image, kernel, padding=0, groups=1) + blurred = blurred[:, :, pad:-pad, pad:-pad] # Remove extra padding - return (result,) + # Remove channel dimension + result = blurred.squeeze(1) # (B, H, W) + + if invert: + result = 1.0 - result + result = torch.clamp(result, 0.0, 1.0) + + results.append(result) + return (results,) def gaussian_kernel(self, kernel_size, sigma, device): """Create a 2D Gaussian kernel.""" @@ -112,7 +128,7 @@ class PseudoMaskClamp: def INPUT_TYPES(s): return { "required": { - "msk": ("MASK",), + "msks_list": ("MASK",), "min_val": ("FLOAT", { "default": 0.0, "min": 0.0, @@ -130,20 +146,31 @@ class PseudoMaskClamp: } } + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True,) RETURN_TYPES = ("MASK",) - RETURN_NAMES = ("msk",) + RETURN_NAMES = ("msks",) FUNCTION = "clamp" CATEGORY = "Pseudocomfy/Utils" - def clamp(self, msk: torch.Tensor, min_val: float, max_val: float): + def clamp(self, msks_list, min_val: float, max_val: float): """ - Clamp mask values to [min_val, max_val]. + Clamp mask values to [min_val, max_val] for a list of masks. """ + # given that INPUT_IS_LIST, msks_list is a list of masks + # if inputs that are meant to be singletons are a list, use the first element + if isinstance(min_val, list) and len(min_val)>0: min_val = min_val[0] + if isinstance(max_val, list) and len(max_val)>0: max_val = max_val[0] + print(f"[pseudocomfy] ClampMask") - print(f"\tmsk shape:{tuple(msk.shape)}") - print(f"\tclamping mask of ({msk.min():.3f} -> {msk.max():.3f}) to ({min_val:.3f} -> {max_val:.3f})") - clamped = torch.clamp(msk, min=min_val, max=max_val) - return (clamped,) + + results = [] + for msk in msks_list: + print(f"\tmsk shape:{tuple(msk.shape)}") + print(f"\tclamping mask of ({msk.min():.3f} -> {msk.max():.3f}) to ({min_val:.3f} -> {max_val:.3f})") + clamped = torch.clamp(msk, min=min_val, max=max_val) + results.append(clamped) + return (results,) class PseudoMaskRemap: """ @@ -161,7 +188,7 @@ class PseudoMaskRemap: def INPUT_TYPES(s): return { "required": { - "msk": ("MASK",), + "msks_list": ("MASK",), }, "optional": { "src_min": ("FLOAT", {"forceInput": True}), # force input b/c can't have widget for None @@ -181,34 +208,47 @@ class PseudoMaskRemap: } } + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True,) RETURN_TYPES = ("MASK",) - RETURN_NAMES = ("msk",) + RETURN_NAMES = ("msks",) FUNCTION = "remap" CATEGORY = "Pseudocomfy/Utils" - def remap(self, msk: torch.Tensor, src_min: float = None, src_max: float = None, tgt_min: float = 0.0, tgt_max: float = 1.0): + def remap(self, msks_list, src_min: float = None, src_max: float = None, tgt_min: float = 0.0, tgt_max: float = 1.0): """ - Remap mask values from [src_min, src_max] to [tgt_min, tgt_max]. + Remap mask values from [src_min, src_max] to [tgt_min, tgt_max] for a list of masks. """ - mask_min = float(msk.min()) - mask_max = float(msk.max()) - from_min = src_min if src_min is not None else mask_min - from_max = src_max if src_max is not None else mask_max - to_min = tgt_min - to_max = tgt_max + # given that INPUT_IS_LIST, msks_list is a list of masks + # if inputs that are meant to be singletons are a list, use the first element + if isinstance(src_min, list) and len(src_min)>0: src_min = src_min[0] + if isinstance(src_max, list) and len(src_max)>0: src_max = src_max[0] + if isinstance(tgt_min, list) and len(tgt_min)>0: tgt_min = tgt_min[0] + if isinstance(tgt_max, list) and len(tgt_max)>0: tgt_max = tgt_max[0] print(f"[pseudocomfy] RemapMask") - print(f"\tmsk shape:{tuple(msk.shape)}") - print(f"\tremapping mask of ({mask_min:.3f} -> {mask_max:.3f}) from ({from_min:.3f} -> {from_max:.3f}) to ({to_min:.3f} -> {to_max:.3f})") - # Avoid division by zero - if from_max - from_min == 0: - remapped = torch.full_like(msk, to_min) - else: - norm = (msk - from_min) / (from_max - from_min) - remapped = norm * (to_max - to_min) + to_min - remapped = torch.clamp(remapped, min(min(to_min, to_max), 0.0), max(max(to_min, to_max), 1.0)) - return (remapped,) + results = [] + for msk in msks_list: + mask_min = float(msk.min()) + mask_max = float(msk.max()) + from_min = src_min if src_min is not None else mask_min + from_max = src_max if src_max is not None else mask_max + to_min = tgt_min + to_max = tgt_max + + print(f"\tmsk shape:{tuple(msk.shape)}") + print(f"\tremapping mask of ({mask_min:.3f} -> {mask_max:.3f}) from ({from_min:.3f} -> {from_max:.3f}) to ({to_min:.3f} -> {to_max:.3f})") + + # Avoid division by zero + if from_max - from_min == 0: + remapped = torch.full_like(msk, to_min) + else: + norm = (msk - from_min) / (from_max - from_min) + remapped = norm * (to_max - to_min) + to_min + remapped = torch.clamp(remapped, min(min(to_min, to_max), 0.0), max(max(to_min, to_max), 1.0)) + results.append(remapped) + return (results,) class PseudoMaskInvert: """ @@ -222,27 +262,35 @@ class PseudoMaskInvert: def INPUT_TYPES(s): return { "required": { - "msk": ("MASK",), + "msks_list": ("MASK",), } } + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True,) RETURN_TYPES = ("MASK",) - RETURN_NAMES = ("msk",) + RETURN_NAMES = ("msks",) FUNCTION = "invert" CATEGORY = "Pseudocomfy/Utils" - def invert(self, msk: torch.Tensor): + def invert(self, msks_list): """ - Invert mask values (1 - mask). + Invert mask values (1 - mask) for a list of masks. """ - mask_min = float(msk.min()) - mask_max = float(msk.max()) - print(f"[pseudocomfy] MaskInvert") - print(f"\tmsk shape:{tuple(msk.shape)}") - print(f"\tinverting mask of ({mask_min:.3f} -> {mask_max:.3f}) to ({1-mask_max:.3f} -> {1-mask_min:.3f})") - inverted = 1.0 - msk - inverted = torch.clamp(inverted, 0.0, 1.0) - return (inverted,) + # given that INPUT_IS_LIST, msks_list is a list of masks + + print(f"[pseudocomfy] MaskInvert") + + results = [] + for msk in msks_list: + mask_min = float(msk.min()) + mask_max = float(msk.max()) + print(f"\tmsk shape:{tuple(msk.shape)}") + print(f"\tinverting mask of ({mask_min:.3f} -> {mask_max:.3f}) to ({1-mask_max:.3f} -> {1-mask_min:.3f})") + inverted = 1.0 - msk + inverted = torch.clamp(inverted, 0.0, 1.0) + results.append(inverted) + return (results,) class PseudoMaskReshape: """ @@ -259,7 +307,7 @@ class PseudoMaskReshape: def INPUT_TYPES(s): return { "required": { - "msk": ("MASK",), + "msks_list": ("MASK",), "operation": (["erode (shrink white areas)", "dilate (grow white areas)"], {}), "kernel_size": ("INT", { "default": 3, @@ -277,60 +325,74 @@ class PseudoMaskReshape: } } + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True,) RETURN_TYPES = ("MASK",) - RETURN_NAMES = ("msk",) + RETURN_NAMES = ("msks",) FUNCTION = "morph" CATEGORY = "Pseudocomfy/Utils" - def morph(self, msk: torch.Tensor, operation: str, kernel_size: int, iterations: int, invert): + def morph(self, msks_list, operation: str, kernel_size: int, iterations: int, invert): """ - Apply morphological operation to mask. + Apply morphological operation to a list of masks. """ - print(f"[pseudocomfy] MaskMorphology") - print(f"\tmsk shape:{tuple(msk.shape)}") - print(f"\toperation: {operation}, kernel_size: {kernel_size}, iterations: {iterations}") + # given that INPUT_IS_LIST, msks_list is a list of masks + # if inputs that are meant to be singletons are a list, use the first element + if isinstance(operation, list) and len(operation)>0: operation = operation[0] + if isinstance(kernel_size, list) and len(kernel_size)>0: kernel_size = kernel_size[0] + if isinstance(iterations, list) and len(iterations)>0: iterations = iterations[0] + if isinstance(invert, list) and len(invert)>0: invert = invert[0] - # Ensure batch dimension - if msk.ndim == 2: - msk = msk.unsqueeze(0) # (1, H, W) - B, H, W = msk.shape - - # Add channel dimension for conv2d - msk = msk.unsqueeze(1) # (B, 1, H, W) - - # Create structuring element (kernel) - kernel = torch.ones((1, 1, kernel_size, kernel_size), dtype=msk.dtype, device=msk.device) - - result = msk - for _ in range(iterations): - if operation[:3] == "ero": - result = torch.nn.functional.max_pool2d( - 1.0 - result, kernel_size=kernel_size, stride=1, padding=kernel_size // 2 - ) - result = 1.0 - result - elif operation[:3] == "dil": - result = torch.nn.functional.max_pool2d( - result, kernel_size=kernel_size, stride=1, padding=kernel_size // 2 - ) - else: - raise ValueError(f"Unknown operation: {operation}") - - # Remove channel dimension - result = result.squeeze(1) # (B, H, W) - if invert: - result = 1.0 - result - result = torch.clamp(result, 0.0, 1.0) + print(f"[pseudocomfy] MaskMorphology") + print(f"\toperation: {operation}, kernel_size: {kernel_size}, iterations: {iterations}, invert: {invert}") - print(f"\tresult range: ({result.min():.3f} -> {result.max():.3f})") - return (result,) + results = [] + for msk in msks_list: + print(f"\tmsk shape:{tuple(msk.shape)}") + + # Ensure batch dimension + if msk.ndim == 2: + msk = msk.unsqueeze(0) # (1, H, W) + B, H, W = msk.shape + + # Add channel dimension for conv2d + msk = msk.unsqueeze(1) # (B, 1, H, W) + + # Create structuring element (kernel) + kernel = torch.ones((1, 1, kernel_size, kernel_size), dtype=msk.dtype, device=msk.device) + + result = msk + for _ in range(iterations): + if operation[:3] == "ero": + result = torch.nn.functional.max_pool2d( + 1.0 - result, kernel_size=kernel_size, stride=1, padding=kernel_size // 2 + ) + result = 1.0 - result + elif operation[:3] == "dil": + result = torch.nn.functional.max_pool2d( + result, kernel_size=kernel_size, stride=1, padding=kernel_size // 2 + ) + else: + raise ValueError(f"Unknown operation: {operation}") + + # Remove channel dimension + result = result.squeeze(1) # (B, H, W) + + if invert: + result = 1.0 - result + result = torch.clamp(result, 0.0, 1.0) + + print(f"\tresult range: ({result.min():.3f} -> {result.max():.3f})") + results.append(result) + return (results,) class PseudoMaskAggregate: """ Utility class for combining a list of masks into a single mask using various arithmetic operations. Inputs: - msks (list[tensor]): List of mask tensors, each [1, H, W] or [B, H, W], values in [0, 1]. + msks_list (list[tensor]): List of mask tensors, each [1, H, W] or [B, H, W], values in [0, 1]. operation (str): Operation to perform. One of: - "sum_clamped": Sum all masks, clamp to [0, 1]. - "sum_normalized": Sum all masks, then normalize result to [0, 1]. @@ -345,7 +407,7 @@ class PseudoMaskAggregate: def INPUT_TYPES(s): return { "required": { - "msks": ("MASK", {"forceInput": True, "isList": True}), + "msks_list": ("MASK", {"forceInput": True, "isList": True}), "operation": (["sum_clamped", "sum_normalized", "average", "max", "min"], {}), "invert": ("BOOLEAN", {"default": False}), } @@ -357,14 +419,14 @@ class PseudoMaskAggregate: FUNCTION = "combine" CATEGORY = "Pseudocomfy/Utils" - def combine(self, msks, operation, invert): - # given that INPUT_IS_LIST, msks is a list of masks that should be aggregated + def combine(self, msks_list, operation, invert): + # given that INPUT_IS_LIST, msks_list is a list of masks # if inputs that are meant to be singletons are a list, use the first element if isinstance(operation, list) and len(operation)>0: operation = operation[0] if isinstance(invert, list) and len(invert)>0: invert = invert[0] # Stack masks to shape (N, H, W) or (N, 1, H, W) - msks = [m.float() for m in msks] + msks = [m.float() for m in msks_list] stack = torch.stack(msks, dim=0) print(f"[pseudocomfy] CombineMasks") print(f"\toperation: {operation}") diff --git a/workflows/example-workflow-1.json b/workflows/example-workflow-1.json deleted file mode 100644 index abe86b9..0000000 --- a/workflows/example-workflow-1.json +++ /dev/null @@ -1,927 +0,0 @@ -{ - "last_node_id": 50, - "last_link_id": 77, - "nodes": [ - { - "id": 1, - "type": "CheckpointLoaderSimple", - "pos": [ - 476, - 683 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 48 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 49 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 53 - ], - "slot_index": 2, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "albedobaseXL_v21.safetensors" - ] - }, - { - "id": 37, - "type": "ProcessJSON", - "pos": [ - 476, - 831 - ], - "size": { - "0": 315, - "1": 238 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "json_data", - "type": "DICT", - "link": 61 - } - ], - "outputs": [ - { - "name": "object_txts", - "type": "STRING_LIST", - "links": [ - 47 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "object_imgs", - "type": "IMAGE_LIST", - "links": null, - "slot_index": 1, - "shape": 3 - }, - { - "name": "masks", - "type": "MASK_LIST", - "links": [ - 62, - 76 - ], - "slot_index": 2, - "shape": 3 - }, - { - "name": "pmt_scene", - "type": "STRING", - "links": [ - 63 - ], - "slot_index": 3, - "shape": 3 - }, - { - "name": "pmt_style", - "type": "STRING", - "links": [ - 64 - ], - "slot_index": 4, - "shape": 3 - }, - { - "name": "pmt_negative", - "type": "STRING", - "links": [ - 65 - ], - "slot_index": 5, - "shape": 3 - }, - { - "name": "width", - "type": "INT", - "links": [ - 66, - 68 - ], - "slot_index": 6, - "shape": 3 - }, - { - "name": "height", - "type": "INT", - "links": [ - 67, - 69 - ], - "slot_index": 7, - "shape": 3 - }, - { - "name": "img_depth", - "type": "IMAGE", - "links": [ - 59, - 60 - ], - "slot_index": 8, - "shape": 3 - }, - { - "name": "img_edge", - "type": "IMAGE", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ProcessJSON" - }, - "widgets_values": [ - 2 - ] - }, - { - "id": 38, - "type": "Combiner", - "pos": [ - 858, - 805 - ], - "size": { - "0": 315, - "1": 214 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 48 - }, - { - "name": "clip", - "type": "CLIP", - "link": 49 - }, - { - "name": "object_txts", - "type": "STRING_LIST", - "link": 47 - }, - { - "name": "masks", - "type": "MASK_LIST", - "link": 62 - }, - { - "name": "pmt_scene", - "type": "STRING", - "link": 63, - "widget": { - "name": "pmt_scene" - } - }, - { - "name": "pmt_style", - "type": "STRING", - "link": 64, - "widget": { - "name": "pmt_style" - } - }, - { - "name": "pmt_negative", - "type": "STRING", - "link": 65, - "widget": { - "name": "pmt_negative" - } - }, - { - "name": "width", - "type": "INT", - "link": 66, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 67, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "model", - "type": "MODEL", - "links": [ - 74 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 55 - ], - "slot_index": 1, - "shape": 3 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 56 - ], - "slot_index": 2, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "Combiner" - }, - "widgets_values": [ - "", - "", - "", - 0, - 0 - ] - }, - { - "id": 39, - "type": "ControlNetApplyAdvanced", - "pos": [ - 1206, - 861 - ], - "size": { - "0": 315, - "1": 166 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "link": 55 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 56 - }, - { - "name": "control_net", - "type": "CONTROL_NET", - "link": 70 - }, - { - "name": "image", - "type": "IMAGE", - "link": 60 - } - ], - "outputs": [ - { - "name": "positive", - "type": "CONDITIONING", - "links": [ - 71 - ], - "slot_index": 0, - "shape": 3 - }, - { - "name": "negative", - "type": "CONDITIONING", - "links": [ - 72 - ], - "slot_index": 1, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetApplyAdvanced" - }, - "widgets_values": [ - 0.9, - 0, - 1 - ] - }, - { - "id": 41, - "type": "VAEDecode", - "pos": [ - 1928, - 858 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": {}, - "order": 12, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 75 - }, - { - "name": "vae", - "type": "VAE", - "link": 53 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 54 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 42, - "type": "PreviewImage", - "pos": [ - 2154, - 855 - ], - "size": { - "0": 529.305908203125, - "1": 482.1455383300781 - }, - "flags": {}, - "order": 13, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 54 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 43, - "type": "EmptyLatentImage", - "pos": [ - 1216, - 1086 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "width", - "type": "INT", - "link": 68, - "widget": { - "name": "width" - } - }, - { - "name": "height", - "type": "INT", - "link": 69, - "widget": { - "name": "height" - } - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 73 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyLatentImage" - }, - "widgets_values": [ - 512, - 512, - 1 - ] - }, - { - "id": 44, - "type": "PreviewImage", - "pos": [ - 1555, - 1152 - ], - "size": [ - 438.06577829034495, - 310.0912974285259 - ], - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 59 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 45, - "type": "LoadJSONFromFolder", - "pos": [ - 475, - 1132 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 1, - "mode": 0, - "outputs": [ - { - "name": "json_data", - "type": "DICT", - "links": [ - 61 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "LoadJSONFromFolder" - }, - "widgets_values": [ - "C:\\Users\\Documents\\ComfyUI\\custom_nodes\\Pseudocomfy\\spatial_packages" - ] - }, - { - "id": 46, - "type": "ControlNetLoader", - "pos": [ - 858, - 1083 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 2, - "mode": 0, - "outputs": [ - { - "name": "CONTROL_NET", - "type": "CONTROL_NET", - "links": [ - 70 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ControlNetLoader" - }, - "widgets_values": [ - "control-lora-depth-rank128.safetensors" - ] - }, - { - "id": 47, - "type": "KSampler", - "pos": [ - 1584, - 845 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 11, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 74 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 71 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 72 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 73 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 75 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 571191313275555, - "fixed", - 15, - 3.5, - "euler", - "normal", - 1 - ] - }, - { - "id": 48, - "type": "MakeMaskBatch", - "pos": [ - 903, - 703 - ], - "size": { - "0": 210, - "1": 26 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "masks", - "type": "MASK_LIST", - "link": 76 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 77 - ], - "slot_index": 0, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "MakeMaskBatch" - } - }, - { - "id": 49, - "type": "PreviewImage", - "pos": [ - 1383, - 539 - ], - "size": { - "0": 635.7999877929688, - "1": 246.39999389648438 - }, - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 77 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 50, - "type": "Note", - "pos": [ - 242, - 1012 - ], - "size": { - "0": 210, - "1": 58 - }, - "flags": {}, - "order": 3, - "mode": 0, - "properties": { - "text": "" - }, - "widgets_values": [ - "For SD 1.5 use scale factor of 1.0" - ], - "color": "#432", - "bgcolor": "#653" - } - ], - "links": [ - [ - 47, - 37, - 0, - 38, - 2, - "STRING_LIST" - ], - [ - 48, - 1, - 0, - 38, - 0, - "MODEL" - ], - [ - 49, - 1, - 1, - 38, - 1, - "CLIP" - ], - [ - 53, - 1, - 2, - 41, - 1, - "VAE" - ], - [ - 54, - 41, - 0, - 42, - 0, - "IMAGE" - ], - [ - 55, - 38, - 1, - 39, - 0, - "CONDITIONING" - ], - [ - 56, - 38, - 2, - 39, - 1, - "CONDITIONING" - ], - [ - 59, - 37, - 8, - 44, - 0, - "IMAGE" - ], - [ - 60, - 37, - 8, - 39, - 3, - "IMAGE" - ], - [ - 61, - 45, - 0, - 37, - 0, - "DICT" - ], - [ - 62, - 37, - 2, - 38, - 3, - "MASK_LIST" - ], - [ - 63, - 37, - 3, - 38, - 4, - "STRING" - ], - [ - 64, - 37, - 4, - 38, - 5, - "STRING" - ], - [ - 65, - 37, - 5, - 38, - 6, - "STRING" - ], - [ - 66, - 37, - 6, - 38, - 7, - "INT" - ], - [ - 67, - 37, - 7, - 38, - 8, - "INT" - ], - [ - 68, - 37, - 6, - 43, - 0, - "INT" - ], - [ - 69, - 37, - 7, - 43, - 1, - "INT" - ], - [ - 70, - 46, - 0, - 39, - 2, - "CONTROL_NET" - ], - [ - 71, - 39, - 0, - 47, - 1, - "CONDITIONING" - ], - [ - 72, - 39, - 1, - 47, - 2, - "CONDITIONING" - ], - [ - 73, - 43, - 0, - 47, - 3, - "LATENT" - ], - [ - 74, - 38, - 0, - 47, - 0, - "MODEL" - ], - [ - 75, - 47, - 0, - 41, - 0, - "LATENT" - ], - [ - 76, - 37, - 2, - 48, - 0, - "MASK_LIST" - ], - [ - 77, - 48, - 0, - 49, - 0, - "IMAGE" - ] - ], - "groups": [], - "config": {}, - "extra": { - "ds": { - "scale": 0.8264462809917354, - "offset": [ - -356.22097360363375, - -342.7805881941634 - ] - } - }, - "version": 0.4 -} \ No newline at end of file diff --git a/workflows/sdxl-noob-dd.json b/workflows/sdxl-noob-dd.json new file mode 100644 index 0000000..9c3be7e --- /dev/null +++ b/workflows/sdxl-noob-dd.json @@ -0,0 +1 @@ +{"id":"b6fea43a-433e-4018-9a50-af532797f1e5","revision":0,"last_node_id":131,"last_link_id":411,"nodes":[{"id":43,"type":"EmptyLatentImage","pos":[576.95068359375,955.1101684570312],"size":[309.52197265625,107.94402313232422],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":405},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":406},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[73]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"EmptyLatentImage"},"widgets_values":[1024,1024,1]},{"id":39,"type":"ControlNetApplyAdvanced","pos":[575.784912109375,714.2578125],"size":[315,186],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":410},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":411},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":70},{"localized_name":"image","name":"image","type":"IMAGE","link":404},{"localized_name":"vae","name":"vae","shape":7,"type":"VAE","link":null},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"start_percent","name":"start_percent","type":"FLOAT","widget":{"name":"start_percent"},"link":null},{"localized_name":"end_percent","name":"end_percent","type":"FLOAT","widget":{"name":"end_percent"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","slot_index":0,"links":[381]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","slot_index":1,"links":[380]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"ControlNetApplyAdvanced"},"widgets_values":[0.9,0,1]},{"id":47,"type":"KSampler","pos":[1000.9393310546875,644.6846923828125],"size":[315,262],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":398},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":381},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":380},{"localized_name":"latent_image","name":"latent_image","type":"LATENT","link":73},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[75]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"KSampler"},"widgets_values":[466328781560974,"randomize",20,7,"euler","normal",1]},{"id":46,"type":"ControlNetLoader","pos":[-424.6932067871094,29.043981552124023],"size":[315,58],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"control_net_name","name":"control_net_name","type":"COMBO","widget":{"name":"control_net_name"},"link":null}],"outputs":[{"localized_name":"CONTROL_NET","name":"CONTROL_NET","type":"CONTROL_NET","slot_index":0,"links":[70]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"ControlNetLoader"},"widgets_values":["control-lora-depth-rank128.safetensors"],"color":"#322","bgcolor":"#533"},{"id":41,"type":"VAEDecode","pos":[1397.2574462890625,567.3204345703125],"size":[210,46],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":75},{"localized_name":"vae","name":"vae","type":"VAE","link":53}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","slot_index":0,"links":[387]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"VAEDecode"},"widgets_values":[]},{"id":124,"type":"SaveImage","pos":[1647.6220703125,566.0494384765625],"size":[513.6363525390625,483.4545593261719],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":387},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.34"},"widgets_values":["ComfyUI"]},{"id":125,"type":"PseudoLoadModelSnapshot","pos":[-1768.989013671875,712.39453125],"size":[270,58],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"string_path","name":"string_path","type":"STRING","widget":{"name":"string_path"},"link":null}],"outputs":[{"localized_name":"json_data","name":"json_data","type":"DICT","links":[395]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4","Node name for S&R":"PseudoLoadModelSnapshot"},"widgets_values":["C:\\Users\\ksteinfe\\Documents\\Pseudorandom\\_model_snapshots"],"color":"#2a363b","bgcolor":"#3f5159"},{"id":128,"type":"PseudoUnpackModelSnapshot","pos":[-1459.4891357421875,709.3946533203125],"size":[192.43710327148438,186],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"json_data","name":"json_data","type":"DICT","link":395}],"outputs":[{"localized_name":"mat_txts","name":"mat_txts","shape":6,"type":"STRING","links":[392]},{"localized_name":"mat_imgs","name":"mat_imgs","shape":6,"type":"IMAGE","links":[393]},{"localized_name":"mat_msks","name":"mat_msks","shape":6,"type":"MASK","links":[394]},{"localized_name":"env_scene","name":"env_scene","type":"STRING","links":[389]},{"localized_name":"env_style","name":"env_style","type":"STRING","links":[390]},{"localized_name":"env_negative","name":"env_negative","type":"STRING","links":[391]},{"localized_name":"img_depth","name":"img_depth","type":"IMAGE","links":[396]},{"localized_name":"img_edge","name":"img_edge","type":"IMAGE","links":null},{"localized_name":"img_style","name":"img_style","type":"IMAGE","links":null}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4","Node name for S&R":"PseudoUnpackModelSnapshot"},"widgets_values":[],"color":"#2a363b","bgcolor":"#3f5159"},{"id":1,"type":"CheckpointLoaderSimple","pos":[-427.6769104003906,-121.06791687011719],"size":[315,98],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","slot_index":0,"links":[397]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[399]},{"localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[53]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["sd_xl_base_1.0.safetensors"],"color":"#322","bgcolor":"#533"},{"id":127,"type":"PseudoProcessMaterialPrompts","pos":[-424.04718017578125,151.48309326171875],"size":[316.9888610839844,482],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"mat_txts_lst","name":"mat_txts_lst","type":"STRING","link":392},{"localized_name":"mat_imgs_lst","name":"mat_imgs_lst","type":"IMAGE","link":393},{"localized_name":"mat_msks_lst","name":"mat_msks_lst","type":"MASK","link":394},{"localized_name":"scale_msk_to","name":"scale_msk_to","type":"COMBO","widget":{"name":"scale_msk_to"},"link":null}],"outputs":[{"localized_name":"mat_txts","name":"mat_txts","shape":6,"type":"STRING","links":[400]},{"localized_name":"mat_imgs","name":"mat_imgs","shape":6,"type":"IMAGE","links":[]},{"localized_name":"mat_msks","name":"mat_msks","shape":6,"type":"MASK","links":[401]},{"localized_name":"mat_txts_all","name":"mat_txts_all","type":"STRING","links":null},{"localized_name":"scaled_width","name":"scaled_width","type":"INT","links":[]},{"localized_name":"scaled_height","name":"scaled_height","type":"INT","links":[]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4"},"widgets_values":["1024",""],"color":"#2a363b","bgcolor":"#3f5159"},{"id":126,"type":"PseudoProcessEnvironmentalPrompts","pos":[-427.08404541015625,688.60546875],"size":[316.8760681152344,421.2636413574219],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"env_scene","name":"env_scene","type":"STRING","link":389},{"localized_name":"env_style","name":"env_style","type":"STRING","link":390},{"localized_name":"env_negative","name":"env_negative","type":"STRING","link":391}],"outputs":[{"localized_name":"env_scene","name":"env_scene","type":"STRING","links":[407]},{"localized_name":"env_style","name":"env_style","type":"STRING","links":[408]},{"localized_name":"env_negative","name":"env_negative","type":"STRING","links":[409]},{"localized_name":"env_all","name":"env_all","type":"STRING","links":null}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4","Node name for S&R":"PseudoProcessEnvironmentalPrompts"},"widgets_values":["objects on a matte white surface against an empty, neutral white background.","hyperdetailed photography, product photography, professional photography, canon 5d mark iiji photo, 4k Unity, 8k, Zbrush, super-detailed, beautifully lit, octane rendering",""],"color":"#2a363b","bgcolor":"#3f5159"},{"id":130,"type":"PseudoApplyDenseDiffusionSDXL","pos":[114.8228988647461,653.4058837890625],"size":[308.8941345214844,186],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":397},{"localized_name":"clip","name":"clip","type":"CLIP","link":399},{"localized_name":"mat_txts_lst","name":"mat_txts_lst","type":"STRING","link":400},{"localized_name":"mat_msks_lst","name":"mat_msks_lst","type":"MASK","link":401},{"localized_name":"env_scene","name":"env_scene","type":"STRING","link":407},{"localized_name":"env_style","name":"env_style","type":"STRING","link":408},{"localized_name":"env_negative","name":"env_negative","type":"STRING","link":409},{"localized_name":"width","name":"width","type":"INT","link":402},{"localized_name":"height","name":"height","type":"INT","link":403}],"outputs":[{"localized_name":"model","name":"model","type":"MODEL","links":[398]},{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[410]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[411]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.7","Node name for S&R":"PseudoApplyDenseDiffusionSDXL"},"widgets_values":[],"color":"#2a363b","bgcolor":"#3f5159"},{"id":129,"type":"PseudoProcessImagePrompt","pos":[-419.4373779296875,1161.998046875],"size":[313.9230041503906,219.28199768066406],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"img","name":"img","type":"IMAGE","link":396},{"localized_name":"scale_img_to","name":"scale_img_to","type":"COMBO","widget":{"name":"scale_img_to"},"link":null}],"outputs":[{"localized_name":"scaled_width","name":"scaled_width","type":"INT","links":[402,405]},{"localized_name":"scaled_height","name":"scaled_height","type":"INT","links":[403,406]},{"localized_name":"img","name":"img","type":"IMAGE","links":[404]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.7"},"widgets_values":["1024",""],"color":"#2a363b","bgcolor":"#3f5159"}],"links":[[53,1,2,41,1,"VAE"],[70,46,0,39,2,"CONTROL_NET"],[73,43,0,47,3,"LATENT"],[75,47,0,41,0,"LATENT"],[380,39,1,47,2,"CONDITIONING"],[381,39,0,47,1,"CONDITIONING"],[387,41,0,124,0,"IMAGE"],[389,128,3,126,0,"STRING"],[390,128,4,126,1,"STRING"],[391,128,5,126,2,"STRING"],[392,128,0,127,0,"STRING"],[393,128,1,127,1,"IMAGE"],[394,128,2,127,2,"MASK"],[395,125,0,128,0,"DICT"],[396,128,6,129,0,"IMAGE"],[397,1,0,130,0,"MODEL"],[398,130,0,47,0,"MODEL"],[399,1,1,130,1,"CLIP"],[400,127,0,130,2,"STRING"],[401,127,2,130,3,"MASK"],[402,129,0,130,7,"INT"],[403,129,1,130,8,"INT"],[404,129,2,39,3,"IMAGE"],[405,129,0,43,0,"INT"],[406,129,1,43,1,"INT"],[407,126,0,130,4,"STRING"],[408,126,1,130,5,"STRING"],[409,126,2,130,6,"STRING"],[410,130,1,39,0,"CONDITIONING"],[411,130,2,39,1,"CONDITIONING"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6209213230591555,"offset":[485.6044778207126,-163.45934304911128]}},"version":0.4} \ No newline at end of file diff --git a/workflows/sdxl-noob-ip.json b/workflows/sdxl-noob-ip.json new file mode 100644 index 0000000..3b4357a --- /dev/null +++ b/workflows/sdxl-noob-ip.json @@ -0,0 +1 @@ +{"id":"83070f71-73af-445e-b1fd-8f5520647606","revision":0,"last_node_id":134,"last_link_id":440,"nodes":[{"id":46,"type":"ControlNetLoader","pos":[-424.6932067871094,29.043981552124023],"size":[315,58],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"control_net_name","name":"control_net_name","type":"COMBO","widget":{"name":"control_net_name"},"link":null}],"outputs":[{"localized_name":"CONTROL_NET","name":"CONTROL_NET","type":"CONTROL_NET","slot_index":0,"links":[70]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"ControlNetLoader"},"widgets_values":["control-lora-depth-rank128.safetensors"],"color":"#322","bgcolor":"#533"},{"id":43,"type":"EmptyLatentImage","pos":[988.1504516601562,1032.22314453125],"size":[309.52197265625,107.94402313232422],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":439},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":440},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[73]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"EmptyLatentImage"},"widgets_values":[1024,1024,1]},{"id":39,"type":"ControlNetApplyAdvanced","pos":[986.9846801757812,791.3707885742188],"size":[315,186],"flags":{},"order":10,"mode":0,"inputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":419},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":420},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":70},{"localized_name":"image","name":"image","type":"IMAGE","link":438},{"localized_name":"vae","name":"vae","shape":7,"type":"VAE","link":null},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"start_percent","name":"start_percent","type":"FLOAT","widget":{"name":"start_percent"},"link":null},{"localized_name":"end_percent","name":"end_percent","type":"FLOAT","widget":{"name":"end_percent"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","slot_index":0,"links":[381]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","slot_index":1,"links":[380]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"ControlNetApplyAdvanced"},"widgets_values":[0.9,0,1]},{"id":47,"type":"KSampler","pos":[1400.4267578125,642.7359619140625],"size":[315,262],"flags":{},"order":11,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":418},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":381},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":380},{"localized_name":"latent_image","name":"latent_image","type":"LATENT","link":73},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","slot_index":0,"links":[75]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"KSampler"},"widgets_values":[605035229521475,"randomize",20,3.5,"euler","normal",1]},{"id":41,"type":"VAEDecode","pos":[1796.744873046875,565.3717041015625],"size":[210,46],"flags":{},"order":12,"mode":0,"inputs":[{"localized_name":"samples","name":"samples","type":"LATENT","link":75},{"localized_name":"vae","name":"vae","type":"VAE","link":53}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","slot_index":0,"links":[402]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"VAEDecode"},"widgets_values":[]},{"id":126,"type":"SaveImage","pos":[2067.449462890625,582.3956298828125],"size":[513.6363525390625,483.4545593261719],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":402},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.34"},"widgets_values":["ComfyUI"]},{"id":127,"type":"PseudoLoadModelSnapshot","pos":[-1773.4420166015625,701.0070190429688],"size":[270,58],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"string_path","name":"string_path","type":"STRING","widget":{"name":"string_path"},"link":null}],"outputs":[{"localized_name":"json_data","name":"json_data","type":"DICT","links":[406]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4","Node name for S&R":"PseudoLoadModelSnapshot"},"widgets_values":["C:\\Users\\ksteinfe\\Documents\\Pseudorandom\\_model_snapshots"],"color":"#2a363b","bgcolor":"#3f5159"},{"id":1,"type":"CheckpointLoaderSimple","pos":[-427.6769104003906,-121.06791687011719],"size":[315,98],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"ckpt_name","name":"ckpt_name","type":"COMBO","widget":{"name":"ckpt_name"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","slot_index":0,"links":[413]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","slot_index":1,"links":[416]},{"localized_name":"VAE","name":"VAE","type":"VAE","slot_index":2,"links":[53]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"CheckpointLoaderSimple"},"widgets_values":["sd_xl_base_1.0.safetensors"],"color":"#322","bgcolor":"#533"},{"id":133,"type":"PseudoApplyIPAdaperSDXL","pos":[484.83770751953125,680.8870849609375],"size":[327.6529235839844,354],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":417},{"localized_name":"clip","name":"clip","type":"CLIP","link":416},{"localized_name":"ipadapter","name":"ipadapter","type":"IPADAPTER","link":428},{"localized_name":"mat_txts_lst","name":"mat_txts_lst","type":"STRING","link":427},{"localized_name":"mat_imgs_lst","name":"mat_imgs_lst","type":"IMAGE","link":429},{"localized_name":"mat_msks_lst","name":"mat_msks_lst","type":"MASK","link":430},{"localized_name":"env_scene","name":"env_scene","type":"STRING","link":424},{"localized_name":"env_style","name":"env_style","type":"STRING","link":425},{"localized_name":"env_negative","name":"env_negative","type":"STRING","link":426},{"localized_name":"width","name":"width","type":"INT","link":436},{"localized_name":"height","name":"height","type":"INT","link":437},{"localized_name":"env_cond_strength","name":"env_cond_strength","type":"FLOAT","widget":{"name":"env_cond_strength"},"link":null},{"localized_name":"mat_cond_strength","name":"mat_cond_strength","type":"FLOAT","widget":{"name":"mat_cond_strength"},"link":null},{"localized_name":"ipadapter_weight","name":"ipadapter_weight","type":"FLOAT","widget":{"name":"ipadapter_weight"},"link":null},{"localized_name":"start_at","name":"start_at","type":"FLOAT","widget":{"name":"start_at"},"link":null},{"localized_name":"end_at","name":"end_at","type":"FLOAT","widget":{"name":"end_at"},"link":null}],"outputs":[{"localized_name":"model","name":"model","type":"MODEL","links":[418]},{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[419]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[420]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.7","Node name for S&R":"PseudoApplyIPAdaperSDXL"},"widgets_values":[0.3,1,1,0,1],"color":"#2a363b","bgcolor":"#3f5159"},{"id":131,"type":"PseudoProcessEnvironmentalPrompts","pos":[-431.5369567871094,677.2178955078125],"size":[316.8760681152344,421.2636413574219],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"env_scene","name":"env_scene","type":"STRING","link":410},{"localized_name":"env_style","name":"env_style","type":"STRING","link":411},{"localized_name":"env_negative","name":"env_negative","type":"STRING","link":412}],"outputs":[{"localized_name":"env_scene","name":"env_scene","type":"STRING","links":[424]},{"localized_name":"env_style","name":"env_style","type":"STRING","links":[425]},{"localized_name":"env_negative","name":"env_negative","type":"STRING","links":[426]},{"localized_name":"env_all","name":"env_all","type":"STRING","links":null}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4","Node name for S&R":"PseudoProcessEnvironmentalPrompts"},"widgets_values":["objects on a matte white surface against an empty, neutral white background.","hyperdetailed photography, product photography, professional photography, canon 5d mark iiji photo, 4k Unity, 8k, Zbrush, super-detailed, beautifully lit, octane rendering",""],"color":"#2a363b","bgcolor":"#3f5159"},{"id":130,"type":"PseudoProcessMaterialPrompts","pos":[-428.5000915527344,140.0952911376953],"size":[316.9888610839844,482],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"mat_txts_lst","name":"mat_txts_lst","type":"STRING","link":407},{"localized_name":"mat_imgs_lst","name":"mat_imgs_lst","type":"IMAGE","link":408},{"localized_name":"mat_msks_lst","name":"mat_msks_lst","type":"MASK","link":409},{"localized_name":"scale_msk_to","name":"scale_msk_to","type":"COMBO","widget":{"name":"scale_msk_to"},"link":null}],"outputs":[{"localized_name":"mat_txts","name":"mat_txts","shape":6,"type":"STRING","links":[427]},{"localized_name":"mat_imgs","name":"mat_imgs","shape":6,"type":"IMAGE","links":[429]},{"localized_name":"mat_msks","name":"mat_msks","shape":6,"type":"MASK","links":[430]},{"localized_name":"mat_txts_all","name":"mat_txts_all","type":"STRING","links":null},{"localized_name":"scaled_width","name":"scaled_width","type":"INT","links":[]},{"localized_name":"scaled_height","name":"scaled_height","type":"INT","links":[]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4"},"widgets_values":["1024",""],"color":"#2a363b","bgcolor":"#3f5159"},{"id":132,"type":"PseudoIPAdapterUnifiedLoaderClone","pos":[-67.7428207397461,-118.72811126708984],"size":[305.8667907714844,78],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":413},{"localized_name":"ipadapter","name":"ipadapter","shape":7,"type":"IPADAPTER","link":null},{"localized_name":"preset","name":"preset","type":"COMBO","widget":{"name":"preset"},"link":null}],"outputs":[{"localized_name":"model","name":"model","type":"MODEL","links":[417]},{"localized_name":"ipadapter","name":"ipadapter","type":"IPADAPTER","links":[428]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.7","Node name for S&R":"PseudoIPAdapterUnifiedLoaderClone"},"widgets_values":["PLUS (high strength)"],"color":"#322","bgcolor":"#533"},{"id":129,"type":"PseudoUnpackModelSnapshot","pos":[-1463.9420166015625,698.0071411132812],"size":[192.43710327148438,186],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"json_data","name":"json_data","type":"DICT","link":406}],"outputs":[{"localized_name":"mat_txts","name":"mat_txts","shape":6,"type":"STRING","links":[407]},{"localized_name":"mat_imgs","name":"mat_imgs","shape":6,"type":"IMAGE","links":[408]},{"localized_name":"mat_msks","name":"mat_msks","shape":6,"type":"MASK","links":[409]},{"localized_name":"env_scene","name":"env_scene","type":"STRING","links":[410]},{"localized_name":"env_style","name":"env_style","type":"STRING","links":[411]},{"localized_name":"env_negative","name":"env_negative","type":"STRING","links":[412]},{"localized_name":"img_depth","name":"img_depth","type":"IMAGE","links":[433]},{"localized_name":"img_edge","name":"img_edge","type":"IMAGE","links":null},{"localized_name":"img_style","name":"img_style","type":"IMAGE","links":null}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.4","Node name for S&R":"PseudoUnpackModelSnapshot"},"widgets_values":[],"color":"#2a363b","bgcolor":"#3f5159"},{"id":134,"type":"PseudoProcessImagePrompt","pos":[-423.8902893066406,1150.6107177734375],"size":[313.9230041503906,219.28199768066406],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"img","name":"img","type":"IMAGE","link":433},{"localized_name":"scale_img_to","name":"scale_img_to","type":"COMBO","widget":{"name":"scale_img_to"},"link":null}],"outputs":[{"localized_name":"scaled_width","name":"scaled_width","type":"INT","links":[436,439]},{"localized_name":"scaled_height","name":"scaled_height","type":"INT","links":[437,440]},{"localized_name":"img","name":"img","type":"IMAGE","links":[438]}],"properties":{"cnr_id":"pseudocomfy","ver":"2.0.7"},"widgets_values":["1024",""],"color":"#2a363b","bgcolor":"#3f5159"}],"links":[[53,1,2,41,1,"VAE"],[70,46,0,39,2,"CONTROL_NET"],[73,43,0,47,3,"LATENT"],[75,47,0,41,0,"LATENT"],[380,39,1,47,2,"CONDITIONING"],[381,39,0,47,1,"CONDITIONING"],[402,41,0,126,0,"IMAGE"],[406,127,0,129,0,"DICT"],[407,129,0,130,0,"STRING"],[408,129,1,130,1,"IMAGE"],[409,129,2,130,2,"MASK"],[410,129,3,131,0,"STRING"],[411,129,4,131,1,"STRING"],[412,129,5,131,2,"STRING"],[413,1,0,132,0,"MODEL"],[416,1,1,133,1,"CLIP"],[417,132,0,133,0,"MODEL"],[418,133,0,47,0,"MODEL"],[419,133,1,39,0,"CONDITIONING"],[420,133,2,39,1,"CONDITIONING"],[424,131,0,133,6,"STRING"],[425,131,1,133,7,"STRING"],[426,131,2,133,8,"STRING"],[427,130,0,133,3,"STRING"],[428,132,1,133,2,"IPADAPTER"],[429,130,1,133,4,"IMAGE"],[430,130,2,133,5,"MASK"],[433,129,6,134,0,"IMAGE"],[436,134,0,133,9,"INT"],[437,134,1,133,10,"INT"],[438,134,2,39,3,"IMAGE"],[439,134,0,43,0,"INT"],[440,134,1,43,1,"INT"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7513148009015798,"offset":[1283.8495554081044,-565.7695877024803]}},"version":0.4} \ No newline at end of file