| | import torch
|
| | from .imagefunc import log, pil2tensor,image2mask, extract_numbers
|
| | from PIL import Image
|
| |
|
| |
|
| |
|
| | class BatchSelector:
|
| |
|
| | def __init__(self):
|
| | self.NODE_NAME = 'BatchSelector'
|
| | pass
|
| |
|
| | @classmethod
|
| | def INPUT_TYPES(self):
|
| |
|
| | return {
|
| | "required": {
|
| | "select": ("STRING", {"default": "0,"},),
|
| | },
|
| | "optional": {
|
| | "images": ("IMAGE",),
|
| | "masks": ("MASK",),
|
| | }
|
| | }
|
| |
|
| | RETURN_TYPES = ("IMAGE", "MASK",)
|
| | RETURN_NAMES = ("image", "mask",)
|
| | FUNCTION = 'batch_selector'
|
| | CATEGORY = '😺dzNodes/LayerUtility/SystemIO'
|
| |
|
| | def batch_selector(self, select, images=None, masks=None
|
| | ):
|
| | ret_images = []
|
| | ret_masks = []
|
| | empty_image = pil2tensor(Image.new("RGBA", (64, 64), (0, 0, 0, 0)))
|
| | empty_mask = image2mask(Image.new("L", (64, 64), color="black"))
|
| |
|
| | indexs = extract_numbers(select)
|
| | for i in indexs:
|
| | if images is not None:
|
| | if i < len(images):
|
| | ret_images.append(images[i].unsqueeze(0))
|
| | else:
|
| | ret_images.append(images[-1].unsqueeze(0))
|
| | if masks is not None:
|
| | if i < len(masks):
|
| | ret_masks.append(masks[i].unsqueeze(0))
|
| | else:
|
| | ret_masks.append(masks[-1].unsqueeze(0))
|
| |
|
| | if len(ret_images) == 0:
|
| | ret_images.append(empty_image)
|
| | if len(ret_masks) == 0:
|
| | ret_masks.append(empty_mask)
|
| |
|
| | log(f"{self.NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
|
| | return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
|
| |
|
| | NODE_CLASS_MAPPINGS = {
|
| | "LayerUtility: BatchSelector": BatchSelector
|
| | }
|
| |
|
| | NODE_DISPLAY_NAME_MAPPINGS = {
|
| | "LayerUtility: BatchSelector": "LayerUtility: Batch Selector"
|
| | } |