1
1
import torch
2
2
import comfy .model_management
3
3
import comfy .samplers
4
- import comfy .conds
5
4
import comfy .utils
6
- import math
7
5
import numpy as np
6
+ import logging
8
7
9
8
def prepare_noise (latent_image , seed , noise_inds = None ):
10
9
"""
@@ -25,94 +24,21 @@ def prepare_noise(latent_image, seed, noise_inds=None):
25
24
noises = torch .cat (noises , axis = 0 )
26
25
return noises
27
26
28
- def prepare_mask (noise_mask , shape , device ):
29
- """ensures noise mask is of proper dimensions"""
30
- noise_mask = torch .nn .functional .interpolate (noise_mask .reshape ((- 1 , 1 , noise_mask .shape [- 2 ], noise_mask .shape [- 1 ])), size = (shape [2 ], shape [3 ]), mode = "bilinear" )
31
- noise_mask = torch .cat ([noise_mask ] * shape [1 ], dim = 1 )
32
- noise_mask = comfy .utils .repeat_to_batch_size (noise_mask , shape [0 ])
33
- noise_mask = noise_mask .to (device )
34
- return noise_mask
35
-
36
- def get_models_from_cond (cond , model_type ):
37
- models = []
38
- for c in cond :
39
- if model_type in c :
40
- models += [c [model_type ]]
41
- return models
42
-
43
- def convert_cond (cond ):
44
- out = []
45
- for c in cond :
46
- temp = c [1 ].copy ()
47
- model_conds = temp .get ("model_conds" , {})
48
- if c [0 ] is not None :
49
- model_conds ["c_crossattn" ] = comfy .conds .CONDCrossAttn (c [0 ]) #TODO: remove
50
- temp ["cross_attn" ] = c [0 ]
51
- temp ["model_conds" ] = model_conds
52
- out .append (temp )
53
- return out
54
-
55
- def get_additional_models (positive , negative , dtype ):
56
- """loads additional models in positive and negative conditioning"""
57
- control_nets = set (get_models_from_cond (positive , "control" ) + get_models_from_cond (negative , "control" ))
58
-
59
- inference_memory = 0
60
- control_models = []
61
- for m in control_nets :
62
- control_models += m .get_models ()
63
- inference_memory += m .inference_memory_requirements (dtype )
64
-
65
- gligen = get_models_from_cond (positive , "gligen" ) + get_models_from_cond (negative , "gligen" )
66
- gligen = [x [1 ] for x in gligen ]
67
- models = control_models + gligen
68
- return models , inference_memory
69
-
70
- def cleanup_additional_models (models ):
71
- """cleanup additional models that were loaded"""
72
- for m in models :
73
- if hasattr (m , 'cleanup' ):
74
- m .cleanup ()
75
-
76
27
def prepare_sampling (model , noise_shape , positive , negative , noise_mask ):
77
- device = model .load_device
78
- positive = convert_cond (positive )
79
- negative = convert_cond (negative )
80
-
81
- if noise_mask is not None :
82
- noise_mask = prepare_mask (noise_mask , noise_shape , device )
83
-
84
- real_model = None
85
- models , inference_memory = get_additional_models (positive , negative , model .model_dtype ())
86
- comfy .model_management .load_models_gpu ([model ] + models , model .memory_required ([noise_shape [0 ] * 2 ] + list (noise_shape [1 :])) + inference_memory )
87
- real_model = model .model
88
-
89
- return real_model , positive , negative , noise_mask , models
28
+ logging .warning ("Warning: comfy.sample.prepare_sampling isn't used anymore and can be removed" )
29
+ return model , positive , negative , noise_mask , []
90
30
31
+ def cleanup_additional_models (models ):
32
+ logging .warning ("Warning: comfy.sample.cleanup_additional_models isn't used anymore and can be removed" )
91
33
92
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 ):
93
- real_model , positive_copy , negative_copy , noise_mask , models = prepare_sampling (model , noise .shape , positive , negative , noise_mask )
94
-
95
- noise = noise .to (model .load_device )
96
- latent_image = latent_image .to (model .load_device )
35
+ sampler = comfy .samplers .KSampler (model , steps = steps , device = model .load_device , sampler = sampler_name , scheduler = scheduler , denoise = denoise , model_options = model .model_options )
97
36
98
- sampler = comfy .samplers .KSampler (real_model , steps = steps , device = model .load_device , sampler = sampler_name , scheduler = scheduler , denoise = denoise , model_options = model .model_options )
99
-
100
- 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 )
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 )
101
38
samples = samples .to (comfy .model_management .intermediate_device ())
102
-
103
- cleanup_additional_models (models )
104
- cleanup_additional_models (set (get_models_from_cond (positive_copy , "control" ) + get_models_from_cond (negative_copy , "control" )))
105
39
return samples
106
40
107
41
def sample_custom (model , noise , cfg , sampler , sigmas , positive , negative , latent_image , noise_mask = None , callback = None , disable_pbar = False , seed = None ):
108
- real_model , positive_copy , negative_copy , noise_mask , models = prepare_sampling (model , noise .shape , positive , negative , noise_mask )
109
- noise = noise .to (model .load_device )
110
- latent_image = latent_image .to (model .load_device )
111
- sigmas = sigmas .to (model .load_device )
112
-
113
- samples = comfy .samplers .sample (real_model , noise , positive_copy , negative_copy , 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 )
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 )
114
43
samples = samples .to (comfy .model_management .intermediate_device ())
115
- cleanup_additional_models (models )
116
- cleanup_additional_models (set (get_models_from_cond (positive_copy , "control" ) + get_models_from_cond (negative_copy , "control" )))
117
44
return samples
118
-
0 commit comments