|
import sys |
|
from os import path |
|
sys.path.insert(0, path.dirname(__file__)) |
|
from .ldsrlib.LDSR import LDSR |
|
from folder_paths import get_filename_list, get_full_path |
|
from comfy.model_management import get_torch_device |
|
from comfy.utils import ProgressBar |
|
import torch |
|
|
|
|
|
class LDSRModelLoader: |
|
@classmethod |
|
def INPUT_TYPES(s): |
|
model_list = get_filename_list("upscale_models") |
|
candidates = [name for name in model_list if 'last.ckpt' in name] |
|
if len(candidates) > 0: |
|
default_path = candidates[0] |
|
else: |
|
default_path = 'last.ckpt' |
|
|
|
return { |
|
"required": { |
|
"model": (model_list, {'default': default_path}), |
|
} |
|
} |
|
|
|
RETURN_TYPES = ("UPSCALE_MODEL",) |
|
FUNCTION = "load" |
|
|
|
CATEGORY = "Flowty LDSR" |
|
|
|
def load(self, model): |
|
model_path = get_full_path("upscale_models", model) |
|
model = LDSR.load_model_from_path(model_path) |
|
model['model'].cpu() |
|
return (model, ) |
|
|
|
|
|
class LDSRUpscale: |
|
@classmethod |
|
def INPUT_TYPES(s): |
|
return { |
|
"required": { |
|
"upscale_model": ("UPSCALE_MODEL",), |
|
"images": ("IMAGE",), |
|
"steps": (["25", "50", "100", "250", "500", "1000"], {"default": "100"}), |
|
"pre_downscale": (['None', '1/2', '1/4'], {"default": "None"}), |
|
"post_downscale": (['None', 'Original Size', '1/2', '1/4'], {"default": "None"}), |
|
"downsample_method": (['Nearest', 'Lanczos'], {"default": "Lanczos"}), |
|
} |
|
} |
|
|
|
RETURN_TYPES = ("IMAGE",) |
|
RETURN_NAMES = ("images",) |
|
FUNCTION = "upscale" |
|
|
|
CATEGORY = "Flowty LDSR" |
|
|
|
def upscale(self, upscale_model, images, steps, pre_downscale="None", post_downscale="None", downsample_method="Lanczos"): |
|
pbar = ProgressBar(int(steps)) |
|
p = {"prev": 0} |
|
|
|
def prog(i): |
|
i = i + 1 |
|
if i < p["prev"]: |
|
p["prev"] = 0 |
|
pbar.update(i - p["prev"]) |
|
p["prev"] = i |
|
|
|
ldsr = LDSR(model=upscale_model, on_progress=prog) |
|
|
|
outputs = [] |
|
|
|
for image in images: |
|
outputs.append(ldsr.superResolution(image, int(steps), pre_downscale, post_downscale, downsample_method)) |
|
|
|
return (torch.stack(outputs),) |
|
|
|
|
|
class LDSRUpscaler: |
|
@classmethod |
|
def INPUT_TYPES(s): |
|
model_list = get_filename_list("upscale_models") |
|
candidates = [name for name in model_list if 'last.ckpt' in name] |
|
if len(candidates) > 0: |
|
default_path = candidates[0] |
|
else: |
|
default_path = 'last.ckpt' |
|
|
|
return { |
|
"required": { |
|
"model": (model_list, {'default': default_path}), |
|
"images": ("IMAGE",), |
|
"steps": (["25", "50", "100", "250", "500", "1000"], {"default": "100"}), |
|
"pre_downscale": (['None', '1/2', '1/4'], {"default": "None"}), |
|
"post_downscale": (['None', 'Original Size', '1/2', '1/4'], {"default": "None"}), |
|
"downsample_method": (['Nearest', 'Lanczos'], {"default": "Lanczos"}), |
|
} |
|
} |
|
|
|
RETURN_TYPES = ("IMAGE",) |
|
RETURN_NAMES = ("images",) |
|
FUNCTION = "upscale" |
|
|
|
CATEGORY = "Flowty LDSR" |
|
|
|
def upscale(self, model, images, steps, pre_downscale="None", post_downscale="None", downsample_method="Lanczos"): |
|
model_path = get_full_path("upscale_models", model) |
|
pbar = ProgressBar(int(steps)) |
|
p = {"prev": 0} |
|
|
|
def prog(i): |
|
i = i + 1 |
|
if i < p["prev"]: |
|
p["prev"] = 0 |
|
pbar.update(i - p["prev"]) |
|
p["prev"] = i |
|
|
|
ldsr = LDSR(modelPath=model_path, torchdevice=get_torch_device(), on_progress=prog) |
|
|
|
outputs = [] |
|
|
|
for image in images: |
|
outputs.append(ldsr.superResolution(image, int(steps), pre_downscale, post_downscale, downsample_method)) |
|
|
|
return (torch.stack(outputs),) |
|
|
|
|
|
NODE_CLASS_MAPPINGS = { |
|
"LDSRUpscaler": LDSRUpscaler, |
|
"LDSRModelLoader": LDSRModelLoader, |
|
"LDSRUpscale": LDSRUpscale |
|
} |
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = { |
|
"LDSRUpscaler": "LDSR Upscale (all-in-one)", |
|
"LDSRModelLoader": "Load LDSR Model", |
|
"LDSRUpscale": "LDSR Upscale" |
|
} |
|
|
|
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] |
|
|