diff --git a/comfy/images.py b/comfy/images.py index 45cf7d65b..b674c8867 100644 --- a/comfy/images.py +++ b/comfy/images.py @@ -17,5 +17,5 @@ def open_image(file_path: str) -> Image.Image: if ext == ".exr": yield _open_exr(file_path) else: - with node_helpers.open_image(file_path) as image: + with node_helpers.pillow(Image.open, file_path) as image: yield image diff --git a/comfy/model_base.py b/comfy/model_base.py index 48990c7e0..8ef2816f2 100644 --- a/comfy/model_base.py +++ b/comfy/model_base.py @@ -162,7 +162,7 @@ class BaseModel(torch.nn.Module): c_concat = kwargs.get("noise_concat", None) if c_concat is not None: - out['c_concat'] = conds.CONDNoiseShape(data) + out['c_concat'] = conds.CONDNoiseShape(c_concat) return out diff --git a/comfy/node_helpers.py b/comfy/node_helpers.py index 60f8fa415..43b9e829f 100644 --- a/comfy/node_helpers.py +++ b/comfy/node_helpers.py @@ -1,4 +1,4 @@ -from PIL import Image, ImageFile, UnidentifiedImageError +from PIL import ImageFile, UnidentifiedImageError def conditioning_set_values(conditioning, values={}): c = [] @@ -10,16 +10,15 @@ def conditioning_set_values(conditioning, values={}): return c -def open_image(path): +def pillow(fn, arg): prev_value = None - try: - img = Image.open(path) - except (UnidentifiedImageError, ValueError): #PIL issues #4472 and #2445 + x = fn(arg) + except (OSError, UnidentifiedImageError, ValueError): #PIL issues #4472 and #2445, also fixes ComfyUI issue #3416 prev_value = ImageFile.LOAD_TRUNCATED_IMAGES ImageFile.LOAD_TRUNCATED_IMAGES = True - img = Image.open(path) + x = fn(arg) finally: if prev_value is not None: ImageFile.LOAD_TRUNCATED_IMAGES = prev_value - return img + return x diff --git a/comfy/nodes/base_nodes.py b/comfy/nodes/base_nodes.py index 0a0cc7862..12a7f2383 100644 --- a/comfy/nodes/base_nodes.py +++ b/comfy/nodes/base_nodes.py @@ -1450,6 +1450,9 @@ class LoadImage: def load_image(self, image: str): image_path = folder_paths.get_annotated_filepath(image) + + img = node_helpers.pillow(Image.open, image_path) + output_images = [] output_masks = [] @@ -1461,16 +1464,8 @@ class LoadImage: return load_exr(image_path, srgb=False) with open_image(image_path) as img: for i in ImageSequence.Iterator(img): - prev_value = None - try: - i = ImageOps.exif_transpose(i) - except OSError: - prev_value = ImageFile.LOAD_TRUNCATED_IMAGES - ImageFile.LOAD_TRUNCATED_IMAGES = True - i = ImageOps.exif_transpose(i) - finally: - if prev_value is not None: - ImageFile.LOAD_TRUNCATED_IMAGES = prev_value + i = node_helpers.pillow(ImageOps.exif_transpose, i) + if i.mode == 'I': i = i.point(lambda i: i * (1 / 255)) image = i.convert("RGB") @@ -1525,8 +1520,8 @@ class LoadImageMask: FUNCTION = "load_image" def load_image(self, image, channel): image_path = folder_paths.get_annotated_filepath(image) - i = Image.open(image_path) - i = ImageOps.exif_transpose(i) + i = node_helpers.pillow(Image.open, image_path) + i = node_helpers.pillow(ImageOps.exif_transpose, i) if i.getbands() != ("R", "G", "B", "A"): if i.mode == 'I': i = i.point(lambda i: i * (1 / 255)) diff --git a/comfy/sd.py b/comfy/sd.py index 16d9d1750..f096fa64f 100644 --- a/comfy/sd.py +++ b/comfy/sd.py @@ -485,7 +485,11 @@ def load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=True, o clip = CLIP(clip_target, embedding_directory=embedding_directory) m, u = clip.load_sd(clip_sd, full_model=True) if len(m) > 0: - logging.warning("clip missing: {}".format(m)) + m_filter = list(filter(lambda a: ".logit_scale" not in a and ".transformer.text_projection.weight" not in a, m)) + if len(m_filter) > 0: + logging.warning("clip missing: {}".format(m)) + else: + logging.debug("clip missing: {}".format(m)) if len(u) > 0: logging.debug("clip unexpected {}:".format(u))