MCPcopy
hub / github.com/lllyasviel/Fooocus / sample_hacked

Function sample_hacked

modules/sample_hijack.py:89–159  ·  view source on GitHub ↗
(model, noise, positive, negative, cfg, device, sampler, sigmas, model_options={}, latent_image=None, denoise_mask=None, callback=None, disable_pbar=False, seed=None)

Source from the content-addressed store, hash-verified

87@torch.no_grad()
88@torch.inference_mode()
89def sample_hacked(model, noise, positive, negative, cfg, device, sampler, sigmas, model_options={}, latent_image=None, denoise_mask=None, callback=None, disable_pbar=False, seed=None):
90 global current_refiner
91
92 positive = positive[:]
93 negative = negative[:]
94
95 resolve_areas_and_cond_masks(positive, noise.shape[2], noise.shape[3], device)
96 resolve_areas_and_cond_masks(negative, noise.shape[2], noise.shape[3], device)
97
98 model_wrap = wrap_model(model)
99
100 calculate_start_end_timesteps(model, negative)
101 calculate_start_end_timesteps(model, positive)
102
103 if latent_image is not None:
104 latent_image = model.process_latent_in(latent_image)
105
106 if hasattr(model, 'extra_conds'):
107 positive = encode_model_conds(model.extra_conds, positive, noise, device, "positive", latent_image=latent_image, denoise_mask=denoise_mask)
108 negative = encode_model_conds(model.extra_conds, negative, noise, device, "negative", latent_image=latent_image, denoise_mask=denoise_mask)
109
110 #make sure each cond area has an opposite one with the same area
111 for c in positive:
112 create_cond_with_same_area_if_none(negative, c)
113 for c in negative:
114 create_cond_with_same_area_if_none(positive, c)
115
116 # pre_run_control(model, negative + positive)
117 pre_run_control(model, positive) # negative is not necessary in Fooocus, 0.5s faster.
118
119 apply_empty_x_to_equal_area(list(filter(lambda c: c.get('control_apply_to_uncond', False) == True, positive)), negative, 'control', lambda cond_cnets, x: cond_cnets[x])
120 apply_empty_x_to_equal_area(positive, negative, 'gligen', lambda cond_cnets, x: cond_cnets[x])
121
122 extra_args = {"cond":positive, "uncond":negative, "cond_scale": cfg, "model_options": model_options, "seed":seed}
123
124 if current_refiner is not None and hasattr(current_refiner.model, 'extra_conds'):
125 positive_refiner = clip_separate_after_preparation(positive, target_model=current_refiner.model)
126 negative_refiner = clip_separate_after_preparation(negative, target_model=current_refiner.model)
127
128 positive_refiner = encode_model_conds(current_refiner.model.extra_conds, positive_refiner, noise, device, "positive", latent_image=latent_image, denoise_mask=denoise_mask)
129 negative_refiner = encode_model_conds(current_refiner.model.extra_conds, negative_refiner, noise, device, "negative", latent_image=latent_image, denoise_mask=denoise_mask)
130
131 def refiner_switch():
132 cleanup_additional_models(set(get_models_from_cond(positive, "control") + get_models_from_cond(negative, "control")))
133
134 extra_args["cond"] = positive_refiner
135 extra_args["uncond"] = negative_refiner
136
137 # clear ip-adapter for refiner
138 extra_args['model_options'] = {k: {} if k == 'transformer_options' else v for k, v in extra_args['model_options'].items()}
139
140 models, inference_memory = get_additional_models(positive_refiner, negative_refiner, current_refiner.model_dtype())
141 ldm_patched.modules.model_management.load_models_gpu(
142 [current_refiner] + models,
143 model.memory_required([noise.shape[0] * 2] + list(noise.shape[1:])) + inference_memory)
144
145 model_wrap.inner_model = current_refiner.model
146 print('Refiner Swapped')

Callers

nothing calls this directly

Calls 12

wrap_modelFunction · 0.90
encode_model_condsFunction · 0.90
pre_run_controlFunction · 0.90
process_latent_inMethod · 0.80
process_latent_outMethod · 0.80
toMethod · 0.80
sampleMethod · 0.45

Tested by

no test coverage detected