SCUNet Batch Processing
Real-world denoising, done a batch at a time
- images
- restored_images
SCUNet comes from the same research lineage as SwinIR (same authors, roughly the same era), but it's built specifically for real-world denoising rather than being a multi-task generalist. Where SwinIR asks you to pick a task, SCUNet only does one thing - but it does it against a training-time noise model designed to look like actual camera sensor noise, not textbook Gaussian noise. This node wraps it as a batch processor, which is the detail that actually matters: it's the one built to chew through a folder of images with the same settings rather than fiddle with one at a time.
How it works
SCUNet stands for Swin-Conv-UNet - a hybrid architecture that mixes Swin Transformer blocks with regular convolutions inside a UNet, aiming to get the transformer's long-range context and the convolution's local precision in one network. The important part for choosing settings is the training data: SCUNet was trained on a "practical" noise degradation model meant to mimic what actually comes out of real cameras - JPEG compression, sensor noise, mild blur combined - rather than pure synthetic Gaussian noise. That's why it tends to hold up better on real photos than denoisers trained only on clean-plus-Gaussian-noise pairs.
The inputs and outputs that matter
images- required, and note it's plural: this node is built around batches, not a single image.model_name- two checkpoints:scunet_color_real_ganandscunet_color_real_psnr. This is the classic GAN-vs-PSNR restoration trade-off - the GAN variant produces sharper, more textured output but can invent detail that wasn't there; the PSNR variant is smoother and more faithful to the actual input, at the cost of looking softer. Pick GAN when you want the result to look good; pick PSNR when you need it to be accurate.batch_size(optional, default 4, 1–16) - how many images process simultaneously. Higher is faster overall but needs more VRAM per step.tile_size(optional, default 256, 64–512) - the usual memory/quality tiling trade-off, applied per image within the batch.- Output:
restored_images.
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. Core requirements (numpy, opencv-python, scikit-image, scipy, PyWavelets) gate the import; torch is the optional extra this node actually needs at runtime. Both SCUNet checkpoints auto-download the first time you use them - the GAN and PSNR variants are separate downloads, so switching model_name the first time costs you another fetch.
Common issues & troubleshooting
Output looks smeared or waxy - like detail got wiped, not denoised. You're probably on scunet_color_real_psnr and expecting GAN-level texture. Switch to scunet_color_real_gan if sharpness matters more than fidelity to you.
GAN variant invents texture that wasn't in the source. The inverse problem - this is a known GAN-restoration trade-off, not a bug specific to this node. Switch to scunet_color_real_psnr when you need the output to stay honest to the input, e.g. anything where accuracy matters more than looking polished.
Running out of memory on a large batch. Drop batch_size before you drop tile_size - batch size is the bigger memory lever here since it multiplies everything else. If you're still tight, bring tile_size down too.
Batch is slow even at small batch_size. SCUNet's hybrid transformer-conv architecture is heavier than a pure CNN denoiser; this isn't a lightweight filter. If speed matters more than the real-world noise handling, a plain ESRGAN-style node in this pack will be faster for source images that aren't heavily degraded.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| model_name | COMBO | scunet_color_real_gan | SCUNet model for batch processing |
| batch_sizeopt | INT | 41–16 | Number of images to process simultaneously |
| tile_sizeopt | INT | 25664–512 | Processing tile size for memory management |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| restored_images | IMAGE | — |