3.5 KiB
3.5 KiB
Documentation
- Class name: ConditioningAverage
- Category: conditioning
- Output node: False
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
ConditioningAverage节点旨在通过应用加权平均值来混合不同的条件输入。它基于指定的强度智能地将'conditioning_from'与'conditioning_to'结合起来,允许在生成模型中对条件过程进行精细控制。
Input types
Required
- conditioning_to
- ‘conditioning_to’参数至关重要,因为它定义了将应用加权平均的目标条件数据。它在确定节点的最终输出中起着重要作用,通过影响条件混合的执行方式来影响结果。
- Comfy dtype: CONDITIONING
- Python dtype: List[Tuple[torch.Tensor, Dict[str, torch.Tensor]]]
- conditioning_from
- ‘conditioning_from’参数是必不可少的,因为它提供了将与‘conditioning_to’平均的源条件数据。它之所以重要,是因为它决定了将混合的初始条件,从而影响节点的执行和结果输出。
- Comfy dtype: CONDITIONING
- Python dtype: List[Tuple[torch.Tensor, Dict[str, torch.Tensor]]]
- conditioning_to_strength
- ‘conditioning_to_strength’参数在确定‘conditioning_to’在加权平均中的影响程度时非常关键。它通过控制‘conditioning_to’在混合中覆盖‘conditioning_from’的程度,直接影响节点的操作。
- Comfy dtype: FLOAT
- Python dtype: float
Output types
- output
- ConditioningAverage节点的输出是包含修改后的张量和可能包含'pooled_output'的字典的元组列表。这个输出代表了加权平均混合过程的结果,对于生成模型中的进一步处理非常重要。
- Comfy dtype: CONDITIONING
- Python dtype: List[Tuple[torch.Tensor, Dict[str, torch.Tensor]]]
Usage tips
- Infra type: CPU
Source code
class ConditioningAverage:
@classmethod
def INPUT_TYPES(s):
return {'required': {'conditioning_to': ('CONDITIONING',), 'conditioning_from': ('CONDITIONING',), 'conditioning_to_strength': ('FLOAT', {'default': 1.0, 'min': 0.0, 'max': 1.0, 'step': 0.01})}}
RETURN_TYPES = ('CONDITIONING',)
FUNCTION = 'addWeighted'
CATEGORY = 'conditioning'
def addWeighted(self, conditioning_to, conditioning_from, conditioning_to_strength):
out = []
if len(conditioning_from) > 1:
logging.warning('Warning: ConditioningAverage conditioning_from contains more than 1 cond, only the first one will actually be applied to conditioning_to.')
cond_from = conditioning_from[0][0]
pooled_output_from = conditioning_from[0][1].get('pooled_output', None)
for i in range(len(conditioning_to)):
t1 = conditioning_to[i][0]
pooled_output_to = conditioning_to[i][1].get('pooled_output', pooled_output_from)
t0 = cond_from[:, :t1.shape[1]]
if t0.shape[1] < t1.shape[1]:
t0 = torch.cat([t0] + [torch.zeros((1, t1.shape[1] - t0.shape[1], t1.shape[2]))], dim=1)
tw = torch.mul(t1, conditioning_to_strength) + torch.mul(t0, 1.0 - conditioning_to_strength)
t_to = conditioning_to[i][1].copy()
if pooled_output_from is not None and pooled_output_to is not None:
t_to['pooled_output'] = torch.mul(pooled_output_to, conditioning_to_strength) + torch.mul(pooled_output_from, 1.0 - conditioning_to_strength)
elif pooled_output_from is not None:
t_to['pooled_output'] = pooled_output_from
n = [tw, t_to]
out.append(n)
return (out,)