Spaces:
Running
on
L40S
Running
on
L40S
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, | |
] | |