RealRestorer Sampler
Point it at your worst photo and say what's wrong
- RR_Model
- image
- image
This is the node that actually fixes the photo. RealRestorer Sampler takes the model bundle from RealRestorer Model Loader, takes your degraded image, and does the whole restore - deblur, denoise, dehaze, un-compress, whatever you asked for. The Model Loader is the plumbing; this is the payoff.
The mental model that matters: this is instruction-following restoration, the same family as the GPT-4o-class editors but specialized for repair. RealRestorer is built on Step1X-Edit, and you tell it what's wrong in a sentence instead of tuning 14 sliders. That's both its superpower and its warning - it's generative, so it doesn't just sharpen pixels, it rebuilds them. On a genuinely wrecked source that's magic; on a clean image it will happily invent texture nobody asked for.
How it works
The pipeline is: VAE-encode your image into latents, run a Qwen2.5-VL pass that rewrites your instruction into a vivid "enhanced prompt" (and actually looks at the image while it does), then denoise a flow-matching Euler schedule with CFG guidance, and VAE-decode back. The Qwen step is what sets this apart from older restorers like SUPIR - the model isn't captioning, it's being told what you want changed, and the transformer gets your text plus a reference latent of the original.
One thing to internalize before you judge the output: it restores at your target resolution and then resizes back to the input's original dimensions. The output image is the same size as what you fed in. This is a restorer, not an upscaler. If you want SUPIR/SeedVR2-style resolution increase you run those after, or pair RealRestorer with a separate upscale step. That's the standard "more detail on a genuinely damaged source" workflow done as two passes.
The inputs that matter
- task_preset - the dropdown with 10 restoration jobs: General Restore, Deblur, Denoise, Dehaze, Low-light Enhancement, Remove Compression Artifacts, Remove Lens Flare, Remove Moire, Remove Rain, Remove Reflection, plus Custom. Each preset injects the paper's recommended prompt, so you don't have to write one. Start with General Restore ("Restore the details and keep the original composition") and only get specific when it's clearly one failure mode.
- instruction - only read when task_preset is Custom. Leave it empty and the node quietly falls back to the default restore prompt - a safe fallback, but then it wasn't custom.
- size_level - the processing resolution, default 1024. Your image is resized so its total pixel area is roughly 1024×1024, restored, then resized back. Bigger = more detail and more VRAM (about 34GB at 1024 in bf16). Don't chase 2048 unless you've got the card for it.
- steps (28 default) and guidance_scale (3.0 default) - the paper defaults are good starting points. The demo's own range is 12–40 steps and 1.0–6.0 guidance. Fewer steps = faster but flatter; higher guidance obeys the prompt harder and pushes saturation.
- seed - paper default 42. Leave it alone unless a result is unlucky.
- device_strategy - the one that decides whether you can run this at all.
autopicks for you: full_gpu over 40GB, offload_to_cpu over 26GB, sequential_offload below that. On a 24GB card (3090/4090/5090) let it pick sequential_offload - it pre-loads as many of the 57 transformer blocks as fit and streams the rest, which is the difference between running and OOMing.
Output is a single image - the restored frame, ready to wire into a Save Image or upscale chain.
Installing and using it
Install the pack (ComfyUI Manager → search "ComfyUI-RealRestorer", or git clone https://github.com/yfyang007/ComfyUI-RealRestorer into custom_nodes/), restart, and download the ~42GB model into ComfyUI/models/RealRestorer/ with huggingface-cli download RealRestorer/RealRestorer --local-dir .. No pip step - the pack deliberately ships no diffusers dependency, because the official repo's patched diffusers fork would break your ComfyUI install. Wire: Loader → Sampler → Save Image.
Troubleshooting
- CUDA out of memory - check the device_strategy.
full_gpuneeds ~34GB at 1024. On a 24GB card,sequential_offloadis your friend; on 26–48GB,offload_to_cpu.autohandles all this, so only override it if you know why. - Results look plastic or over-smoothed - you fed it a clean image. This tool wants genuinely degraded input; for an already-good source a plain ESRGAN-class pass is the right tool and this is the wrong one.
- The person doesn't look like the person - expected, and by design. Every generative restorer rewrites facial identity, RealRestorer included; keep recognizable faces out of the pass or accept a plausible face.
- Faster, rougher drafts - drop steps toward 12–16 and size_level to 768 for iteration, then do the final at paper settings.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| RR_Model | RR_MODEL | — | |
| image | IMAGE | — | |
| task_preset | COMBO | General Restore | Select a restoration task. Each preset uses the prompt recommended in the RealRestorer paper for that degradation type. Choose 'Custom' to write your own instruction below. |
| instruction | STRING | Custom restoration instruction. Only used when Task Preset is set to 'Custom'. For all other presets, the paper-recommended prompt is used automatically. | |
| seed | INT | 420–18446744073709550000 | Random seed. Paper default: 42. |
| steps | INT | 2812–100 | Number of denoising steps. Paper default: 28. The official demo allows 12-40. Lower = faster but less detail. |
| guidance_scale | FLOAT | 3.01–6 | CFG guidance scale. Paper default: 3.0. The official demo allows 1.0-6.0. Higher values follow the prompt more strongly. |
| size_level | INT | 1024256–4096 | Target resolution for processing. Paper default: 1024. The input image is resized so its total pixel area is roughly size_level x size_level (preserving aspect ratio), processed at that resolution, then resized back to original dimensions. Higher = better quality but more VRAM (~34GB at 1024). |
| device_strategy | COMBO | auto | How to manage GPU memory. - auto: Uses full_gpu if >40GB VRAM, offload_to_cpu if >26GB, otherwise sequential_offload. - full_gpu: All components stay on GPU. Fastest. ~34GB at size 1024. - offload_to_cpu: Components move to CPU when not in use. Slower but ~24GB peak (the transformer weight size). - sequential_offload: Pre-loads as many transformer blocks to GPU as VRAM allows, streams the rest from CPU. On a 24GB card most blocks stay on GPU with only ~12 streaming. Enables cards that can't fit the full transformer. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |