|
import hashlib |
|
import torch |
|
|
|
from comfy.cli_args import args |
|
|
|
from PIL import ImageFile, UnidentifiedImageError |
|
|
|
def conditioning_set_values(conditioning, values={}, append=False): |
|
c = [] |
|
for t in conditioning: |
|
n = [t[0], t[1].copy()] |
|
for k in values: |
|
val = values[k] |
|
if append: |
|
old_val = n[1].get(k, None) |
|
if old_val is not None: |
|
val = old_val + val |
|
|
|
n[1][k] = val |
|
c.append(n) |
|
|
|
return c |
|
|
|
def pillow(fn, arg): |
|
prev_value = None |
|
try: |
|
x = fn(arg) |
|
except (OSError, UnidentifiedImageError, ValueError): |
|
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(): |
|
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): |
|
if string == "fp32": |
|
return torch.float32 |
|
if string == "fp16": |
|
return torch.float16 |
|
if string == "bf16": |
|
return torch.bfloat16 |
|
|
|
def image_alpha_fix(destination, source): |
|
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 |
|
|