| 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 |