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

4.5 KiB

Documentation

loraStackLoader节点旨在简化加载和配置Lora堆栈的过程,这对于微调和提高神经网络模型的性能至关重要。它通过提供一种结构化的方式来指定多个Lora层的名称、强度和其他相关参数,简化了管理多个Lora层的复杂性。

Input types

Required

  • toggle
    • toggle参数对于决定节点是否应该执行其加载过程至关重要。当设置为True时,节点将执行加载指定的Lora堆栈;否则,它将不执行任何操作就返回。
    • Comfy dtype: BOOL
    • Python dtype: bool
  • mode
    • mode参数决定了Lora堆栈配置的复杂性级别。它允许用户选择简单或高级设置,影响后续参数的解释和应用方式。
    • Comfy dtype: STR
    • Python dtype: str
  • num_loras
    • num_loras参数指定要加载的Lora层的数量。它通过确定将处理多少个Lora配置直接影响节点的操作。
    • Comfy dtype: INT
    • Python dtype: int

Optional

  • optional_lora_stack
    • optional_lora_stack参数提供了一种向节点提供现有Lora堆栈的方式。这对于扩展或修改已经配置的堆栈而无需从头开始非常有用。
    • Comfy dtype: LORA_STACK
    • Python dtype: List[Tuple[str, float, float]]
  • lora_{i}_name
    • lora_{i}_name参数允许用户指定位置{i}处的Lora层的名称。这对于识别和加载正确的Lora配置非常重要。
    • Comfy dtype: STR
    • Python dtype: str
  • lora_{i}_strength
    • lora_{i}_strength参数设置位置{i}处的Lora层的强度。这是Lora层在模型中的影响权重的关键因素。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • lora_{i}_model_strength
    • lora_{i}_model_strength参数在高级模式下适用,为位置{i}处的Lora层设置特定于模型的强度。它用于微调Lora对模型输出的影响。
    • Comfy dtype: FLOAT
    • Python dtype: float
  • lora_{i}_clip_strength
    • lora_{i}_clip_strength参数也在高级模式下使用,它决定了位置{i}处的Lora层与CLIP模型的交互强度。这对于控制基于文本的指导在模型处理中的整合至关重要。
    • Comfy dtype: FLOAT
    • Python dtype: float

Output types

  • lora_stack
    • lora_stack输出是由节点处理的Lora配置的集合。它代表了准备应用于神经网络模型的最终Lora层堆栈。
    • Comfy dtype: LORA_STACK
    • Python dtype: List[Tuple[str, float, float]]

Usage tips

  • Infra type: CPU

Source code

class loraStackLoader:

    def __init__(self):
        pass

    @classmethod
    def INPUT_TYPES(s):
        max_lora_num = 10
        inputs = {'required': {'toggle': ([True, False],), 'mode': (['simple', 'advanced'],), 'num_loras': ('INT', {'default': 1, 'min': 0, 'max': max_lora_num})}, 'optional': {'optional_lora_stack': ('LORA_STACK',)}}
        for i in range(1, max_lora_num + 1):
            inputs['optional'][f'lora_{i}_name'] = (['None'] + folder_paths.get_filename_list('loras'), {'default': 'None'})
            inputs['optional'][f'lora_{i}_strength'] = ('FLOAT', {'default': 1.0, 'min': -10.0, 'max': 10.0, 'step': 0.01})
            inputs['optional'][f'lora_{i}_model_strength'] = ('FLOAT', {'default': 1.0, 'min': -10.0, 'max': 10.0, 'step': 0.01})
            inputs['optional'][f'lora_{i}_clip_strength'] = ('FLOAT', {'default': 1.0, 'min': -10.0, 'max': 10.0, 'step': 0.01})
        return inputs
    RETURN_TYPES = ('LORA_STACK',)
    RETURN_NAMES = ('lora_stack',)
    FUNCTION = 'stack'
    CATEGORY = 'EasyUse/Loaders'

    def stack(self, toggle, mode, num_loras, lora_stack=None, **kwargs):
        if toggle in [False, None, 'False'] or not kwargs:
            return (None,)
        loras = []
        if lora_stack is not None:
            loras.extend([l for l in lora_stack if l[0] != 'None'])
        for i in range(1, num_loras + 1):
            lora_name = kwargs.get(f'lora_{i}_name')
            if not lora_name or lora_name == 'None':
                continue
            if mode == 'simple':
                lora_strength = float(kwargs.get(f'lora_{i}_strength'))
                loras.append((lora_name, lora_strength, lora_strength))
            elif mode == 'advanced':
                model_strength = float(kwargs.get(f'lora_{i}_model_strength'))
                clip_strength = float(kwargs.get(f'lora_{i}_clip_strength'))
                loras.append((lora_name, model_strength, clip_strength))
        return (loras,)