Nodes/TA-ComfyUI-Nodes-Pack/πŸŒ€ TA Fast Laplacian Sharpen
ComfyUI Node

πŸŒ€ TA Fast Laplacian Sharpen

A sharpen node that leaves your alpha channel alone

By tmode-1960Β·Created 12 months agoΒ·Updated 7 days agoΒ· 7
πŸŒ€ TA Fast Laplacian Sharpen
  • images
  • IMAGE
β—„strength0.50β–Ί
β—„use_gpufalseβ–Ί

Every upscale pass in ComfyUI resamples your image, and resampling eats fine detail. So the last thing in a lot of graphs is a sharpen node. TAFastLaplacianSharpen does roughly one thing: adds 1-pixel-scale micro-contrast to the RGB channels and refuses to touch anything else.

The interesting part is that last clause. ComfyUI's post-processing layer plays fast and loose with alpha - as the KB's background-removal notes put it, "some nodes silently drop the alpha channel." This one splits alpha off, sharpens only RGB, and reattaches it untouched. On the Qwen-Image layered/RGBA path, that's the difference between a working graph and a flattened mess.

What it actually does

Two details here, both from the source rather than the README. The kernel is a fixed 3Γ—3 Laplacian cross - [[0,-1,0],[-1,4,-1],[0,-1,0]] - and the output is rgb + strength * laplacian(rgb), clamped to 0–1. A Laplacian is a second derivative, so it responds to edges, not brightness. That makes it a cousin of unsharp masking rather than the same thing: an unsharp mask blurs a copy, subtracts it and adds the difference back, which is why it gives you a radius knob. This node has no radius. It's permanently tuned to one pixel, which is genuinely useful right after an upscale or a VAE decode - that's where the 1-pixel detail lives - and wrong if you wanted to sharpen something broad and soft.

Second: the alpha handling is real, not marketing. With 4-channel input the code slices RGB off, processes only that, then concatenates alpha back on - gradients in your transparency survive intact.

Default is a NumPy CPU pass - no conv2d, works on a laptop with no CUDA. Tick use_gpu and the same kernel runs through F.conv2d with groups=3.

The inputs that matter

Only three, and you'll set one of them.

  • images - the IMAGE batch, straight from your upscaler, VAE Decode or a composite node. Hard requirement: the channel count must be 3 or 4, or you get a ValueError (in German - "erwartet RGB oder RGBA" - so don't panic). Greyscale inputs are rejected.
  • strength - default 0.5, range 0.0–2.0, step 0.01. This is your only taste knob. 0.0 returns the input essentially unchanged; past about 0.6 you're into halo territory.
  • use_gpu - default off. Flip it on if you're sharpening big batches and the CPU round-trip shows up in your timing.

Output is a single IMAGE, which goes wherever the original went: Preview Image, Save Image, or a grain/vignette node further down.

Installing it

ComfyUI Manager β†’ search TA ComfyUI Nodes Pack β†’ Install β†’ restart. Or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/tmode-1960/TA-ComfyUI-Nodes-Pack

Two things about that clone line. The README's manual-install section still prints the author's older thomoart/ URL - the repo now lives under tmode-1960, which the registry metadata, packaging file and git remote all agree on, so use the URL above. And there is nothing to pip install: the node imports only NumPy, torch and ComfyUI's model management, and the pack's pyproject.toml has an empty dependency list. The heavy stuff in the README (LM Studio, Ollama, SeedVR2's 14 GB loaders) belongs to other nodes in the pack.

Where people get burned

The node isn't in your menu at all. It landed in pack version 2.2.1 (node v1.0, dated 2026-10-01). If your install predates that, Manager won't show it - update the pack first.

You updated the pack and your workflow broke. Unrelated to this node, but it'll bite you while you're here: v2.x of the pack is not compatible with 1.x, since node names, inputs and outputs all changed. This node is new in 2.2.1 and so unaffected - but pin your environment before a pack update anyway.

White rims around high-contrast edges. Not a bug: a second derivative overshoots on purpose, and the result is clipped to 0–1, so heavy strength clips speculars and draws halos on bright edges. Back off to 0.2–0.4 and solve "the image looks flat" with gamma or a contrast curve instead of more sharpening.

You expected it to make the image look more like a photo. It won't - micro-contrast and realism are different problems. The node this one is derived from (VRGameDevGirl's Fast Laplacian Sharpen) gets recommended in r/comfyui realism threads next to a film-grain node, and grain does most of the heavy lifting there; sharpening is the crispness half, grain is the "a camera was there" half. Run it before your grain pass, not after.

Order matters. Sharpen after the last resampling step - run it before an upscale and the resampler wipes exactly the 1-pixel detail you just paid for. And strength = 0.0 is a legitimate setting: it leaves the node wired in as an A/B toggle while you dial the rest of the graph.

CategoryTA Nodes/Enhancement

Inputs (3)

NameTypeDefaultDescription
imagesIMAGEβ€”
strengthFLOAT0.500–2β€”
use_gpuBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”