简单计算

经常会有想要简单地进行四则运算的场景,比如将图像尺寸精准地减半,或者调整 Batch Size 等。 让我们来看看用于这些操作的节点。


推荐的自定义节点

因为功能简单,实现它的节点要找的话有很多,但只要有以下任意一个自定义节点就足够了。(要是能作为核心节点实现就好了……)

这里我们以 ComfyUI_essentialsSimple Math 节点为例进行讲解。


Simple Math

Simple_Math.json

可以在 a, b, c 中分别输入数值。 利用这些变量,写成 a * b - c 这样,就可以进行简单的算术运算。

此外,由于它是直接使用 Python 的表达式,所以也可以进行稍微高级一点的计算。

a // b       # 整数除法(舍去小数点以下)
a % b        # 取余(除法的余数)
a ** b       # 幂运算(乘方)
(a + b) * c  # 用括号指定优先顺序

abs(a - b)   # 求绝对值
min(a, b)    # 返回最小值
max(a, b)    # 返回最大值
round(a / b) # 四雪五入

(a > b) * 1  # 逻辑表达式:条件数值化(若 a > b 则为 1, 否则为 0)
(a == b) * 1 # 逻辑表达式:判定是否相等
(a != b) * 1 # 逻辑表达式:判定是否不同

int 类型与 float 类型

数字也有“类型 (Type)”。 在 ComfyUI 中主要使用 intfloat 这两种。

  • int 类型:仅整数(例:512, 32, 1
    • Batch Size 或 图像分辨率等
  • float 类型:可处理小数(例:0.7, 1.5, 24.0
    • KSampler 的 strength 或 视频的 fps 等

如果不以适当的类型进行输入输出,就无法连接到节点。 虽然可能会有“全部用 float 不就行了吗”这样的吐槽,但为了计算效率和精度,它们是被区分开的……习惯就好。

类型的转换

顺便提一下,将数值通过一次 Simple Math 节点,就可以进行 intfloat 的转换。

即使输入是 float,如果输出目标是 int,它也会自动进行转换。

Simple_Math_FloatInt.json

【小技巧】输入栏中的简易计算

如果是不用节点也能解决的简单计算,直接在输入栏中写入计算式,输入的就是计算后的值。


Power Puter (rgthree)

使用 rgthree-comfy 添加的 Power Puter,可以获取图像尺寸,或者使用 if 语句,这已经几乎是编程了,但可以进行更复杂的处理。

cf. Node: Power Puter (Wiki)

Power_Puter.json