diff --git a/README.en.md b/README.en.md index 7510b53..2f9113f 100644 --- a/README.en.md +++ b/README.en.md @@ -35,8 +35,8 @@ **v1.1.6 (2024/4/26)** -- `easy preSamplingCustom` added **alignYourSteps** to **schedulder** widget -- `easy kSampler` & `easy fullkSampler` added **Preview&Choose** to **image_output** widget +- Added **alignYourSteps** to **schedulder** widget in all `easy preSampling` and `easy fullkSampler` +- Added **Preview&Choose** to **image_output** widget in `easy kSampler` & `easy fullkSampler` - Added `easy styleAlignedBatchAlign` - Credit of [style_aligned_comfy](https://github.com/brianfitzgerald/style_aligned_comfy) - Added `easy ckptNames` - Added `easy controlnetNames` diff --git a/README.md b/README.md index 0729934..ac2f8f7 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ **v1.1.6 (2024/4/26)** -- `easy preSamplingCustom` schedulder 增加 **alignYourSteps** 选项 +- 增加步调齐整适配 - 在所有的预采样和全采样器节点中的 调度器(schedulder) 增加了 **alignYourSteps** 选项 - `easy kSampler` 和 `easy fullkSampler` 的 **image_output** 增加 **Preview&Choose**选项 - 增加 `easy styleAlignedBatchAlign` - 风格对齐 [style_aligned_comfy](https://github.com/brianfitzgerald/style_aligned_comfy) - 增加 `easy ckptNames` diff --git a/py/config.py b/py/config.py index e93251d..8f3164f 100644 --- a/py/config.py +++ b/py/config.py @@ -68,7 +68,7 @@ LAYER_DIFFUSION_VAE = { } }, "decode": { - "sd15": { + "sd1": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_sd15_vae_transparent_decoder.safetensors" }, "sdxl": { @@ -78,7 +78,7 @@ LAYER_DIFFUSION_VAE = { } LAYER_DIFFUSION = { "Attention Injection": { - "sd15": { + "sd1": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_sd15_transparent_attn.safetensors" }, "sdxl": { @@ -89,7 +89,7 @@ LAYER_DIFFUSION = { "sdxl": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_xl_transparent_conv.safetensors" }, - "sd15": { + "sd1": { "model_url": None } }, @@ -102,7 +102,7 @@ LAYER_DIFFUSION = { } }, "Foreground": { - "sd15": { + "sd1": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_sd15_fg2bg.safetensors" }, "sdxl": { @@ -110,7 +110,7 @@ LAYER_DIFFUSION = { } }, "Foreground to Background": { - "sd15": { + "sd1": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_sd15_fg2bg.safetensors" }, "sdxl": { @@ -118,7 +118,7 @@ LAYER_DIFFUSION = { } }, "Background": { - "sd15": { + "sd1": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_sd15_bg2fg.safetensors" }, "sdxl": { @@ -126,7 +126,7 @@ LAYER_DIFFUSION = { } }, "Background to Foreground": { - "sd15": { + "sd1": { "model_url": "https://huggingface.co/LayerDiffusion/layerdiffusion-v1/resolve/main/layer_sd15_bg2fg.safetensors" }, "sdxl": { diff --git a/py/easyNodes.py b/py/easyNodes.py index 98ee8d6..14c3c36 100644 --- a/py/easyNodes.py +++ b/py/easyNodes.py @@ -2980,7 +2980,7 @@ class samplerSettings: "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), - "scheduler": (comfy.samplers.KSampler.SCHEDULERS,), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS + ['align_your_steps'],), "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "seed": ("INT", {"default": 0, "min": 0, "max": MAX_SEED_NUM}), }, @@ -3053,7 +3053,7 @@ class samplerSettingsAdvanced: "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), - "scheduler": (comfy.samplers.KSampler.SCHEDULERS,), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS + ['align_your_steps'],), "start_at_step": ("INT", {"default": 0, "min": 0, "max": 10000}), "end_at_step": ("INT", {"default": 10000, "min": 0, "max": 10000}), "add_noise": (["enable", "disable"],), @@ -3137,7 +3137,7 @@ class samplerSettingsNoiseIn: "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), - "scheduler": (comfy.samplers.KSampler.SCHEDULERS,), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS+['align_your_steps'],), "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "seed": ("INT", {"default": 0, "min": 0, "max": MAX_SEED_NUM}), }, @@ -3717,7 +3717,7 @@ class layerDiffusionSettings: "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"default": "euler"}), - "scheduler": (comfy.samplers.KSampler.SCHEDULERS, {"default": "normal"}), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS+ ['align_your_steps'], {"default": "normal"}), "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "seed": ("INT", {"default": 0, "min": 0, "max": MAX_SEED_NUM}), }, @@ -4022,7 +4022,7 @@ class samplerFull(LayerDiffuse): "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), - "scheduler": (comfy.samplers.KSampler.SCHEDULERS,), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS+['align_your_steps'],), "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), "image_output": (["Hide", "Preview", "Preview&Choose", "Save", "Hide/Save", "Sender", "Sender/Save"],), "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), @@ -4146,7 +4146,19 @@ class samplerFull(LayerDiffuse): # 推理初始时间 start_time = int(time.time() * 1000) # 开始推理 - samp_samples = sampler.common_ksampler(samp_model, samp_seed, steps, cfg, sampler_name, scheduler, samp_positive, samp_negative, samples, denoise=denoise, preview_latent=preview_latent, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, disable_noise=disable_noise, custom=samp_custom) + if scheduler == 'align_your_steps' and samp_custom is None: + try: + from comfy_extras.nodes_align_your_steps import AlignYourStepsScheduler + model_type = get_sd_version(samp_model) + if model_type == 'unknown': + raise Exception("This Model not supported") + sigmas, = AlignYourStepsScheduler().get_sigmas(model_type.upper(), steps) + except: + raise Exception("Please update your ComfyUI") + _sampler = comfy.samplers.sampler_object(sampler_name) + samp_samples = sampler.custom_ksampler(samp_model, samp_seed, steps, cfg, _sampler, sigmas, samp_positive, samp_negative, samples, disable_noise=disable_noise, preview_latent=preview_latent) + else: + samp_samples = sampler.common_ksampler(samp_model, samp_seed, steps, cfg, sampler_name, scheduler, samp_positive, samp_negative, samples, denoise=denoise, preview_latent=preview_latent, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, disable_noise=disable_noise, custom=samp_custom) # 推理结束时间 end_time = int(time.time() * 1000) latent = samp_samples["samples"] diff --git a/py/layer_diffuse/func.py b/py/layer_diffuse/func.py index e1c03e0..75dc1dc 100644 --- a/py/layer_diffuse/func.py +++ b/py/layer_diffuse/func.py @@ -166,7 +166,7 @@ class LayerDiffuse: alpha = [] if layer_diffusion_method is not None: sd_version = get_sd_version(model) - if sd_version not in ['sdxl', 'sd15']: + if sd_version not in ['sdxl', 'sd1']: raise Exception(f"Only SDXL and SD1.5 model supported for Layer Diffusion") method = self.get_layer_diffusion_method(layer_diffusion_method, blend_samples is not None) sd15_allow = True if sd_version == 'sd1' and method in [LayerMethod.FG_ONLY_ATTN, LayerMethod.EVERYTHING, LayerMethod.BG_TO_BLEND, LayerMethod.BG_BLEND_TO_FG] else False diff --git a/py/libs/sampler.py b/py/libs/sampler.py index d665829..869ea42 100644 --- a/py/libs/sampler.py +++ b/py/libs/sampler.py @@ -5,7 +5,7 @@ import latent_preview from nodes import MAX_RESOLUTION from PIL import Image from typing import Dict, List, Optional, Tuple, Union, Any - +from .utils import get_sd_version class easySampler: def __init__(self): self.last_helds: dict[str, list] = {