ComfyUI-Image-Filters
Image and matte filtering nodes for ComfyUI
latent/filters/*
image/filters/*
mask/filters/*
Two install batch files are provided, install.bat
which only installs requirements, and import_error_install.bat
, which uninstalls all versions of opencv-python before reinstalling only the correct version, opencv-contrib-python (use this if you get import errors relating to opencv or cv2, which are caused by having multiple versions or the wrong version of opencv installed.)
Nodes
Alpha Clean
Clean up holes and near-solid areas in a matte.
Alpha Matte
Takes an image and alpha or trimap, and refines the edges with closed-form matting. Optionally extracts the foreground and background colors as well. Good for cleaning up SAM segments or hand drawn masks.
Blur Image (Fast)
Blurs images using opencv gaussian blur, which is >100x faster than comfy image blur. Supports larger blur radius, and separate x/y controls.
Blur Mask (Fast)
Same as Blur Image (Fast) but for masks instead of images.
Dilate/Erode Mask
Dilate or erode masks, with either a box or circle filter.
Enhance Detail
Increase or decrease details in an image or batch of images using a guided filter (as opposed to the typical gaussian blur used by most sharpening filters.)
Guided Filter Alpha
Use a guided filter to feather edges of a matte based on similar RGB colors. Works best with a strong color separation between FG and BG.
Remap Range
Fits the color range of an image to a new blackpoint and whitepoint (clamped). Useful for clamping or thresholding soft mattes.
Clamp Outliers
Clamps latents that are more than n standard deviations away from 0. Could help with fireflies or stray noise that disrupt the VAE decode.
AdaIN Latent/Image
Normalizes latents/images to the mean and std dev of a reference input. Useful for getting rid of color shift from high denoise strength, or matching color to a reference in general.
Batch Normalize Latent/Image
Normalizes each frame in a batch to the overall mean and std dev, good for removing overall brightness flickering.
Difference Checker
Absolute value of the difference between inputs, with a multiplier to boost dark values for easier viewing. Alternative to the vanilla merge difference node, which is only a subtraction without the abs()
Image Constant (RGB/HSV)
Create an empty image of any color, either RGB or HSV
Offset Latent Image
Create an empty latent image with custom values, for offset noise but with per-channel control. Can be combined with Latent Stats to get channel values.
Latent Stats
Prints some stats about the latents (dimensions, and per-channel mean, std dev, min, and max)
Tonemap / UnTonemap
Apply or remove a log + contrast curve tonemap
Apply tonemap:
power = 1.7
SLog3R = clamp((log10((r + 0.01)/0.19) * 261.5 + 420) / 1023, 0, 1)
SLog3G = clamp((log10((g + 0.01)/0.19) * 261.5 + 420) / 1023, 0, 1)
SLog3B = clamp((log10((b + 0.01)/0.19) * 261.5 + 420) / 1023, 0, 1)
r = r > 0.06 ? pow(1 / (1 + (1 / pow(SLog3R / (1 - SLog3R), power))), power) : r
g = g > 0.06 ? pow(1 / (1 + (1 / pow(SLog3G / (1 - SLog3G), power))), power) : g
b = b > 0.06 ? pow(1 / (1 + (1 / pow(SLog3B / (1 - SLog3B), power))), power) : b
Remove tonemap:
power = 1.7
SR = 1 / (1 + pow((-1/pow(r, 1/power)) * (pow(r, 1/power) - 1), 1/power))
SG = 1 / (1 + pow((-1/pow(g, 1/power)) * (pow(g, 1/power) - 1), 1/power))
SB = 1 / (1 + pow((-1/pow(b, 1/power)) * (pow(b, 1/power) - 1), 1/power))
r = r > 0.06 ? pow(10, (SR * 1023 - 420)/261.5) * 0.19 - 0.01 : r
g = g > 0.06 ? pow(10, (SG * 1023 - 420)/261.5) * 0.19 - 0.01 : g
b = b > 0.06 ? pow(10, (SB * 1023 - 420)/261.5) * 0.19 - 0.01 : b
Exposure Adjust
Linear exposure adjustment in f-stops, with optional tonemap.
Convert Normals
Translate between different normal map color spaces, with optional normalization fix and black region fix.
Batch Average Image
Returns the single average image of a batch.
Normal Map (Simple)
Simple high-frequency normal map from Scharr operator
Keyer
Image keyer with luma/sat/channel/greenscreen/etc options
JitterImage, UnJitterImage, BatchAverageUnJittered
For supersampling/antialiasing workflows.
Shuffle
Move channels around at will.
ColorMatch
Match image color to reference image, using mean or blur. Similar to AdaIN.
RestoreDetail
Transfers details from one image to another using frequency separation techniques. Useful for restoring the lost details from IC-Light or other img2img workflows. Has options for add/subtract method (fewer artifacts, but mostly ignores highlights) or divide/multiply (more natural but can create artifacts in areas that go from dark to bright), and either gaussian blur or guided filter (prevents oversharpened edges).
BetterFilmGrain
Yet another film grain node, but this one looks better (realistic grain structure, no pixel-perfect RGB glitter, natural luminance/intensity response) and is 10x faster than the next best option (ProPostFilmGrain).