| import torch
|
| import numpy as np
|
| import scipy
|
| import os
|
|
|
| from pathlib import Path
|
| import folder_paths
|
|
|
| FONTS_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "fonts")
|
|
|
| SCRIPT_DIR = Path(__file__).parent
|
| folder_paths.add_model_folder_path("luts", (SCRIPT_DIR / "luts").as_posix())
|
| folder_paths.add_model_folder_path(
|
| "luts", (Path(folder_paths.models_dir) / "luts").as_posix()
|
| )
|
|
|
|
|
| class AnyType(str):
|
| def __ne__(self, __value: object) -> bool:
|
| return False
|
|
|
| def min_(tensor_list):
|
|
|
| x = torch.stack(tensor_list)
|
| mn = x.min(axis=0)[0]
|
| return torch.clamp(mn, min=0)
|
|
|
| def max_(tensor_list):
|
|
|
| x = torch.stack(tensor_list)
|
| mx = x.max(axis=0)[0]
|
| return torch.clamp(mx, max=1)
|
|
|
| def expand_mask(mask, expand, tapered_corners):
|
| c = 0 if tapered_corners else 1
|
| kernel = np.array([[c, 1, c],
|
| [1, 1, 1],
|
| [c, 1, c]])
|
| mask = mask.reshape((-1, mask.shape[-2], mask.shape[-1]))
|
| out = []
|
| for m in mask:
|
| output = m.numpy()
|
| for _ in range(abs(expand)):
|
| if expand < 0:
|
| output = scipy.ndimage.grey_erosion(output, footprint=kernel)
|
| else:
|
| output = scipy.ndimage.grey_dilation(output, footprint=kernel)
|
| output = torch.from_numpy(output)
|
| out.append(output)
|
|
|
| return torch.stack(out, dim=0)
|
|
|
| def parse_string_to_list(s):
|
| elements = s.split(',')
|
| result = []
|
|
|
| def parse_number(s):
|
| try:
|
| if '.' in s:
|
| return float(s)
|
| else:
|
| return int(s)
|
| except ValueError:
|
| return 0
|
|
|
| def decimal_places(s):
|
| if '.' in s:
|
| return len(s.split('.')[1])
|
| return 0
|
|
|
| for element in elements:
|
| element = element.strip()
|
| if '...' in element:
|
| start, rest = element.split('...')
|
| end, step = rest.split('+')
|
| decimals = decimal_places(step)
|
| start = parse_number(start)
|
| end = parse_number(end)
|
| step = parse_number(step)
|
| current = start
|
| if (start > end and step > 0) or (start < end and step < 0):
|
| step = -step
|
| while current <= end:
|
| result.append(round(current, decimals))
|
| current += step
|
| else:
|
| result.append(round(parse_number(element), decimal_places(element)))
|
|
|
| return result |