Files
CavinHuang-comfyui-nodes-docs/docs/IterativeMixingSchedulerAdvanced.md
2024-05-26 20:35:16 +08:00

3.5 KiB

Documentation

IterativeMixingSchedulerAdvanced节点旨在为迭代采样过程生成一系列噪声水平,即sigmas。它根据去噪参数智能调整采样步骤,确保输出精细调整到所需的噪声减少水平。该节点在控制高级迭代采样技术的采样计划中发挥关键作用,有助于提高采样过程的整体质量和效率。

Input types

Required

  • model
    • 模型参数对节点的操作至关重要,因为它定义了将要应用调度器的生成模型。它直接影响生成的sigmas的质量和类型,这对于采样过程至关重要。
    • Comfy dtype: MODEL
    • Python dtype: comfy.model_management.Model
  • scheduler
    • 调度器参数决定了采样过程中将使用的调度策略。它是计算sigmas的关键因素,因此影响迭代采样的整体性能。
    • Comfy dtype: SCHEDULER_NAMES
    • Python dtype: str
  • steps
    • steps参数指定了采样过程中要进行的迭代次数或步骤数。它是控制采样计划持续时间和粒度的重要因素。
    • Comfy dtype: INT
    • Python dtype: int
  • start_at_step
    • start_at_step参数允许自定义采样计划的起始点。它可以用来跳过初始步骤或在过程的特定点开始采样。
    • Comfy dtype: INT
    • Python dtype: int
  • end_at_step
    • end_at_step参数定义了采样计划的终点。它可以用来限制执行的步骤数,在预定点停止采样过程。
    • Comfy dtype: INT
    • Python dtype: int
  • denoise
    • denoise参数在采样过程中调整噪声减少的水平。它是确定最终输出质量的关键因素,通过控制去噪步骤的强度来实现。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • sigmas
    • sigmas输出代表了节点生成的噪声水平序列。这些值在迭代采样过程中起着指导作用,引导模型产生更高质量的输出。
    • Comfy dtype: SIGMAS
    • Python dtype: torch.Tensor

Usage tips

  • Infra type: CPU

Source code

class IterativeMixingSchedulerAdvanced:

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'model': ('MODEL',), 'scheduler': (comfy.samplers.SCHEDULER_NAMES,), 'steps': ('INT', {'default': 20, 'min': 1, 'max': 10000}), 'start_at_step': ('INT', {'default': 0, 'min': 0, 'max': 10000}), 'end_at_step': ('INT', {'default': 10000, 'min': 0, 'max': 10000}), 'denoise': ('FLOAT', {'default': 1.0, 'min': 0.0, 'max': 1.0, 'step': 0.01})}}
    RETURN_TYPES = ('SIGMAS',)
    CATEGORY = 'sampling/custom_sampling/schedulers'
    FUNCTION = 'get_sigmas'

    @torch.no_grad()
    def get_sigmas(self, model, scheduler, steps, start_at_step, end_at_step, denoise):
        sigmas = None
        cs = comfy.samplers.calculate_sigmas_scheduler
        if denoise is None or denoise > 0.9999:
            sigmas = cs(model.model, scheduler, steps).cpu()
        else:
            new_steps = int(steps / denoise)
            sigmas = cs(model.model, scheduler, new_steps).cpu()
            sigmas = sigmas[-(steps + 1):]
        if end_at_step is not None and end_at_step < len(sigmas) - 1:
            sigmas = sigmas[:end_at_step + 1]
        if start_at_step is not None:
            if start_at_step < len(sigmas) - 1:
                sigmas = sigmas[start_at_step:]
            else:
                return torch.Tensor([])
        return (sigmas,)