add more developer debug tools (#603)
* add more developer debug tools * add more developer debug tools
This commit is contained in:
parent
fc35888757
commit
05d92ca50b
|
|
@ -1,12 +1,13 @@
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import modules.advanced_parameters as advanced_parameters
|
||||||
|
|
||||||
|
|
||||||
def centered_canny(x: np.ndarray):
|
def centered_canny(x: np.ndarray):
|
||||||
assert isinstance(x, np.ndarray)
|
assert isinstance(x, np.ndarray)
|
||||||
assert x.ndim == 2 and x.dtype == np.uint8
|
assert x.ndim == 2 and x.dtype == np.uint8
|
||||||
|
|
||||||
y = cv2.Canny(x, 64, 128)
|
y = cv2.Canny(x, int(advanced_parameters.canny_low_threshold), int(advanced_parameters.canny_high_threshold))
|
||||||
y = y.astype(np.float32) / 255.0
|
y = y.astype(np.float32) / 255.0
|
||||||
return y
|
return y
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
version = '2.1.27'
|
version = '2.1.28'
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@ adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg, sampler_
|
||||||
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height, \
|
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height, \
|
||||||
overwrite_vary_strength, overwrite_upscale_strength, \
|
overwrite_vary_strength, overwrite_upscale_strength, \
|
||||||
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint, \
|
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint, \
|
||||||
debugging_cn_preprocessor, controlnet_softness = [None] * 16
|
debugging_cn_preprocessor, controlnet_softness, canny_low_threshold, canny_high_threshold, \
|
||||||
|
freeu_enabled, freeu_b1, freeu_b2, freeu_s1, freeu_s2 = [None] * 23
|
||||||
|
|
||||||
|
|
||||||
def set_all_advanced_parameters(*args):
|
def set_all_advanced_parameters(*args):
|
||||||
|
|
@ -10,12 +11,14 @@ def set_all_advanced_parameters(*args):
|
||||||
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height, \
|
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height, \
|
||||||
overwrite_vary_strength, overwrite_upscale_strength, \
|
overwrite_vary_strength, overwrite_upscale_strength, \
|
||||||
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint, \
|
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint, \
|
||||||
debugging_cn_preprocessor, controlnet_softness
|
debugging_cn_preprocessor, controlnet_softness, canny_low_threshold, canny_high_threshold, \
|
||||||
|
freeu_enabled, freeu_b1, freeu_b2, freeu_s1, freeu_s2
|
||||||
|
|
||||||
adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg, sampler_name, \
|
adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg, sampler_name, \
|
||||||
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height, \
|
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height, \
|
||||||
overwrite_vary_strength, overwrite_upscale_strength, \
|
overwrite_vary_strength, overwrite_upscale_strength, \
|
||||||
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint, \
|
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint, \
|
||||||
debugging_cn_preprocessor, controlnet_softness = args
|
debugging_cn_preprocessor, controlnet_softness, canny_low_threshold, canny_high_threshold, \
|
||||||
|
freeu_enabled, freeu_b1, freeu_b2, freeu_s1, freeu_s2 = args
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -449,6 +449,16 @@ def worker():
|
||||||
if len(cn_tasks[flags.cn_ip]) > 0:
|
if len(cn_tasks[flags.cn_ip]) > 0:
|
||||||
pipeline.final_unet = ip_adapter.patch_model(pipeline.final_unet, cn_tasks[flags.cn_ip])
|
pipeline.final_unet = ip_adapter.patch_model(pipeline.final_unet, cn_tasks[flags.cn_ip])
|
||||||
|
|
||||||
|
if advanced_parameters.freeu_enabled:
|
||||||
|
print(f'FreeU is enabled!')
|
||||||
|
pipeline.final_unet = core.apply_freeu(
|
||||||
|
pipeline.final_unet,
|
||||||
|
advanced_parameters.freeu_b1,
|
||||||
|
advanced_parameters.freeu_b2,
|
||||||
|
advanced_parameters.freeu_s1,
|
||||||
|
advanced_parameters.freeu_s2
|
||||||
|
)
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
all_steps = steps * image_number
|
all_steps = steps * image_number
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import comfy.samplers
|
||||||
from comfy.sd import load_checkpoint_guess_config
|
from comfy.sd import load_checkpoint_guess_config
|
||||||
from nodes import VAEDecode, EmptyLatentImage, VAEEncode, VAEEncodeTiled, VAEDecodeTiled, VAEEncodeForInpaint, \
|
from nodes import VAEDecode, EmptyLatentImage, VAEEncode, VAEEncodeTiled, VAEDecodeTiled, VAEEncodeForInpaint, \
|
||||||
ControlNetApplyAdvanced
|
ControlNetApplyAdvanced
|
||||||
|
from comfy_extras.nodes_freelunch import FreeU
|
||||||
from comfy.sample import prepare_mask
|
from comfy.sample import prepare_mask
|
||||||
from modules.patch import patched_sampler_cfg_function, patched_model_function_wrapper
|
from modules.patch import patched_sampler_cfg_function, patched_model_function_wrapper
|
||||||
from comfy.lora import model_lora_keys_unet, model_lora_keys_clip, load_lora
|
from comfy.lora import model_lora_keys_unet, model_lora_keys_clip, load_lora
|
||||||
|
|
@ -32,6 +33,7 @@ opVAEDecodeTiled = VAEDecodeTiled()
|
||||||
opVAEEncodeTiled = VAEEncodeTiled()
|
opVAEEncodeTiled = VAEEncodeTiled()
|
||||||
opVAEEncodeForInpaint = VAEEncodeForInpaint()
|
opVAEEncodeForInpaint = VAEEncodeForInpaint()
|
||||||
opControlNetApplyAdvanced = ControlNetApplyAdvanced()
|
opControlNetApplyAdvanced = ControlNetApplyAdvanced()
|
||||||
|
opFreeU = FreeU()
|
||||||
|
|
||||||
|
|
||||||
class StableDiffusionModel:
|
class StableDiffusionModel:
|
||||||
|
|
@ -42,6 +44,12 @@ class StableDiffusionModel:
|
||||||
self.clip_vision = clip_vision
|
self.clip_vision = clip_vision
|
||||||
|
|
||||||
|
|
||||||
|
@torch.no_grad()
|
||||||
|
@torch.inference_mode()
|
||||||
|
def apply_freeu(model, b1, b2, s1, s2):
|
||||||
|
return opFreeU.patch(model=model, b1=b1, b2=b2, s1=s1, s2=s2)[0]
|
||||||
|
|
||||||
|
|
||||||
@torch.no_grad()
|
@torch.no_grad()
|
||||||
@torch.inference_mode()
|
@torch.inference_mode()
|
||||||
def load_controlnet(ckpt_filename):
|
def load_controlnet(ckpt_filename):
|
||||||
|
|
|
||||||
31
webui.py
31
webui.py
|
|
@ -208,7 +208,7 @@ with shared.gradio_root:
|
||||||
dev_mode = gr.Checkbox(label='Developer Debug Mode', value=False, container=False)
|
dev_mode = gr.Checkbox(label='Developer Debug Mode', value=False, container=False)
|
||||||
|
|
||||||
with gr.Column(visible=False) as dev_tools:
|
with gr.Column(visible=False) as dev_tools:
|
||||||
with gr.Tab(label='Developer Control and Debug Tools'):
|
with gr.Tab(label='Developer Debug Tools'):
|
||||||
adm_scaler_positive = gr.Slider(label='Positive ADM Guidance Scaler', minimum=0.1, maximum=3.0,
|
adm_scaler_positive = gr.Slider(label='Positive ADM Guidance Scaler', minimum=0.1, maximum=3.0,
|
||||||
step=0.001, value=1.5, info='The scaler multiplied to positive ADM (use 1.0 to disable). ')
|
step=0.001, value=1.5, info='The scaler multiplied to positive ADM (use 1.0 to disable). ')
|
||||||
adm_scaler_negative = gr.Slider(label='Negative ADM Guidance Scaler', minimum=0.1, maximum=3.0,
|
adm_scaler_negative = gr.Slider(label='Negative ADM Guidance Scaler', minimum=0.1, maximum=3.0,
|
||||||
|
|
@ -241,19 +241,38 @@ with shared.gradio_root:
|
||||||
minimum=-1, maximum=1.0, step=0.001, value=-1,
|
minimum=-1, maximum=1.0, step=0.001, value=-1,
|
||||||
info='Set as negative number to disable. For developer debugging.')
|
info='Set as negative number to disable. For developer debugging.')
|
||||||
|
|
||||||
mixing_image_prompt_and_vary_upscale = gr.Checkbox(label='Mixing Image Prompt and Vary/Upscale', value=False)
|
with gr.Tab(label='Control Debug'):
|
||||||
mixing_image_prompt_and_inpaint = gr.Checkbox(label='Mixing Image Prompt and Inpaint', value=False)
|
|
||||||
|
|
||||||
debugging_cn_preprocessor = gr.Checkbox(label='Debug Preprocessor of ControlNets', value=False)
|
debugging_cn_preprocessor = gr.Checkbox(label='Debug Preprocessor of ControlNets', value=False)
|
||||||
|
|
||||||
|
mixing_image_prompt_and_vary_upscale = gr.Checkbox(label='Mixing Image Prompt and Vary/Upscale',
|
||||||
|
value=False)
|
||||||
|
mixing_image_prompt_and_inpaint = gr.Checkbox(label='Mixing Image Prompt and Inpaint',
|
||||||
|
value=False)
|
||||||
|
|
||||||
controlnet_softness = gr.Slider(label='Softness of ControlNet', minimum=0.0, maximum=1.0,
|
controlnet_softness = gr.Slider(label='Softness of ControlNet', minimum=0.0, maximum=1.0,
|
||||||
step=0.001, value=0.25, info='Similar to the Control Mode in A1111 (use 0.0 to disable). ')
|
step=0.001, value=0.25,
|
||||||
|
info='Similar to the Control Mode in A1111 (use 0.0 to disable). ')
|
||||||
|
|
||||||
|
with gr.Tab(label='Canny'):
|
||||||
|
canny_low_threshold = gr.Slider(label='Canny Low Threshold', minimum=1, maximum=255,
|
||||||
|
step=1, value=64)
|
||||||
|
canny_high_threshold = gr.Slider(label='Canny High Threshold', minimum=1, maximum=255,
|
||||||
|
step=1, value=128)
|
||||||
|
|
||||||
|
with gr.Tab(label='FreeU'):
|
||||||
|
freeu_enabled = gr.Checkbox(label='Enabled', value=False)
|
||||||
|
freeu_b1 = gr.Slider(label='B1', minimum=0, maximum=2, step=0.01, value=1.01)
|
||||||
|
freeu_b2 = gr.Slider(label='B2', minimum=0, maximum=2, step=0.01, value=1.02)
|
||||||
|
freeu_s1 = gr.Slider(label='S1', minimum=0, maximum=4, step=0.01, value=0.99)
|
||||||
|
freeu_s2 = gr.Slider(label='S2', minimum=0, maximum=4, step=0.01, value=0.95)
|
||||||
|
freeu_ctrls = [freeu_enabled, freeu_b1, freeu_b2, freeu_s1, freeu_s2]
|
||||||
|
|
||||||
adps = [adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg, sampler_name,
|
adps = [adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg, sampler_name,
|
||||||
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height,
|
scheduler_name, overwrite_step, overwrite_switch, overwrite_width, overwrite_height,
|
||||||
overwrite_vary_strength, overwrite_upscale_strength,
|
overwrite_vary_strength, overwrite_upscale_strength,
|
||||||
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint,
|
mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint,
|
||||||
debugging_cn_preprocessor, controlnet_softness]
|
debugging_cn_preprocessor, controlnet_softness, canny_low_threshold, canny_high_threshold]
|
||||||
|
adps += freeu_ctrls
|
||||||
|
|
||||||
def dev_mode_checked(r):
|
def dev_mode_checked(r):
|
||||||
return gr.update(visible=r)
|
return gr.update(visible=r)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue