Adds math nodes for numbers and types which do not need it. I got inspired by was_extras node.
WARNING This node is not compatible to ComfyUI-Impact-Pack and ComfyUI-Ovi which forces older antlr version
- Install ComfyUI.
- Clone this repository into
ComfyUI/custom_nodes. - open command prompt/terminal/bash in your comfy folder
- activate environment
./venv/Scripts/activate - install antlr
pip install -U antlr4-python3-runtime==4.13.2 - Restart ComfyUI.
You can also get the node from comfy manager under the name of More math.
-
functions and variables in math expressions
-
Conversion between INT and FLOAT; AUDIO and IMAGE (red - real - strenght of cosine of frequency; blue - imaginary - strenght of sine of frequency; green - log1p of amplitude - just so it looks good to humans)
-
Nodes for FLOAT, CONDITIONING, LATENT, IMAGE, NOISE, AUDIO, VIDEO, MODEL, CLIP and VAE
-
Vector Math: Support for List literals
[v1, v2, ...]and operations between lists/scalars
- Math:
+,-,*,/,%,^,|| - Boolean:
<,<=,>,>=,==,!=(false = 0.0,true = 1.0) - Lists:
[v1, v2, ...](Vector math supported, only usefull inconvandpermute)
abs(x)or|x|: Absolute value. For floatabs(x)and|x|are the same. For tensorabs(x)calculates element-wise absolute value and for|x|it calculates L2 norm (euclidean norm).sqrt(x): Square root.ln(x): Natural logarithm (base e).log(x): Logarithm base 10.exp(x): Exponential function (e^x).pow(x, y): Power function (x^y).floor(x): Rounds down to nearest integer.ceil(x): Rounds up to nearest integer.round(x): Rounds to nearest integer.fract(x): Returns the fractional part of x (x - floor(x)).sign(x): Returns -1 for negative, 1 for positive, 0 for zero.gamma(x): Gamma function.
sin(x),cos(x),tan(x)asin(x),acos(x),atan(x)atan2(y, x): Arctangent of y/x, handling quadrants.
sinh(x),cosh(x),tanh(x)asinh(x),acosh(x),atanh(x)
relu(x): Rectified Linear Unit (max(0, x)).gelu(x): Gaussian Error Linear Unit.softplus(x): Softplus function (log(1 + e^x)).sigm(x): Sigmoid function (1 / (1 + e^-x)).
clamp(x, min, max): Constrains x to be between min and max.lerp(a, b, w): Linear interpolation:a + (b - a) * w.step(x, edge): Returns 1.0 if x >= edge, else 0.0.smoothstep(x, edge0, edge1): Hermite interpolation between edge0 and edge1.
tmin(x, y): Element-wise minimum of x and y.tmax(x, y): Element-wise maximum of x and y.smin(x, ...): Scalar minimum. Returns the single smallest value across all input tensors/values.smax(x, ...): Scalar maximum. Returns the single largest value across all input tensors/values.tnorm(x): Tensor Normalizes x (L2 norm along last dimension).snorm(x): Scalar L2 norm of the entire tensor.swap(tensor, dim, index1, index2): Swaps two slices of a tensor along a specified dimension. (Tensor only)
-
map(tensor, c1, ...): Remapstensorusing source coordinates.- Up to 3 coordinate mapping functions can be provided which map to the last (up to 3) dimensions of the tensor. Rest uses identity mapping.
-
conv(tensor, kw, [kh], [kd], k_expr): Applies a convolution totensor.k_exprcan be a math expression (usingkX,kY,kZ) or a list literal.
-
permute(tensor, dims): Rearranges the dimensions of the tensor. (e.g.,permute(a, [2, 3, 0, 1]))
fft(x): Fast Fourier Transform (Time to Frequency).ifft(x): Inverse Fast Fourier Transform (Frequency to Time).angle(x): Returns the element-wise angle (phase) of the complex tensor.
print(x): Prints the value of x to the console and returns x.print_shape(x)orpshp: Prints the shape of x to the console and returns x.
-
Common variables (except FLOAT, MODEL, VAE and CLIP):
D{N}- position in n-th dimension of tensor (for example D0, D1, D2, ...)S{N}- size of n-th dimension of tensor (for example S0, S1, S2, ...)
-
common inputs (matches node input type):
a,b,c,d
-
Extra floats:
w,x,y,z
-
INSIDE IFFT
Forfrequency_count– frequency count (freq domain, iFFT only)Korfrequency– isotropic frequency (Euclidean norm of indices, iFFT only)Kx,Ky,K_dimN- frequency index for specific dimensionFx,Fy,F_dimN- frequency count for specific dimension
-
IMAGE and LATENT:
Corchannel- channel of imageX- position X in image. 0 is in top leftY- position Y in image. 0 is in top leftWorwidth- width of image. y/width = 1Horheight- height of image. x/height = 1Bor 'batch' - position in batchTorbatch_count- number of batchesNorchannel_count- count of channels
-
IMAGE KERNEL:
kX,kY- position in kernel. Centered at 0.0.kW,kernel_width- width of kernel.kH,kernel_height- height of kernel.kD,kernel_depth- depth of kernel.
-
AUDIO:
Bor 'batch' - position in batchNorchannel_count- count of channelsCorchannel- channel of audioSorsample– current audio sample- 'T' or 'sample_count` - audio lenght in samples
Rorsample_rate– sample rate
-
VIDEO
- refer to
IMAGE and LATENTfor visual part (butbatchisframeandbatch_countisframe_count) - refer to
AUDIOfor sound part
- refer to
-
NOISE
- refer to
IMAGE and LATENTfor most variables Iorinput_latent– latent used as input to generate noise before noise is generated into it
- refer to
-
CONDITIONING and FLOAT
- no additional variables
Forfrequency_count– frequency count (freq domain, iFFT only)Korfrequency– isotropic frequency (Euclidean norm of indices, iFFT only)Kx,Ky,Kz,Kw,Kv,Ku,K_dimN- frequency index for specific dimensionFx,Fy,Fz,Fw,Fv,Fu,F_dimN- frequency count for specific dimension
-
Constants:
e,pi