| 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"
|
| } |