Nodes/Eric_Image_Processing_Nodes/DeepInv Denoiser (Service)
ComfyUI Node

DeepInv Denoiser (Service)

A menu of ten denoisers, served by a service you have to start yourself

By EricRollei·Created 9 months ago·Updated 8 months ago· 9
DeepInv Denoiser (Service)
  • image
  • image
  • info
modelDRUNet – general purpose
sigma0.08
prefer_gputrue
service_urlhttp://127.0.0.1:6112

This is the one node in the pack that behaves differently from every other node here, and it's easy to get burned by it if you don't know that going in: it's a client, not a standalone processor. Everything else in Eric's pack runs inference directly inside the ComfyUI process. This node instead talks to a separate FastAPI service - external_tools.deepinv_service.service - that you have to launch yourself, on its own port, before this node can do anything. If that service isn't running, the node has nothing to call.

Why it's built this way

The actual denoising here is powered by DeepInv, a real, independent PyTorch library for solving imaging inverse problems - denoising, deblurring, and related restoration tasks - with a wide menu of pretrained models. Rather than vendor DeepInv's full model zoo directly into the ComfyUI node (which would mean loading and unloading heavy models inline with every other node in your graph), this pack runs it as its own service process that stays warm and can be reused across runs, or even pointed at a different machine entirely via service_url. That's a genuinely reasonable design for a library with this many model variants - it just means there's a setup step this node can't do for you.

The inputs and outputs that matter

  • image - required.
  • model - a menu of ten DeepInv-backed denoisers: DRUNet (general purpose - the reasonable default), DnCNN (light cleanup) and a Lipschitz-constrained DnCNN variant, two DiffUNet diffusion-based denoisers (one trained on FFHQ faces, one on ImageNet), RAM (a "foundation" denoiser meant to generalize broadly), SCUNet (real-image denoising), and SwinIR at three fixed noise levels (15/25/50).
  • sigma (required, 0–0.5, default 0.08) - the assumed noise level. Several of these models are sigma-aware, meaning they need to be told roughly how noisy the image is rather than figuring it out blind - this is the parameter to actually tune per image.
  • prefer_gpu (required, default true) - whether the service should run inference on GPU.
  • service_url (optional, default http://127.0.0.1:6112) - where the DeepInv service is listening. Change this if you're running the service on a different machine or a non-default port.
  • Outputs: image and info - the string field telling you what actually ran, worth checking if you're not sure the request reached the service at all.

How to install it

Search Eric_Image_Processing_Nodes in ComfyUI Manager, or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Eric_Image_Processing_Nodes
cd Eric_Image_Processing_Nodes
pip install -r requirements.txt

Restart ComfyUI. That gets the node registered - it does not start the service it depends on. Per the repo's own setup guide (Docs/DEEPINV_SERVICE_GUIDE.md), you launch the DeepInv service separately with:

python -m external_tools.deepinv_service.service

run from inside the node pack's directory with your ComfyUI Python environment active, before this node will produce anything. It listens on http://127.0.0.1:6112 by default, matching the node's service_url default. If you're processing on a remote box or want the service to persist independently of your ComfyUI process (recommended if you're reusing it across multiple runs), start it separately and point service_url at wherever it's actually listening.

Common issues & troubleshooting

Node fails, times out, or just does nothing. This is almost always the service not running. Check that you actually launched python -m external_tools.deepinv_service.service in a separate process before running your workflow - installing the node pack alone doesn't start it.

Worked once, now fails after a restart. The service doesn't auto-start with ComfyUI - if you restarted your machine or closed the terminal it was running in, you need to launch it again. Consider running it as a background service if you use this node regularly.

service_url connection refused. Either the service isn't running, it's listening on a different port than the node expects, or (if you're pointing at a remote machine) there's a firewall or network issue between ComfyUI and the service host.

Not sure which model to pick. Start with DRUNet - it's the general-purpose option and a reasonable default for most photos. Reach for SwinIR at a specific noise level (15/25/50) if you have a rough sense of how noisy your source is and want a match rather than a generalist; try RAM if DRUNet's result looks wrong for your content type, since it's the one built to generalize more broadly.

Result quality doesn't match sigma. This parameter is an assumption the model uses, not something the node measures for you - if your guess is off, sigma-aware models like DRUNet and SwinIR will under- or over-denoise accordingly. Adjust it based on how the output actually looks, not just a single guess.

CategoryEric's Image Processing/DeepInv

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
modelCOMBODRUNet – general purpose10 options: DRUNet – general purpose, DnCNN – light clean up, DnCNN – Lipschitz variant, DiffUNet – FFHQ diffusion, DiffUNet – ImageNet large, RAM – foundation denoiser, +4
sigmaFLOAT0.080–0.5
prefer_gpuBOOLEANtrue
service_urloptSTRINGhttp://127.0.0.1:6112

Outputs (2)

NameTypeDescription
imageIMAGE
infoSTRING