跳转到内容

图像高清修复,无损放大 N 倍

🐱

💡图像放大修复是 AI 绘画领域中必不可少的一部分,所有的技术需结合实际落地,才有价值与意义。 能应用在哪些场景?

旧照片重现清晰 利用 AI 技术进行图像修复,可以让模糊的旧照片重现清晰,保留珍贵的回忆。以前手机拍摄的图片分辨率较低,如果放到如今智能手机上观看,图片将会非常模糊,这时可以用 AI 技术进行高清修复图像。

人像高清修复,手机也能拍摄高清大片 不仅仅是修复风景图片上,也适用于人像的修复。不需要专业相机设备,用手机也可以拍摄出高清大片,让每一张人像照片都焕发新生,不论是因为曝光不当、失焦或其他问题导致的不清晰,运用最新的图片清晰修复技术,立刻提升照片质量至高清境界。

这不单单只是修复图片,可以用作于图像分辨率的无限扩大且不失真。下面马斯克原始图像分辨率为 234x180 像素,高清修复扩图后达到 1880x1440 像素,这且只进行了一次扩大就对原图像分辨率提升了 8 倍,差不多达到 2k 分辨率的质量。多进行几次采样放大后,完全可以实现 8k 超清放大。

实现技术拆解

整个图像修复放大的流程分为三部分:输入原始图像、修复图像、放大并重绘图像。下面将详细拆解每一部分的生成原理。

一、图像输入

第一部分添加 Load Image 节点加载图像,只需上传需要处理的图片即可。不建议上传大分辨率的图片,图片分辨率越大,处理的时间就越长。

二、图像高清修复

第二部分进行高清修复,把原本模糊的图片修复,并进行 2 倍放大。

Checkpoint 大模型使用 Iceclear/StableSR,这是一种新颖的方法来利用封装在预先训练的文本到图像扩散模型中的先验知识来实现盲超分辨率(SR)。具体来说,就是通过时间感知编码器,在不改变预先训练的合成模型的情况下实现有希望的恢复结果,从而保留生成先验并最小化训练成本。

并且需要搭配 Stable SR Upscaler 模型才能在最大程度上修复图像,推理图片每个噪点,以还原图像。

提示词部分应包含我们想要达到的目的内容,在此场景中如正向: (masterpiece), (best quality), (realistic),(very clear),反向:3d, cartoon, anime, sketches, (worst quality), (low quality) (杰作), (最高品质), (逼真的),(非常清晰);3D,卡通,动漫,素描,(最差质量),(低质量)

全程采取两次高清修复,这一次修复原始图像分辨率并且放大,已经很完美还原,但是分辨率并不够,继续进行下一步。

三、图像高清放大

这一步主要针对第一次放大修复后的图像,进行二次修复。这里用 realisticVision 底膜最合适,这个模型在重绘扩图放大等领域效果非常好。

使用提示词反推 node 对图像进行 画面提示词提取,搭配 tile ControlNet 提升画面细节感,然后需用合适的高清放大模型,对图像进行二次放大。

资源

Node: GitHub - rgthree/rgthree-comfy: Making ComfyUI more comfortable! Rg three: GitHub - ssitu/ComfyUI_UltimateSDUpscale: ComfyUI nodes for the Ultimate Stable Diffusion Upscale sc ComfyUI_Ultimate SD Upscale: GitHub - ssitu/ComfyUI_UltimateSDUpscale: ComfyUI nodes for the Ultimate Stable Diffusion Upscale sc StableSR: GitHub - Arthurzhangsheng/Comfyui-StableSR WD 14 tagger: https://github.com/pythongosssss/ComfyUI-WD14-Tagger StableSR-models models: https://huggingface.co/Iceclear/StableSR/tree/main

放大模块底膜 model:

https://civitai.com/models/4201/realistic-vision-v60-b1

Workflow

无法下载可以复制下面的代码保存为。json 格式

