Nodes/Eric_Image_Processing_Nodes/SCUNet Image Restoration
ComfyUI Node

SCUNet Image Restoration

Real transformer denoising, but you have to fetch the weights yourself

By EricRollei·Created 9 months ago·Updated 8 months ago· 9
SCUNet Image Restoration
  • image
  • restored_image
model_namescunet_color_15
device_preferenceauto
tile_size256
overlap16
enable_tilingtrue

The pack's own documentation says SCUNet's weights auto-download. They don't - not in the current code, anyway. This node checks its local models/ folder for a matching .pth file, and if it doesn't find one, it prints a warning to the console and quietly proceeds with an untrained, randomly-initialized network. No crash, no obvious error in the node's own output - just a restoration pass that isn't actually restoring anything, running silently next to nodes that work fine. Know this going in, because it's the single biggest gap between what this node promises and what it does out of the box.

What SCUNet actually is, when it has real weights

SCUNet - Swin-Conv-UNet - comes out of a real 2022 ECCV paper from Kai Zhang's group (the same lineage behind DnCNN and, loosely, real-world super-resolution work like BSRGAN), and its whole pitch is blind denoising: instead of being tuned to one noise level, it's trained on synthesized real-world degradation and generalizes across noise types it wasn't explicitly told about. It combines Swin Transformer blocks (good at capturing long-range structure) with convolutional blocks (good at local detail) inside a UNet's encoder-decoder shape. That architecture is genuinely well-suited to messy, mixed-degradation restoration - old scans, compressed JPEGs, mild motion blur, all at once - which is exactly the case where a fixed-sigma denoiser like plain wavelet filtering falls short.

Inputs and outputs that matter

  • model_name - a dropdown populated from whatever .pth files it finds locally, falling back to a standard list of eight: scunet_color_15/25/50 and scunet_gray_15/25/50 (Gaussian-noise-level variants), plus scunet_color_real_psnr and scunet_color_real_gan (trained for real-world degradation, PSNR-optimized versus perceptually-tuned respectively). The two real_* variants are the ones the pack's docs specifically point to.
  • tile_size and overlap - tile-based processing for memory safety on large images; 256/16 is the sane default, drop tile_size toward 64–128 if you're hitting out-of-memory errors.
  • device_preference - auto, cpu, or cuda.

Output: restored_image only - no info string on this one, so you won't get an in-graph confirmation of whether real weights loaded; check the ComfyUI console log for that.

Installing it

Through ComfyUI Manager, search Eric's Image Processing Nodes. By hand:

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. Then get the weights yourself: download scunet_color_real_psnr.pth and/or scunet_color_real_gan.pth from the HuggingFace mirror or the original cszn/SCUNet repository, and drop them straight into Eric_Image_Processing_Nodes/models/. Restart ComfyUI once more so the model_name dropdown picks up the new file. There's no in-app download button - this is a manual step every time you want a model variant this pack hasn't shipped a working fetcher for.

Where people get burned

The core trap is exactly the silent-fallback behavior above: results that look barely-changed or oddly soft, with nothing in the UI telling you why. If SCUNet output looks suspiciously close to the input, check your console log on the run for "Warning: Model ... not found" - that's your answer, and no amount of retrying or adjusting tile_size will fix it, because the fix is a file, not a setting.

Second, once real weights are loaded: for genuinely mixed, heavy degradation (old photos with scratches, fading, and noise all at once), the 2026 community's go-to has moved to newer diffusion-based restorers rather than 2022-era transformer baselines like SCUNet - this node still earns its place for controlled denoising at a known noise level or as a comparison baseline, just don't expect it to match a modern generative restorer on a badly damaged source.

CategoryEric's Image Processing

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
model_nameCOMBOscunet_color_15SCUNet model selection: • Color models: For color image denoising • Gray models: For grayscale image denoising • Real models: For real-world degradation (PSNR/GAN trained) • Numbers (15/25/50): Gaussian noise levels
device_preferenceoptCOMBOautoProcessing device: • Auto: Automatic selection • CPU: Force CPU processing • CUDA: Force GPU processing
tile_sizeoptINT25664–1024Processing tile size: • 64-128: Safe for low memory • 256: Balanced (recommended) • 512+: Faster but needs more memory
overlapoptINT168–64Overlap between tiles to reduce seam artifacts
enable_tilingoptBOOLEANtrueEnable tile-based processing for memory safety

Outputs (1)

NameTypeDescription
restored_imageIMAGE