Set the seed in the SDE samplers to make them more reproducible. · code/app-python-comfyui@4eab00e · GitHub
Skip to content

Commit 4eab00e

Browse files
Set the seed in the SDE samplers to make them more reproducible.
1 parent cef6aa6 commit 4eab00e

4 files changed

Lines changed: 16 additions & 14 deletions

File tree

‎comfy/k_diffusion/sampling.py‎

Lines changed: 6 additions & 4 deletions

‎comfy/sample.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def cleanup_additional_models(models):
6565
for m in models:
6666
m.cleanup()
6767

68-
def sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=1.0, disable_noise=False, start_step=None, last_step=None, force_full_denoise=False, noise_mask=None, sigmas=None, callback=None, disable_pbar=False):
68+
def sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=1.0, disable_noise=False, start_step=None, last_step=None, force_full_denoise=False, noise_mask=None, sigmas=None, callback=None, disable_pbar=False, seed=None):
6969
device = comfy.model_management.get_torch_device()
7070

7171
if noise_mask is not None:
@@ -85,7 +85,7 @@ def sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative
8585

8686
sampler = comfy.samplers.KSampler(real_model, steps=steps, device=device, sampler=sampler_name, scheduler=scheduler, denoise=denoise, model_options=model.model_options)
8787

88-
samples = sampler.sample(noise, positive_copy, negative_copy, cfg=cfg, latent_image=latent_image, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, denoise_mask=noise_mask, sigmas=sigmas, callback=callback, disable_pbar=disable_pbar)
88+
samples = sampler.sample(noise, positive_copy, negative_copy, cfg=cfg, latent_image=latent_image, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, denoise_mask=noise_mask, sigmas=sigmas, callback=callback, disable_pbar=disable_pbar, seed=seed)
8989
samples = samples.cpu()
9090

9191
cleanup_additional_models(models)

‎comfy/samplers.py‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def lcm(a, b): #TODO: eventually replace by math.lcm (added in python3.9)
1313

1414
#The main sampling function shared by all the samplers
1515
#Returns predicted noise
16-
def sampling_function(model_function, x, timestep, uncond, cond, cond_scale, cond_concat=None, model_options={}):
16+
def sampling_function(model_function, x, timestep, uncond, cond, cond_scale, cond_concat=None, model_options={}, seed=None):
1717
def get_area_and_mult(cond, x_in, cond_concat_in, timestep_in):
1818
area = (x_in.shape[2], x_in.shape[3], 0, 0)
1919
strength = 1.0
@@ -292,20 +292,20 @@ def __init__(self, model):
292292
super().__init__()
293293
self.inner_model = model
294294
self.alphas_cumprod = model.alphas_cumprod
295-
def apply_model(self, x, timestep, cond, uncond, cond_scale, cond_concat=None, model_options={}):
296-
out = sampling_function(self.inner_model.apply_model, x, timestep, uncond, cond, cond_scale, cond_concat, model_options=model_options)
295+
def apply_model(self, x, timestep, cond, uncond, cond_scale, cond_concat=None, model_options={}, seed=None):
296+
out = sampling_function(self.inner_model.apply_model, x, timestep, uncond, cond, cond_scale, cond_concat, model_options=model_options, seed=seed)
297297
return out
298298

299299

300300
class KSamplerX0Inpaint(torch.nn.Module):
301301
def __init__(self, model):
302302
super().__init__()
303303
self.inner_model = model
304-
def forward(self, x, sigma, uncond, cond, cond_scale, denoise_mask, cond_concat=None, model_options={}):
304+
def forward(self, x, sigma, uncond, cond, cond_scale, denoise_mask, cond_concat=None, model_options={}, seed=None):
305305
if denoise_mask is not None:
306306
latent_mask = 1. - denoise_mask
307307
x = x * denoise_mask + (self.latent_image + self.noise * sigma.reshape([sigma.shape[0]] + [1] * (len(self.noise.shape) - 1))) * latent_mask
308-
out = self.inner_model(x, sigma, cond=cond, uncond=uncond, cond_scale=cond_scale, cond_concat=cond_concat, model_options=model_options)
308+
out = self.inner_model(x, sigma, cond=cond, uncond=uncond, cond_scale=cond_scale, cond_concat=cond_concat, model_options=model_options, seed=seed)
309309
if denoise_mask is not None:
310310
out *= denoise_mask
311311

@@ -542,7 +542,7 @@ def set_steps(self, steps, denoise=None):
542542
sigmas = self.calculate_sigmas(new_steps).to(self.device)
543543
self.sigmas = sigmas[-(steps + 1):]
544544

545-
def sample(self, noise, positive, negative, cfg, latent_image=None, start_step=None, last_step=None, force_full_denoise=False, denoise_mask=None, sigmas=None, callback=None, disable_pbar=False):
545+
def sample(self, noise, positive, negative, cfg, latent_image=None, start_step=None, last_step=None, force_full_denoise=False, denoise_mask=None, sigmas=None, callback=None, disable_pbar=False, seed=None):
546546
if sigmas is None:
547547
sigmas = self.sigmas
548548
sigma_min = self.sigma_min
@@ -589,7 +589,7 @@ def sample(self, noise, positive, negative, cfg, latent_image=None, start_step=N
589589
if latent_image is not None:
590590
latent_image = self.model.process_latent_in(latent_image)
591591

592-
extra_args = {"cond":positive, "uncond":negative, "cond_scale": cfg, "model_options": self.model_options}
592+
extra_args = {"cond":positive, "uncond":negative, "cond_scale": cfg, "model_options": self.model_options, "seed":seed}
593593

594594
cond_concat = None
595595
if hasattr(self.model, 'concat_keys'): #inpaint

‎nodes.py‎

Lines changed: 1 addition & 1 deletion

0 commit comments

Comments
 (0)