def common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent, denoise=1.0, disable_noise=False, start_step=None, last_step=None, force_full_denoise=False):
latent_image = latent["samples"]
latent_image = comfy.sample.fix_empty_latent_channels(model, latent_image)
if disable_noise:
noise = torch.zeros(latent_image.size(), dtype=latent_image.dtype, layout=latent_image.layout, device="cpu")
else:
batch_inds = latent["batch_index"] if "batch_index" in latent else None
noise = comfy.sample.prepare_noise(latent_image, seed, batch_inds)
noise_mask = None
if "noise_mask" in latent:
noise_mask = latent["noise_mask"]
callback = latent_preview.prepare_callback(model, steps)
disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED
samples = comfy.sample.sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative, latent_image,
denoise=denoise, disable_noise=disable_noise, start_step=start_step, last_step=last_step,
force_full_denoise=force_full_denoise, noise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=seed)
out = latent.copy()
out["samples"] = samples
return (out, )
class KSampler:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"model": ("MODEL", {"tooltip": "El modelo utilizado para eliminar el ruido del latente de entrada."}),
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "control_after_generate": True, "tooltip": "La semilla aleatoria utilizada para crear el ruido."}),
"steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "El número de pasos utilizados en el proceso de eliminación de ruido."}),
"cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01, "tooltip": "La escala de Guía Sin Clasificador equilibra la creatividad y la adherencia a la indicación. Los valores más altos resultan en imágenes que coinciden más estrechamente con la indicación, sin embargo, valores demasiado altos afectarán negativamente la calidad."}),
"sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"tooltip": "El algoritmo utilizado al muestrear, esto puede afectar la calidad, velocidad y estilo de la salida generada."}),
"scheduler": (comfy.samplers.KSampler.SCHEDULERS, {"tooltip": "El programador controla cómo se elimina gradualmente el ruido para formar la imagen."}),
"positive": ("CONDITIONING", {"tooltip": "El condicionamiento que describe los atributos que desea incluir en la imagen."}),
"negative": ("CONDITIONING", {"tooltip": "El condicionamiento que describe los atributos que desea excluir de la imagen."}),
"latent_image": ("LATENT", {"tooltip": "La imagen latente a la que se le eliminará el ruido."}),
"denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "La cantidad de eliminación de ruido aplicada; los valores más bajos mantendrán la estructura de la imagen inicial permitiendo el muestreo de imagen a imagen."}),
}
}
RETURN_TYPES = ("LATENT",)
OUTPUT_TOOLTIPS = ("El latente con ruido eliminado.",)
FUNCTION = "sample"
CATEGORY = "sampling"
DESCRIPTION = "Utiliza el modelo proporcionado, el condicionamiento positivo y negativo para eliminar el ruido de la imagen latente."
def sample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=1.0):
return common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=denoise)