Download ComfyUI-Allor/modules/ImageContainer.py from thisisAce/runpod_custom_nodes: direct link, hf CLI and curl.
- Browser
- Download file 9.41 kB
-
https://huggingface.co/thisisAce/runpod_custom_nodes/resolve/main/ComfyUI-Allor/modules/ImageContainer.py
- Command line
-
hf download hf://thisisAce/runpod_custom_nodes/ComfyUI-Allor/modules/ImageContainer.py
-
curl -L -o ImageContainer.py https://huggingface.co/thisisAce/runpod_custom_nodes/resolve/main/ComfyUI-Allor/modules/ImageContainer.py
9.41 kB
| import torch | |
| from .Utils import create_rgba_image | |
| class ImageContainer: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "width": ("INT", { | |
| "default": 512, | |
| "min": 1, | |
| "step": 1 | |
| }), | |
| "height": ("INT", { | |
| "default": 512, | |
| "min": 1, | |
| "step": 1 | |
| }), | |
| "red": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "green": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "blue": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "alpha": ("FLOAT", { | |
| "default": 0.0, | |
| "max": 1.0, | |
| "step": 0.01 | |
| }), | |
| }, | |
| } | |
| RETURN_TYPES = ("IMAGE",) | |
| FUNCTION = "node" | |
| CATEGORY = "image/container" | |
| def node(self, width, height, red, green, blue, alpha): | |
| return (create_rgba_image(width, height, (red, green, blue, int(alpha * 255))).image_to_tensor().unsqueeze(0),) | |
| class ImageContainerInheritanceAdd: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "images": ("IMAGE",), | |
| "add_width": ("INT", { | |
| "default": 0, | |
| "step": 1 | |
| }), | |
| "add_height": ("INT", { | |
| "default": 0, | |
| "step": 1 | |
| }), | |
| "red": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "green": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "blue": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "alpha": ("FLOAT", { | |
| "default": 0.0, | |
| "max": 1.0, | |
| "step": 0.01 | |
| }), | |
| "method": (["single", "for_each"],), | |
| }, | |
| } | |
| RETURN_TYPES = ("IMAGE",) | |
| FUNCTION = "node" | |
| CATEGORY = "image/container" | |
| def node(self, images, add_width, add_height, red, green, blue, alpha, method): | |
| width, height = images[0, :, :, 0].shape | |
| width = width + add_width | |
| height = height + add_height | |
| image = create_rgba_image(width, height, (red, green, blue, int(alpha * 255))).image_to_tensor() | |
| if method == "single": | |
| return (image.unsqueeze(0),) | |
| else: | |
| length = len(images) | |
| images = torch.zeros(length, height, width, 4) | |
| images[:, :, :] = image | |
| return (images,) | |
| class ImageContainerInheritanceScale: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "images": ("IMAGE",), | |
| "scale_width": ("FLOAT", { | |
| "default": 1.0, | |
| "step": 0.1 | |
| }), | |
| "scale_height": ("FLOAT", { | |
| "default": 1.0, | |
| "step": 0.1 | |
| }), | |
| "red": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "green": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "blue": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "alpha": ("FLOAT", { | |
| "default": 0.0, | |
| "max": 1.0, | |
| "step": 0.01 | |
| }), | |
| "method": (["single", "for_each"],), | |
| }, | |
| } | |
| RETURN_TYPES = ("IMAGE",) | |
| FUNCTION = "node" | |
| CATEGORY = "image/container" | |
| def node(self, images, scale_width, scale_height, red, green, blue, alpha, method): | |
| height, width = images[0, :, :, 0].shape | |
| width = int((width * scale_width) - width) | |
| height = int((height * scale_height) - height) | |
| return ImageContainerInheritanceAdd() \ | |
| .node(images, width, height, red, green, blue, alpha, method) | |
| class ImageContainerInheritanceMax: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "images_a": ("IMAGE",), | |
| "images_b": ("IMAGE",), | |
| "red": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "green": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "blue": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "alpha": ("FLOAT", { | |
| "default": 0.0, | |
| "max": 1.0, | |
| "step": 0.01 | |
| }), | |
| "method": (["single", "for_each_pair", "for_each_matrix"],), | |
| }, | |
| } | |
| RETURN_TYPES = ("IMAGE",) | |
| FUNCTION = "node" | |
| CATEGORY = "image/container" | |
| def node(self, images_a, images_b, red, green, blue, alpha, method): | |
| img_a_height, img_a_width = images_a[0, :, :, 0].shape | |
| img_b_height, img_b_width = images_b[0, :, :, 0].shape | |
| width = max(img_a_width, img_b_width) | |
| height = max(img_a_height, img_b_height) | |
| image = create_rgba_image(width, height, (red, green, blue, int(alpha * 255))).image_to_tensor() | |
| if method == "single": | |
| return (image.unsqueeze(0),) | |
| elif method == "for_each_pair": | |
| length = len(images_a) | |
| images = torch.zeros(length, height, width, 4) | |
| else: | |
| length = len(images_a) * len(images_b) | |
| images = torch.zeros(length, height, width, 4) | |
| images[:, :, :] = image | |
| return (images,) | |
| class ImageContainerInheritanceSum: | |
| def __init__(self): | |
| pass | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "images_a": ("IMAGE",), | |
| "images_b": ("IMAGE",), | |
| "red": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "green": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "blue": ("INT", { | |
| "default": 255, | |
| "max": 255, | |
| "step": 1 | |
| }), | |
| "alpha": ("FLOAT", { | |
| "default": 0.0, | |
| "max": 1.0, | |
| "step": 0.01 | |
| }), | |
| "container_size_type": (["sum", "sum_width", "sum_height"],), | |
| "method": (["single", "for_each_pair", "for_each_matrix"],), | |
| }, | |
| } | |
| RETURN_TYPES = ("IMAGE",) | |
| FUNCTION = "node" | |
| CATEGORY = "image/container" | |
| def node(self, images_a, images_b, red, green, blue, alpha, container_size_type, method): | |
| img_a_height, img_a_width = images_a[0, :, :, 0].shape | |
| img_b_height, img_b_width = images_b[0, :, :, 0].shape | |
| if container_size_type == "sum": | |
| width = img_a_width + img_b_width | |
| height = img_a_height + img_b_height | |
| elif container_size_type == "sum_width": | |
| if img_a_height != img_b_height: | |
| raise ValueError() | |
| width = img_a_width + img_b_width | |
| height = img_a_height | |
| elif container_size_type == "sum_height": | |
| if img_a_width != img_b_width: | |
| raise ValueError() | |
| width = img_a_width | |
| height = img_a_height + img_b_height | |
| else: | |
| raise ValueError() | |
| image = create_rgba_image(width, height, (red, green, blue, int(alpha * 255))).image_to_tensor() | |
| if method == "single": | |
| return (image.unsqueeze(0),) | |
| elif method == "for_each_pair": | |
| length = len(images_a) | |
| images = torch.zeros(length, height, width, 4) | |
| else: | |
| length = len(images_a) * len(images_b) | |
| images = torch.zeros(length, height, width, 4) | |
| images[:, :, :] = image | |
| return (images,) | |
| NODE_CLASS_MAPPINGS = { | |
| "ImageContainer": ImageContainer, | |
| "ImageContainerInheritanceAdd": ImageContainerInheritanceAdd, | |
| "ImageContainerInheritanceScale": ImageContainerInheritanceScale, | |
| "ImageContainerInheritanceMax": ImageContainerInheritanceMax, | |
| "ImageContainerInheritanceSum": ImageContainerInheritanceSum | |
| } | |