| import modules.scripts as scripts |
| import gradio as gr |
|
|
| import io |
| import json |
| import matplotlib.pyplot as plt |
| from PIL import Image |
| import numpy as np |
| import inspect |
| import torch |
| from modules import prompt_parser, devices, sd_samplers_common |
| import re |
| from modules.shared import opts, state |
| import modules.shared as shared |
| from modules.script_callbacks import CFGDenoiserParams, cfg_denoiser_callback |
| from modules.script_callbacks import CFGDenoisedParams, cfg_denoised_callback |
| from modules.script_callbacks import AfterCFGCallbackParams, cfg_after_cfg_callback |
| import k_diffusion.utils as utils |
| from k_diffusion.external import CompVisVDenoiser, CompVisDenoiser |
| from modules.sd_samplers_timesteps import CompVisTimestepsDenoiser, CompVisTimestepsVDenoiser |
| from modules.sd_samplers_cfg_denoiser import CFGDenoiser, catenate_conds, subscript_cond, pad_cond |
| from modules import script_callbacks |
|
|
| def CHGdenoiserConstruct(): |
| CHGDenoiserStr = ''' |
| class CHGDenoiser(CFGDenoiser): |
| def __init__(self, sampler): |
| super().__init__(sampler) |
| |
| ''' |
| CHGDenoiserStr += inspect.getsource(CFGDenoiser.forward) |
|
|
| hijack_breakpoints = ["\s+if shared.opts.batch_cond_uncond:", "\s+denoised_image_indexes = \[x\[0\]\[0\] for x in conds_list\]"] |
|
|
|
|
| breakpoint1 = [m.start() for m in re.finditer(hijack_breakpoints[0], CHGDenoiserStr)] |
| breakpoint2 = [m.start() for m in re.finditer(hijack_breakpoints[1], CHGDenoiserStr)] |
| if len(breakpoint1) != 1 or len(breakpoint2) != 1: |
| print( "Characteristic Guidance detected multiple hijack break point. This is caused by version incompatibility. Please report this issue." ) |
| bp1 = breakpoint1[0] |
| bp2 = breakpoint2[0] |
| CHGDenoiserStr1 = CHGDenoiserStr[:bp1] |
| CHGDenoiserStr2 = CHGDenoiserStr[bp1:bp2] |
| CHGDenoiserStr3 = CHGDenoiserStr[bp2:] |
| CHGhijackStr = """ |
| |
| if shared.opts.batch_cond_uncond: |
| x_out = Chara_iteration(self, None, x_in, sigma_in, tensor, uncond, cond_scale, image_cond_in, is_edit_model, skip_uncond, make_condition_dict, shared.opts.batch_cond_uncond, batch_size, cond_in=cond_in, x_out = None) |
| else: |
| x_out = Chara_iteration(self, None, x_in, sigma_in, tensor, uncond, cond_scale, image_cond_in, is_edit_model, skip_uncond, make_condition_dict, shared.opts.batch_cond_uncond, batch_size, cond_in=cond_in, x_out = None) |
| else: |
| x_out = Chara_iteration(self, None, x_in, sigma_in, tensor, uncond, cond_scale, image_cond_in, is_edit_model, skip_uncond, make_condition_dict, shared.opts.batch_cond_uncond, batch_size, cond_in=None, x_out = None) |
| |
| """ |
| CHGDenoiserStr = CHGDenoiserStr1+CHGhijackStr+CHGDenoiserStr3 |
| return CHGDenoiserStr |