Restormer Restoration
Ten restoration tasks, one efficient transformer
- image
- enhanced_image
Restormer showed up a couple of years after SwinIR with a specific goal: get transformer-quality restoration without transformer-scale compute, so it could actually run on high-resolution images. This node exposes it as a ten-way restoration tool - super-resolution, three denoising strengths, real-world denoising, motion and defocus deblurring, indoor/outdoor derain, and dehaze - plus a detail-boost pass layered on top. It's the pack's middle ground: heavier and more capable than SwinIR, much lighter than the full diffusion pipeline in DiffBIR.
How it works
Where SwinIR's transformer computes attention over spatial windows, Restormer's efficiency trick is different: it computes attention across channels instead of across pixel positions, plus a gated feed-forward design, which keeps compute roughly linear with image size instead of blowing up quadratically the way naive attention would. That's what lets it run on genuinely large images without needing aggressive tiling just to fit in memory. This node adds one more step past raw Restormer output: an optional unsharp-style detail-boost pass, computed as a Gaussian-based high-frequency layer added back on top of the restoration - the same underlying idea as this pack's SmartSharpeningNode, but built into the restoration step so you don't need a second node for it.
The inputs and outputs that matter
image- required.task- ten choices:real_sr_x4,denoise_sigma15/25/50,real_denoise,motion_deblur,defocus_deblur,derain_indoor/outdoor,dehaze. Match this to what's actually wrong with your image - a defocused shot wantsdefocus_deblur, notmotion_deblur, and they're not interchangeable.sharpness_profile- presets balancing restoration against the detail-boost pass:balanced(default),detail_boost,texture_preserve,denoise_priority,superres_edges, orcustomfor manual control via the fields below.processing_strength(optional, 0–1, default 0.85) - blend between the original and Restormer's output. Below 1.0 if you want a gentler pass.detail_boost(optional, 0–0.6, default 0.12) anddetail_radius(optional, 0.3–2.5, default 1.3) - the strength and Gaussian radius of the post-restoration sharpening layer.tile_size(optional, default 512) andtile_overlap(optional, default 64) - the usual tiling controls for running on high-resolution images without exceeding VRAM.device_preference-auto/cpu/cuda.- Output:
enhanced_image.
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. Torch is the optional-extra dependency this node actually needs; the pack's core requirements (numpy, opencv-python, scikit-image, scipy, PyWavelets) gate the initial import. Restormer's task-specific checkpoints auto-download the first time you use each one - with ten tasks available, expect a fresh download the first time you try a task you haven't used before, even if you've already used others.
Common issues & troubleshooting
Wrong task for the actual problem. This node can't tell a motion-blurred photo from a defocused one - that's on you to diagnose. Camera shake during exposure is motion_deblur; an out-of-focus lens is defocus_deblur. Picking the wrong one gives you a restoration model actively working against the artifact you actually have.
Denoise result too soft or barely changed. Same idea as SwinIR's noise levels - denoise_sigma15/25/50 need to roughly match your actual noise level. Too low a sigma leaves noise behind; too high smooths away real detail. If you're not sure, real_denoise is trained on more realistic (non-synthetic) noise and is often the safer default for actual photos.
Output looks over-sharpened with visible halos. That's the detail-boost pass, not the base restoration. Drop detail_boost toward 0, or switch sharpness_profile to texture_preserve or denoise_priority instead of detail_boost/superres_edges.
Slow or OOM on high-resolution images. Reduce tile_size before reducing input resolution - Restormer's channel-attention design is more memory-friendly than full spatial attention, but it still needs tiling headroom on very large images. Keep tile_overlap reasonable (the default 64) so tile seams don't become visible.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| task | COMBO | real_sr_x4 | Select pre-trained Restormer model |
| sharpness_profile | COMBO | balanced | Preset balance between restoration and detail boost |
| processing_strengthopt | FLOAT | 0.850–1 | Blend ratio between original and Restormer output |
| detail_boostopt | FLOAT | 0.120–0.6 | Amount of high-frequency enhancement after restoration |
| detail_radiusopt | FLOAT | 1.30.3–2.5 | Gaussian radius when computing detail layer |
| tile_sizeopt | INT | 512128–1024 | Tile size for high-resolution inference (set 0 for auto) |
| tile_overlapopt | INT | 6416–256 | Overlap between tiles to avoid seams |
| device_preferenceopt | COMBO | auto | Device preference for Restormer |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| enhanced_image | IMAGE | — |