From df03f385562ee80e072ecc2cbbafb06e16871f08 Mon Sep 17 00:00:00 2001 From: City <125218114+city96@users.noreply.github.com> Date: Tue, 4 Apr 2023 21:01:17 +0200 Subject: [PATCH] Node to load image from web URL (GET) --- nodes.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/nodes.py b/nodes.py index ffbba9f94..cf41aba31 100644 --- a/nodes.py +++ b/nodes.py @@ -10,6 +10,7 @@ import traceback from PIL import Image from PIL.PngImagePlugin import PngInfo import numpy as np +import requests sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), "comfy")) @@ -936,6 +937,36 @@ class LoadImageMask: m.update(f.read()) return m.digest().hex() +class LoadImageUrl: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "url": ("STRING", { "multiline": False, }) + } + } + + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "load_image" + CATEGORY = "image" + + def load_image(self, url): + r = requests.get(url, stream=True) + r.raise_for_status() + i = Image.open(r.raw) + image = i.convert("RGB") + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + if 'A' in i.getbands(): + mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 + mask = 1. - torch.from_numpy(mask) + else: + mask = torch.zeros((64,64), dtype=torch.float32, device="cpu") + return (image, mask) + class ImageScale: upscale_methods = ["nearest-exact", "bilinear", "area"] crop_methods = ["disabled", "center"] @@ -1052,6 +1083,7 @@ NODE_CLASS_MAPPINGS = { "PreviewImage": PreviewImage, "LoadImage": LoadImage, "LoadImageMask": LoadImageMask, + "LoadImageUrl": LoadImageUrl, "ImageScale": ImageScale, "ImageInvert": ImageInvert, "ImagePadForOutpaint": ImagePadForOutpaint,