61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
import hashlib
|
|
from collections.abc import Callable
|
|
from typing import Any, TypeVar
|
|
|
|
import torch
|
|
from comfy.cli_args import args
|
|
from PIL import ImageFile, UnidentifiedImageError
|
|
|
|
T = TypeVar('T')
|
|
|
|
|
|
def conditioning_set_values(conditioning: list[Any], values: dict[str, Any] | None = None) -> list[Any]:
|
|
if values is None:
|
|
values = {}
|
|
c = []
|
|
for t in conditioning:
|
|
n = [t[0], t[1].copy()]
|
|
for k in values:
|
|
n[1][k] = values[k]
|
|
c.append(n)
|
|
|
|
return c
|
|
|
|
|
|
def pillow(fn: Callable[[Any], T], arg: Any) -> T:
|
|
prev_value = None
|
|
try:
|
|
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
|
|
x = fn(arg)
|
|
finally:
|
|
if prev_value is not None:
|
|
ImageFile.LOAD_TRUNCATED_IMAGES = prev_value
|
|
return x
|
|
|
|
|
|
def hasher() -> Callable[[], Any]:
|
|
hashfuncs = {"md5": hashlib.md5, "sha1": hashlib.sha1, "sha256": hashlib.sha256, "sha512": hashlib.sha512}
|
|
return hashfuncs[args.default_hashing_function]
|
|
|
|
|
|
def string_to_torch_dtype(string: str) -> torch.dtype | None:
|
|
if string == "fp32":
|
|
return torch.float32
|
|
if string == "fp16":
|
|
return torch.float16
|
|
if string == "bf16":
|
|
return torch.bfloat16
|
|
return None
|
|
|
|
|
|
def image_alpha_fix(destination: torch.Tensor, source: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
|
|
if destination.shape[-1] < source.shape[-1]:
|
|
source = source[..., :destination.shape[-1]]
|
|
elif destination.shape[-1] > source.shape[-1]:
|
|
destination = torch.nn.functional.pad(destination, (0, 1))
|
|
destination[..., -1] = 1.0
|
|
return destination, source
|