{
  "last_node_id": 125,
  "last_link_id": 215,
  "nodes": [
    {
      "id": 74,
      "type": "FreeU_V2",
      "pos": [
        -184,
        195
      ],
      "size": {
        "0": 315,
        "1": 130
      },
      "flags": {},
      "order": 12,
      "mode": 0,
      "inputs": [
        {
          "name": "model",
          "type": "MODEL",
          "link": 133,
          "label": "model"
        }
      ],
      "outputs": [
        {
          "name": "MODEL",
          "type": "MODEL",
          "links": [
            134
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "MODEL"
        }
      ],
      "properties": {
        "Node name for S&R": "FreeU_V2"
      },
      "widgets_values": [
        1.3,
        1.4,
        0.9,
        0.2
      ]
    },
    {
      "id": 68,
      "type": "GetImageSize",
      "pos": [
        955,
        -114
      ],
      "size": {
        "0": 210,
        "1": 46
      },
      "flags": {},
      "order": 15,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "type": "IMAGE",
          "link": 120,
          "label": "image"
        }
      ],
      "outputs": [
        {
          "name": "width",
          "type": "INT",
          "links": [
            121
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "width"
        },
        {
          "name": "height",
          "type": "INT",
          "links": [
            122
          ],
          "shape": 3,
          "slot_index": 1,
          "label": "height"
        }
      ],
      "properties": {
        "Node name for S&R": "GetImageSize"
      }
    },
    {
      "id": 29,
      "type": "ImageScaleBy",
      "pos": [
        -187,
        384
      ],
      "size": {
        "0": 315,
        "1": 82
      },
      "flags": {},
      "order": 6,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "type": "IMAGE",
          "link": 194,
          "label": "image"
        }
      ],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            87,
            123
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "IMAGE"
        }
      ],
      "properties": {
        "Node name for S&R": "ImageScaleBy"
      },
      "widgets_values": [
        "lanczos",
        2
      ]
    },
    {
      "id": 95,
      "type": "SaveImage",
      "pos": [
        -411,
        -863
      ],
      "size": {
        "0": 537.0595703125,
        "1": 385.6903076171875
      },
      "flags": {},
      "order": 18,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 168,
          "label": "images"
        }
      ],
      "properties": {},
      "widgets_values": [
        "ComfyUI"
      ]
    },
    {
      "id": 67,
      "type": "ImageScale",
      "pos": [
        933,
        13
      ],
      "size": {
        "0": 315,
        "1": 130
      },
      "flags": {},
      "order": 16,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "type": "IMAGE",
          "link": 123,
          "label": "image"
        },
        {
          "name": "width",
          "type": "INT",
          "link": 121,
          "widget": {
            "name": "width"
          },
          "label": "width"
        },
        {
          "name": "height",
          "type": "INT",
          "link": 122,
          "widget": {
            "name": "height"
          },
          "label": "height"
        }
      ],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            124
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "IMAGE"
        }
      ],
      "properties": {
        "Node name for S&R": "ImageScale"
      },
      "widgets_values": [
        "nearest-exact",
        512,
        512,
        "disabled"
      ]
    },
    {
      "id": 81,
      "type": "ControlNetApply",
      "pos": [
        2161,
        -5
      ],
      "size": {
        "0": 317.4000244140625,
        "1": 98
      },
      "flags": {},
      "order": 21,
      "mode": 0,
      "inputs": [
        {
          "name": "conditioning",
          "type": "CONDITIONING",
          "link": 145,
          "label": "conditioning"
        },
        {
          "name": "control_net",
          "type": "CONTROL_NET",
          "link": 146,
          "label": "control_net"
        },
        {
          "name": "image",
          "type": "IMAGE",
          "link": 161,
          "label": "image"
        }
      ],
      "outputs": [
        {
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "links": [
            137
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "CONDITIONING"
        }
      ],
      "properties": {
        "Node name for S&R": "ControlNetApply"
      },
      "widgets_values": [
        1
      ]
    },
    {
      "id": 31,
      "type": "ApplyStableSRUpscaler",
      "pos": [
        -197,
        39
      ],
      "size": {
        "0": 315,
        "1": 102
      },
      "flags": {
        "collapsed": false
      },
      "order": 7,
      "mode": 0,
      "inputs": [
        {
          "name": "model",
          "type": "MODEL",
          "link": 63,
          "label": "model"
        },
        {
          "name": "latent_image",
          "type": "LATENT",
          "link": null,
          "label": "latent_image"
        }
      ],
      "outputs": [
        {
          "name": "MODEL",
          "type": "MODEL",
          "links": [
            133
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "MODEL"
        }
      ],
      "properties": {
        "Node name for S&R": "ApplyStableSRUpscaler"
      },
      "widgets_values": [
        "webui_768v_139.ckpt"
      ]
    },
    {
      "id": 39,
      "type": "UltimateSDUpscaleNoUpscale",
      "pos": [
        598,
        -105
      ],
      "size": {
        "0": 308.0407409667969,
        "1": 570
      },
      "flags": {},
      "order": 14,
      "mode": 0,
      "inputs": [
        {
          "name": "upscaled_image",
          "type": "IMAGE",
          "link": 87,
          "label": "upscaled_image"
        },
        {
          "name": "model",
          "type": "MODEL",
          "link": 134,
          "label": "model"
        },
        {
          "name": "positive",
          "type": "CONDITIONING",
          "link": 93,
          "label": "positive"
        },
        {
          "name": "negative",
          "type": "CONDITIONING",
          "link": 92,
          "label": "negative"
        },
        {
          "name": "vae",
          "type": "VAE",
          "link": 94,
          "label": "vae"
        }
      ],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            88,
            120
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "IMAGE"
        }
      ],
      "properties": {
        "Node name for S&R": "UltimateSDUpscaleNoUpscale"
      },
      "widgets_values": [
        0,
        "fixed",
        20,
        7,
        "euler_ancestral",
        "karras",
        1,
        "Linear",
        704,
        704,
        32,
        32,
        "None",
        1,
        64,
        8,
        16,
        "enable",
        false
      ]
    },
    {
      "id": 14,
      "type": "CLIPTextEncode",
      "pos": [
        156,
        -109
      ],
      "size": {
        "0": 400,
        "1": 200
      },
      "flags": {},
      "order": 8,
      "mode": 0,
      "inputs": [
        {
          "name": "clip",
          "type": "CLIP",
          "link": 19,
          "label": "clip"
        }
      ],
      "outputs": [
        {
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "links": [
            93
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "CONDITIONING"
        }
      ],
      "properties": {
        "Node name for S&R": "CLIPTextEncode"
      },
      "widgets_values": [
        "(masterpiece), (best quality), (realistic),(very clear)"
      ]
    },
    {
      "id": 34,
      "type": "StableSRColorFix",
      "pos": [
        939,
        205
      ],
      "size": {
        "0": 315,
        "1": 78
      },
      "flags": {},
      "order": 17,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "type": "IMAGE",
          "link": 88,
          "label": "image"
        },
        {
          "name": "color_map_image",
          "type": "IMAGE",
          "link": 124,
          "label": "color_map_image"
        }
      ],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            160,
            161,
            168,
            208
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "IMAGE"
        }
      ],
      "properties": {
        "Node name for S&R": "StableSRColorFix"
      },
      "widgets_values": [
        "Wavelet"
      ]
    },
    {
      "id": 12,
      "type": "LoadImage",
      "pos": [
        -863,
        -97
      ],
      "size": {
        "0": 573.42333984375,
        "1": 445.68377685546875
      },
      "flags": {},
      "order": 0,
      "mode": 0,
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            163,
            194
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "IMAGE"
        },
        {
          "name": "MASK",
          "type": "MASK",
          "links": null,
          "shape": 3,
          "label": "MASK"
        }
      ],
      "properties": {
        "Node name for S&R": "LoadImage"
      },
      "widgets_values": [
        "37121709799477_.pic.jpg",
        "image"
      ],
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 4,
      "type": "CheckpointLoaderSimple",
      "pos": [
        -191,
        -109
      ],
      "size": {
        "0": 315,
        "1": 98
      },
      "flags": {},
      "order": 1,
      "mode": 0,
      "outputs": [
        {
          "name": "MODEL",
          "type": "MODEL",
          "links": [
            63
          ],
          "slot_index": 0,
          "label": "MODEL"
        },
        {
          "name": "CLIP",
          "type": "CLIP",
          "links": [
            19,
            22
          ],
          "slot_index": 1,
          "label": "CLIP"
        },
        {
          "name": "VAE",
          "type": "VAE",
          "links": [
            94
          ],
          "slot_index": 2,
          "label": "VAE"
        }
      ],
      "properties": {
        "Node name for S&R": "CheckpointLoaderSimple"
      },
      "widgets_values": [
        "stablesr_768v_000139.ckpt"
      ]
    },
    {
      "id": 117,
      "type": "SaveImage",
      "pos": [
        258,
        -872
      ],
      "size": {
        "0": 550.2034301757812,
        "1": 393.2756042480469
      },
      "flags": {},
      "order": 23,
      "mode": 0,
      "inputs": [
        {
          "name": "images",
          "type": "IMAGE",
          "link": 207,
          "label": "images"
        }
      ],
      "properties": {},
      "widgets_values": [
        "ComfyUI"
      ]
    },
    {
      "id": 90,
      "type": "Float",
      "pos": [
        1380,
        -119
      ],
      "size": {
        "0": 315,
        "1": 58
      },
      "flags": {},
      "order": 2,
      "mode": 0,
      "outputs": [
        {
          "name": "FLOAT",
          "type": "FLOAT",
          "links": [
            141
          ],
          "shape": 3,
          "label": "FLOAT",
          "slot_index": 0
        }
      ],
      "properties": {
        "Node name for S&R": "Float"
      },
      "widgets_values": [
        4
      ],
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 118,
      "type": "WD14Tagger|pysssss",
      "pos": [
        1742,
        5
      ],
      "size": {
        "0": 358.7764587402344,
        "1": 275.96881103515625
      },
      "flags": {},
      "order": 19,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "type": "IMAGE",
          "link": 208,
          "label": "image"
        }
      ],
      "outputs": [
        {
          "name": "STRING",
          "type": "STRING",
          "links": [
            210
          ],
          "shape": 6,
          "label": "STRING",
          "slot_index": 0
        }
      ],
      "properties": {
        "Node name for S&R": "WD14Tagger|pysssss"
      },
      "widgets_values": [
        "wd-v1-4-moat-tagger-v2",
        0.35,
        0.55,
        "",
        false,
        "",
        "outdoors, sky, day, tree, blue_sky, no_humans, window, plant, building, scenery, clock, tower, clock_tower"
      ]
    },
    {
      "id": 89,
      "type": "Reroute",
      "pos": [
        1394,
        308
      ],
      "size": [
        75,
        26
      ],
      "flags": {},
      "order": 11,
      "mode": 0,
      "inputs": [
        {
          "name": "",
          "type": "*",
          "link": 215,
          "label": ""
        }
      ],
      "outputs": [
        {
          "name": "CLIP",
          "type": "CLIP",
          "links": [
            153,
            202
          ],
          "label": "CLIP"
        }
      ],
      "properties": {
        "showOutputText": true,
        "horizontal": false
      }
    },
    {
      "id": 86,
      "type": "CLIPTextEncode",
      "pos": [
        1535,
        353
      ],
      "size": {
        "0": 217.8780975341797,
        "1": 56.58431625366211
      },
      "flags": {},
      "order": 20,
      "mode": 0,
      "inputs": [
        {
          "name": "clip",
          "type": "CLIP",
          "link": 153,
          "label": "clip"
        },
        {
          "name": "text",
          "type": "STRING",
          "link": 210,
          "widget": {
            "name": "text"
          },
          "label": "text"
        }
      ],
      "outputs": [
        {
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "links": [
            145
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "CONDITIONING"
        }
      ],
      "properties": {
        "Node name for S&R": "CLIPTextEncode"
      },
      "widgets_values": [
        "high detail, best quality"
      ],
      "color": "#222"
    },
    {
      "id": 116,
      "type": "CLIPTextEncode",
      "pos": [
        1782,
        -195
      ],
      "size": {
        "0": 369.3165283203125,
        "1": 76.00001525878906
      },
      "flags": {},
      "order": 13,
      "mode": 0,
      "inputs": [
        {
          "name": "clip",
          "type": "CLIP",
          "link": 202,
          "label": "clip"
        }
      ],
      "outputs": [
        {
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "links": [
            203
          ],
          "shape": 3,
          "label": "CONDITIONING",
          "slot_index": 0
        }
      ],
      "properties": {
        "Node name for S&R": "CLIPTextEncode"
      },
      "widgets_values": [
        ""
      ]
    },
    {
      "id": 15,
      "type": "CLIPTextEncode",
      "pos": [
        159,
        148
      ],
      "size": {
        "0": 400,
        "1": 200
      },
      "flags": {},
      "order": 9,
      "mode": 0,
      "inputs": [
        {
          "name": "clip",
          "type": "CLIP",
          "link": 22,
          "label": "clip"
        }
      ],
      "outputs": [
        {
          "name": "CONDITIONING",
          "type": "CONDITIONING",
          "links": [
            92
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "CONDITIONING"
        }
      ],
      "properties": {
        "Node name for S&R": "CLIPTextEncode"
      },
      "widgets_values": [
        "3d, cartoon, anime, sketches, (worst quality), (low quality)"
      ]
    },
    {
      "id": 76,
      "type": "CheckpointLoaderSimple",
      "pos": [
        1370,
        -10
      ],
      "size": {
        "0": 333.23895263671875,
        "1": 99.26319122314453
      },
      "flags": {},
      "order": 3,
      "mode": 0,
      "outputs": [
        {
          "name": "MODEL",
          "type": "MODEL",
          "links": [
            143,
            213
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "MODEL"
        },
        {
          "name": "CLIP",
          "type": "CLIP",
          "links": [
            144,
            215
          ],
          "shape": 3,
          "slot_index": 1,
          "label": "CLIP"
        },
        {
          "name": "VAE",
          "type": "VAE",
          "links": [
            139
          ],
          "shape": 3,
          "slot_index": 2,
          "label": "VAE"
        }
      ],
      "properties": {
        "Node name for S&R": "CheckpointLoaderSimple"
      },
      "widgets_values": [
        "realisticVisionV60B1_v51VAE.ckpt"
      ]
    },
    {
      "id": 80,
      "type": "ControlNetLoader",
      "pos": [
        2174,
        -145
      ],
      "size": {
        "0": 355.2832946777344,
        "1": 58.625450134277344
      },
      "flags": {},
      "order": 4,
      "mode": 0,
      "outputs": [
        {
          "name": "CONTROL_NET",
          "type": "CONTROL_NET",
          "links": [
            146
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "CONTROL_NET"
        }
      ],
      "properties": {
        "Node name for S&R": "ControlNetLoader"
      },
      "widgets_values": [
        "control_v11f1e_sd15_tile.pth"
      ]
    },
    {
      "id": 79,
      "type": "LoraLoader",
      "pos": [
        1370,
        150
      ],
      "size": {
        "0": 314.7889709472656,
        "1": 126
      },
      "flags": {},
      "order": 10,
      "mode": 0,
      "inputs": [
        {
          "name": "model",
          "type": "MODEL",
          "link": 143,
          "slot_index": 0,
          "label": "model"
        },
        {
          "name": "clip",
          "type": "CLIP",
          "link": 144,
          "label": "clip"
        }
      ],
      "outputs": [
        {
          "name": "MODEL",
          "type": "MODEL",
          "links": [],
          "shape": 3,
          "slot_index": 0,
          "label": "MODEL"
        },
        {
          "name": "CLIP",
          "type": "CLIP",
          "links": null,
          "shape": 3,
          "label": "CLIP"
        }
      ],
      "properties": {
        "Node name for S&R": "LoraLoader"
      },
      "widgets_values": [
        "lcm-lora-sdv1-5.safetensors",
        1,
        1
      ]
    },
    {
      "id": 78,
      "type": "UpscaleModelLoader",
      "pos": [
        2171,
        145
      ],
      "size": {
        "0": 394.5442810058594,
        "1": 58
      },
      "flags": {},
      "order": 5,
      "mode": 0,
      "outputs": [
        {
          "name": "UPSCALE_MODEL",
          "type": "UPSCALE_MODEL",
          "links": [
            140
          ],
          "shape": 3,
          "label": "UPSCALE_MODEL"
        }
      ],
      "properties": {
        "Node name for S&R": "UpscaleModelLoader"
      },
      "widgets_values": [
        "4x_NMKD-Superscale-SP_178000_G.pth"
      ]
    },
    {
      "id": 75,
      "type": "UltimateSDUpscale",
      "pos": [
        2830,
        -137
      ],
      "size": {
        "0": 315,
        "1": 614
      },
      "flags": {},
      "order": 22,
      "mode": 0,
      "inputs": [
        {
          "name": "image",
          "type": "IMAGE",
          "link": 160,
          "label": "image",
          "slot_index": 0
        },
        {
          "name": "model",
          "type": "MODEL",
          "link": 213,
          "label": "model",
          "slot_index": 1
        },
        {
          "name": "positive",
          "type": "CONDITIONING",
          "link": 137,
          "slot_index": 2,
          "label": "positive"
        },
        {
          "name": "negative",
          "type": "CONDITIONING",
          "link": 203,
          "slot_index": 3,
          "label": "negative"
        },
        {
          "name": "vae",
          "type": "VAE",
          "link": 139,
          "label": "vae"
        },
        {
          "name": "upscale_model",
          "type": "UPSCALE_MODEL",
          "link": 140,
          "slot_index": 5,
          "label": "upscale_model"
        },
        {
          "name": "upscale_by",
          "type": "FLOAT",
          "link": 141,
          "widget": {
            "name": "upscale_by"
          },
          "slot_index": 6,
          "label": "upscale_by"
        }
      ],
      "outputs": [
        {
          "name": "IMAGE",
          "type": "IMAGE",
          "links": [
            207,
            214
          ],
          "shape": 3,
          "slot_index": 0,
          "label": "IMAGE"
        }
      ],
      "properties": {
        "Node name for S&R": "UltimateSDUpscale"
      },
      "widgets_values": [
        3,
        356188484102098,
        "randomize",
        8,
        1,
        "dpmpp_2m_sde",
        "karras",
        0.4,
        "Linear",
        768,
        768,
        8,
        32,
        "None",
        1,
        64,
        8,
        16,
        "enable",
        false
      ]
    },
    {
      "id": 92,
      "type": "Image Comparer (rgthree)",
      "pos": {
        "0": 913,
        "1": -868,
        "2": 0,
        "3": 0,
        "4": 0,
        "5": 0,
        "6": 0,
        "7": 0,
        "8": 0,
        "9": 0
      },
      "size": {
        "0": 653.4579467773438,
        "1": 432.60040283203125
      },
      "flags": {},
      "order": 24,
      "mode": 0,
      "inputs": [
        {
          "name": "image_a",
          "type": "IMAGE",
          "link": 163,
          "dir": 3,
          "label": "image_a"
        },
        {
          "name": "image_b",
          "type": "IMAGE",
          "link": 214,
          "dir": 3,
          "label": "image_b"
        }
      ],
      "outputs": [],
      "properties": {
        "comparer_mode": "Slide"
      },
      "widgets_values": [
        [
          "/view?filename=rgthree.compare._temp_hqgei_00027_.png&type=temp&subfolder=&rand=0.43297994624892966",
          "/view?filename=rgthree.compare._temp_hqgei_00028_.png&type=temp&subfolder=&rand=0.39469476273013804"
        ]
      ]
    }
  ],
  "links": [
    [
      19,
      4,
      1,
      14,
      0,
      "CLIP"
    ],
    [
      22,
      4,
      1,
      15,
      0,
      "CLIP"
    ],
    [
      63,
      4,
      0,
      31,
      0,
      "MODEL"
    ],
    [
      87,
      29,
      0,
      39,
      0,
      "IMAGE"
    ],
    [
      88,
      39,
      0,
      34,
      0,
      "IMAGE"
    ],
    [
      92,
      15,
      0,
      39,
      3,
      "CONDITIONING"
    ],
    [
      93,
      14,
      0,
      39,
      2,
      "CONDITIONING"
    ],
    [
      94,
      4,
      2,
      39,
      4,
      "VAE"
    ],
    [
      120,
      39,
      0,
      68,
      0,
      "IMAGE"
    ],
    [
      121,
      68,
      0,
      67,
      1,
      "INT"
    ],
    [
      122,
      68,
      1,
      67,
      2,
      "INT"
    ],
    [
      123,
      29,
      0,
      67,
      0,
      "IMAGE"
    ],
    [
      124,
      67,
      0,
      34,
      1,
      "IMAGE"
    ],
    [
      133,
      31,
      0,
      74,
      0,
      "MODEL"
    ],
    [
      134,
      74,
      0,
      39,
      1,
      "MODEL"
    ],
    [
      137,
      81,
      0,
      75,
      2,
      "CONDITIONING"
    ],
    [
      139,
      76,
      2,
      75,
      4,
      "VAE"
    ],
    [
      140,
      78,
      0,
      75,
      5,
      "UPSCALE_MODEL"
    ],
    [
      141,
      90,
      0,
      75,
      6,
      "FLOAT"
    ],
    [
      143,
      76,
      0,
      79,
      0,
      "MODEL"
    ],
    [
      144,
      76,
      1,
      79,
      1,
      "CLIP"
    ],
    [
      145,
      86,
      0,
      81,
      0,
      "CONDITIONING"
    ],
    [
      146,
      80,
      0,
      81,
      1,
      "CONTROL_NET"
    ],
    [
      153,
      89,
      0,
      86,
      0,
      "CLIP"
    ],
    [
      160,
      34,
      0,
      75,
      0,
      "IMAGE"
    ],
    [
      161,
      34,
      0,
      81,
      2,
      "IMAGE"
    ],
    [
      163,
      12,
      0,
      92,
      0,
      "IMAGE"
    ],
    [
      168,
      34,
      0,
      95,
      0,
      "IMAGE"
    ],
    [
      194,
      12,
      0,
      29,
      0,
      "IMAGE"
    ],
    [
      202,
      89,
      0,
      116,
      0,
      "CLIP"
    ],
    [
      203,
      116,
      0,
      75,
      3,
      "CONDITIONING"
    ],
    [
      207,
      75,
      0,
      117,
      0,
      "IMAGE"
    ],
    [
      208,
      34,
      0,
      118,
      0,
      "IMAGE"
    ],
    [
      210,
      118,
      0,
      86,
      1,
      "STRING"
    ],
    [
      213,
      76,
      0,
      75,
      1,
      "MODEL"
    ],
    [
      214,
      75,
      0,
      92,
      1,
      "IMAGE"
    ],
    [
      215,
      76,
      1,
      89,
      0,
      "*"
    ]
  ],
  "groups": [
    {
      "title": "Input",
      "bounding": [
        -893,
        -233,
        647,
        685
      ],
      "color": "#3f789e",
      "font_size": 24,
      "locked": false
    },
    {
      "title": "Fix",
      "bounding": [
        -201,
        -233,
        1483,
        756
      ],
      "color": "#3f789e",
      "font_size": 24,
      "locked": false
    },
    {
      "title": "Upscale",
      "bounding": [
        1320,
        -235,
        1884,
        761
      ],
      "color": "#3f789e",
      "font_size": 24,
      "locked": false
    }
  ],
  "config": {},
  "extra": {
    "groupNodes": {}
  },
  "version": 0.4
}