mirror of
https://github.com/lllyasviel/stable-diffusion-webui-forge.git
synced 2025-12-28 13:42:02 +00:00
* fix GFPGAN to work with visibility < 1 * fix codeformer to work with visibility < 1 * try harder to download GFPGAN model. Old method would download only if there were no .pth models in the GFPGAN directory. If codeformer was used before GFPGAN, the supporting models are already downloaded into the GFPGAN directory.
39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
from PIL import Image
|
|
import numpy as np
|
|
|
|
from modules import scripts_postprocessing, codeformer_model, ui_components
|
|
import gradio as gr
|
|
|
|
|
|
class ScriptPostprocessingCodeFormer(scripts_postprocessing.ScriptPostprocessing):
|
|
name = "CodeFormer"
|
|
order = 3000
|
|
|
|
def ui(self):
|
|
with ui_components.InputAccordion(False, label="CodeFormer") as enable:
|
|
with gr.Row():
|
|
codeformer_visibility = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label="Visibility", value=1.0, elem_id="extras_codeformer_visibility")
|
|
codeformer_weight = gr.Slider(minimum=0.0, maximum=1.0, step=0.001, label="Weight (0 = maximum effect, 1 = minimum effect)", value=0, elem_id="extras_codeformer_weight")
|
|
|
|
return {
|
|
"enable": enable,
|
|
"codeformer_visibility": codeformer_visibility,
|
|
"codeformer_weight": codeformer_weight,
|
|
}
|
|
|
|
def process(self, pp: scripts_postprocessing.PostprocessedImage, enable, codeformer_visibility, codeformer_weight):
|
|
if codeformer_visibility == 0 or not enable:
|
|
return
|
|
|
|
source_img = pp.image.convert("RGB")
|
|
|
|
restored_img = codeformer_model.codeformer.restore(np.array(source_img, dtype=np.uint8), w=codeformer_weight)
|
|
res = Image.fromarray(restored_img)
|
|
|
|
if codeformer_visibility < 1.0:
|
|
res = Image.blend(source_img, res, codeformer_visibility)
|
|
|
|
pp.image = res
|
|
pp.info["CodeFormer visibility"] = round(codeformer_visibility, 3)
|
|
pp.info["CodeFormer weight"] = round(codeformer_weight, 3)
|