ꘇ top.filter
Seven quick effects in one node (watch the amount slider, though)
- image
- image
Some nodes are there to save you four nodes. top.filter is that one: a operation dropdown that switches between level, invert, monochrome, threshold, opacity, blur and edge, each with a single amount. It is not the pack's serious edge detector or its serious blur - top.edge and top.convolve are - it's the "I just want to see it monochrome / blurred / thresholded" node. Keep it in that role and it's handy; expect it to be the deep tool and you'll be disappointed.
How it works
The dropdown picks the operation and the lone amount reinterpret it. The author's tooltip says it plainly: "Level gain; blend for invert/monochrome; threshold or opacity 0..1; blur/edge radius in pixels." So:
- level - a straight gain multiply.
- invert, monochrome -
amountis a blend toward the inverted/greyscale version, so 0.5 is a half-and-half mix rather than an on/off switch. Nice for a partial desaturate. - threshold - bins to black or white using Rec.709 luminance.
- opacity - multiplies alpha by
amount, leaving RGB alone. Cheap fade. - blur - a nine-tap average (3×3), with
amountas the radius in pixels, sampled premultiplied so transparent edges don't smear dark. - edge - an eight-neighbour Laplacian, absolute-valued: a thin ringing outline rather than a gradient magnitude.
Then a wrinkle worth knowing before you file a bug: the slider runs 0..16, but for invert, monochrome, threshold and opacity the value is clamped to 1 in the implementation. Sliding past 1 does nothing on those four operations. It's harmless, just unintuitive.
The inputs that matter
image, operation, amount. That's it - the whole node is three fields and one output. Output is image, so it drops into any chain; the blur is the most useful member of the set because it feeds top.feedback and top.displace nicely without adding a convolution's worth of mental overhead.
The KB's framing applies here: blur has flavours and they do different jobs. A nine-tap average is a soft, low-quality blur - great for a smear pass, bad for anything you'll look at closely. If you need real quality, an edge-preserving bilateral, or a proper unsharp-mask workflow, reach for a dedicated pack; the KB notes the broad historical pack is dormant and the clean small ones (Kornia-backed, spacepxl's Image-Filters) cover the jobs this node half-covers.
Install
ComfyUI Manager → search ꘇ Genereti → install, or:
git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
Restart Comfy, refresh the page. The requirements file is a single frontend pin; nothing downloads, and this node needs no models. It appears as ꘇ top.filter in Genereti / TOP. The name starts with a glyph that sorts to the bottom of the node list, so search genereti or top.filter.
Traps
Blur/edge radius is in pixels, not normalized. On a 512px image a radius of 16 is a lot; on a 4K render it's barely visible. Same slider, very different meaning.
The 0..16 clamp lie, as above. Not a bug, but it'll confuse you for a minute.
Threshold is hard. No soft ramp, no dithering - you get two tones and a lot of jagged edges. If you want a soft matte, use top.level or top.mask on a luminance instead.
Live vs Queue. Live mode runs these on the browser's GPU (WebGPU required); Queue runs the PyTorch equivalents. Live intermediate textures are 8-bit and Queue keeps float, so results are close but not bit-identical.
Pack status: super-alpha, early classroom testing - back up workflows before you update.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| operation | COMBO | 7 options: level, invert, monochrome, threshold, opacity, blur, +1 | |
| amount | FLOAT | 1.000–16 | Level gain; blend for invert/monochrome; threshold or opacity 0..1; blur/edge radius in pixels. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |