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