(model, noise, positive, negative, cfg, device, sampler, sigmas, model_options={}, latent_image=None, denoise_mask=None, callback=None, disable_pbar=False, seed=None)
| 87 | @torch.no_grad() |
| 88 | @torch.inference_mode() |
| 89 | def 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') |
nothing calls this directly
no test coverage detected