@@ -39,16 +39,18 @@ Model names:
|
|||||||
| `v1` | Stable Diffusion v1.x |
|
| `v1` | Stable Diffusion v1.x |
|
||||||
| `xl` | SDXL |
|
| `xl` | SDXL |
|
||||||
| `v3` | Stable Diffusion 3 |
|
| `v3` | Stable Diffusion 3 |
|
||||||
|
| `fx` | Flux.1 |
|
||||||
| `ca` | Stable Cascade (Stage A/B) |
|
| `ca` | Stable Cascade (Stage A/B) |
|
||||||
|
|
||||||
Available models:
|
Available models:
|
||||||
|
|
||||||
| From | to `v1` | to `xl` | to `v3` | to `ca` |
|
| From | to `v1` | to `xl` | to `v3` | to `fx` | to `ca` |
|
||||||
|:----:|:-------:|:-------:|:-------:|:-------:|
|
|:----:|:-------:|:-------:|:-------:|:-------:|:-------:|
|
||||||
| `v1` | - | v4.0 | v4.0 | No |
|
| `v1` | - | v4.0 | v4.0 | No | No |
|
||||||
| `xl` | v4.0 | - | v4.0 | No |
|
| `xl` | v4.0 | - | v4.0 | No | No |
|
||||||
| `v3` | v4.0 | v4.0 | - | No |
|
| `v3` | v4.0 | v4.0 | - | No | No |
|
||||||
| `ca` | v4.0 | v4.0 | v4.0 | - |
|
| `fx` | v4.0 | v4.0 | v4.0 | - | No |
|
||||||
|
| `ca` | v4.0 | v4.0 | v4.0 | No | - |
|
||||||
|
|
||||||
## Training
|
## Training
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from huggingface_hub import hf_hub_download
|
|||||||
# v1 = Stable Diffusion 1.x
|
# v1 = Stable Diffusion 1.x
|
||||||
# xl = Stable Diffusion Extra Large (SDXL)
|
# xl = Stable Diffusion Extra Large (SDXL)
|
||||||
# v3 = Stable Diffusion Version Three (SD3)
|
# v3 = Stable Diffusion Version Three (SD3)
|
||||||
|
# fx = Black Forest Labs Flux dot One
|
||||||
# cc = Stable Cascade (Stage C) [not used]
|
# cc = Stable Cascade (Stage C) [not used]
|
||||||
# ca = Stable Cascade (Stage A/B)
|
# ca = Stable Cascade (Stage A/B)
|
||||||
config = {
|
config = {
|
||||||
@@ -16,6 +17,9 @@ config = {
|
|||||||
"xl-to-v3": {"ch_in": 4, "ch_out":16, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
"xl-to-v3": {"ch_in": 4, "ch_out":16, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
||||||
"v3-to-v1": {"ch_in":16, "ch_out": 4, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
"v3-to-v1": {"ch_in":16, "ch_out": 4, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
||||||
"v3-to-xl": {"ch_in":16, "ch_out": 4, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
"v3-to-xl": {"ch_in":16, "ch_out": 4, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
||||||
|
"fx-to-v1": {"ch_in":16, "ch_out": 4, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
||||||
|
"fx-to-xl": {"ch_in":16, "ch_out": 4, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
||||||
|
"fx-to-v3": {"ch_in":16, "ch_out":16, "ch_mid": 64, "scale": 1.0, "blocks": 12},
|
||||||
"ca-to-v1": {"ch_in": 4, "ch_out": 4, "ch_mid": 64, "scale": 0.5, "blocks": 12},
|
"ca-to-v1": {"ch_in": 4, "ch_out": 4, "ch_mid": 64, "scale": 0.5, "blocks": 12},
|
||||||
"ca-to-xl": {"ch_in": 4, "ch_out": 4, "ch_mid": 64, "scale": 0.5, "blocks": 12},
|
"ca-to-xl": {"ch_in": 4, "ch_out": 4, "ch_mid": 64, "scale": 0.5, "blocks": 12},
|
||||||
"ca-to-v3": {"ch_in": 4, "ch_out":16, "ch_mid": 64, "scale": 0.5, "blocks": 12},
|
"ca-to-v3": {"ch_in": 4, "ch_out":16, "ch_mid": 64, "scale": 0.5, "blocks": 12},
|
||||||
@@ -95,7 +99,7 @@ class ComfyLatentInterposer:
|
|||||||
return {
|
return {
|
||||||
"required": {
|
"required": {
|
||||||
"samples": ("LATENT", ),
|
"samples": ("LATENT", ),
|
||||||
"latent_src": (["v1", "xl", "v3", "ca"],),
|
"latent_src": (["v1", "xl", "v3", "fx", "ca"],),
|
||||||
"latent_dst": (["v1", "xl", "v3"],),
|
"latent_dst": (["v1", "xl", "v3"],),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
steps: 35000
|
||||||
|
batch: 48
|
||||||
|
fconst: 0
|
||||||
|
cosine: False
|
||||||
|
resume: False
|
||||||
|
device: "cuda"
|
||||||
|
p_loss_weight: 1.0
|
||||||
|
r_loss_weight: 0.1
|
||||||
|
b_loss_weight: 1.0
|
||||||
|
h_loss_weight: 0.0
|
||||||
|
save_image: 100
|
||||||
|
eval_model: 10
|
||||||
|
|
||||||
|
model:
|
||||||
|
src: fx # Black Forest Labs Flux dot One
|
||||||
|
dst: v1 # Stable Diffusion 1.x
|
||||||
|
rev: "v4.0-rc1"
|
||||||
|
args:
|
||||||
|
scale: 1.0
|
||||||
|
ch_in: 16
|
||||||
|
ch_out: 4
|
||||||
|
ch_mid: 64
|
||||||
|
blocks: 12
|
||||||
|
|
||||||
|
optim:
|
||||||
|
lr: 5.0e-4
|
||||||
|
beta1: 0.5
|
||||||
|
beta2: 0.95
|
||||||
|
|
||||||
|
dataset:
|
||||||
|
src: "./latents/fx_256px_combined.bin"
|
||||||
|
dst: "./latents/v1_256px_combined.bin"
|
||||||
|
preload: False
|
||||||
|
evals:
|
||||||
|
main:
|
||||||
|
src: "./latents/test_eru/test_fx_768px.npy"
|
||||||
|
dst: "./latents/test_eru/test_v1_768px.npy"
|
||||||
|
aux:
|
||||||
|
src: "./latents/test_bga/test_fx_768px.npy"
|
||||||
|
dst: "./latents/test_bga/test_v1_768px.npy"
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
steps: 35000
|
||||||
|
batch: 48
|
||||||
|
fconst: 0
|
||||||
|
cosine: False
|
||||||
|
resume: False
|
||||||
|
device: "cuda"
|
||||||
|
p_loss_weight: 1.0
|
||||||
|
r_loss_weight: 0.1
|
||||||
|
b_loss_weight: 1.0
|
||||||
|
h_loss_weight: 0.0
|
||||||
|
save_image: 100
|
||||||
|
eval_model: 10
|
||||||
|
|
||||||
|
model:
|
||||||
|
src: fx # Black Forest Labs Flux dot One
|
||||||
|
dst: v3 # Stable Diffusion Version three point oh
|
||||||
|
rev: "v4.0-rc2"
|
||||||
|
args:
|
||||||
|
scale: 1.0
|
||||||
|
ch_in: 16
|
||||||
|
ch_out: 16
|
||||||
|
ch_mid: 64
|
||||||
|
blocks: 12
|
||||||
|
|
||||||
|
optim:
|
||||||
|
lr: 5.0e-4
|
||||||
|
beta1: 0.5
|
||||||
|
beta2: 0.95
|
||||||
|
|
||||||
|
dataset:
|
||||||
|
src: "./latents/fx_256px_combined.bin"
|
||||||
|
dst: "./latents/v3_256px_combined.bin"
|
||||||
|
preload: False
|
||||||
|
evals:
|
||||||
|
main:
|
||||||
|
src: "./latents/test_eru/test_fx_768px.npy"
|
||||||
|
dst: "./latents/test_eru/test_v3_768px.npy"
|
||||||
|
aux:
|
||||||
|
src: "./latents/test_bga/test_fx_768px.npy"
|
||||||
|
dst: "./latents/test_bga/test_v3_768px.npy"
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
steps: 35000
|
||||||
|
batch: 48
|
||||||
|
fconst: 0
|
||||||
|
cosine: False
|
||||||
|
resume: False
|
||||||
|
device: "cuda"
|
||||||
|
p_loss_weight: 1.0
|
||||||
|
r_loss_weight: 0.1
|
||||||
|
b_loss_weight: 1.0
|
||||||
|
h_loss_weight: 0.0
|
||||||
|
save_image: 100
|
||||||
|
eval_model: 10
|
||||||
|
|
||||||
|
model:
|
||||||
|
src: fx # Black Forest Labs Flux dot One
|
||||||
|
dst: xl # Stable Diffusion Extra Large
|
||||||
|
rev: "v4.0-rc3"
|
||||||
|
args:
|
||||||
|
scale: 1.0
|
||||||
|
ch_in: 16
|
||||||
|
ch_out: 4
|
||||||
|
ch_mid: 64
|
||||||
|
blocks: 12
|
||||||
|
|
||||||
|
optim:
|
||||||
|
lr: 5.0e-4
|
||||||
|
beta1: 0.5
|
||||||
|
beta2: 0.95
|
||||||
|
|
||||||
|
dataset:
|
||||||
|
src: "./latents/fx_256px_combined.bin"
|
||||||
|
dst: "./latents/xl_256px_combined.bin"
|
||||||
|
preload: False
|
||||||
|
evals:
|
||||||
|
main:
|
||||||
|
src: "./latents/test_eru/test_fx_768px.npy"
|
||||||
|
dst: "./latents/test_eru/test_xl_768px.npy"
|
||||||
|
aux:
|
||||||
|
src: "./latents/test_bga/test_fx_768px.npy"
|
||||||
|
dst: "./latents/test_bga/test_xl_768px.npy"
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[project]
|
||||||
|
name = "sd-latent-interposer"
|
||||||
|
description = "Custom node to convert the lantents between SDv1/SDXL/SD3/cascade/flux directly without the VAE decoding/encoding step."
|
||||||
|
version = "4.0.15"
|
||||||
|
license = { file = "LICENSE" }
|
||||||
|
|
||||||
|
[project.urls]
|
||||||
|
Repository = "https://github.com/city96/SD-Latent-Interposer"
|
||||||
|
|
||||||
|
[tool.comfy]
|
||||||
|
PublisherId = "city96"
|
||||||
|
DisplayName = "SD-Latent-Interposer"
|
||||||
|
Icon = ""
|
||||||
@@ -238,7 +238,7 @@ if __name__ == "__main__":
|
|||||||
# from torchvision.utils import save_image
|
# from torchvision.utils import save_image
|
||||||
# save_file(model.state_dict(), f"{base_name}_{pbar.n:07}.safetensors")
|
# save_file(model.state_dict(), f"{base_name}_{pbar.n:07}.safetensors")
|
||||||
# for name, image in eval_images(model, vae, evals).items():
|
# for name, image in eval_images(model, vae, evals).items():
|
||||||
# name = f"models/{name.replace('/', '_')}_{pbar.n:07}.png"
|
# name = f"{base_name}_{name.replace('/', '_')}_{pbar.n:07}.png"
|
||||||
# save_image(image, name)
|
# save_image(image, name)
|
||||||
|
|
||||||
# final save/cleanup
|
# final save/cleanup
|
||||||
|
|||||||
@@ -62,6 +62,20 @@ class SDv3_VAE(SDv1_VAE):
|
|||||||
if dec_only:
|
if dec_only:
|
||||||
del self.model.encoder
|
del self.model.encoder
|
||||||
|
|
||||||
|
class FLUX_VAE(SDv1_VAE):
|
||||||
|
scale = 1/8
|
||||||
|
channels = 16
|
||||||
|
def __init__(self, device=DEVICE, dtype=DTYPE, dec_only=False):
|
||||||
|
self.device = device
|
||||||
|
self.dtype = torch.bfloat16 if dec_only else dtype # decoder NaNs randomly
|
||||||
|
self.model = AutoencoderKL.from_pretrained(
|
||||||
|
"black-forest-labs/FLUX.1-dev",
|
||||||
|
subfolder="vae"
|
||||||
|
)
|
||||||
|
self.model.eval().to(self.dtype).to(self.device)
|
||||||
|
if dec_only:
|
||||||
|
del self.model.encoder
|
||||||
|
|
||||||
class CascadeC_VAE(SDv1_VAE):
|
class CascadeC_VAE(SDv1_VAE):
|
||||||
scale = 1/32
|
scale = 1/32
|
||||||
channels = 16
|
channels = 16
|
||||||
@@ -135,6 +149,7 @@ vae_vers = {
|
|||||||
"v3": SDv3_VAE,
|
"v3": SDv3_VAE,
|
||||||
"cc": CascadeC_VAE,
|
"cc": CascadeC_VAE,
|
||||||
"ca": CascadeA_VAE,
|
"ca": CascadeA_VAE,
|
||||||
|
"fx": FLUX_VAE,
|
||||||
}
|
}
|
||||||
|
|
||||||
def load_vae(ver, *args, **kwargs):
|
def load_vae(ver, *args, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user