Fix for ComfyUI update

Remove dynamic cond scale, for multiple reasons*
* Shouldn't be in a sampler itself to begin with as it can/should be done outside of it
* It breaks with multiple conditionings, and I can't be bothered to consistently update it
This commit is contained in:
Clybius
2024-04-05 11:54:29 -05:00
parent 4247ab0b56
commit e08968efe0
2 changed files with 12 additions and 17 deletions
+10 -16
View File
@@ -824,9 +824,6 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
noise_sampler = default_noise_sampler(x) if noise_sampler is None else noise_sampler
s_in = x.new_ones([x.shape[0]])
orig_cond_scale = extra_args["cond_scale"] if "cond_scale" in extra_args else None
modified_cond_scale = extra_args["cond_scale"] if "cond_scale" in extra_args else None
# Centralization
def centralize(denoised_sample, centralization, iteration):
for b in range(len(denoised_sample)):
@@ -940,9 +937,8 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
order = 2
steps_per_sigma += order * (substeps - 1)
def apply_enhancements(x, i, model, sigma_s_in, old_denoised, modified_cond_scale):
def apply_enhancements(x, i, model, sigma_s_in, old_denoised):
args = extra_args
args["cond_scale"] = modified_cond_scale
denoised = model(x, sigma_s_in, **args)
if edge_enhancement != 0:
@@ -977,7 +973,7 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
4: [1/8, 3/8, 3/8, 1/8],
}
def dynamic_step_method(step_method, model, prev_x, denoised, prev_denoised, iteration, substep_iter, modified_cond_scale):
def dynamic_step_method(step_method, model, prev_x, denoised, prev_denoised, iteration, substep_iter):
"""
Step method function, applies cond-error modification, and dynamic step selection if chosen.
"""
@@ -986,9 +982,9 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
error = 0
if iteration == 0 or prev_denoised == None: # Warmup with a RKF45 step, else use substep method for substeps
if substep_iter > 0:
return substep_method, 1, modified_cond_scale, error
return substep_method, 1, error
order = 6
return dynamic_order_samplers[order], order, modified_cond_scale, error
return dynamic_order_samplers[order], order, error
d = to_d(prev_x, sigmas[iteration - 1], prev_denoised)
x_pred = prev_x + d * (sigmas[iteration] - sigmas[iteration - 1])
@@ -997,12 +993,10 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
error = torch.linalg.norm(d_pred - d) / torch.linalg.norm(d)
modified_cond_scale = orig_cond_scale * (1 / (1 + error)) if modified_cond_scale is not None else None
if substep_iter > 0:
return substep_method, 1, modified_cond_scale, error
return substep_method, 1, error
if step_method != "dynamic" and step_method != "adaptive_rk": # If we're not a dynamic sampler, return the step unmodified step method
return step_method, order, modified_cond_scale, error
return step_method, order, error
if (error < 1e-2):
order = 6
@@ -1016,8 +1010,8 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
order = 1
if step_method == "adaptive_rk":
return step_method, min(order, 4), modified_cond_scale, error
return dynamic_order_samplers[order], order, modified_cond_scale, error
return step_method, min(order, 4), error
return dynamic_order_samplers[order], order, error
renoise_weights = torch.ones(substeps, device=x.device) / substeps
def intensity_based_multiplicative_noise_fn(x, noise, s_noise, sigma_up, intensity, dims):
@@ -1092,7 +1086,7 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
for i in trange(len(sigmas) - 1, disable=disable):
def model(x, sigma_s_in, **extra_args): # Model wrapper to apply enhancements at every call
nonlocal old_denoised
denoised = apply_enhancements(x, i, orig_model, sigma_s_in, old_denoised, modified_cond_scale)
denoised = apply_enhancements(x, i, orig_model, sigma_s_in, old_denoised)
old_denoised = denoised
if callback is not None:
callback({'x': z_k, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised})
@@ -1113,7 +1107,7 @@ def sampler_supreme(model, x, sigmas, extra_args=None, callback=None, disable=No
eps = (z_k - denoised) / sigmas[i]
eps_cache = {'eps': eps}
step_method_dyn, order, modified_cond_scale, error = dynamic_step_method(step_method, model, prev_x, denoised, prev_denoised, i, k, modified_cond_scale) #step_method, model, prev_x, denoised, prev_denoised, i, k
step_method_dyn, order, error = dynamic_step_method(step_method, model, prev_x, denoised, prev_denoised, i, k) #step_method, model, prev_x, denoised, prev_denoised, i, k
# DynETA
eta = dyneta_fn(orig_eta, error)
+2 -1
View File
@@ -2,6 +2,7 @@ from .other_samplers.refined_exp_solver import sample_refined_exp_s
from .extra_samplers import get_noise_sampler_names, prepare_noise
import comfy.samplers
import comfy.sample
import comfy.sampler_helpers
from comfy.k_diffusion import sampling as k_diffusion_sampling
import latent_preview
import torch
@@ -203,7 +204,7 @@ class SimpleExponentialScheduler:
from comfy import model_management
import comfy.utils
import comfy.conds
from comfy.sample import prepare_sampling, cleanup_additional_models, get_models_from_cond
from comfy.sampler_helpers import prepare_sampling, cleanup_additional_models, get_models_from_cond
def mixture_sample(model, model2, noise, positive, positive2, negative, negative2, cfg, cfg2, device, device2, sampler, sampler2, sigmas, sigmas2, model_options={}, model_options2={}, latent_image=None, denoise_mask=None, denoise_mask2=None, callback=None, callback2=None, disable_pbar=False, seed=None):
positive = positive[:]