sample.py 2.62 KB
Newer Older
1
2
import torch
import comfy.model_management
3
import comfy.samplers
4
import comfy.utils
5
import numpy as np
6
import logging
7

8
def prepare_noise(latent_image, seed, noise_inds=None):
9
10
11
12
    """
    creates random noise given a latent image and a seed.
    optional arg skip can be used to skip and discard x number of noise generations for a given seed
    """
BlenderNeko's avatar
BlenderNeko committed
13
    generator = torch.manual_seed(seed)
14
15
16
17
18
19
    if noise_inds is None:
        return torch.randn(latent_image.size(), dtype=latent_image.dtype, layout=latent_image.layout, generator=generator, device="cpu")
    
    unique_inds, inverse = np.unique(noise_inds, return_inverse=True)
    noises = []
    for i in range(unique_inds[-1]+1):
BlenderNeko's avatar
BlenderNeko committed
20
        noise = torch.randn([1] + list(latent_image.size())[1:], dtype=latent_image.dtype, layout=latent_image.layout, generator=generator, device="cpu")
21
22
23
24
25
        if i in unique_inds:
            noises.append(noise)
    noises = [noises[i] for i in inverse]
    noises = torch.cat(noises, axis=0)
    return noises
26

27
28
29
def prepare_sampling(model, noise_shape, positive, negative, noise_mask):
    logging.warning("Warning: comfy.sample.prepare_sampling isn't used anymore and can be removed")
    return model, positive, negative, noise_mask, []
30
31

def cleanup_additional_models(models):
32
    logging.warning("Warning: comfy.sample.cleanup_additional_models isn't used anymore and can be removed")
33

34
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):
35
    sampler = comfy.samplers.KSampler(model, steps=steps, device=model.load_device, sampler=sampler_name, scheduler=scheduler, denoise=denoise, model_options=model.model_options)
36

37
    samples = sampler.sample(noise, positive, negative, 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)
38
    samples = samples.to(comfy.model_management.intermediate_device())
39
    return samples
comfyanonymous's avatar
comfyanonymous committed
40
41

def sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent_image, noise_mask=None, callback=None, disable_pbar=False, seed=None):
42
    samples = comfy.samplers.sample(model, noise, positive, negative, cfg, model.load_device, sampler, sigmas, model_options=model.model_options, latent_image=latent_image, denoise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=seed)
43
    samples = samples.to(comfy.model_management.intermediate_device())
comfyanonymous's avatar
comfyanonymous committed
44
    return samples