From ea6d03bde182d89caa8efc744f59bbceb9621ee9 Mon Sep 17 00:00:00 2001 From: DenOfEquity <166248528+DenOfEquity@users.noreply.github.com> Date: Thu, 29 Aug 2024 00:45:52 +0100 Subject: [PATCH] fix #258 fix longstanding bug with Dyn Cfg Augmentation and batch >= 2 (#258) --- .../sampler_mega_modifier.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/extensions-builtin/sd_forge_latent_modifier/lib_latent_modifier/sampler_mega_modifier.py b/extensions-builtin/sd_forge_latent_modifier/lib_latent_modifier/sampler_mega_modifier.py index 3403340c..b8957507 100644 --- a/extensions-builtin/sd_forge_latent_modifier/lib_latent_modifier/sampler_mega_modifier.py +++ b/extensions-builtin/sd_forge_latent_modifier/lib_latent_modifier/sampler_mega_modifier.py @@ -824,27 +824,20 @@ def pyramid_noise_like(x, discount=0.9, generator=None, rand_source=random): import math def dyn_cfg_modifier(conditioning, unconditioning, method, cond_scale, time_mult): + time = time_mult[0].item() + time_factor = -(math.cos(0.5 * time * math.pi) / 2) + 1 + noise_pred = conditioning - unconditioning + noise_pred_magnitude = (torch.linalg.vector_norm(noise_pred, dim=(1)) + 0.0000000001)[:,None] + match method: case "dyncfg-halfcosine": - noise_pred = conditioning - unconditioning - - noise_pred_magnitude = (torch.linalg.vector_norm(noise_pred, dim=(1)) + 0.0000000001)[:,None] - - time = time_mult.item() - time_factor = -(math.cos(0.5 * time * math.pi) / 2) + 1 noise_pred_timescaled_magnitude = (torch.linalg.vector_norm(noise_pred * time_factor, dim=(1)) + 0.0000000001)[:,None] noise_pred /= noise_pred_magnitude noise_pred *= noise_pred_timescaled_magnitude return noise_pred + case "dyncfg-halfcosine-mimic": - noise_pred = conditioning - unconditioning - - noise_pred_magnitude = (torch.linalg.vector_norm(noise_pred, dim=(1)) + 0.0000000001)[:,None] - - time = time_mult.item() - time_factor = -(math.cos(0.5 * time * math.pi) / 2) + 1 - latent = noise_pred mimic_latent = noise_pred * time_factor