ComfyUI Node

ReSharpen

It's not a sharpening filter — it's a detail dial that lives inside the sampler

By Haoming02·Created 3 years ago·Updated 9 months ago· 56
ReSharpen
  • latent
  • LATENT
details0.0

First, unlearn the name. ReSharpen doesn't run after the image exists and slap a high-pass filter on it. It changes how much detail the model carves out while it's sampling - the README is blunt about this: "not just a postprocessing filter." You wire it between Empty Latent and KSampler, drag one slider, and the generation itself comes out with more (or less) fine texture baked in. It's a port of Haoming02's A1111 extension from late 2023, and if the author name rings a bell, it should - same person who keeps Forge Classic and Forge Neo alive.

How it works

The trick is that diffusion is a denoising walk: at each step the sampler moves the latent a little closer to a clean image, and that step-to-step movement is where detail actually gets written. ReSharpen wraps ComfyUI's latent_preview callback, so at every step it gets a look at the current latent x. It compares it to the latent from the previous step, computes the difference (delta), and adds a scaled chunk of that difference back into x. Amplify the per-step movement and you get sharper edges and more texture; dampen it and the image comes out smoother, almost airbrushed.

The "details" slider just scales that delta - internally details / -10, so the full −2…+2 range maps to a subtle ±20% nudge on step-to-step change. It's a small, physical effect, not a firehose. On a model that's already detailed, small positives go to "noisy" fast; keep it around +0.3 to +0.5 and you're in texture territory instead of static. Negative values are genuinely handy for models that look over-crisped or plasticky.

The inputs that matter

Only two, and you'll touch one of them:

  • latent (LATENT) - from Empty Latent (or a VAE encode, if you're doing img2img-style work). It passes through untouched; the node only reads it to know the sampler is coming.
  • details (FLOAT, default 0.0, min -2, max 2, step 0.1) - the whole point. Positive = more detail/noise, negative = blurrier/softer. Zero is a no-op.

One LATENT output goes straight into your KSampler's latent input. That's the whole graph - no model files, no extra deps, no models to download.

Installing it

ComfyUI Manager → search ComfyUI ReSharpen → install → restart, or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/Haoming02/comfyui-resharpen

Then restart ComfyUI. pyproject.toml lists zero dependencies - pure Python, torch, and some internal ComfyUI surgery. Nothing to fetch, nothing to break your environment.

Where people get burned

Ancestral samplers don't work. Euler a, DPM++ SDE, anything that injects fresh random noise each step. The step-to-step delta is then dominated by injected noise instead of structure, so the node just amplifies static (or misbehaves). Converging samplers - plain Euler, DPM++ 2M, DDIM - are what it's built for.

The effect is global. ReSharpen sets a module-wide strength that every KSampler in that run picks up. If you're doing a hires fix pass and don't want the detail nudge applied there, drop a second ReSharpen node (details 0.0) before that KSampler to zero it out.

It monkeypatches ComfyUI internals, which is exactly the kind of thing an update can silently break. The 2025 community thread on this exact node starts with "after the latest ComfyUI updates, it stopped working" and someone forked it. If the slider suddenly does nothing after a ComfyUI upgrade, update the node (or reinstall) before you start debugging your workflow.

Worth it? If you keep fighting models that come out soft or plastic, a +0.4 here beats stacking more steps for the same problem. Just don't treat it as a detail-enhancer that survives a second sampling pass - that's where the "global" gotcha bites.

Categorysampling

Inputs (2)

NameTypeDefaultDescription
latentLATENT
detailsFLOAT0.0-2–2

Outputs (1)

NameTypeDescription
LATENTLATENT