|
|
|
|
| import torch
|
|
|
| class DifferentialDiffusion():
|
| @classmethod
|
| def INPUT_TYPES(s):
|
| return {"required": {"model": ("MODEL", ),
|
| }}
|
| RETURN_TYPES = ("MODEL",)
|
| FUNCTION = "apply"
|
| CATEGORY = "_for_testing"
|
| INIT = False
|
|
|
| def apply(self, model):
|
| model = model.clone()
|
| model.set_model_denoise_mask_function(self.forward)
|
| return (model,)
|
|
|
| def forward(self, sigma: torch.Tensor, denoise_mask: torch.Tensor, extra_options: dict):
|
| model = extra_options["model"]
|
| step_sigmas = extra_options["sigmas"]
|
| sigma_to = model.inner_model.model_sampling.sigma_min
|
| if step_sigmas[-1] > sigma_to:
|
| sigma_to = step_sigmas[-1]
|
| sigma_from = step_sigmas[0]
|
|
|
| ts_from = model.inner_model.model_sampling.timestep(sigma_from)
|
| ts_to = model.inner_model.model_sampling.timestep(sigma_to)
|
| current_ts = model.inner_model.model_sampling.timestep(sigma[0])
|
|
|
| threshold = (current_ts - ts_to) / (ts_from - ts_to)
|
|
|
| return (denoise_mask >= threshold).to(denoise_mask.dtype)
|
|
|
|
|
| NODE_CLASS_MAPPINGS = {
|
| "DifferentialDiffusion": DifferentialDiffusion,
|
| }
|
| NODE_DISPLAY_NAME_MAPPINGS = {
|
| "DifferentialDiffusion": "Differential Diffusion",
|
| }
|
|
|