DZRobo
commited on
Add MagicLatentAdapter node (experimental support FLUX/Qwen models) (#10)
Browse filesIntroduces MagicLatentAdapter (experimental support FLUX/Qwen models) for generating or adapting latents to match model expectations. Adds mask alignment utilities to CADE nodes for robust mask blending, improves Gaussian blur to support 5D tensors, and updates preset defaults for improved results. Documentation and workflow updated to reflect new node and features.
- README.md +21 -9
- __init__.py +3 -1
- mod/easy/mg_cade25_easy.py +78 -6
- mod/hard/mg_cade25.py +73 -6
- mod/mg_latent_adapter.py +234 -0
- pressets/mg_cade25.cfg +2 -2
- workflows/mg_Easy-Workflow.json +1 -1
README.md
CHANGED
|
@@ -164,14 +164,19 @@ MagicNodes/
|
|
| 164 |
β β ββ mg_controlfusion_easy.py
|
| 165 |
β β ββ mg_supersimple_easy.py
|
| 166 |
β β ββ preset_loader.py
|
| 167 |
-
β
|
| 168 |
-
β
|
| 169 |
-
β
|
| 170 |
-
β
|
| 171 |
-
β
|
| 172 |
-
β
|
| 173 |
-
β
|
| 174 |
-
β
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
ββ pressets/
|
| 176 |
β ββ mg_cade25.cfg
|
| 177 |
β ββ mg_controlfusion.cfg
|
|
@@ -240,7 +245,14 @@ Depth models (Depth Anything v2)
|
|
| 240 |
- Keep dimensions multiples of 8; recommended starting sizes around ~672x944 (other aspect ratios work). With SuperSimpleβs default scale, step 4 lands near ~3688x5192.
|
| 241 |
- `mix_image=True` encodes the provided image via VAE and adds noise: a soft way to keep global structure while allowing refinement downstream.
|
| 242 |
- For run-to-run comparability, hold your sampler seed fixed (in SuperSimple/CADE). SeedLatent itself does not expose a seed; variation is primarily controlled by the sampler seed.
|
| 243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 244 |
|
| 245 |
## Dependencies (Why These Packages)
|
| 246 |
- transformers β used by CADE for CLIPSeg (CIDAS/clipseg-rd64-refined) to build textβdriven masks (e.g., face/hands). If missing, CLIPSeg is disabled gracefully.
|
|
|
|
| 164 |
β β ββ mg_controlfusion_easy.py
|
| 165 |
β β ββ mg_supersimple_easy.py
|
| 166 |
β β ββ preset_loader.py
|
| 167 |
+
β ββ hard/
|
| 168 |
+
β β ββ mg_cade25.py
|
| 169 |
+
β β ββ mg_controlfusion.py
|
| 170 |
+
β β ββ mg_tde2.py
|
| 171 |
+
β β ββ mg_upscale_module.py
|
| 172 |
+
β β ββ mg_ids.py
|
| 173 |
+
β β ββ mg_zesmart_sampler_v1_1.py
|
| 174 |
+
β β
|
| 175 |
+
β ββ mg_combinode.py
|
| 176 |
+
β ββ mg_latent_adapter.py
|
| 177 |
+
β ββ mg_sagpu_attention.py
|
| 178 |
+
β ββ mg_seed_latent.py
|
| 179 |
+
β
|
| 180 |
ββ pressets/
|
| 181 |
β ββ mg_cade25.cfg
|
| 182 |
β ββ mg_controlfusion.cfg
|
|
|
|
| 245 |
- Keep dimensions multiples of 8; recommended starting sizes around ~672x944 (other aspect ratios work). With SuperSimpleβs default scale, step 4 lands near ~3688x5192.
|
| 246 |
- `mix_image=True` encodes the provided image via VAE and adds noise: a soft way to keep global structure while allowing refinement downstream.
|
| 247 |
- For run-to-run comparability, hold your sampler seed fixed (in SuperSimple/CADE). SeedLatent itself does not expose a seed; variation is primarily controlled by the sampler seed.
|
| 248 |
+
- Batch friendly: `batch_size>1` produces independent latents of the chosen size.
|
| 249 |
+
|
| 250 |
+
### Magic Latent Adapter (mg_latent_adapter.py) !experimental!
|
| 251 |
+
- Purpose: small adapter node that generates or adapts a `LATENT` to match the target modelβs latent format (channels and dimensions), including 5D layouts (`NCDHW`) when required. Two modes: `generate` (make a fresh latent aligned to VAE stride) and `adapt` (reshape/channelβmatch an existing latent).
|
| 252 |
+
- How it works: relies on Comfyβs `fix_empty_latent_channels` and reads the modelβs `latent_format` to adjust channel count; aligns spatial size to VAE stride; handles 4D (`NCHW`) and 5D (`NCDHW`).
|
| 253 |
+
- Experimental: added to ease early, experimental support for FLUX/Qwenβlike models by reducing shape/dimension friction. Still evolving; treat as optβin.
|
| 254 |
+
- Usage: place before CADE/your sampler. In `generate` mode you can also enable image mixing via VAE; in `adapt` mode feed any upstream `LATENT` and the current `MODEL`. A simple family switch (`auto / SD / SDXL / FLUX`) controls stride fallback when VAE isnβt provided.
|
| 255 |
+
- Notes: quality with FLUX/Qwen models also depends on using the proper text encoders/conditioning nodes for those families; this adapter only solves latent shapes, not conditioning mismatches.
|
| 256 |
|
| 257 |
## Dependencies (Why These Packages)
|
| 258 |
- transformers β used by CADE for CLIPSeg (CIDAS/clipseg-rd64-refined) to build textβdriven masks (e.g., face/hands). If missing, CLIPSeg is disabled gracefully.
|
__init__.py
CHANGED
|
@@ -25,6 +25,7 @@ from .mod.hard.mg_cade25 import ComfyAdaptiveDetailEnhancer25
|
|
| 25 |
from .mod.hard.mg_ids import IntelligentDetailStabilizer
|
| 26 |
from .mod.mg_seed_latent import MagicSeedLatent
|
| 27 |
from .mod.mg_sagpu_attention import PatchSageAttention
|
|
|
|
| 28 |
from .mod.hard.mg_controlfusion import MG_ControlFusion
|
| 29 |
from .mod.hard.mg_zesmart_sampler_v1_1 import MG_ZeSmartSampler
|
| 30 |
from .mod.easy.mg_cade25_easy import CADEEasyUI as ComfyAdaptiveDetailEnhancer25_Easy
|
|
@@ -59,6 +60,7 @@ NODE_CLASS_MAPPINGS = {
|
|
| 59 |
"MagicNodesCombiNode": MagicNodesCombiNode,
|
| 60 |
"MagicSeedLatent": MagicSeedLatent,
|
| 61 |
"PatchSageAttention": PatchSageAttention,
|
|
|
|
| 62 |
"MagicUpscaleModule": MagicUpscaleModule,
|
| 63 |
"ComfyAdaptiveDetailEnhancer25": ComfyAdaptiveDetailEnhancer25,
|
| 64 |
"IntelligentDetailStabilizer": IntelligentDetailStabilizer,
|
|
@@ -73,8 +75,8 @@ NODE_CLASS_MAPPINGS = {
|
|
| 73 |
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 74 |
"MagicNodesCombiNode": "MG_CombiNode",
|
| 75 |
"MagicSeedLatent": "MG_SeedLatent",
|
| 76 |
-
# TDE removed from this build
|
| 77 |
"PatchSageAttention": "MG_AccelAttention",
|
|
|
|
| 78 |
"ComfyAdaptiveDetailEnhancer25": "MG_CADE 2.5",
|
| 79 |
"MG_ControlFusion": "MG_ControlFusion",
|
| 80 |
"MG_ZeSmartSampler": "MG_ZeSmartSampler",
|
|
|
|
| 25 |
from .mod.hard.mg_ids import IntelligentDetailStabilizer
|
| 26 |
from .mod.mg_seed_latent import MagicSeedLatent
|
| 27 |
from .mod.mg_sagpu_attention import PatchSageAttention
|
| 28 |
+
from .mod.mg_latent_adapter import MagicLatentAdapter
|
| 29 |
from .mod.hard.mg_controlfusion import MG_ControlFusion
|
| 30 |
from .mod.hard.mg_zesmart_sampler_v1_1 import MG_ZeSmartSampler
|
| 31 |
from .mod.easy.mg_cade25_easy import CADEEasyUI as ComfyAdaptiveDetailEnhancer25_Easy
|
|
|
|
| 60 |
"MagicNodesCombiNode": MagicNodesCombiNode,
|
| 61 |
"MagicSeedLatent": MagicSeedLatent,
|
| 62 |
"PatchSageAttention": PatchSageAttention,
|
| 63 |
+
"MagicLatentAdapter": MagicLatentAdapter, # experimental
|
| 64 |
"MagicUpscaleModule": MagicUpscaleModule,
|
| 65 |
"ComfyAdaptiveDetailEnhancer25": ComfyAdaptiveDetailEnhancer25,
|
| 66 |
"IntelligentDetailStabilizer": IntelligentDetailStabilizer,
|
|
|
|
| 75 |
NODE_DISPLAY_NAME_MAPPINGS = {
|
| 76 |
"MagicNodesCombiNode": "MG_CombiNode",
|
| 77 |
"MagicSeedLatent": "MG_SeedLatent",
|
|
|
|
| 78 |
"PatchSageAttention": "MG_AccelAttention",
|
| 79 |
+
"MagicLatentAdapter": "MG_LatentAdapter", # experimental
|
| 80 |
"ComfyAdaptiveDetailEnhancer25": "MG_CADE 2.5",
|
| 81 |
"MG_ControlFusion": "MG_ControlFusion",
|
| 82 |
"MG_ZeSmartSampler": "MG_ZeSmartSampler",
|
mod/easy/mg_cade25_easy.py
CHANGED
|
@@ -236,6 +236,12 @@ def _clipseg_build_mask(image_bhwc: torch.Tensor,
|
|
| 236 |
# Prepare preview image (CPU PIL)
|
| 237 |
target = int(max(16, min(1024, preview)))
|
| 238 |
img = image_bhwc.detach().to('cpu')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
B, H, W, C = img.shape
|
| 240 |
x = img[0].movedim(-1, 0).unsqueeze(0) # 1,C,H,W
|
| 241 |
x = F.interpolate(x, size=(target, target), mode='bilinear', align_corners=False)
|
|
@@ -1157,17 +1163,31 @@ def _soft_symmetry_blend(image_bhwc: torch.Tensor,
|
|
| 1157 |
|
| 1158 |
|
| 1159 |
def _gaussian_blur_nchw(x: torch.Tensor, sigma: float = 1.0, radius: int = 1) -> torch.Tensor:
|
| 1160 |
-
"""Lightweight depthwise Gaussian blur for NCHW tensors.
|
| 1161 |
Uses reflect padding and a normalized kernel built by _gaussian_kernel.
|
| 1162 |
"""
|
| 1163 |
if radius <= 0:
|
| 1164 |
return x
|
| 1165 |
ksz = radius * 2 + 1
|
| 1166 |
kernel = _gaussian_kernel(ksz, sigma, device=x.device).to(dtype=x.dtype)
|
| 1167 |
-
|
| 1168 |
-
|
| 1169 |
-
|
| 1170 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1171 |
|
| 1172 |
|
| 1173 |
def _letterbox_nchw(x: torch.Tensor, target: int, pad_val: float = 114.0 / 255.0) -> torch.Tensor:
|
|
@@ -1452,6 +1472,8 @@ def _wrap_model_with_guidance(model, guidance_mode: str, rescale_multiplier: flo
|
|
| 1452 |
|
| 1453 |
m.set_model_sampler_cfg_function(cfg_func, disable_cfg1_optimization=True)
|
| 1454 |
|
|
|
|
|
|
|
| 1455 |
# Optional directional post-mix (Muse Blend), global, no ONNX
|
| 1456 |
if bool(mahiro_plus_enable):
|
| 1457 |
s_clamp = float(max(0.0, min(1.0, mahiro_plus_strength)))
|
|
@@ -1736,6 +1758,38 @@ def _build_cf_edge_mask_from_step(image_bhwc: torch.Tensor, preset_step: str) ->
|
|
| 1736 |
return ed.unsqueeze(0).unsqueeze(-1)
|
| 1737 |
except Exception:
|
| 1738 |
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1739 |
def _mask_dilate(mask_bhw1: torch.Tensor, k: int = 3) -> torch.Tensor:
|
| 1740 |
if k <= 1:
|
| 1741 |
return mask_bhw1
|
|
@@ -2124,9 +2178,13 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 2124 |
try:
|
| 2125 |
cmask = _clipseg_build_mask(image, clipseg_text, int(clipseg_preview), float(clipseg_threshold), float(clipseg_blur), int(clipseg_dilate), float(clipseg_gain), None, None, float(clipseg_ref_threshold))
|
| 2126 |
if cmask is not None:
|
|
|
|
|
|
|
|
|
|
| 2127 |
if pre_mask is None:
|
| 2128 |
pre_mask = cmask
|
| 2129 |
else:
|
|
|
|
| 2130 |
if clipseg_blend == "replace":
|
| 2131 |
pre_mask = cmask
|
| 2132 |
elif clipseg_blend == "intersect":
|
|
@@ -2147,6 +2205,8 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 2147 |
except Exception:
|
| 2148 |
emask = None
|
| 2149 |
if emask is not None:
|
|
|
|
|
|
|
| 2150 |
pre_mask = emask if pre_mask is None else (1.0 - (1.0 - pre_mask) * (1.0 - emask)).clamp(0, 1)
|
| 2151 |
if pre_mask is not None:
|
| 2152 |
onnx_mask_last = pre_mask
|
|
@@ -2271,6 +2331,7 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 2271 |
if onnx_mask_last is None:
|
| 2272 |
onnx_mask_last = em2
|
| 2273 |
else:
|
|
|
|
| 2274 |
onnx_mask_last = (1.0 - (1.0 - onnx_mask_last) * (1.0 - em2)).clamp(0, 1)
|
| 2275 |
om = onnx_mask_last.movedim(-1, 1)
|
| 2276 |
area = float(om.mean().item())
|
|
@@ -2293,8 +2354,10 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 2293 |
if clipseg_blend == "replace":
|
| 2294 |
fused = cmask
|
| 2295 |
elif clipseg_blend == "intersect":
|
|
|
|
| 2296 |
fused = (onnx_mask_last * cmask).clamp(0, 1)
|
| 2297 |
else:
|
|
|
|
| 2298 |
fused = (1.0 - (1.0 - onnx_mask_last) * (1.0 - cmask)).clamp(0, 1)
|
| 2299 |
onnx_mask_last = fused
|
| 2300 |
om = fused.movedim(-1, 1)
|
|
@@ -2470,7 +2533,16 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 2470 |
model_management.throw_exception_if_processing_interrupted()
|
| 2471 |
|
| 2472 |
if bool(latent_compare):
|
| 2473 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2474 |
rms = torch.sqrt(torch.mean(latent_diff * latent_diff))
|
| 2475 |
drift = float(rms.item())
|
| 2476 |
if drift > float(threshold):
|
|
|
|
| 236 |
# Prepare preview image (CPU PIL)
|
| 237 |
target = int(max(16, min(1024, preview)))
|
| 238 |
img = image_bhwc.detach().to('cpu')
|
| 239 |
+
if img.ndim == 5:
|
| 240 |
+
# squeeze depth if present
|
| 241 |
+
if img.shape[1] == 1:
|
| 242 |
+
img = img[:, 0]
|
| 243 |
+
else:
|
| 244 |
+
img = img[:, 0]
|
| 245 |
B, H, W, C = img.shape
|
| 246 |
x = img[0].movedim(-1, 0).unsqueeze(0) # 1,C,H,W
|
| 247 |
x = F.interpolate(x, size=(target, target), mode='bilinear', align_corners=False)
|
|
|
|
| 1163 |
|
| 1164 |
|
| 1165 |
def _gaussian_blur_nchw(x: torch.Tensor, sigma: float = 1.0, radius: int = 1) -> torch.Tensor:
|
| 1166 |
+
"""Lightweight depthwise Gaussian blur for NCHW or NCDHW tensors.
|
| 1167 |
Uses reflect padding and a normalized kernel built by _gaussian_kernel.
|
| 1168 |
"""
|
| 1169 |
if radius <= 0:
|
| 1170 |
return x
|
| 1171 |
ksz = radius * 2 + 1
|
| 1172 |
kernel = _gaussian_kernel(ksz, sigma, device=x.device).to(dtype=x.dtype)
|
| 1173 |
+
# Support 5D by folding depth into batch
|
| 1174 |
+
if x.ndim == 5:
|
| 1175 |
+
b, c, d, h, w = x.shape
|
| 1176 |
+
x2 = x.permute(0, 2, 1, 3, 4).reshape(b * d, c, h, w)
|
| 1177 |
+
k = kernel.repeat(c, 1, 1).unsqueeze(1) # [C,1,K,K]
|
| 1178 |
+
x_pad = F.pad(x2, (radius, radius, radius, radius), mode='reflect')
|
| 1179 |
+
y2 = F.conv2d(x_pad, k, padding=0, groups=c)
|
| 1180 |
+
y = y2.reshape(b, d, c, h, w).permute(0, 2, 1, 3, 4)
|
| 1181 |
+
return y
|
| 1182 |
+
# 4D path
|
| 1183 |
+
if x.ndim == 4:
|
| 1184 |
+
b, c, h, w = x.shape
|
| 1185 |
+
k = kernel.repeat(c, 1, 1).unsqueeze(1) # [C,1,K,K]
|
| 1186 |
+
x_pad = F.pad(x, (radius, radius, radius, radius), mode='reflect')
|
| 1187 |
+
y = F.conv2d(x_pad, k, padding=0, groups=c)
|
| 1188 |
+
return y
|
| 1189 |
+
# Fallback: return input if unexpected dims
|
| 1190 |
+
return x
|
| 1191 |
|
| 1192 |
|
| 1193 |
def _letterbox_nchw(x: torch.Tensor, target: int, pad_val: float = 114.0 / 255.0) -> torch.Tensor:
|
|
|
|
| 1472 |
|
| 1473 |
m.set_model_sampler_cfg_function(cfg_func, disable_cfg1_optimization=True)
|
| 1474 |
|
| 1475 |
+
# Note: ControlNet class-label injection wrapper removed to keep CADE neutral.
|
| 1476 |
+
|
| 1477 |
# Optional directional post-mix (Muse Blend), global, no ONNX
|
| 1478 |
if bool(mahiro_plus_enable):
|
| 1479 |
s_clamp = float(max(0.0, min(1.0, mahiro_plus_strength)))
|
|
|
|
| 1758 |
return ed.unsqueeze(0).unsqueeze(-1)
|
| 1759 |
except Exception:
|
| 1760 |
return None
|
| 1761 |
+
|
| 1762 |
+
def _mask_to_like(mask_bhw1: torch.Tensor, like_bhwc: torch.Tensor) -> torch.Tensor:
|
| 1763 |
+
try:
|
| 1764 |
+
if mask_bhw1 is None or like_bhwc is None:
|
| 1765 |
+
return mask_bhw1
|
| 1766 |
+
if mask_bhw1.ndim != 4 or like_bhwc.ndim != 4:
|
| 1767 |
+
return mask_bhw1
|
| 1768 |
+
_, Ht, Wt, _ = like_bhwc.shape
|
| 1769 |
+
_, Hm, Wm, C = mask_bhw1.shape
|
| 1770 |
+
if (Hm, Wm) == (Ht, Wt):
|
| 1771 |
+
return mask_bhw1
|
| 1772 |
+
m = mask_bhw1.movedim(-1, 1)
|
| 1773 |
+
m = F.interpolate(m, size=(Ht, Wt), mode='bilinear', align_corners=False)
|
| 1774 |
+
return m.movedim(1, -1).clamp(0, 1)
|
| 1775 |
+
except Exception:
|
| 1776 |
+
return mask_bhw1
|
| 1777 |
+
|
| 1778 |
+
def _align_mask_pair(a_bhw1: torch.Tensor, b_bhw1: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
|
| 1779 |
+
try:
|
| 1780 |
+
if a_bhw1 is None or b_bhw1 is None:
|
| 1781 |
+
return a_bhw1, b_bhw1
|
| 1782 |
+
if a_bhw1.ndim != 4 or b_bhw1.ndim != 4:
|
| 1783 |
+
return a_bhw1, b_bhw1
|
| 1784 |
+
_, Ha, Wa, Ca = a_bhw1.shape
|
| 1785 |
+
_, Hb, Wb, Cb = b_bhw1.shape
|
| 1786 |
+
if (Ha, Wa) == (Hb, Wb):
|
| 1787 |
+
return a_bhw1, b_bhw1
|
| 1788 |
+
m = b_bhw1.movedim(-1, 1)
|
| 1789 |
+
m = F.interpolate(m, size=(Ha, Wa), mode='bilinear', align_corners=False)
|
| 1790 |
+
return a_bhw1, m.movedim(1, -1).clamp(0, 1)
|
| 1791 |
+
except Exception:
|
| 1792 |
+
return a_bhw1, b_bhw1
|
| 1793 |
def _mask_dilate(mask_bhw1: torch.Tensor, k: int = 3) -> torch.Tensor:
|
| 1794 |
if k <= 1:
|
| 1795 |
return mask_bhw1
|
|
|
|
| 2178 |
try:
|
| 2179 |
cmask = _clipseg_build_mask(image, clipseg_text, int(clipseg_preview), float(clipseg_threshold), float(clipseg_blur), int(clipseg_dilate), float(clipseg_gain), None, None, float(clipseg_ref_threshold))
|
| 2180 |
if cmask is not None:
|
| 2181 |
+
if pre_mask is not None:
|
| 2182 |
+
pre_mask = _mask_to_like(pre_mask, image)
|
| 2183 |
+
cmask = _mask_to_like(cmask, image)
|
| 2184 |
if pre_mask is None:
|
| 2185 |
pre_mask = cmask
|
| 2186 |
else:
|
| 2187 |
+
pre_mask, cmask = _align_mask_pair(pre_mask, cmask)
|
| 2188 |
if clipseg_blend == "replace":
|
| 2189 |
pre_mask = cmask
|
| 2190 |
elif clipseg_blend == "intersect":
|
|
|
|
| 2205 |
except Exception:
|
| 2206 |
emask = None
|
| 2207 |
if emask is not None:
|
| 2208 |
+
if pre_mask is not None:
|
| 2209 |
+
pre_mask, emask = _align_mask_pair(pre_mask, emask)
|
| 2210 |
pre_mask = emask if pre_mask is None else (1.0 - (1.0 - pre_mask) * (1.0 - emask)).clamp(0, 1)
|
| 2211 |
if pre_mask is not None:
|
| 2212 |
onnx_mask_last = pre_mask
|
|
|
|
| 2331 |
if onnx_mask_last is None:
|
| 2332 |
onnx_mask_last = em2
|
| 2333 |
else:
|
| 2334 |
+
onnx_mask_last, em2 = _align_mask_pair(onnx_mask_last, em2)
|
| 2335 |
onnx_mask_last = (1.0 - (1.0 - onnx_mask_last) * (1.0 - em2)).clamp(0, 1)
|
| 2336 |
om = onnx_mask_last.movedim(-1, 1)
|
| 2337 |
area = float(om.mean().item())
|
|
|
|
| 2354 |
if clipseg_blend == "replace":
|
| 2355 |
fused = cmask
|
| 2356 |
elif clipseg_blend == "intersect":
|
| 2357 |
+
onnx_mask_last, cmask = _align_mask_pair(onnx_mask_last, cmask)
|
| 2358 |
fused = (onnx_mask_last * cmask).clamp(0, 1)
|
| 2359 |
else:
|
| 2360 |
+
onnx_mask_last, cmask = _align_mask_pair(onnx_mask_last, cmask)
|
| 2361 |
fused = (1.0 - (1.0 - onnx_mask_last) * (1.0 - cmask)).clamp(0, 1)
|
| 2362 |
onnx_mask_last = fused
|
| 2363 |
om = fused.movedim(-1, 1)
|
|
|
|
| 2533 |
model_management.throw_exception_if_processing_interrupted()
|
| 2534 |
|
| 2535 |
if bool(latent_compare):
|
| 2536 |
+
_cur = current_latent["samples"]
|
| 2537 |
+
_prev = prev_samples
|
| 2538 |
+
try:
|
| 2539 |
+
if _prev.device != _cur.device:
|
| 2540 |
+
_prev = _prev.to(_cur.device)
|
| 2541 |
+
if _prev.dtype != _cur.dtype:
|
| 2542 |
+
_prev = _prev.to(dtype=_cur.dtype)
|
| 2543 |
+
except Exception:
|
| 2544 |
+
pass
|
| 2545 |
+
latent_diff = _cur - _prev
|
| 2546 |
rms = torch.sqrt(torch.mean(latent_diff * latent_diff))
|
| 2547 |
drift = float(rms.item())
|
| 2548 |
if drift > float(threshold):
|
mod/hard/mg_cade25.py
CHANGED
|
@@ -97,6 +97,12 @@ def _clipseg_build_mask(image_bhwc: torch.Tensor,
|
|
| 97 |
# Prepare preview image (CPU PIL)
|
| 98 |
target = int(max(16, min(1024, preview)))
|
| 99 |
img = image_bhwc.detach().to('cpu')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
B, H, W, C = img.shape
|
| 101 |
x = img[0].movedim(-1, 0).unsqueeze(0) # 1,C,H,W
|
| 102 |
x = F.interpolate(x, size=(target, target), mode='bilinear', align_corners=False)
|
|
@@ -172,6 +178,40 @@ def _np_to_mask_tensor(np_map: np.ndarray, out_h: int, out_w: int, device, dtype
|
|
| 172 |
return t.clamp(0, 1)
|
| 173 |
|
| 174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
# --- Firefly/Hot-pixel remover (image space, BHWC in 0..1) ---
|
| 176 |
def _median_pool3x3_bhwc(img_bhwc: torch.Tensor) -> torch.Tensor:
|
| 177 |
B, H, W, C = img_bhwc.shape
|
|
@@ -773,17 +813,31 @@ def _clip_cosine_distance(a: torch.Tensor, b: torch.Tensor) -> float:
|
|
| 773 |
|
| 774 |
|
| 775 |
def _gaussian_blur_nchw(x: torch.Tensor, sigma: float = 1.0, radius: int = 1) -> torch.Tensor:
|
| 776 |
-
"""Lightweight depthwise Gaussian blur for NCHW tensors.
|
| 777 |
Uses reflect padding and a normalized kernel built by _gaussian_kernel.
|
| 778 |
"""
|
| 779 |
if radius <= 0:
|
| 780 |
return x
|
| 781 |
ksz = radius * 2 + 1
|
| 782 |
kernel = _gaussian_kernel(ksz, sigma, device=x.device).to(dtype=x.dtype)
|
| 783 |
-
|
| 784 |
-
|
| 785 |
-
|
| 786 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 787 |
|
| 788 |
|
| 789 |
def _letterbox_nchw(x: torch.Tensor, target: int, pad_val: float = 114.0 / 255.0) -> torch.Tensor:
|
|
@@ -1074,6 +1128,8 @@ def _wrap_model_with_guidance(model, guidance_mode: str, rescale_multiplier: flo
|
|
| 1074 |
|
| 1075 |
m.set_model_sampler_cfg_function(cfg_func, disable_cfg1_optimization=True)
|
| 1076 |
|
|
|
|
|
|
|
| 1077 |
# Optional directional post-mix inspired by Mahiro (global, no ONNX)
|
| 1078 |
if bool(mahiro_plus_enable):
|
| 1079 |
s_clamp = float(max(0.0, min(1.0, mahiro_plus_strength)))
|
|
@@ -1511,6 +1567,7 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 1511 |
if pre_mask is None:
|
| 1512 |
pre_mask = cmask
|
| 1513 |
else:
|
|
|
|
| 1514 |
if clipseg_blend == "replace":
|
| 1515 |
pre_mask = cmask
|
| 1516 |
elif clipseg_blend == "intersect":
|
|
@@ -1586,6 +1643,7 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 1586 |
if mask_last is None:
|
| 1587 |
fused = cmask
|
| 1588 |
else:
|
|
|
|
| 1589 |
if clipseg_blend == "replace":
|
| 1590 |
fused = cmask
|
| 1591 |
elif clipseg_blend == "intersect":
|
|
@@ -1668,7 +1726,16 @@ class ComfyAdaptiveDetailEnhancer25:
|
|
| 1668 |
model_management.throw_exception_if_processing_interrupted()
|
| 1669 |
|
| 1670 |
if bool(latent_compare):
|
| 1671 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1672 |
rms = torch.sqrt(torch.mean(latent_diff * latent_diff))
|
| 1673 |
drift = float(rms.item())
|
| 1674 |
if drift > float(threshold):
|
|
|
|
| 97 |
# Prepare preview image (CPU PIL)
|
| 98 |
target = int(max(16, min(1024, preview)))
|
| 99 |
img = image_bhwc.detach().to('cpu')
|
| 100 |
+
if img.ndim == 5:
|
| 101 |
+
# squeeze depth if present
|
| 102 |
+
if img.shape[1] == 1:
|
| 103 |
+
img = img[:, 0]
|
| 104 |
+
else:
|
| 105 |
+
img = img[:, 0]
|
| 106 |
B, H, W, C = img.shape
|
| 107 |
x = img[0].movedim(-1, 0).unsqueeze(0) # 1,C,H,W
|
| 108 |
x = F.interpolate(x, size=(target, target), mode='bilinear', align_corners=False)
|
|
|
|
| 178 |
return t.clamp(0, 1)
|
| 179 |
|
| 180 |
|
| 181 |
+
def _mask_to_like(mask_bhw1: torch.Tensor, like_bhwc: torch.Tensor) -> torch.Tensor:
|
| 182 |
+
try:
|
| 183 |
+
if mask_bhw1 is None or like_bhwc is None:
|
| 184 |
+
return mask_bhw1
|
| 185 |
+
if mask_bhw1.ndim != 4 or like_bhwc.ndim != 4:
|
| 186 |
+
return mask_bhw1
|
| 187 |
+
_, Ht, Wt, _ = like_bhwc.shape
|
| 188 |
+
_, Hm, Wm, _ = mask_bhw1.shape
|
| 189 |
+
if (Hm, Wm) == (Ht, Wt):
|
| 190 |
+
return mask_bhw1
|
| 191 |
+
m = mask_bhw1.movedim(-1, 1)
|
| 192 |
+
m = F.interpolate(m, size=(Ht, Wt), mode='bilinear', align_corners=False)
|
| 193 |
+
return m.movedim(1, -1).clamp(0, 1)
|
| 194 |
+
except Exception:
|
| 195 |
+
return mask_bhw1
|
| 196 |
+
|
| 197 |
+
|
| 198 |
+
def _align_mask_pair(a_bhw1: torch.Tensor, b_bhw1: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:
|
| 199 |
+
try:
|
| 200 |
+
if a_bhw1 is None or b_bhw1 is None:
|
| 201 |
+
return a_bhw1, b_bhw1
|
| 202 |
+
if a_bhw1.ndim != 4 or b_bhw1.ndim != 4:
|
| 203 |
+
return a_bhw1, b_bhw1
|
| 204 |
+
_, Ha, Wa, _ = a_bhw1.shape
|
| 205 |
+
_, Hb, Wb, _ = b_bhw1.shape
|
| 206 |
+
if (Ha, Wa) == (Hb, Wb):
|
| 207 |
+
return a_bhw1, b_bhw1
|
| 208 |
+
m = b_bhw1.movedim(-1, 1)
|
| 209 |
+
m = F.interpolate(m, size=(Ha, Wa), mode='bilinear', align_corners=False)
|
| 210 |
+
return a_bhw1, m.movedim(1, -1).clamp(0, 1)
|
| 211 |
+
except Exception:
|
| 212 |
+
return a_bhw1, b_bhw1
|
| 213 |
+
|
| 214 |
+
|
| 215 |
# --- Firefly/Hot-pixel remover (image space, BHWC in 0..1) ---
|
| 216 |
def _median_pool3x3_bhwc(img_bhwc: torch.Tensor) -> torch.Tensor:
|
| 217 |
B, H, W, C = img_bhwc.shape
|
|
|
|
| 813 |
|
| 814 |
|
| 815 |
def _gaussian_blur_nchw(x: torch.Tensor, sigma: float = 1.0, radius: int = 1) -> torch.Tensor:
|
| 816 |
+
"""Lightweight depthwise Gaussian blur for NCHW or NCDHW tensors.
|
| 817 |
Uses reflect padding and a normalized kernel built by _gaussian_kernel.
|
| 818 |
"""
|
| 819 |
if radius <= 0:
|
| 820 |
return x
|
| 821 |
ksz = radius * 2 + 1
|
| 822 |
kernel = _gaussian_kernel(ksz, sigma, device=x.device).to(dtype=x.dtype)
|
| 823 |
+
# Support 5D by folding depth into batch
|
| 824 |
+
if x.ndim == 5:
|
| 825 |
+
b, c, d, h, w = x.shape
|
| 826 |
+
x2 = x.permute(0, 2, 1, 3, 4).reshape(b * d, c, h, w)
|
| 827 |
+
k = kernel.repeat(c, 1, 1).unsqueeze(1) # [C,1,K,K]
|
| 828 |
+
x_pad = F.pad(x2, (radius, radius, radius, radius), mode='reflect')
|
| 829 |
+
y2 = F.conv2d(x_pad, k, padding=0, groups=c)
|
| 830 |
+
y = y2.reshape(b, d, c, h, w).permute(0, 2, 1, 3, 4)
|
| 831 |
+
return y
|
| 832 |
+
# 4D path
|
| 833 |
+
if x.ndim == 4:
|
| 834 |
+
b, c, h, w = x.shape
|
| 835 |
+
k = kernel.repeat(c, 1, 1).unsqueeze(1) # [C,1,K,K]
|
| 836 |
+
x_pad = F.pad(x, (radius, radius, radius, radius), mode='reflect')
|
| 837 |
+
y = F.conv2d(x_pad, k, padding=0, groups=c)
|
| 838 |
+
return y
|
| 839 |
+
# Fallback: return input if unexpected dims
|
| 840 |
+
return x
|
| 841 |
|
| 842 |
|
| 843 |
def _letterbox_nchw(x: torch.Tensor, target: int, pad_val: float = 114.0 / 255.0) -> torch.Tensor:
|
|
|
|
| 1128 |
|
| 1129 |
m.set_model_sampler_cfg_function(cfg_func, disable_cfg1_optimization=True)
|
| 1130 |
|
| 1131 |
+
# Note: ControlNet class-label injection wrapper removed to keep CADE neutral.
|
| 1132 |
+
|
| 1133 |
# Optional directional post-mix inspired by Mahiro (global, no ONNX)
|
| 1134 |
if bool(mahiro_plus_enable):
|
| 1135 |
s_clamp = float(max(0.0, min(1.0, mahiro_plus_strength)))
|
|
|
|
| 1567 |
if pre_mask is None:
|
| 1568 |
pre_mask = cmask
|
| 1569 |
else:
|
| 1570 |
+
pre_mask, cmask = _align_mask_pair(pre_mask, cmask)
|
| 1571 |
if clipseg_blend == "replace":
|
| 1572 |
pre_mask = cmask
|
| 1573 |
elif clipseg_blend == "intersect":
|
|
|
|
| 1643 |
if mask_last is None:
|
| 1644 |
fused = cmask
|
| 1645 |
else:
|
| 1646 |
+
mask_last, cmask = _align_mask_pair(mask_last, cmask)
|
| 1647 |
if clipseg_blend == "replace":
|
| 1648 |
fused = cmask
|
| 1649 |
elif clipseg_blend == "intersect":
|
|
|
|
| 1726 |
model_management.throw_exception_if_processing_interrupted()
|
| 1727 |
|
| 1728 |
if bool(latent_compare):
|
| 1729 |
+
_cur = current_latent["samples"]
|
| 1730 |
+
_prev = prev_samples
|
| 1731 |
+
try:
|
| 1732 |
+
if _prev.device != _cur.device:
|
| 1733 |
+
_prev = _prev.to(_cur.device)
|
| 1734 |
+
if _prev.dtype != _cur.dtype:
|
| 1735 |
+
_prev = _prev.to(dtype=_cur.dtype)
|
| 1736 |
+
except Exception:
|
| 1737 |
+
pass
|
| 1738 |
+
latent_diff = _cur - _prev
|
| 1739 |
rms = torch.sqrt(torch.mean(latent_diff * latent_diff))
|
| 1740 |
drift = float(rms.item())
|
| 1741 |
if drift > float(threshold):
|
mod/mg_latent_adapter.py
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
MagicLatentAdapter: two-in-one latent adapter for ComfyUI.
|
| 3 |
+
|
| 4 |
+
- Mode "generate": creates a latent of appropriate grid size for the target model
|
| 5 |
+
(optionally mixing an input image via VAE), then adapts channels.
|
| 6 |
+
- Mode "adapt": takes an incoming LATENT and adapts channel count to match the model.
|
| 7 |
+
|
| 8 |
+
Family switch: "auto / SD / SDXL / FLUX" influences only stride fallback when VAE
|
| 9 |
+
is not provided. In AUTO we query VAE stride if possible and fall back to 8.
|
| 10 |
+
|
| 11 |
+
No file re-encodings are performed; all code is ASCII/English as requested.
|
| 12 |
+
"""
|
| 13 |
+
|
| 14 |
+
from __future__ import annotations
|
| 15 |
+
|
| 16 |
+
import torch
|
| 17 |
+
import torch.nn.functional as F
|
| 18 |
+
|
| 19 |
+
import comfy.sample as _sample
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
class MagicLatentAdapter:
|
| 23 |
+
"""Generate or adapt a LATENT to fit the target model's expectations."""
|
| 24 |
+
|
| 25 |
+
@classmethod
|
| 26 |
+
def INPUT_TYPES(cls):
|
| 27 |
+
return {
|
| 28 |
+
"required": {
|
| 29 |
+
"model": ("MODEL", {}),
|
| 30 |
+
"mode": (["generate", "adapt"], {"default": "generate"}),
|
| 31 |
+
"family": (["auto", "SD", "SDXL", "FLUX"], {"default": "auto"}),
|
| 32 |
+
|
| 33 |
+
# Generation params (ignored in adapt mode)
|
| 34 |
+
"width": ("INT", {"default": 512, "min": 8, "max": 8192, "step": 8}),
|
| 35 |
+
"height": ("INT", {"default": 512, "min": 8, "max": 8192, "step": 8}),
|
| 36 |
+
"batch_size": ("INT", {"default": 1, "min": 1, "max": 64}),
|
| 37 |
+
"sigma": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.1}),
|
| 38 |
+
"bias": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step": 0.1}),
|
| 39 |
+
"mix_image": ("BOOLEAN", {"default": False}),
|
| 40 |
+
},
|
| 41 |
+
"optional": {
|
| 42 |
+
# For adapt mode
|
| 43 |
+
"latent": ("LATENT", {}),
|
| 44 |
+
# For image mixing in generate mode
|
| 45 |
+
"vae": ("VAE", {}),
|
| 46 |
+
"image": ("IMAGE", {}),
|
| 47 |
+
},
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
RETURN_TYPES = ("LATENT",)
|
| 51 |
+
RETURN_NAMES = ("LATENT",)
|
| 52 |
+
FUNCTION = "run"
|
| 53 |
+
CATEGORY = "MagicNodes"
|
| 54 |
+
|
| 55 |
+
@staticmethod
|
| 56 |
+
def _detect_stride(vae, family: str) -> int:
|
| 57 |
+
# Prefer VAE stride if available
|
| 58 |
+
if vae is not None:
|
| 59 |
+
try:
|
| 60 |
+
s = int(vae.spacial_compression_decode())
|
| 61 |
+
if s > 0:
|
| 62 |
+
return s
|
| 63 |
+
except Exception:
|
| 64 |
+
pass
|
| 65 |
+
# Fallback per-family (conservative)
|
| 66 |
+
fam = (family or "auto").lower()
|
| 67 |
+
if fam in ("sd", "sdxl", "flux"):
|
| 68 |
+
return 8
|
| 69 |
+
return 8 # sensible default
|
| 70 |
+
|
| 71 |
+
@staticmethod
|
| 72 |
+
def _latent_format(model) -> tuple[int, int]:
|
| 73 |
+
"""Return (channels, dimensions) from model.latent_format.
|
| 74 |
+
dimensions: 2 -> NCHW, 3 -> NCDHW.
|
| 75 |
+
"""
|
| 76 |
+
try:
|
| 77 |
+
lf = model.get_model_object("latent_format")
|
| 78 |
+
ch = int(getattr(lf, "latent_channels", 4))
|
| 79 |
+
dims = int(getattr(lf, "latent_dimensions", 2))
|
| 80 |
+
if dims not in (2, 3):
|
| 81 |
+
dims = 2
|
| 82 |
+
return ch, dims
|
| 83 |
+
except Exception:
|
| 84 |
+
return 4, 2
|
| 85 |
+
|
| 86 |
+
@staticmethod
|
| 87 |
+
def _adapt_channels(model, z: torch.Tensor, preserve_zero: bool = False) -> torch.Tensor:
|
| 88 |
+
"""Adapts channel count and dims to the model's latent_format.
|
| 89 |
+
If preserve_zero and the latent is all zeros, pad with zeros instead of noise.
|
| 90 |
+
"""
|
| 91 |
+
target_c, target_dims = MagicLatentAdapter._latent_format(model)
|
| 92 |
+
|
| 93 |
+
# First, let Comfy add depth dim for empty latents when needed
|
| 94 |
+
try:
|
| 95 |
+
z = _sample.fix_empty_latent_channels(model, z)
|
| 96 |
+
except Exception:
|
| 97 |
+
pass
|
| 98 |
+
|
| 99 |
+
# Align dimensions
|
| 100 |
+
if target_dims == 3 and z.ndim == 4:
|
| 101 |
+
z = z.unsqueeze(2) # N C 1 H W
|
| 102 |
+
elif target_dims == 2 and z.ndim == 5:
|
| 103 |
+
if z.shape[2] == 1:
|
| 104 |
+
z = z.squeeze(2)
|
| 105 |
+
else:
|
| 106 |
+
z = z[:, :, :1].squeeze(2)
|
| 107 |
+
|
| 108 |
+
# Align channels
|
| 109 |
+
if z.ndim == 4:
|
| 110 |
+
B, C, H, W = z.shape
|
| 111 |
+
if C == target_c:
|
| 112 |
+
return z
|
| 113 |
+
if C > target_c:
|
| 114 |
+
return z[:, :target_c]
|
| 115 |
+
dev, dt = z.device, z.dtype
|
| 116 |
+
if preserve_zero and torch.count_nonzero(z) == 0:
|
| 117 |
+
pad = torch.zeros(B, target_c - C, H, W, device=dev, dtype=dt)
|
| 118 |
+
else:
|
| 119 |
+
pad = torch.randn(B, target_c - C, H, W, device=dev, dtype=dt)
|
| 120 |
+
return torch.cat([z, pad], dim=1)
|
| 121 |
+
elif z.ndim == 5:
|
| 122 |
+
B, C, D, H, W = z.shape
|
| 123 |
+
if C == target_c:
|
| 124 |
+
return z
|
| 125 |
+
if C > target_c:
|
| 126 |
+
return z[:, :target_c]
|
| 127 |
+
dev, dt = z.device, z.dtype
|
| 128 |
+
if preserve_zero and torch.count_nonzero(z) == 0:
|
| 129 |
+
pad = torch.zeros(B, target_c - C, D, H, W, device=dev, dtype=dt)
|
| 130 |
+
else:
|
| 131 |
+
pad = torch.randn(B, target_c - C, D, H, W, device=dev, dtype=dt)
|
| 132 |
+
return torch.cat([z, pad], dim=1)
|
| 133 |
+
else:
|
| 134 |
+
return z
|
| 135 |
+
|
| 136 |
+
@staticmethod
|
| 137 |
+
def _mix_image_into_latent(vae, image_bhwc: torch.Tensor, z: torch.Tensor) -> torch.Tensor:
|
| 138 |
+
if vae is None or image_bhwc is None:
|
| 139 |
+
return z
|
| 140 |
+
try:
|
| 141 |
+
# Align image spatial to VAE grid by padding (mirror) if needed
|
| 142 |
+
try:
|
| 143 |
+
stride = int(vae.spacial_compression_decode())
|
| 144 |
+
except Exception:
|
| 145 |
+
stride = 8
|
| 146 |
+
h, w = image_bhwc.shape[1:3]
|
| 147 |
+
def _align_up(x, s):
|
| 148 |
+
return int(((x + s - 1) // s) * s)
|
| 149 |
+
Ht, Wt = _align_up(h, stride), _align_up(w, stride)
|
| 150 |
+
x = image_bhwc
|
| 151 |
+
if (Ht != h) or (Wt != w):
|
| 152 |
+
pad_h = Ht - h
|
| 153 |
+
pad_w = Wt - w
|
| 154 |
+
x_nchw = x.movedim(-1, 1)
|
| 155 |
+
x_nchw = F.pad(x_nchw, (0, pad_w, 0, pad_h), mode='replicate')
|
| 156 |
+
x = x_nchw.movedim(1, -1)
|
| 157 |
+
enc = vae.encode(x[:, :, :, :3])
|
| 158 |
+
# If batch mismatches, use first encoding and tile
|
| 159 |
+
while enc.ndim < z.ndim:
|
| 160 |
+
enc = enc.unsqueeze(2) # add depth dim if needed
|
| 161 |
+
while enc.ndim > z.ndim:
|
| 162 |
+
# reduce extra depth dims
|
| 163 |
+
if enc.ndim == 5 and enc.shape[2] == 1:
|
| 164 |
+
enc = enc.squeeze(2)
|
| 165 |
+
else:
|
| 166 |
+
enc = enc[(slice(None), slice(None)) + (slice(0,1),) * (enc.ndim-2)]
|
| 167 |
+
if enc.ndim == 5:
|
| 168 |
+
enc = enc.squeeze(2)
|
| 169 |
+
if enc.shape[0] != z.shape[0]:
|
| 170 |
+
enc = enc[:1]
|
| 171 |
+
enc = enc.repeat(z.shape[0], *([1] * (enc.ndim - 1)))
|
| 172 |
+
# Resize spatial if needed (nearest)
|
| 173 |
+
if enc.ndim == 4:
|
| 174 |
+
if enc.shape[2:] != z.shape[2:]:
|
| 175 |
+
enc = F.interpolate(enc, size=z.shape[2:], mode="nearest")
|
| 176 |
+
elif enc.ndim == 5:
|
| 177 |
+
if enc.shape[2:] != z.shape[2:]:
|
| 178 |
+
enc = F.interpolate(enc, size=z.shape[2:], mode="nearest")
|
| 179 |
+
# Channel adapt for mixing safety
|
| 180 |
+
if enc.shape[1] != z.shape[1]:
|
| 181 |
+
cmin = min(enc.shape[1], z.shape[1])
|
| 182 |
+
enc = enc[:, :cmin]
|
| 183 |
+
z = z[:, :cmin]
|
| 184 |
+
return enc + z
|
| 185 |
+
except Exception:
|
| 186 |
+
return z
|
| 187 |
+
|
| 188 |
+
def run(
|
| 189 |
+
self,
|
| 190 |
+
model,
|
| 191 |
+
mode: str,
|
| 192 |
+
family: str,
|
| 193 |
+
width: int,
|
| 194 |
+
height: int,
|
| 195 |
+
batch_size: int,
|
| 196 |
+
sigma: float,
|
| 197 |
+
bias: float,
|
| 198 |
+
mix_image: bool = False,
|
| 199 |
+
latent=None,
|
| 200 |
+
vae=None,
|
| 201 |
+
image=None,
|
| 202 |
+
):
|
| 203 |
+
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
| 204 |
+
|
| 205 |
+
if mode == "adapt":
|
| 206 |
+
if latent is None or "samples" not in latent:
|
| 207 |
+
# Produce an empty latent matching model's latent_format
|
| 208 |
+
stride = self._detect_stride(vae, family)
|
| 209 |
+
h8, w8 = max(1, height // stride), max(1, width // stride)
|
| 210 |
+
target_c, target_dims = self._latent_format(model)
|
| 211 |
+
if target_dims == 3:
|
| 212 |
+
z = torch.zeros(batch_size, target_c, 1, h8, w8, device=device)
|
| 213 |
+
else:
|
| 214 |
+
z = torch.zeros(batch_size, target_c, h8, w8, device=device)
|
| 215 |
+
else:
|
| 216 |
+
z = latent["samples"].to(device)
|
| 217 |
+
z = self._adapt_channels(model, z, preserve_zero=True)
|
| 218 |
+
return ({"samples": z},)
|
| 219 |
+
|
| 220 |
+
# generate
|
| 221 |
+
stride = self._detect_stride(vae, family)
|
| 222 |
+
h8, w8 = max(1, height // stride), max(1, width // stride)
|
| 223 |
+
target_c, target_dims = self._latent_format(model)
|
| 224 |
+
if target_dims == 3:
|
| 225 |
+
z = torch.randn(batch_size, target_c, 1, h8, w8, device=device) * float(sigma) + float(bias)
|
| 226 |
+
else:
|
| 227 |
+
z = torch.randn(batch_size, target_c, h8, w8, device=device) * float(sigma) + float(bias)
|
| 228 |
+
if mix_image and (vae is not None) and (image is not None):
|
| 229 |
+
# image is BHWC 0..1
|
| 230 |
+
img = image.to(device)
|
| 231 |
+
z = self._mix_image_into_latent(vae, img, z)
|
| 232 |
+
# Final channel adaptation
|
| 233 |
+
z = self._adapt_channels(model, z, preserve_zero=False)
|
| 234 |
+
return ({"samples": z},)
|
pressets/mg_cade25.cfg
CHANGED
|
@@ -353,9 +353,9 @@ kv_min_tokens: 256
|
|
| 353 |
seed: 0
|
| 354 |
control_after_generate: randomize
|
| 355 |
steps: 25
|
| 356 |
-
cfg:
|
| 357 |
#0.75
|
| 358 |
-
denoise: 0.
|
| 359 |
sampler_name: ddim
|
| 360 |
scheduler: MGHybrid
|
| 361 |
iterations: 2
|
|
|
|
| 353 |
seed: 0
|
| 354 |
control_after_generate: randomize
|
| 355 |
steps: 25
|
| 356 |
+
cfg: 6.0
|
| 357 |
#0.75
|
| 358 |
+
denoise: 0.35
|
| 359 |
sampler_name: ddim
|
| 360 |
scheduler: MGHybrid
|
| 361 |
iterations: 2
|
workflows/mg_Easy-Workflow.json
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"id":"ab14c37a-6cec-41cf-899a-b499539f5b8b","revision":0,"last_node_id":58,"last_link_id":152,"nodes":[{"id":33,"type":"PreviewImage","pos":[934.524998846107,827.6679009139978],"size":[454.34515960057956,487.52469509807827],"flags":{},"order":24,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":142}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":16,"type":"PreviewImage","pos":[1500.7861350427,834.011023145272],"size":[454.34515960057956,487.52469509807827],"flags":{},"order":25,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":22}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":7,"type":"SaveImage","pos":[2796.435012229308,813.9383242288463],"size":[645.60324992196,715.7559184038435],"flags":{},"order":35,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":48},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{},"widgets_values":["ComfyUI"]},{"id":26,"type":"PreviewImage","pos":[2402.088511427638,-384.4257289383634],"size":[204.34144162678967,246],"flags":{},"order":32,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":41}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":45,"type":"PreviewImage","pos":[2134.6382392169603,-384.3467464741332],"size":[204.34144162678967,246],"flags":{},"order":29,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":123}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":44,"type":"MG_ControlFusion_Easy","pos":[2230.0043967143683,-89.74152781984677],"size":[270,258],"flags":{},"order":26,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":110},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":119},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":120},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":146},{"localized_name":"vae","name":"vae","type":"VAE","link":134},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"enable_depth","name":"enable_depth","type":"BOOLEAN","widget":{"name":"enable_depth"},"link":null},{"localized_name":"enable_pyra","name":"enable_pyra","type":"BOOLEAN","widget":{"name":"enable_pyra"},"link":null},{"localized_name":"edge_alpha","name":"edge_alpha","type":"FLOAT","widget":{"name":"edge_alpha"},"link":null},{"localized_name":"blend_factor","name":"blend_factor","type":"FLOAT","widget":{"name":"blend_factor"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[115,122]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[116,121]},{"localized_name":"Mask_Preview","name":"Mask_Preview","type":"IMAGE","links":[123]}],"properties":{"Node name for S&R":"MG_ControlFusion_Easy"},"widgets_values":["Step 3",false,true,true,1,0.02]},{"id":42,"type":"PreviewImage","pos":[2869.9561925844105,-392.07761053265784],"size":[204.34144162678967,246],"flags":{},"order":34,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":90}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":31,"type":"PreviewImage","pos":[3124.9260576007664,-392.6557805266826],"size":[204.34144162678967,246],"flags":{},"order":36,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":46}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":41,"type":"MG_ControlFusion_Easy","pos":[2963.5735553194004,-88.49280600871076],"size":[270,258],"flags":{},"order":31,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":85},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":122},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":121},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":148},{"localized_name":"vae","name":"vae","type":"VAE","link":133},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"enable_depth","name":"enable_depth","type":"BOOLEAN","widget":{"name":"enable_depth"},"link":null},{"localized_name":"enable_pyra","name":"enable_pyra","type":"BOOLEAN","widget":{"name":"enable_pyra"},"link":null},{"localized_name":"edge_alpha","name":"edge_alpha","type":"FLOAT","widget":{"name":"edge_alpha"},"link":null},{"localized_name":"blend_factor","name":"blend_factor","type":"FLOAT","widget":{"name":"blend_factor"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[86]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[87]},{"localized_name":"Mask_Preview","name":"Mask_Preview","type":"IMAGE","links":[90]}],"properties":{"Node name for S&R":"MG_ControlFusion_Easy"},"widgets_values":["Step 4",false,true,true,1,0.02]},{"id":43,"type":"MG_ControlFusion_Easy","pos":[1591.642692427568,-97.88472358998305],"size":[270,258],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":97},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":102},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":103},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":144},{"localized_name":"vae","name":"vae","type":"VAE","link":135},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"enable_depth","name":"enable_depth","type":"BOOLEAN","widget":{"name":"enable_depth"},"link":null},{"localized_name":"enable_pyra","name":"enable_pyra","type":"BOOLEAN","widget":{"name":"enable_pyra"},"link":null},{"localized_name":"edge_alpha","name":"edge_alpha","type":"FLOAT","widget":{"name":"edge_alpha"},"link":null},{"localized_name":"blend_factor","name":"blend_factor","type":"FLOAT","widget":{"name":"blend_factor"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[107,119]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[106,120]},{"localized_name":"Mask_Preview","name":"Mask_Preview","type":"IMAGE","links":[124]}],"properties":{"Node name for S&R":"MG_ControlFusion_Easy"},"widgets_values":["Step 2",false,true,true,1,0.02]},{"id":15,"type":"PreviewImage","pos":[1735.1930557379187,-393.0297689400224],"size":[204.34144162678967,246],"flags":{},"order":27,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":21}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":46,"type":"PreviewImage","pos":[1507.7533042139721,-396.74243519648866],"size":[204.34144162678967,246],"flags":{},"order":23,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":124}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":10,"type":"Note","pos":[-144.73815950276332,524.3438860412525],"size":[210,135.28179391870685],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[],"title":"Positive","properties":{},"widgets_values":["---->"],"color":"#232","bgcolor":"#353"},{"id":8,"type":"Note","pos":[-136.6498868216612,934.3499360344714],"size":[213.5817209730206,155.86666460906906],"flags":{},"order":1,"mode":0,"inputs":[],"outputs":[],"title":"Negative","properties":{},"widgets_values":["---->\n\n(super-wrong:1) - it's a trigger negative prompt for 'mg_7lambda_negative'"],"color":"#322","bgcolor":"#533"},{"id":53,"type":"Reroute","pos":[990.3715999390612,503.0075133219898],"size":[75,26],"flags":{},"order":20,"mode":0,"inputs":[{"name":"","type":"*","link":141}],"outputs":[{"name":"","type":"IMAGE","links":[142]}],"properties":{"showOutputText":false,"horizontal":false}},{"id":3,"type":"MagicSeedLatent","pos":[629.902126183393,-182.7453558545654],"size":[270,198],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","shape":7,"type":"VAE","link":2},{"localized_name":"image","name":"image","shape":7,"type":"IMAGE","link":null},{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":null},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":null},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null},{"localized_name":"sigma","name":"sigma","type":"FLOAT","widget":{"name":"sigma"},"link":null},{"localized_name":"bias","name":"bias","type":"FLOAT","widget":{"name":"bias"},"link":null},{"localized_name":"mix_image","name":"mix_image","type":"BOOLEAN","widget":{"name":"mix_image"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[19]}],"properties":{"Node name for S&R":"MagicSeedLatent"},"widgets_values":[672,944,1,0.8,0.5,false],"color":"#323","bgcolor":"#535"},{"id":4,"type":"ControlNetLoader","pos":[1106.8272213312625,465.13839701649334],"size":[271.9963341032716,58],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"control_net_name","name":"control_net_name","type":"COMBO","widget":{"name":"control_net_name"},"link":null}],"outputs":[{"label":"CONTROL_NET","localized_name":"CONTROL_NET","name":"CONTROL_NET","type":"CONTROL_NET","slot_index":0,"links":[143]}],"properties":{"Node name for S&R":"ControlNetLoader","models":[{"name":"control_v11p_sd15_scribble_fp16.safetensors","url":"https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors?download=true","directory":"controlnet"}]},"widgets_values":["diffusers_xl_depth_full.safetensors"],"color":"#233","bgcolor":"#355"},{"id":5,"type":"CLIPVisionLoader","pos":[1107.383961736022,356.1351441545039],"size":[267.557917518395,58],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"clip_name","name":"clip_name","type":"COMBO","widget":{"name":"clip_name"},"link":null}],"outputs":[{"localized_name":"CLIP_VISION","name":"CLIP_VISION","type":"CLIP_VISION","links":[17,92]}],"properties":{"Node name for S&R":"CLIPVisionLoader"},"widgets_values":["open_clip_model(NS).safetensors"],"color":"#2a363b","bgcolor":"#3f5159"},{"id":49,"type":"Reroute","pos":[2127.6689254267244,589.457535723742],"size":[75,26],"flags":{},"order":15,"mode":0,"inputs":[{"name":"","type":"*","link":129}],"outputs":[{"name":"","type":"VAE","links":[130,131,134]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#432","bgcolor":"#653"},{"id":47,"type":"Reroute","pos":[2126.2268260656597,621.1837216671687],"size":[75,26],"flags":{},"order":12,"mode":0,"inputs":[{"name":"","type":"*","link":125}],"outputs":[{"name":"","type":"CLIP_VISION","links":[126,127]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#2a363b","bgcolor":"#3f5159"},{"id":55,"type":"Reroute","pos":[2125.520836752072,649.1034792254129],"size":[75,26],"flags":{},"order":11,"mode":0,"inputs":[{"name":"","type":"*","link":145}],"outputs":[{"name":"","type":"CONTROL_NET","links":[146,147]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#233","bgcolor":"#355"},{"id":52,"type":"Reroute","pos":[2847.2765065980852,559.1734491413802],"size":[75,26],"flags":{},"order":18,"mode":0,"inputs":[{"name":"","type":"*","link":139}],"outputs":[{"name":"","type":"MODEL","links":[140]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#223","bgcolor":"#335"},{"id":50,"type":"Reroute","pos":[2847.276506598083,593.7838338069366],"size":[75,26],"flags":{},"order":21,"mode":0,"inputs":[{"name":"","type":"*","link":131}],"outputs":[{"name":"","type":"VAE","links":[132,133]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#432","bgcolor":"#653"},{"id":48,"type":"Reroute","pos":[2847.2765065980825,624.0679203892983],"size":[75,26],"flags":{},"order":17,"mode":0,"inputs":[{"name":"","type":"*","link":127}],"outputs":[{"name":"","type":"CLIP_VISION","links":[128]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#2a363b","bgcolor":"#3f5159"},{"id":56,"type":"Reroute","pos":[2843.686318562366,656.3139760307369],"size":[75,26],"flags":{},"order":16,"mode":0,"inputs":[{"name":"","type":"*","link":147}],"outputs":[{"name":"","type":"CONTROL_NET","links":[148]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#233","bgcolor":"#355"},{"id":19,"type":"Reroute","pos":[1498.7055053565248,550.5312952244669],"size":[75,26],"flags":{},"order":7,"mode":0,"inputs":[{"name":"","type":"*","link":150}],"outputs":[{"name":"","type":"MODEL","links":[136,137]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#223","bgcolor":"#335"},{"id":20,"type":"Reroute","pos":[1500.2829216438683,587.3239702140152],"size":[75,26],"flags":{},"order":10,"mode":0,"inputs":[{"name":"","type":"*","link":31}],"outputs":[{"name":"","type":"VAE","links":[32,129,135]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#432","bgcolor":"#653"},{"id":17,"type":"Reroute","pos":[1500.0465475793615,619.3098903755488],"size":[75,26],"flags":{},"order":6,"mode":0,"inputs":[{"name":"","type":"*","link":92}],"outputs":[{"name":"","type":"CLIP_VISION","links":[28,125]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#2a363b","bgcolor":"#3f5159"},{"id":54,"type":"Reroute","pos":[1500.2152857001722,653.5359574268514],"size":[75,26],"flags":{},"order":5,"mode":0,"inputs":[{"name":"","type":"*","link":143}],"outputs":[{"name":"","type":"CONTROL_NET","links":[144,145]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#233","bgcolor":"#355"},{"id":51,"type":"Reroute","pos":[2129.1110247877914,554.8471510581859],"size":[75,26],"flags":{},"order":13,"mode":0,"inputs":[{"name":"","type":"*","link":137}],"outputs":[{"name":"","type":"MODEL","links":[138,139]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#223","bgcolor":"#335"},{"id":24,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[2216.167965338495,236.13994164208663],"size":[304.44140625,394],"flags":{},"order":28,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":138},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":115},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":116},{"localized_name":"vae","name":"vae","type":"VAE","link":130},{"localized_name":"latent","name":"latent","type":"LATENT","link":62},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":66},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":126},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[61]},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[40,65,85]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[41]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 3",false,0,"fixed",30,7,0.55,"ddim","MGHybrid","hand, feet, face"]},{"id":25,"type":"PreviewImage","pos":[2076.6050781706476,818.6164042016213],"size":[607.2076918734667,715.3763941463438],"flags":{},"order":30,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":40}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":29,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[2947.1571822581677,229.68250150174998],"size":[304.44140625,394],"flags":{},"order":33,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":140},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":86},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":87},{"localized_name":"vae","name":"vae","type":"VAE","link":132},{"localized_name":"latent","name":"latent","type":"LATENT","link":61},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":65},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":128},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":null},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[48]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[46]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 4",false,0,"fixed",30,7,0.45,"ddim","MGHybrid","hand, feet, face"]},{"id":11,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[1572.9731847035082,222.56018167321056],"size":[304.44140625,394],"flags":{},"order":22,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":136},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":107},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":106},{"localized_name":"vae","name":"vae","type":"VAE","link":32},{"localized_name":"latent","name":"latent","type":"LATENT","link":37},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":24},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":28},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[62]},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[22,66,110]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[21]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 2",false,0,"fixed",30,7,0.65,"ddim","MGHybrid","hand, feet, face"]},{"id":14,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[1028.7352577781799,-254.68484251639404],"size":[304.44140625,394],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":152},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":13},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":14},{"localized_name":"vae","name":"vae","type":"VAE","link":15},{"localized_name":"latent","name":"latent","type":"LATENT","link":19},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":null},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":17},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[37]},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[24,97,141]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 1",false,0,"fixed",30,7,0.9999,"ddim","MGHybrid","hand, feet, face"]},{"id":58,"type":"PatchSageAttention","pos":[627.8244030121156,-297.19892309893845],"size":[270,58],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":151},{"localized_name":"sage_attention","name":"sage_attention","type":"COMBO","widget":{"name":"sage_attention"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","links":[152]}],"properties":{"Node name for S&R":"PatchSageAttention"},"widgets_values":["auto_quality"],"color":"#223","bgcolor":"#335"},{"id":2,"type":"MagicNodesCombiNode","pos":[93.09648271877055,-350.9065523480804],"size":[439.3682369626521,1874.7812342789503],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"model_in","name":"model_in","shape":7,"type":"MODEL","link":null},{"localized_name":"clip_in","name":"clip_in","shape":7,"type":"CLIP","link":null},{"localized_name":"vae_in","name":"vae_in","shape":7,"type":"VAE","link":null},{"localized_name":"positive_in","name":"positive_in","shape":7,"type":"CONDITIONING","link":null},{"localized_name":"negative_in","name":"negative_in","shape":7,"type":"CONDITIONING","link":null},{"localized_name":"use_checkpoint","name":"use_checkpoint","type":"BOOLEAN","widget":{"name":"use_checkpoint"},"link":null},{"localized_name":"checkpoint","name":"checkpoint","type":"COMBO","widget":{"name":"checkpoint"},"link":null},{"localized_name":"clear_cache","name":"clear_cache","type":"BOOLEAN","widget":{"name":"clear_cache"},"link":null},{"localized_name":"use_lora_1","name":"use_lora_1","type":"BOOLEAN","widget":{"name":"use_lora_1"},"link":null},{"localized_name":"lora_1","name":"lora_1","type":"COMBO","widget":{"name":"lora_1"},"link":null},{"localized_name":"strength_model_1","name":"strength_model_1","type":"FLOAT","widget":{"name":"strength_model_1"},"link":null},{"localized_name":"strength_clip_1","name":"strength_clip_1","type":"FLOAT","widget":{"name":"strength_clip_1"},"link":null},{"localized_name":"use_lora_2","name":"use_lora_2","type":"BOOLEAN","widget":{"name":"use_lora_2"},"link":null},{"localized_name":"lora_2","name":"lora_2","type":"COMBO","widget":{"name":"lora_2"},"link":null},{"localized_name":"strength_model_2","name":"strength_model_2","type":"FLOAT","widget":{"name":"strength_model_2"},"link":null},{"localized_name":"strength_clip_2","name":"strength_clip_2","type":"FLOAT","widget":{"name":"strength_clip_2"},"link":null},{"localized_name":"use_lora_3","name":"use_lora_3","type":"BOOLEAN","widget":{"name":"use_lora_3"},"link":null},{"localized_name":"lora_3","name":"lora_3","type":"COMBO","widget":{"name":"lora_3"},"link":null},{"localized_name":"strength_model_3","name":"strength_model_3","type":"FLOAT","widget":{"name":"strength_model_3"},"link":null},{"localized_name":"strength_clip_3","name":"strength_clip_3","type":"FLOAT","widget":{"name":"strength_clip_3"},"link":null},{"localized_name":"use_lora_4","name":"use_lora_4","type":"BOOLEAN","widget":{"name":"use_lora_4"},"link":null},{"localized_name":"lora_4","name":"lora_4","type":"COMBO","widget":{"name":"lora_4"},"link":null},{"localized_name":"strength_model_4","name":"strength_model_4","type":"FLOAT","widget":{"name":"strength_model_4"},"link":null},{"localized_name":"strength_clip_4","name":"strength_clip_4","type":"FLOAT","widget":{"name":"strength_clip_4"},"link":null},{"localized_name":"use_lora_5","name":"use_lora_5","type":"BOOLEAN","widget":{"name":"use_lora_5"},"link":null},{"localized_name":"lora_5","name":"lora_5","type":"COMBO","widget":{"name":"lora_5"},"link":null},{"localized_name":"strength_model_5","name":"strength_model_5","type":"FLOAT","widget":{"name":"strength_model_5"},"link":null},{"localized_name":"strength_clip_5","name":"strength_clip_5","type":"FLOAT","widget":{"name":"strength_clip_5"},"link":null},{"localized_name":"use_lora_6","name":"use_lora_6","type":"BOOLEAN","widget":{"name":"use_lora_6"},"link":null},{"localized_name":"lora_6","name":"lora_6","type":"COMBO","widget":{"name":"lora_6"},"link":null},{"localized_name":"strength_model_6","name":"strength_model_6","type":"FLOAT","widget":{"name":"strength_model_6"},"link":null},{"localized_name":"strength_clip_6","name":"strength_clip_6","type":"FLOAT","widget":{"name":"strength_clip_6"},"link":null},{"localized_name":"positive_prompt","name":"positive_prompt","shape":7,"type":"STRING","widget":{"name":"positive_prompt"},"link":null},{"localized_name":"negative_prompt","name":"negative_prompt","shape":7,"type":"STRING","widget":{"name":"negative_prompt"},"link":null},{"localized_name":"clip_set_last_layer_positive","name":"clip_set_last_layer_positive","shape":7,"type":"INT","widget":{"name":"clip_set_last_layer_positive"},"link":null},{"localized_name":"clip_set_last_layer_negative","name":"clip_set_last_layer_negative","shape":7,"type":"INT","widget":{"name":"clip_set_last_layer_negative"},"link":null},{"localized_name":"recipe_slot","name":"recipe_slot","shape":7,"type":"COMBO","widget":{"name":"recipe_slot"},"link":null},{"localized_name":"recipe_save","name":"recipe_save","shape":7,"type":"BOOLEAN","widget":{"name":"recipe_save"},"link":null},{"localized_name":"recipe_use","name":"recipe_use","shape":7,"type":"BOOLEAN","widget":{"name":"recipe_use"},"link":null},{"localized_name":"standard_pipeline","name":"standard_pipeline","shape":7,"type":"BOOLEAN","widget":{"name":"standard_pipeline"},"link":null},{"localized_name":"clip_lora_pos_gain","name":"clip_lora_pos_gain","shape":7,"type":"FLOAT","widget":{"name":"clip_lora_pos_gain"},"link":null},{"localized_name":"clip_lora_neg_gain","name":"clip_lora_neg_gain","shape":7,"type":"FLOAT","widget":{"name":"clip_lora_neg_gain"},"link":null},{"localized_name":"dynamic_pos","name":"dynamic_pos","shape":7,"type":"BOOLEAN","widget":{"name":"dynamic_pos"},"link":null},{"localized_name":"dynamic_neg","name":"dynamic_neg","shape":7,"type":"BOOLEAN","widget":{"name":"dynamic_neg"},"link":null},{"localized_name":"dyn_seed","name":"dyn_seed","shape":7,"type":"INT","widget":{"name":"dyn_seed"},"link":null},{"localized_name":"dynamic_break_freeze","name":"dynamic_break_freeze","shape":7,"type":"BOOLEAN","widget":{"name":"dynamic_break_freeze"},"link":null},{"localized_name":"show_expanded_prompts","name":"show_expanded_prompts","shape":7,"type":"BOOLEAN","widget":{"name":"show_expanded_prompts"},"link":null},{"localized_name":"save_expanded_prompts","name":"save_expanded_prompts","shape":7,"type":"BOOLEAN","widget":{"name":"save_expanded_prompts"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","links":[150,151]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":null},{"localized_name":"Positive","name":"Positive","type":"CONDITIONING","links":[13,102]},{"localized_name":"Negative","name":"Negative","type":"CONDITIONING","links":[14,103]},{"localized_name":"VAE","name":"VAE","type":"VAE","links":[2,15,31]}],"properties":{"Node name for S&R":"MagicNodesCombiNode"},"widgets_values":[true,"None",true,false,"None",-1,0.2,false,"None",0,0,false,"None",0,0,false,"None",0,0,false,"None",0,0,false,"None",false,false,"(correct human anatomy:1).\n(masterwork:1), very aesthetic, super detailed, newest, masterpiece, amazing quality, highres, sharpen image, best quality.\n25yrs 1woman, necklace, earnings, jewelry, wrist jewelry, ponytail hair, blue hair, blue eyes, yellow kimono with floral print, holds a large pillow, purple pillow, smile, 2 hands.\nFront view, Bedroom","(super-wrong:1), wrong, worst, mistake, (anatomically incorrect human:1), wrong geometry\n(six fingers:1), pixelated,\n(bad hands:1), deformed nails, (fused fingers), (incorrecting hold in hand:1), bad fingers\nugly, (bad anatomy), junior artist, beginner's drawing, bad composition, loose, underpainting, muddy colors, broken symmetry, unclear focal point, blurry details, incorrect perspective, shaky outlines, uneven lines,\n(unsharpen eyes:1), imperfect eyes, skewed eyes, unnatural face, unnatural body, extra limb, missing limbs, distorted eyelashes, misplaced pupils, noisly eyes, long neck,\nobject clipping, clothing clipping, object intersection, unrealistic overlap, geometry intersection,\ntext, typo, signature, watermarks on image, error",-2,-2,"Off",false,false,false,0.92,1,false,false,0,false,false,false]}],"links":[[2,2,4,3,0,"VAE"],[13,2,2,14,1,"CONDITIONING"],[14,2,3,14,2,"CONDITIONING"],[15,2,4,14,3,"VAE"],[17,5,0,14,6,"CLIP_VISION"],[19,3,0,14,4,"LATENT"],[21,11,2,15,0,"IMAGE"],[22,11,1,16,0,"IMAGE"],[24,14,1,11,5,"IMAGE"],[28,17,0,11,6,"CLIP_VISION"],[31,2,4,20,0,"*"],[32,20,0,11,3,"VAE"],[37,14,0,11,4,"LATENT"],[40,24,1,25,0,"IMAGE"],[41,24,2,26,0,"IMAGE"],[46,29,2,31,0,"IMAGE"],[48,29,1,7,0,"IMAGE"],[61,24,0,29,4,"LATENT"],[62,11,0,24,4,"LATENT"],[65,24,1,29,5,"IMAGE"],[66,11,1,24,5,"IMAGE"],[85,24,1,41,0,"IMAGE"],[86,41,0,29,1,"CONDITIONING"],[87,41,1,29,2,"CONDITIONING"],[90,41,2,42,0,"IMAGE"],[92,5,0,17,0,"*"],[97,14,1,43,0,"IMAGE"],[102,2,2,43,1,"CONDITIONING"],[103,2,3,43,2,"CONDITIONING"],[106,43,1,11,2,"CONDITIONING"],[107,43,0,11,1,"CONDITIONING"],[110,11,1,44,0,"IMAGE"],[115,44,0,24,1,"CONDITIONING"],[116,44,1,24,2,"CONDITIONING"],[119,43,0,44,1,"CONDITIONING"],[120,43,1,44,2,"CONDITIONING"],[121,44,1,41,2,"CONDITIONING"],[122,44,0,41,1,"CONDITIONING"],[123,44,2,45,0,"IMAGE"],[124,43,2,46,0,"IMAGE"],[125,17,0,47,0,"*"],[126,47,0,24,6,"CLIP_VISION"],[127,47,0,48,0,"*"],[128,48,0,29,6,"CLIP_VISION"],[129,20,0,49,0,"*"],[130,49,0,24,3,"VAE"],[131,49,0,50,0,"*"],[132,50,0,29,3,"VAE"],[133,50,0,41,4,"VAE"],[134,49,0,44,4,"VAE"],[135,20,0,43,4,"VAE"],[136,19,0,11,0,"MODEL"],[137,19,0,51,0,"*"],[138,51,0,24,0,"MODEL"],[139,51,0,52,0,"*"],[140,52,0,29,0,"MODEL"],[141,14,1,53,0,"*"],[142,53,0,33,0,"IMAGE"],[143,4,0,54,0,"*"],[144,54,0,43,3,"CONTROL_NET"],[145,54,0,55,0,"*"],[146,55,0,44,3,"CONTROL_NET"],[147,55,0,56,0,"*"],[148,56,0,41,3,"CONTROL_NET"],[150,2,0,19,0,"*"],[151,2,0,58,0,"MODEL"],[152,58,0,14,0,"MODEL"]],"groups":[{"id":1,"title":"Step1 - Pre-warm","bounding":[985.2202161884722,-368.00948371274734,405.87327906278074,908.4829257340471],"color":"#a1309b","font_size":22,"flags":{}},{"id":2,"title":"Step2 - warming","bounding":[1491.7975585478357,-546.9292924524468,464.03429546870484,1238.2310938486526],"color":"#b58b2a","font_size":22,"flags":{}},{"id":3,"title":"Step3 - Pre-ready","bounding":[2110.501998988056,-553.0885338063888,518.639493048679,1245.9769642733752],"color":"#3f789e","font_size":22,"flags":{}},{"id":4,"title":"Step4 - High-res","bounding":[2836.675702344997,-548.5808647096898,526.8246054854121,1235.0376260654407],"color":"#8A8","font_size":22,"flags":{}},{"id":5,"title":"1 - Pre-warm","bounding":[912.8922171272666,734.9178623674503,505.331679024805,647.6692243308507],"color":"#a1309b","font_size":22,"flags":{}},{"id":6,"title":"2 - warming","bounding":[1478.1593316885921,734.6063030539617,505.331679024805,647.6692243308507],"color":"#b58b2a","font_size":22,"flags":{}},{"id":7,"title":"3 - Pre-ready","bounding":[2040.803574403982,730.9381266791784,683.3155821674318,849.0584001035625],"color":"#3f789e","font_size":22,"flags":{}},{"id":8,"title":"Step4 - High-res","bounding":[2771.933529470263,732.683066906069,700.3585746163794,850.3693995227123],"color":"#8A8","font_size":22,"flags":{}}],"config":{},"extra":{"ds":{"scale":1.1167815779424886,"offset":[205.33901426105587,523.8684695773068]}},"version":0.4}
|
|
|
|
| 1 |
+
{"id":"ab14c37a-6cec-41cf-899a-b499539f5b8b","revision":0,"last_node_id":58,"last_link_id":154,"nodes":[{"id":33,"type":"PreviewImage","pos":[934.524998846107,827.6679009139978],"size":[454.34515960057956,487.52469509807827],"flags":{},"order":24,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":142}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":16,"type":"PreviewImage","pos":[1500.7861350427,834.011023145272],"size":[454.34515960057956,487.52469509807827],"flags":{},"order":25,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":22}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":7,"type":"SaveImage","pos":[2796.435012229308,813.9383242288463],"size":[645.60324992196,715.7559184038435],"flags":{},"order":35,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":48},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{},"widgets_values":["ComfyUI"]},{"id":26,"type":"PreviewImage","pos":[2402.088511427638,-384.4257289383634],"size":[204.34144162678967,246],"flags":{},"order":32,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":41}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":45,"type":"PreviewImage","pos":[2134.6382392169603,-384.3467464741332],"size":[204.34144162678967,246],"flags":{},"order":29,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":123}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":44,"type":"MG_ControlFusion_Easy","pos":[2230.0043967143683,-89.74152781984677],"size":[270,258],"flags":{},"order":26,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":110},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":119},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":120},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":146},{"localized_name":"vae","name":"vae","type":"VAE","link":134},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"enable_depth","name":"enable_depth","type":"BOOLEAN","widget":{"name":"enable_depth"},"link":null},{"localized_name":"enable_pyra","name":"enable_pyra","type":"BOOLEAN","widget":{"name":"enable_pyra"},"link":null},{"localized_name":"edge_alpha","name":"edge_alpha","type":"FLOAT","widget":{"name":"edge_alpha"},"link":null},{"localized_name":"blend_factor","name":"blend_factor","type":"FLOAT","widget":{"name":"blend_factor"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[115,122]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[116,121]},{"localized_name":"Mask_Preview","name":"Mask_Preview","type":"IMAGE","links":[123]}],"properties":{"Node name for S&R":"MG_ControlFusion_Easy"},"widgets_values":["Step 3",false,true,true,1,0.02]},{"id":42,"type":"PreviewImage","pos":[2869.9561925844105,-392.07761053265784],"size":[204.34144162678967,246],"flags":{},"order":34,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":90}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":31,"type":"PreviewImage","pos":[3124.9260576007664,-392.6557805266826],"size":[204.34144162678967,246],"flags":{},"order":36,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":46}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":41,"type":"MG_ControlFusion_Easy","pos":[2963.5735553194004,-88.49280600871076],"size":[270,258],"flags":{},"order":31,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":85},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":122},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":121},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":148},{"localized_name":"vae","name":"vae","type":"VAE","link":133},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"enable_depth","name":"enable_depth","type":"BOOLEAN","widget":{"name":"enable_depth"},"link":null},{"localized_name":"enable_pyra","name":"enable_pyra","type":"BOOLEAN","widget":{"name":"enable_pyra"},"link":null},{"localized_name":"edge_alpha","name":"edge_alpha","type":"FLOAT","widget":{"name":"edge_alpha"},"link":null},{"localized_name":"blend_factor","name":"blend_factor","type":"FLOAT","widget":{"name":"blend_factor"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[86]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[87]},{"localized_name":"Mask_Preview","name":"Mask_Preview","type":"IMAGE","links":[90]}],"properties":{"Node name for S&R":"MG_ControlFusion_Easy"},"widgets_values":["Step 4",false,true,true,1,0.02]},{"id":43,"type":"MG_ControlFusion_Easy","pos":[1591.642692427568,-97.88472358998305],"size":[270,258],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"IMAGE","link":97},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":102},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":103},{"localized_name":"control_net","name":"control_net","type":"CONTROL_NET","link":144},{"localized_name":"vae","name":"vae","type":"VAE","link":135},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"enable_depth","name":"enable_depth","type":"BOOLEAN","widget":{"name":"enable_depth"},"link":null},{"localized_name":"enable_pyra","name":"enable_pyra","type":"BOOLEAN","widget":{"name":"enable_pyra"},"link":null},{"localized_name":"edge_alpha","name":"edge_alpha","type":"FLOAT","widget":{"name":"edge_alpha"},"link":null},{"localized_name":"blend_factor","name":"blend_factor","type":"FLOAT","widget":{"name":"blend_factor"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[107,119]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[106,120]},{"localized_name":"Mask_Preview","name":"Mask_Preview","type":"IMAGE","links":[124]}],"properties":{"Node name for S&R":"MG_ControlFusion_Easy"},"widgets_values":["Step 2",false,true,true,1,0.02]},{"id":15,"type":"PreviewImage","pos":[1735.1930557379187,-393.0297689400224],"size":[204.34144162678967,246],"flags":{},"order":27,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":21}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":46,"type":"PreviewImage","pos":[1507.7533042139721,-396.74243519648866],"size":[204.34144162678967,246],"flags":{},"order":23,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":124}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":10,"type":"Note","pos":[-144.73815950276332,524.3438860412525],"size":[210,135.28179391870685],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[],"title":"Positive","properties":{},"widgets_values":["---->"],"color":"#232","bgcolor":"#353"},{"id":8,"type":"Note","pos":[-136.6498868216612,934.3499360344714],"size":[213.5817209730206,155.86666460906906],"flags":{},"order":1,"mode":0,"inputs":[],"outputs":[],"title":"Negative","properties":{},"widgets_values":["---->\n\n(super-wrong:1) - it's a trigger negative prompt for 'mg_7lambda_negative'"],"color":"#322","bgcolor":"#533"},{"id":53,"type":"Reroute","pos":[990.3715999390612,503.0075133219898],"size":[75,26],"flags":{},"order":19,"mode":0,"inputs":[{"name":"","type":"*","link":141}],"outputs":[{"name":"","type":"IMAGE","links":[142]}],"properties":{"showOutputText":false,"horizontal":false}},{"id":3,"type":"MagicSeedLatent","pos":[629.902126183393,-182.7453558545654],"size":[270,198],"flags":{},"order":8,"mode":0,"inputs":[{"localized_name":"vae","name":"vae","shape":7,"type":"VAE","link":2},{"localized_name":"image","name":"image","shape":7,"type":"IMAGE","link":null},{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":null},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":null},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null},{"localized_name":"sigma","name":"sigma","type":"FLOAT","widget":{"name":"sigma"},"link":null},{"localized_name":"bias","name":"bias","type":"FLOAT","widget":{"name":"bias"},"link":null},{"localized_name":"mix_image","name":"mix_image","type":"BOOLEAN","widget":{"name":"mix_image"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[19]}],"properties":{"Node name for S&R":"MagicSeedLatent"},"widgets_values":[672,944,1,0.8,0.5,false],"color":"#323","bgcolor":"#535"},{"id":4,"type":"ControlNetLoader","pos":[1106.8272213312625,465.13839701649334],"size":[271.9963341032716,58],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"control_net_name","name":"control_net_name","type":"COMBO","widget":{"name":"control_net_name"},"link":null}],"outputs":[{"label":"CONTROL_NET","localized_name":"CONTROL_NET","name":"CONTROL_NET","type":"CONTROL_NET","slot_index":0,"links":[143]}],"properties":{"Node name for S&R":"ControlNetLoader","models":[{"name":"control_v11p_sd15_scribble_fp16.safetensors","url":"https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors?download=true","directory":"controlnet"}]},"widgets_values":["diffusers_xl_depth_full.safetensors"],"color":"#233","bgcolor":"#355"},{"id":5,"type":"CLIPVisionLoader","pos":[1107.383961736022,356.1351441545039],"size":[267.557917518395,58],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"clip_name","name":"clip_name","type":"COMBO","widget":{"name":"clip_name"},"link":null}],"outputs":[{"localized_name":"CLIP_VISION","name":"CLIP_VISION","type":"CLIP_VISION","links":[17,92]}],"properties":{"Node name for S&R":"CLIPVisionLoader"},"widgets_values":["open_clip_model(NS).safetensors"],"color":"#2a363b","bgcolor":"#3f5159"},{"id":49,"type":"Reroute","pos":[2127.6689254267244,589.457535723742],"size":[75,26],"flags":{},"order":14,"mode":0,"inputs":[{"name":"","type":"*","link":129}],"outputs":[{"name":"","type":"VAE","links":[130,131,134]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#432","bgcolor":"#653"},{"id":47,"type":"Reroute","pos":[2126.2268260656597,621.1837216671687],"size":[75,26],"flags":{},"order":11,"mode":0,"inputs":[{"name":"","type":"*","link":125}],"outputs":[{"name":"","type":"CLIP_VISION","links":[126,127]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#2a363b","bgcolor":"#3f5159"},{"id":55,"type":"Reroute","pos":[2125.520836752072,649.1034792254129],"size":[75,26],"flags":{},"order":10,"mode":0,"inputs":[{"name":"","type":"*","link":145}],"outputs":[{"name":"","type":"CONTROL_NET","links":[146,147]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#233","bgcolor":"#355"},{"id":52,"type":"Reroute","pos":[2847.2765065980852,559.1734491413802],"size":[75,26],"flags":{},"order":21,"mode":0,"inputs":[{"name":"","type":"*","link":139}],"outputs":[{"name":"","type":"MODEL","links":[140]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#223","bgcolor":"#335"},{"id":50,"type":"Reroute","pos":[2847.276506598083,593.7838338069366],"size":[75,26],"flags":{},"order":20,"mode":0,"inputs":[{"name":"","type":"*","link":131}],"outputs":[{"name":"","type":"VAE","links":[132,133]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#432","bgcolor":"#653"},{"id":48,"type":"Reroute","pos":[2847.2765065980825,624.0679203892983],"size":[75,26],"flags":{},"order":16,"mode":0,"inputs":[{"name":"","type":"*","link":127}],"outputs":[{"name":"","type":"CLIP_VISION","links":[128]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#2a363b","bgcolor":"#3f5159"},{"id":56,"type":"Reroute","pos":[2843.686318562366,656.3139760307369],"size":[75,26],"flags":{},"order":15,"mode":0,"inputs":[{"name":"","type":"*","link":147}],"outputs":[{"name":"","type":"CONTROL_NET","links":[148]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#233","bgcolor":"#355"},{"id":20,"type":"Reroute","pos":[1500.2829216438683,587.3239702140152],"size":[75,26],"flags":{},"order":9,"mode":0,"inputs":[{"name":"","type":"*","link":31}],"outputs":[{"name":"","type":"VAE","links":[32,129,135]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#432","bgcolor":"#653"},{"id":17,"type":"Reroute","pos":[1500.0465475793615,619.3098903755488],"size":[75,26],"flags":{},"order":6,"mode":0,"inputs":[{"name":"","type":"*","link":92}],"outputs":[{"name":"","type":"CLIP_VISION","links":[28,125]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#2a363b","bgcolor":"#3f5159"},{"id":54,"type":"Reroute","pos":[1500.2152857001722,653.5359574268514],"size":[75,26],"flags":{},"order":5,"mode":0,"inputs":[{"name":"","type":"*","link":143}],"outputs":[{"name":"","type":"CONTROL_NET","links":[144,145]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#233","bgcolor":"#355"},{"id":51,"type":"Reroute","pos":[2129.1110247877914,554.8471510581859],"size":[75,26],"flags":{},"order":17,"mode":0,"inputs":[{"name":"","type":"*","link":154}],"outputs":[{"name":"","type":"MODEL","links":[138,139]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#223","bgcolor":"#335"},{"id":24,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[2216.167965338495,236.13994164208663],"size":[304.44140625,394],"flags":{},"order":28,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":138},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":115},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":116},{"localized_name":"vae","name":"vae","type":"VAE","link":130},{"localized_name":"latent","name":"latent","type":"LATENT","link":62},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":66},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":126},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[61]},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[40,65,85]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[41]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 3",false,0,"fixed",30,7,0.55,"ddim","MGHybrid","hand, feet, face"]},{"id":25,"type":"PreviewImage","pos":[2076.6050781706476,818.6164042016213],"size":[607.2076918734667,715.3763941463438],"flags":{},"order":30,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":40}],"outputs":[],"properties":{"Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":29,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[2947.1571822581677,229.68250150174998],"size":[304.44140625,394],"flags":{},"order":33,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":140},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":86},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":87},{"localized_name":"vae","name":"vae","type":"VAE","link":132},{"localized_name":"latent","name":"latent","type":"LATENT","link":61},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":65},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":128},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":null},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[48]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[46]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 4",false,0,"fixed",30,7,0.45,"ddim","MGHybrid","hand, feet, face"]},{"id":14,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[1028.7352577781799,-254.68484251639404],"size":[304.44140625,394],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":152},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":13},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":14},{"localized_name":"vae","name":"vae","type":"VAE","link":15},{"localized_name":"latent","name":"latent","type":"LATENT","link":19},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":null},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":17},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[37]},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[24,97,141]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 1",false,0,"fixed",30,7,0.9999,"ddim","MGHybrid","hand, feet, face"]},{"id":2,"type":"MagicNodesCombiNode","pos":[93.09648271877055,-350.9065523480804],"size":[439.3682369626521,1874.7812342789503],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"model_in","name":"model_in","shape":7,"type":"MODEL","link":null},{"localized_name":"clip_in","name":"clip_in","shape":7,"type":"CLIP","link":null},{"localized_name":"vae_in","name":"vae_in","shape":7,"type":"VAE","link":null},{"localized_name":"positive_in","name":"positive_in","shape":7,"type":"CONDITIONING","link":null},{"localized_name":"negative_in","name":"negative_in","shape":7,"type":"CONDITIONING","link":null},{"localized_name":"use_checkpoint","name":"use_checkpoint","type":"BOOLEAN","widget":{"name":"use_checkpoint"},"link":null},{"localized_name":"checkpoint","name":"checkpoint","type":"COMBO","widget":{"name":"checkpoint"},"link":null},{"localized_name":"clear_cache","name":"clear_cache","type":"BOOLEAN","widget":{"name":"clear_cache"},"link":null},{"localized_name":"use_lora_1","name":"use_lora_1","type":"BOOLEAN","widget":{"name":"use_lora_1"},"link":null},{"localized_name":"lora_1","name":"lora_1","type":"COMBO","widget":{"name":"lora_1"},"link":null},{"localized_name":"strength_model_1","name":"strength_model_1","type":"FLOAT","widget":{"name":"strength_model_1"},"link":null},{"localized_name":"strength_clip_1","name":"strength_clip_1","type":"FLOAT","widget":{"name":"strength_clip_1"},"link":null},{"localized_name":"use_lora_2","name":"use_lora_2","type":"BOOLEAN","widget":{"name":"use_lora_2"},"link":null},{"localized_name":"lora_2","name":"lora_2","type":"COMBO","widget":{"name":"lora_2"},"link":null},{"localized_name":"strength_model_2","name":"strength_model_2","type":"FLOAT","widget":{"name":"strength_model_2"},"link":null},{"localized_name":"strength_clip_2","name":"strength_clip_2","type":"FLOAT","widget":{"name":"strength_clip_2"},"link":null},{"localized_name":"use_lora_3","name":"use_lora_3","type":"BOOLEAN","widget":{"name":"use_lora_3"},"link":null},{"localized_name":"lora_3","name":"lora_3","type":"COMBO","widget":{"name":"lora_3"},"link":null},{"localized_name":"strength_model_3","name":"strength_model_3","type":"FLOAT","widget":{"name":"strength_model_3"},"link":null},{"localized_name":"strength_clip_3","name":"strength_clip_3","type":"FLOAT","widget":{"name":"strength_clip_3"},"link":null},{"localized_name":"use_lora_4","name":"use_lora_4","type":"BOOLEAN","widget":{"name":"use_lora_4"},"link":null},{"localized_name":"lora_4","name":"lora_4","type":"COMBO","widget":{"name":"lora_4"},"link":null},{"localized_name":"strength_model_4","name":"strength_model_4","type":"FLOAT","widget":{"name":"strength_model_4"},"link":null},{"localized_name":"strength_clip_4","name":"strength_clip_4","type":"FLOAT","widget":{"name":"strength_clip_4"},"link":null},{"localized_name":"use_lora_5","name":"use_lora_5","type":"BOOLEAN","widget":{"name":"use_lora_5"},"link":null},{"localized_name":"lora_5","name":"lora_5","type":"COMBO","widget":{"name":"lora_5"},"link":null},{"localized_name":"strength_model_5","name":"strength_model_5","type":"FLOAT","widget":{"name":"strength_model_5"},"link":null},{"localized_name":"strength_clip_5","name":"strength_clip_5","type":"FLOAT","widget":{"name":"strength_clip_5"},"link":null},{"localized_name":"use_lora_6","name":"use_lora_6","type":"BOOLEAN","widget":{"name":"use_lora_6"},"link":null},{"localized_name":"lora_6","name":"lora_6","type":"COMBO","widget":{"name":"lora_6"},"link":null},{"localized_name":"strength_model_6","name":"strength_model_6","type":"FLOAT","widget":{"name":"strength_model_6"},"link":null},{"localized_name":"strength_clip_6","name":"strength_clip_6","type":"FLOAT","widget":{"name":"strength_clip_6"},"link":null},{"localized_name":"positive_prompt","name":"positive_prompt","shape":7,"type":"STRING","widget":{"name":"positive_prompt"},"link":null},{"localized_name":"negative_prompt","name":"negative_prompt","shape":7,"type":"STRING","widget":{"name":"negative_prompt"},"link":null},{"localized_name":"clip_set_last_layer_positive","name":"clip_set_last_layer_positive","shape":7,"type":"INT","widget":{"name":"clip_set_last_layer_positive"},"link":null},{"localized_name":"clip_set_last_layer_negative","name":"clip_set_last_layer_negative","shape":7,"type":"INT","widget":{"name":"clip_set_last_layer_negative"},"link":null},{"localized_name":"recipe_slot","name":"recipe_slot","shape":7,"type":"COMBO","widget":{"name":"recipe_slot"},"link":null},{"localized_name":"recipe_save","name":"recipe_save","shape":7,"type":"BOOLEAN","widget":{"name":"recipe_save"},"link":null},{"localized_name":"recipe_use","name":"recipe_use","shape":7,"type":"BOOLEAN","widget":{"name":"recipe_use"},"link":null},{"localized_name":"standard_pipeline","name":"standard_pipeline","shape":7,"type":"BOOLEAN","widget":{"name":"standard_pipeline"},"link":null},{"localized_name":"clip_lora_pos_gain","name":"clip_lora_pos_gain","shape":7,"type":"FLOAT","widget":{"name":"clip_lora_pos_gain"},"link":null},{"localized_name":"clip_lora_neg_gain","name":"clip_lora_neg_gain","shape":7,"type":"FLOAT","widget":{"name":"clip_lora_neg_gain"},"link":null},{"localized_name":"dynamic_pos","name":"dynamic_pos","shape":7,"type":"BOOLEAN","widget":{"name":"dynamic_pos"},"link":null},{"localized_name":"dynamic_neg","name":"dynamic_neg","shape":7,"type":"BOOLEAN","widget":{"name":"dynamic_neg"},"link":null},{"localized_name":"dyn_seed","name":"dyn_seed","shape":7,"type":"INT","widget":{"name":"dyn_seed"},"link":null},{"localized_name":"dynamic_break_freeze","name":"dynamic_break_freeze","shape":7,"type":"BOOLEAN","widget":{"name":"dynamic_break_freeze"},"link":null},{"localized_name":"show_expanded_prompts","name":"show_expanded_prompts","shape":7,"type":"BOOLEAN","widget":{"name":"show_expanded_prompts"},"link":null},{"localized_name":"save_expanded_prompts","name":"save_expanded_prompts","shape":7,"type":"BOOLEAN","widget":{"name":"save_expanded_prompts"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","links":[151]},{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":null},{"localized_name":"Positive","name":"Positive","type":"CONDITIONING","links":[13,102]},{"localized_name":"Negative","name":"Negative","type":"CONDITIONING","links":[14,103]},{"localized_name":"VAE","name":"VAE","type":"VAE","links":[2,15,31]}],"properties":{"Node name for S&R":"MagicNodesCombiNode"},"widgets_values":[true,"None",true,false,"None",-1,0.2,false,"None",0,0,false,"None",0,0,false,"None",0,0,false,"None",0,0,false,"None",false,false,"(correct human anatomy:1).\n(masterwork:1), very aesthetic, super detailed, newest, masterpiece, amazing quality, highres, sharpen image, best quality.\n25yrs 1woman, necklace, earnings, jewelry, wrist jewelry, ponytail hair, blue hair, blue eyes, yellow kimono with floral print, holds a large pillow, purple pillow, smile, 2 hands.\nFront view, Bedroom","(super-wrong:1), wrong, worst, mistake, (anatomically incorrect human:1), wrong geometry\n(six fingers:1), pixelated,\n(bad hands:1), deformed nails, (fused fingers), (incorrecting hold in hand:1), bad fingers\nugly, (bad anatomy), junior artist, beginner's drawing, bad composition, loose, underpainting, muddy colors, broken symmetry, unclear focal point, blurry details, incorrect perspective, shaky outlines, uneven lines,\n(unsharpen eyes:1), imperfect eyes, skewed eyes, unnatural face, unnatural body, extra limb, missing limbs, distorted eyelashes, misplaced pupils, noisly eyes, long neck,\nobject clipping, clothing clipping, object intersection, unrealistic overlap, geometry intersection,\ntext, typo, signature, watermarks on image, error",-2,-2,"Off",false,false,false,0.92,1,false,false,0,false,false,false]},{"id":11,"type":"ComfyAdaptiveDetailEnhancer25_Easy","pos":[1572.9731847035082,222.56018167321056],"size":[304.44140625,394],"flags":{},"order":22,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":136},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":107},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":106},{"localized_name":"vae","name":"vae","type":"VAE","link":32},{"localized_name":"latent","name":"latent","type":"LATENT","link":37},{"localized_name":"reference_image","name":"reference_image","shape":7,"type":"IMAGE","link":24},{"localized_name":"clip_vision","name":"clip_vision","shape":7,"type":"CLIP_VISION","link":28},{"localized_name":"preset_step","name":"preset_step","type":"COMBO","widget":{"name":"preset_step"},"link":null},{"localized_name":"custom","name":"custom","type":"BOOLEAN","widget":{"name":"custom"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"clipseg_text","name":"clipseg_text","shape":7,"type":"STRING","widget":{"name":"clipseg_text"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":[62]},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[22,66,110]},{"localized_name":"mask_preview","name":"mask_preview","type":"IMAGE","links":[21]}],"properties":{"Node name for S&R":"ComfyAdaptiveDetailEnhancer25_Easy"},"widgets_values":["Step 2",false,0,"fixed",30,7,0.65,"ddim","MGHybrid","hand, feet, face"]},{"id":58,"type":"PatchSageAttention","pos":[629.2665023731814,-313.0620160706534],"size":[270,58],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":151},{"localized_name":"sage_attention","name":"sage_attention","type":"COMBO","widget":{"name":"sage_attention"},"link":null}],"outputs":[{"localized_name":"MODEL","name":"MODEL","type":"MODEL","links":[152,153]}],"properties":{"Node name for S&R":"PatchSageAttention"},"widgets_values":["auto_quality"],"color":"#223","bgcolor":"#335"},{"id":19,"type":"Reroute","pos":[1498.7055053565248,550.5312952244669],"size":[75,26],"flags":{},"order":12,"mode":0,"inputs":[{"name":"","type":"*","link":153}],"outputs":[{"name":"","type":"MODEL","links":[136,154]}],"properties":{"showOutputText":false,"horizontal":false},"color":"#223","bgcolor":"#335"}],"links":[[2,2,4,3,0,"VAE"],[13,2,2,14,1,"CONDITIONING"],[14,2,3,14,2,"CONDITIONING"],[15,2,4,14,3,"VAE"],[17,5,0,14,6,"CLIP_VISION"],[19,3,0,14,4,"LATENT"],[21,11,2,15,0,"IMAGE"],[22,11,1,16,0,"IMAGE"],[24,14,1,11,5,"IMAGE"],[28,17,0,11,6,"CLIP_VISION"],[31,2,4,20,0,"*"],[32,20,0,11,3,"VAE"],[37,14,0,11,4,"LATENT"],[40,24,1,25,0,"IMAGE"],[41,24,2,26,0,"IMAGE"],[46,29,2,31,0,"IMAGE"],[48,29,1,7,0,"IMAGE"],[61,24,0,29,4,"LATENT"],[62,11,0,24,4,"LATENT"],[65,24,1,29,5,"IMAGE"],[66,11,1,24,5,"IMAGE"],[85,24,1,41,0,"IMAGE"],[86,41,0,29,1,"CONDITIONING"],[87,41,1,29,2,"CONDITIONING"],[90,41,2,42,0,"IMAGE"],[92,5,0,17,0,"*"],[97,14,1,43,0,"IMAGE"],[102,2,2,43,1,"CONDITIONING"],[103,2,3,43,2,"CONDITIONING"],[106,43,1,11,2,"CONDITIONING"],[107,43,0,11,1,"CONDITIONING"],[110,11,1,44,0,"IMAGE"],[115,44,0,24,1,"CONDITIONING"],[116,44,1,24,2,"CONDITIONING"],[119,43,0,44,1,"CONDITIONING"],[120,43,1,44,2,"CONDITIONING"],[121,44,1,41,2,"CONDITIONING"],[122,44,0,41,1,"CONDITIONING"],[123,44,2,45,0,"IMAGE"],[124,43,2,46,0,"IMAGE"],[125,17,0,47,0,"*"],[126,47,0,24,6,"CLIP_VISION"],[127,47,0,48,0,"*"],[128,48,0,29,6,"CLIP_VISION"],[129,20,0,49,0,"*"],[130,49,0,24,3,"VAE"],[131,49,0,50,0,"*"],[132,50,0,29,3,"VAE"],[133,50,0,41,4,"VAE"],[134,49,0,44,4,"VAE"],[135,20,0,43,4,"VAE"],[136,19,0,11,0,"MODEL"],[138,51,0,24,0,"MODEL"],[139,51,0,52,0,"*"],[140,52,0,29,0,"MODEL"],[141,14,1,53,0,"*"],[142,53,0,33,0,"IMAGE"],[143,4,0,54,0,"*"],[144,54,0,43,3,"CONTROL_NET"],[145,54,0,55,0,"*"],[146,55,0,44,3,"CONTROL_NET"],[147,55,0,56,0,"*"],[148,56,0,41,3,"CONTROL_NET"],[151,2,0,58,0,"MODEL"],[152,58,0,14,0,"MODEL"],[153,58,0,19,0,"*"],[154,19,0,51,0,"*"]],"groups":[{"id":1,"title":"Step1 - Pre-warm","bounding":[985.2202161884722,-368.00948371274734,405.87327906278074,908.4829257340471],"color":"#a1309b","font_size":22,"flags":{}},{"id":2,"title":"Step2 - warming","bounding":[1491.7975585478357,-546.9292924524468,464.03429546870484,1238.2310938486526],"color":"#b58b2a","font_size":22,"flags":{}},{"id":3,"title":"Step3 - Pre-ready","bounding":[2110.501998988056,-553.0885338063888,518.639493048679,1245.9769642733752],"color":"#3f789e","font_size":22,"flags":{}},{"id":4,"title":"Step4 - High-res","bounding":[2836.675702344997,-548.5808647096898,526.8246054854121,1235.0376260654407],"color":"#8A8","font_size":22,"flags":{}},{"id":5,"title":"1 - Pre-warm","bounding":[912.8922171272666,734.9178623674503,505.331679024805,647.6692243308507],"color":"#a1309b","font_size":22,"flags":{}},{"id":6,"title":"2 - warming","bounding":[1478.1593316885921,734.6063030539617,505.331679024805,647.6692243308507],"color":"#b58b2a","font_size":22,"flags":{}},{"id":7,"title":"3 - Pre-ready","bounding":[2040.803574403982,730.9381266791784,683.3155821674318,849.0584001035625],"color":"#3f789e","font_size":22,"flags":{}},{"id":8,"title":"Step4 - High-res","bounding":[2771.933529470263,732.683066906069,700.3585746163794,850.3693995227123],"color":"#8A8","font_size":22,"flags":{}}],"config":{},"extra":{"ds":{"scale":0.520986848192444,"offset":[-849.9895713451045,843.6031894061216]}},"version":0.4}
|