| |
|
| |
|
| | 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",
|
| | }
|
| |
|