ComfyUI Extension: ComfyUI-Image-Filters
Image and matte filtering nodes for ComfyUI image/filters/*
Custom Nodes (56)
- AdaIN Filter (Latent)
- AdaIN (Image)
- AdaIN (Latent)
- Alpha Clean
- Alpha Matte
- Batch Align (RAFT)
- Batch Average Image
- Batch Average Un-Jittered
- Batch Normalize (Image)
- Batch Normalize (Latent)
- Better Film Grain
- Bilateral Filter Image
- Blur Image (Fast)
- Blur Mask (Fast)
- Canny
- Clamp Image
- Clamp Outliers
- Color Match Image
- ConditioningSubtract
- Convert Normals
- CustomNoise
- Depth To Normals
- Difference Checker
- Dilate/Erode Mask
- Enhance Detail
- Exposure Adjust
- Extract N Frames
- Frequency Combine
- Frequency Separate
- Game Of Life
- (DEPRECATED) Guided Filter Alpha
- Guided Filter Image
- Image Constant Color (RGB)
- Image Constant Color (HSV)
- Inpaint Condition Apply
- Inpaint Condition Encode
- InstructPixToPixConditioningAdvanced
- Jitter Image
- Keyer
- LatentNormalizeShuffle
- Latent Stats
- Median Filter Image
- Merge Frames By Index
- Model Test
- Normal Map (Simple)
- Offset Latent Image
- PrintSigmas
- Relight (Simple)
- Remap Range
- Restore Detail
- Sharpen Filter (Latent)
- Shuffle Channels
- Tonemap
- Un-Jitter Image
- UnTonemap
- Visualize Latents
README
ComfyUI-Image-Filters
Started as just some image processing nodes, but now more of a kitchen sink nodepack
Two install batch files are provided, install.bat
which only installs requirements, and import_error_install.bat
, which uninstalls all versions of opencv then reinstalls all 4 variants with matching version (use this if you get import errors relating to opencv or cv2, which are caused by manager or other node packs installing different variants and/or versions.)
Or if you want to manage requirements manually, the only opencv variant you actually need is opencv-contrib-python
, it covers all opencv requirements.
Nodes
<details><summary>Latent</summary>AdaIN Latent
Normalizes latents 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.
AdaIN Filter Latent
Same as AdaIN Latent, but with a spatial filter instead of the full frame, works like a latent color match.
Batch Normalize Latent
Normalizes each frame in a batch to the overall mean and std dev, good for removing overall brightness flickering.
Clamp Outliers
Clamps latents that are more than n standard deviations away from the mean. Could help with fireflies or stray noise that disrupt the VAE decode.
Upscale Hunyuan3Dv2 Latent By
Nearest Neighbor upscaling for Hy3D latents, might be useful for hires fix.
Latent Normalize/Shuffle
Can help break up residual image information in inversion noise.
RandnLikeLatent
Create random noise in the same shape as the input latent, works with any latent. Useful for noise injection or other times when you just want to control noise manually.
Offset Latent Image
Create an empty latent image with custom values, for offset noise with per-channel control. Can be combined with Latent Stats to get channel values.
Sharpen Filter (Latent)
Increases local contrast between latent "pixels" with an image sharpening filter.
</details> <details><summary>Image</summary>AdaIN Image
Normalizes 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 Align (RAFT)
Use RAFT motion vectors to warp align images
Batch Average Image
Returns the single average image of a batch.
Batch Normalize Image
Normalizes each frame in a batch to the overall mean and std dev, good for removing overall brightness flickering.
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).
Bilateral Filter Image
Applies a bilateral filter, can be used to remove noise or high frequency details while preserving edges
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.
Clamp Image
Clamps image values outside of blackpoint/whitepoint range
Color Match Image
Match image color to reference image, using overall mean or blurred image (frequency separation)
Convert Normals
Translate between different normal map color spaces, with optional normalization fix and black region fix.
Depth to Normals
Converts depthmap to normal map
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 subtraction without the abs()
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)
Exposure Adjust
Linear exposure adjustment in f-stops, with optional tonemap.
Frequency Separate/Combine
For manual frequency separation workflows
Game of Life
Runs the Game of Life simulation with optional mask input for starting condition
Guided Filter Image
Use a guided filter to blur an image or mask based on RGB color similarity. Works best with a strong color separation between FG and BG.
Image Constant Color (RGB/HSV)
Create images of any solid color, from either RGB or HSV values
Image Matting
Takes an image and trimap/mask, and refines the matte edges with closed-form matting. Optionally extracts the foreground and background colors as well. Good for cleaning up SAM segments or hand drawn masks.
Keyer
Basic image keyer with luma/sat/channel/greenscreen/etc options
Median Filter Image
Applies a median filter to remove high frequency information from images, useful for frequency separation workflows
Normal Map (Simple)
Simple high-frequency normal map from Scharr operator
Relight (Simple)
Basic dot product (Lambertian) relighting from a normal map
Remap Range
Fits the color range of an image to a new blackpoint and whitepoint (clamped)
Restore Detail
Transfers details from one image to another using frequency separation. 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)
Shuffle Channels
Move channels around at will.
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
JitterImage, UnJitterImage, BatchAverageUnJittered
For supersampling/antialiasing workflows.
Extract N Frames, Merge Frames By Index
For processing a smaller number of frames evenly distributed across a larger batch/video, then merging them back into the full batch
</details> <details><summary>Mask</summary>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.
Mask Clean
Clean up holes and near-solid areas in a matte.
Pack Video Mask
Compresses the frames of a video mask to match video VAE latent frames, to work around comfyui's naive temporal resizing of masks.
</details> <details><summary>Conditioning</summary>Conditioning Subtract
Takes the difference of two text conditions, can have interesting effects that are different from negative prompts.
Inpaint Condition Encode/Apply
Separates the VAE encode from the conditioning so you don't have to re-encode latents every time you change a prompt.
IP2P Conditioning Advanced
Separates the VAE encode from the conditioning so you don't have to re-encode latents every time you change a prompt.
</details> <details><summary>Sampling</summary>Custom Noise
Use any latent as the noise for SamplerCustomAdvanced.
</details> <details><summary>Utils</summary>Latent Stats
Get/print some stats about the latents (dimensions, and per-channel mean, std dev, min, and max)
Model Test
Debugging node for examining model structure
Print Sigmas
Prints the noise schedule sigma values to see what a scheduler is doing
Visualize Latents
Shows the latent channels as a grid image
</details>