(model, x, sigmas, eta=eta, s_noise=s_noise, noise_sampler=None, distance_step_noise_sampler=None, extra_args=None, callback=None, disable=None)
| 113 | ): |
| 114 | @torch.no_grad() |
| 115 | def sample_distance_advanced(model, x, sigmas, eta=eta, s_noise=s_noise, noise_sampler=None, distance_step_noise_sampler=None, extra_args=None, callback=None, disable=None): |
| 116 | nonlocal distance_first, distance_last, eta_first, eta_last, distance_eta_first, distance_eta_last |
| 117 | |
| 118 | extra_args = {} if extra_args is None else extra_args |
| 119 | seed = extra_args.get("seed") |
| 120 | dstep_noise_sampler = None if distance_step_eta == 0 else distance_step_noise_sampler or noise_sampler or sampling.default_noise_sampler(x, seed=seed + distance_step_seed_offset if seed is not None else None) |
| 121 | noise_sampler = None if eta == 0 else noise_sampler or sampling.default_noise_sampler(x, seed=seed) |
| 122 | is_rf = isinstance(model.inner_model.inner_model.model_sampling, model_sampling.CONST) |
| 123 | uncond = None |
| 124 | steps = len(sigmas) - 1 |
| 125 | |
| 126 | distance_first, distance_last = fix_step_range(steps, distance_first, distance_last) |
| 127 | eta_first, eta_last = fix_step_range(steps, eta_first, eta_last) |
| 128 | distance_eta_first, distance_eta_last = fix_step_range(steps, distance_eta_first, distance_eta_last) |
| 129 | |
| 130 | if cfgpp or use_negative: |
| 131 | uncond = None |
| 132 | def post_cfg_function(args): |
| 133 | nonlocal uncond |
| 134 | uncond = args["uncond_denoised"] |
| 135 | return args["denoised"] |
| 136 | model_options = extra_args.get("model_options", {}).copy() |
| 137 | extra_args["model_options"] = comfy.model_patcher.set_model_options_post_cfg_function(model_options, post_cfg_function) |
| 138 | |
| 139 | s_min, s_max = sigmas[sigmas > 0].min(), sigmas.max() |
| 140 | progression = lambda x, y=0.5: max(0,min(1,((x - s_min) / (s_max - s_min)) ** y)) |
| 141 | d_prev = None |
| 142 | |
| 143 | if resample == -1: |
| 144 | current_resample = min(10, sigmas.shape[0] // 2) |
| 145 | else: |
| 146 | current_resample = resample |
| 147 | total = 0 |
| 148 | s_in = x.new_ones([x.shape[0]]) |
| 149 | for i in trange(steps, disable=disable): |
| 150 | use_distance = distance_first <= i <= distance_last |
| 151 | use_eta = eta_first <= i <= eta_last |
| 152 | use_distance_eta = distance_eta_first <= i <= distance_eta_last |
| 153 | sigma, sigma_next = sigmas[i:i + 2] |
| 154 | sigma_down, sigma_up, x_coeff = get_ancestral_step_ext(sigma, sigma_next, eta=eta if use_eta else 0.0, is_rf=is_rf) |
| 155 | sigma_up *= s_noise |
| 156 | dstep_sigma_down, dstep_sigma_up, dstep_x_coeff = get_ancestral_step_ext(sigma, sigma_next, eta=distance_step_eta if use_distance_eta else 0.0, is_rf=is_rf) |
| 157 | dstep_sigma_up *= distance_step_s_noise |
| 158 | |
| 159 | res_mul = progression(sigma) |
| 160 | if resample_end >= 0: |
| 161 | resample_steps = max(min(current_resample,resample_end),min(max(current_resample,resample_end),int(current_resample * res_mul + resample_end * (1 - res_mul)))) |
| 162 | else: |
| 163 | resample_steps = current_resample |
| 164 | |
| 165 | denoised = model(x, sigma * s_in, **extra_args) |
| 166 | total += 1 |
| 167 | |
| 168 | if cfgpp and torch.any(uncond): |
| 169 | d = to_d(x - denoised + uncond, sigma, denoised) |
| 170 | else: |
| 171 | d = to_d(x, sigma, denoised) |
| 172 |
nothing calls this directly
no test coverage detected