revise preview logics

This commit is contained in:
layerdiffusion
2024-08-07 18:00:58 -07:00
parent e1df7a1bae
commit 69b1827ed5
4 changed files with 21 additions and 36 deletions

View File

@@ -39,6 +39,9 @@ class ForgeDiffusionEngine:
self.is_sdxl = False
self.is_sd3 = False
def is_webui_legacy_model(self):
return self.is_sd1 or self.is_sd2 or self.is_sdxl or self.is_sd3
def set_clip_skip(self, clip_skip):
pass

View File

@@ -47,10 +47,18 @@ def samples_to_images_tensor(sample, approximation=None, model=None):
if approximation == 2:
x_sample = sd_vae_approx.cheap_approximation(sample)
elif approximation == 1:
x_sample = sd_vae_approx.model()(sample.to(devices.device, devices.dtype)).detach()
m = sd_vae_approx.model()
if m is None:
x_sample = sd_vae_approx.cheap_approximation(sample)
else:
x_sample = m(sample.to(devices.device, devices.dtype)).detach()
elif approximation == 3:
x_sample = sd_vae_taesd.decoder_model()(sample.to(devices.device, devices.dtype)).detach()
x_sample = x_sample * 2 - 1
m = sd_vae_taesd.decoder_model()
if m is None:
x_sample = sd_vae_approx.cheap_approximation(sample)
else:
x_sample = m(sample.to(devices.device, devices.dtype)).detach()
x_sample = x_sample * 2 - 1
else:
if model is None:
model = shared.sd_model

View File

@@ -40,6 +40,9 @@ def download_model(model_path, model_url):
def model():
if not shared.sd_model.is_webui_legacy_model():
return None
if shared.sd_model.is_sd3:
model_name = "vaeapprox-sd3.pt"
elif shared.sd_model.is_sdxl:
@@ -68,36 +71,4 @@ def model():
def cheap_approximation(sample):
# https://discuss.huggingface.co/t/decoding-latents-to-rgb-without-upscaling/23204/2
if shared.sd_model.is_sd3:
coeffs = [
[-0.0645, 0.0177, 0.1052], [ 0.0028, 0.0312, 0.0650],
[ 0.1848, 0.0762, 0.0360], [ 0.0944, 0.0360, 0.0889],
[ 0.0897, 0.0506, -0.0364], [-0.0020, 0.1203, 0.0284],
[ 0.0855, 0.0118, 0.0283], [-0.0539, 0.0658, 0.1047],
[-0.0057, 0.0116, 0.0700], [-0.0412, 0.0281, -0.0039],
[ 0.1106, 0.1171, 0.1220], [-0.0248, 0.0682, -0.0481],
[ 0.0815, 0.0846, 0.1207], [-0.0120, -0.0055, -0.0867],
[-0.0749, -0.0634, -0.0456], [-0.1418, -0.1457, -0.1259],
]
elif shared.sd_model.is_sdxl:
coeffs = [
[ 0.3448, 0.4168, 0.4395],
[-0.1953, -0.0290, 0.0250],
[ 0.1074, 0.0886, -0.0163],
[-0.3730, -0.2499, -0.2088],
]
else:
coeffs = [
[ 0.298, 0.207, 0.208],
[ 0.187, 0.286, 0.173],
[-0.158, 0.189, 0.264],
[-0.184, -0.271, -0.473],
]
coefs = torch.tensor(coeffs).to(sample.device)
x_sample = torch.einsum("...lxy,lr -> ...rxy", sample, coefs)
return x_sample
return torch.einsum("...lxy,lr -> ...rxy", sample, torch.tensor(shared.sd_model.model_config.latent_format.latent_rgb_factors).to(sample.device))

View File

@@ -95,6 +95,9 @@ def download_model(model_path, model_url):
def decoder_model():
if not shared.sd_model.is_webui_legacy_model():
return None
if shared.sd_model.is_sd3:
model_name = "taesd3_decoder.pth"
elif shared.sd_model.is_sdxl: