Spaces:
Paused
Paused
| import comfy.utils | |
| from PIL import Image | |
| from rembg import remove | |
| from ..utils import pil2tensor, tensor2pil | |
| class MTB_ImageRemoveBackgroundRembg: | |
| """Removes the background from the input using Rembg.""" | |
| def INPUT_TYPES(cls): | |
| return { | |
| "required": { | |
| "image": ("IMAGE",), | |
| "alpha_matting": ( | |
| "BOOLEAN", | |
| {"default": False}, | |
| ), | |
| "alpha_matting_foreground_threshold": ( | |
| "INT", | |
| {"default": 240, "min": 0, "max": 255}, | |
| ), | |
| "alpha_matting_background_threshold": ( | |
| "INT", | |
| {"default": 10, "min": 0, "max": 255}, | |
| ), | |
| "alpha_matting_erode_size": ( | |
| "INT", | |
| {"default": 10, "min": 0, "max": 255}, | |
| ), | |
| "post_process_mask": ( | |
| "BOOLEAN", | |
| {"default": False}, | |
| ), | |
| "bgcolor": ( | |
| "COLOR", | |
| {"default": "#000000"}, | |
| ), | |
| }, | |
| } | |
| RETURN_TYPES = ( | |
| "IMAGE", | |
| "MASK", | |
| "IMAGE", | |
| ) | |
| RETURN_NAMES = ( | |
| "Image (rgba)", | |
| "Mask", | |
| "Image", | |
| ) | |
| FUNCTION = "remove_background" | |
| CATEGORY = "mtb/image" | |
| # bgcolor: Optional[Tuple[int, int, int, int]] | |
| def remove_background( | |
| self, | |
| image, | |
| alpha_matting, | |
| alpha_matting_foreground_threshold, | |
| alpha_matting_background_threshold, | |
| alpha_matting_erode_size, | |
| post_process_mask, | |
| bgcolor, | |
| ): | |
| pbar = comfy.utils.ProgressBar(image.size(0)) | |
| images = tensor2pil(image) | |
| out_img = [] | |
| out_mask = [] | |
| out_img_on_bg = [] | |
| for img in images: | |
| img_rm = remove( | |
| data=img, | |
| alpha_matting=alpha_matting, | |
| alpha_matting_foreground_threshold=alpha_matting_foreground_threshold, | |
| alpha_matting_background_threshold=alpha_matting_background_threshold, | |
| alpha_matting_erode_size=alpha_matting_erode_size, | |
| session=None, | |
| only_mask=False, | |
| post_process_mask=post_process_mask, | |
| bgcolor=None, | |
| ) | |
| # extract the alpha to a new image | |
| mask = img_rm.getchannel(3) | |
| # add our bgcolor behind the image | |
| image_on_bg = Image.new("RGBA", img_rm.size, bgcolor) | |
| image_on_bg.paste(img_rm, mask=mask) | |
| image_on_bg = image_on_bg.convert("RGB") | |
| out_img.append(img_rm) | |
| out_mask.append(mask) | |
| out_img_on_bg.append(image_on_bg) | |
| pbar.update(1) | |
| return ( | |
| pil2tensor(out_img), | |
| pil2tensor(out_mask), | |
| pil2tensor(out_img_on_bg), | |
| ) | |
| __nodes__ = [ | |
| MTB_ImageRemoveBackgroundRembg, | |
| ] | |