SwarmComfyCommon / SwarmUnsampler.py
Goodis's picture
Upload 55 files
ca2a3d8 verified
import torch, comfy
from .SwarmKSampler import make_swarm_sampler_callback
class SwarmUnsampler:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"model": ("MODEL",),
"steps": ("INT", {"default": 20, "min": 1, "max": 10000}),
"sampler_name": (comfy.samplers.KSampler.SAMPLERS, ),
"scheduler": (["turbo"] + comfy.samplers.KSampler.SCHEDULERS, ),
"positive": ("CONDITIONING", ),
"negative": ("CONDITIONING", ),
"latent_image": ("LATENT", ),
"start_at_step": ("INT", {"default": 0, "min": 0, "max": 10000}),
"previews": (["default", "none", "one"], )
}
}
CATEGORY = "SwarmUI/sampling"
RETURN_TYPES = ("LATENT",)
FUNCTION = "unsample"
DESCRIPTION = "Runs sampling in reverse. The function of this is to create noise that matches an image, such that you can the run forward sampling with an altered version of the unsampling prompt to get a closely altered image. May not work on all models, may not work perfectly. Input values should largely match your Sampler inputs."
def unsample(self, model, steps, sampler_name, scheduler, positive, negative, latent_image, start_at_step, previews):
device = comfy.model_management.get_torch_device()
latent_samples = latent_image["samples"].to(device)
noise = torch.zeros(latent_samples.size(), dtype=latent_samples.dtype, layout=latent_samples.layout, device=device)
noise_mask = None
if "noise_mask" in latent_image:
noise_mask = latent_image["noise_mask"]
sampler = comfy.samplers.KSampler(model, steps=steps, device=device, sampler=sampler_name, scheduler=scheduler, denoise=1.0, model_options=model.model_options)
sigmas = sampler.sigmas.flip(0) + 0.0001
callback = make_swarm_sampler_callback(steps, device, model, previews)
samples = comfy.sample.sample(model, noise, steps, 1, sampler_name, scheduler, positive, negative, latent_samples,
denoise=1.0, disable_noise=False, start_step=0, last_step=steps - start_at_step,
force_full_denoise=False, noise_mask=noise_mask, sigmas=sigmas, callback=callback, seed=0)
out = latent_image.copy()
out["samples"] = samples
return (out, )
NODE_CLASS_MAPPINGS = {
"SwarmUnsampler": SwarmUnsampler,
}