diff --git a/CHANGELOG.md b/CHANGELOG.md index 42bf77ff8..05e09a158 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ loading sd3 can now be performed fully offline - extra networks: info display now contains link to source url if model if its known works for civitai and huggingface models +- css tweaks for standardui ### Fixes @@ -30,7 +31,7 @@ - fix **hunyuandit** set attention processor - fix civitai download without name - fix compatibility with latest adetailer -- css tweaks for standardui +- fix invalid sampler warning - restructure api examples: `cli/api-*` - handle theme fallback when invalid theme is specified diff --git a/modules/control/run.py b/modules/control/run.py index b6cfb69eb..944474d50 100644 --- a/modules/control/run.py +++ b/modules/control/run.py @@ -90,8 +90,7 @@ def control_run(units: List[unit.Unit] = [], inputs: List[Image.Image] = [], ini shared.log.warning('Sampler: invalid') sampler_index = 0 if hr_sampler_index is None: - shared.log.warning('Sampler: invalid') - hr_sampler_index = 0 + hr_sampler_index = sampler_index p = StableDiffusionProcessingControl( prompt = prompt, diff --git a/modules/txt2img.py b/modules/txt2img.py index 56abf3de4..76b0a7c45 100644 --- a/modules/txt2img.py +++ b/modules/txt2img.py @@ -35,8 +35,7 @@ def txt2img(id_task, shared.log.warning('Sampler: invalid') sampler_index = 0 if hr_sampler_index is None: - shared.log.warning('Sampler: invalid') - hr_sampler_index = 0 + hr_sampler_index = sampler_index p = processing.StableDiffusionProcessingTxt2Img( sd_model=shared.sd_model, diff --git a/modules/unipc/uni_pc.py b/modules/unipc/uni_pc.py index ca7fdd7dc..6ba3a31fa 100644 --- a/modules/unipc/uni_pc.py +++ b/modules/unipc/uni_pc.py @@ -14,86 +14,6 @@ class NoiseScheduleVP: continuous_beta_0=0.1, continuous_beta_1=20., ): - """Create a wrapper class for the forward SDE (VP type). - - *** - Update: We support discrete-time diffusion models by implementing a picewise linear interpolation for log_alpha_t. - We recommend to use schedule='discrete' for the discrete-time diffusion models, especially for high-resolution images. - *** - - The forward SDE ensures that the condition distribution q_{t|0}(x_t | x_0) = N ( alpha_t * x_0, sigma_t^2 * I ). - We further define lambda_t = log(alpha_t) - log(sigma_t), which is the half-logSNR (described in the DPM-Solver paper). - Therefore, we implement the functions for computing alpha_t, sigma_t and lambda_t. For t in [0, T], we have: - - log_alpha_t = self.marginal_log_mean_coeff(t) - sigma_t = self.marginal_std(t) - lambda_t = self.marginal_lambda(t) - - Moreover, as lambda(t) is an invertible function, we also support its inverse function: - - t = self.inverse_lambda(lambda_t) - - =============================================================== - - We support both discrete-time DPMs (trained on n = 0, 1, ..., N-1) and continuous-time DPMs (trained on t in [t_0, T]). - - 1. For discrete-time DPMs: - - For discrete-time DPMs trained on n = 0, 1, ..., N-1, we convert the discrete steps to continuous time steps by: - t_i = (i + 1) / N - e.g. for N = 1000, we have t_0 = 1e-3 and T = t_{N-1} = 1. - We solve the corresponding diffusion ODE from time T = 1 to time t_0 = 1e-3. - - Args: - betas: A `torch.Tensor`. The beta array for the discrete-time DPM. (See the original DDPM paper for details) - alphas_cumprod: A `torch.Tensor`. The cumprod alphas for the discrete-time DPM. (See the original DDPM paper for details) - - Note that we always have alphas_cumprod = cumprod(betas). Therefore, we only need to set one of `betas` and `alphas_cumprod`. - - **Important**: Please pay special attention for the args for `alphas_cumprod`: - The `alphas_cumprod` is the \hat{alpha_n} arrays in the notations of DDPM. Specifically, DDPMs assume that - q_{t_n | 0}(x_{t_n} | x_0) = N ( \sqrt{\hat{alpha_n}} * x_0, (1 - \hat{alpha_n}) * I ). - Therefore, the notation \hat{alpha_n} is different from the notation alpha_t in DPM-Solver. In fact, we have - alpha_{t_n} = \sqrt{\hat{alpha_n}}, - and - log(alpha_{t_n}) = 0.5 * log(\hat{alpha_n}). - - - 2. For continuous-time DPMs: - - We support two types of VPSDEs: linear (DDPM) and cosine (improved-DDPM). The hyperparameters for the noise - schedule are the default settings in DDPM and improved-DDPM: - - Args: - beta_min: A `float` number. The smallest beta for the linear schedule. - beta_max: A `float` number. The largest beta for the linear schedule. - cosine_s: A `float` number. The hyperparameter in the cosine schedule. - cosine_beta_max: A `float` number. The hyperparameter in the cosine schedule. - T: A `float` number. The ending time of the forward process. - - =============================================================== - - Args: - schedule: A `str`. The noise schedule of the forward SDE. 'discrete' for discrete-time DPMs, - 'linear' or 'cosine' for continuous-time DPMs. - Returns: - A wrapper object of the forward SDE (VP type). - - =============================================================== - - Example: - - # For discrete-time DPMs, given betas (the beta array for n = 0, 1, ..., N - 1): - >>> ns = NoiseScheduleVP('discrete', betas=betas) - - # For discrete-time DPMs, given alphas_cumprod (the \hat{alpha_n} array for n = 0, 1, ..., N - 1): - >>> ns = NoiseScheduleVP('discrete', alphas_cumprod=alphas_cumprod) - - # For continuous-time DPMs (VPSDE), linear schedule: - >>> ns = NoiseScheduleVP('linear', continuous_beta_0=0.1, continuous_beta_1=20.) - - """ - if schedule not in ['discrete', 'linear', 'cosine']: raise ValueError(f"Unsupported noise schedule {schedule}. The schedule needs to be 'discrete' or 'linear' or 'cosine'")