Nodes/Eric_Image_Processing_Nodes/Professional Restoration Pipeline
ComfyUI Node

Professional Restoration Pipeline

Five restoration stages chained into one node

By EricRollei·Created 9 months ago·Updated 8 months ago· 9
Professional Restoration Pipeline
  • image
  • restored_image
  • pipeline_report
restoration_levelmoderate
target_scale2
enable_stagesall
ai_methodauto
preserve_detailstrue
color_enhancementtrue
quality_monitoringtrue
device_preferenceauto

This is the kitchen-sink node in Eric's Image Processing Nodes: preprocessing, AI-based primary restoration, frequency-domain detail recovery, perceptual color optimization, and a final polish pass, all chained in one place instead of five separate nodes wired by hand. If you've already been through this pack's individual restoration nodes and know roughly what a degraded image needs, this collapses that whole chain into one node with a handful of dials.

What the five stages actually do

The pipeline runs, in order: preprocessing (initial noise/artifact cleanup), AI restoration (the primary quality pass - SCUNet, SwinIR, Real-ESRGAN, Deep Image Prior, or Noise2Void, your choice or its own), frequency enhancement (detail recovery via frequency-domain sharpening), color optimization (perceptual color-space contrast work, the same technique behind the standalone Perceptual Color Enhancement node), and post-processing (final refinement). You can disable any stage individually via enable_stages rather than running the full chain every time.

Worth knowing before you pick ai_method: this stage inherits every caveat of whichever underlying node it's calling. If you pick scunet or swinir and haven't manually placed their pretrained .pth weights in the pack's models/ folder, that stage silently runs an untrained network rather than failing loudly - the pipeline has no way to know the weights are missing, it just gets a worse result from that stage and carries on. auto_denoise and noise2void sidestep that specific problem since they train on the fly with no weights required, at the cost of being much slower per image. real_esrgan needs its own model files too. auto tries to pick intelligently, but "intelligently" here means among whatever's actually available to it - it can't conjure missing weights.

Inputs and outputs that matter

  • restoration_level - conservative, moderate (default), aggressive, or maximum. Controls how strongly each stage is applied; maximum is the slowest and pushes hardest.
  • target_scale - final upscaling factor, 1 through 4. 1 means enhancement only, no resizing.
  • ai_method (optional, default auto) - force a specific engine for the AI restoration stage instead of letting the pipeline choose.
  • enable_stages (optional, default all) - a comma-separated list to skip stages you don't need, e.g. preprocessing,ai_restoration to leave color and frequency work to a separate node in your graph.

Outputs: restored_image and pipeline_report, a detailed per-stage log - genuinely worth reading once, since it tells you exactly which method ran at the AI restoration stage and how the image changed at each step.

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. Because this node can invoke almost any restoration method in the pack depending on ai_method, its actual dependency footprint is the union of everything it might call - SCUNet and SwinIR weights if you route to them, bm3d if a stage reaches for that. Read the individual node articles for BM3D, SCUNet, SwinIR, and NAFNet in this pack for what each needs.

Where people get burned

The recurring issue is judging the pipeline's output without checking pipeline_report first, then blaming the wrong stage. If the result looks soft or noisy despite restoration_level set to maximum, check the report for which ai_method actually ran - if it landed on scunet or swinir without weights present, that stage did essentially nothing useful and no amount of raising restoration_level will fix it, because the level controls strength, not weight availability.

The other thing worth internalizing: for genuinely degraded old photos, community consensus in 2026 has moved toward a Qwen-Edit-plus-SeedVR2 pairing rather than this pack's 2021-2022-era academic baselines (SCUNet, SwinIR) - those still earn their place for controlled, specific-noise-type cleanup or as a comparison baseline, but if "restore this badly damaged photo to look good" is the actual goal and you have access to newer restoration models elsewhere in your stack, this pipeline is not the state of the art for that job anymore. It's most useful when you want a single-node, reproducible, all-classical-or-controlled-AI pass rather than the best possible result.

CategoryEric's Image Processing

Inputs (9)

NameTypeDefaultDescription
imageIMAGE
restoration_levelCOMBOmoderateRestoration intensity: • conservative: Gentle enhancement • moderate: Balanced restoration • aggressive: Strong enhancement • maximum: Maximum quality (slower)
target_scaleCOMBO2Final upscaling factor
enable_stagesoptSTRINGallComma-separated stages to enable: 'preprocessing,ai_restoration,frequency,color,postprocessing' Or 'all' for complete pipeline
ai_methodoptCOMBOautoAI restoration method: • auto: Intelligent selection • auto_denoise: Self-supervised denoising • noise2void: Single image training • scunet: Realistic restoration • swinir: Transformer precision • real_esrgan: Natural photos
preserve_detailsoptBOOLEANtrueEnable detail preservation techniques
color_enhancementoptBOOLEANtrueEnable perceptual color optimization
quality_monitoringoptBOOLEANtrueMonitor quality at each stage
device_preferenceoptCOMBOautoProcessing device preference

Outputs (2)

NameTypeDescription
restored_imageIMAGE
pipeline_reportSTRING