Add files via upload

ver13
hako-mikan 2023-08-04 22:12:01 +09:00 committed by GitHub
parent 18940d84c5
commit 439cb88f95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 128 additions and 58 deletions

View File

@ -0,0 +1,26 @@
merge = None
mergeandgen = None
gen = None
s_reserve = None
s_reserve1 = None
gengrid = None
s_startreserve = None
rand_merge = None
msettings = None
esettings1 = None
genparams = None
hiresfix = None
lucks = None
currentmodel = None
dfalse = None
dtrue = None
id_sets = None
xysettings = None
submit_result = None
imagegal = None
numaframe = None
txt2img_params = []
img2img_params = []

View File

@ -20,14 +20,19 @@ from modules.ui import plaintext_to_html
from modules.shared import opts
from modules.processing import create_infotext,Processed
from modules.sd_models import load_model,checkpoints_loaded,unload_model_weights
from modules.generation_parameters_copypaste import create_override_settings_dict
from scripts.mergers.model_util import VAE_PARAMS_CH, filenamecutter,savemodel,usemodel
from math import ceil
import sys
from multiprocessing import cpu_count
from threading import Lock
from concurrent.futures import ThreadPoolExecutor, as_completed
from inspect import currentframe
module_path = os.path.dirname(os.path.abspath(sys.modules[__name__].__file__))
scriptpath = os.path.dirname(module_path)
def tryit(func):
try:
func()
@ -77,11 +82,11 @@ def casterr(*args,hear=hear):
def smergegen(weights_a,weights_b,model_a,model_b,model_c,base_alpha,base_beta,mode,
calcmode,useblocks,custom_name,save_sets,id_sets,wpresets,deep,tensor,bake_in_vae,
esettings,
prompt,nprompt,steps,sampler,cfg,seed,w,h,
hireson,hrupscaler,hr2ndsteps,denoise_str,hr_scale,
s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,batch_size,
s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,s_batch_size,
genoptions,s_hrupscaler,s_hr2ndsteps,s_denois_str,s_hr_scale,
lmode,lsets,llimits_u,llimits_l,lseed,lserial,lcustom,lround,
currentmodel,imggen):
currentmodel,imggen,
id_task, prompt, negative_prompt, prompt_styles, steps, sampler_index, restore_faces, tiling, n_iter, batch_size, cfg_scale, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, seed_enable_extras, height, width, enable_hr, denoising_strength, hr_scale, hr_upscaler, hr_second_pass_steps, hr_resize_x, hr_resize_y, hr_sampler_index, hr_prompt, hr_negative_prompt, override_settings_texts, *args):
lucks = {"on":False, "mode":lmode,"set":lsets,"upp":llimits_u,"low":llimits_l,"seed":lseed,"num":lserial,"cust":lcustom,"round":int(lround)}
deepprint = True if "print change" in esettings else False
@ -104,8 +109,10 @@ def smergegen(weights_a,weights_b,model_a,model_b,model_c,base_alpha,base_beta,m
devices.torch_gc()
if imggen :
images = simggen(prompt,nprompt,steps,sampler,cfg,seed,w,h,hireson,hrupscaler,hr2ndsteps,denoise_str,hr_scale,
s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,batch_size,currentmodel,id_sets,modelid)
images = simggen(s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,s_batch_size,
genoptions,s_hrupscaler,s_hr2ndsteps,s_denois_str,s_hr_scale,
id_task, prompt, negative_prompt, prompt_styles, steps, sampler_index, restore_faces, tiling, n_iter, batch_size, cfg_scale, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, seed_enable_extras, height, width, enable_hr, denoising_strength, hr_scale, hr_upscaler, hr_second_pass_steps, hr_resize_x, hr_resize_y, hr_sampler_index, hr_prompt, hr_negative_prompt, override_settings_texts, *args,
mergeinfo=currentmodel,id_sets=id_sets,modelid=modelid)
return result,currentmodel,*images[:4]
else:
return result,currentmodel
@ -223,8 +230,6 @@ def smerge(weights_a,weights_b,model_a,model_b,model_c,base_alpha,base_beta,mode
print(f" Weights Seed\t: {lucks['ceed']}")
print(f" Adjust \t: {fine}")
tryit(unload_model_weights)
theta_1=load_model_weights_m(model_b,False,True,save).copy()
isxl = "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_proj.weight" in theta_1.keys()
@ -657,7 +662,6 @@ def smerge(weights_a,weights_b,model_a,model_b,model_c,base_alpha,base_beta,mode
return "",currentmodel,modelid,theta_0,metadata
def multithread_smoothadd(key_and_alpha, theta_0, theta_1, threads, tasks_per_thread, hear):
lock_theta_0 = Lock()
lock_theta_1 = Lock()
@ -665,7 +669,6 @@ def multithread_smoothadd(key_and_alpha, theta_0, theta_1, threads, tasks_per_th
def thread_callback(keys):
nonlocal theta_0, theta_1
if stopmerge:
return False
@ -699,12 +702,10 @@ def multithread_smoothadd(key_and_alpha, theta_0, theta_1, threads, tasks_per_th
futures = []
with ThreadPoolExecutor(max_workers=threads) as executor:
futures = [executor.submit(thread_callback, extract_and_remove(keys, int(tasks_per_thread))) for i in range(total_threads)]
for future in as_completed(futures):
if not future.result():
executor.shutdown()
return theta_0, theta_1, True
del progress
return theta_0, theta_1, False
@ -828,8 +829,7 @@ def savestatics(modelid):
saveekeys(result,f"{modelid}_{key}")
def get_font(fontsize):
path_root = scripts.basedir()
fontpath = os.path.join(path_root,"extensions","sd-webui-supermerger","scripts", "Roboto-Regular.ttf")
fontpath = os.path.join(scriptpath, "Roboto-Regular.ttf")
try:
return ImageFont.truetype(opts.font or fontpath, fontsize)
except Exception:
@ -935,30 +935,90 @@ def eratiodealer(dr,randomer,block,num,lucks):
else:
return float(dr)
def simggen(prompt, nprompt, steps, sampler, cfg, seed, w, h,genoptions,hrupscaler,hr2ndsteps,denoise_str,hr_scale,
s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,batch_size,mergeinfo="",id_sets=[],modelid = "no id"):
def simggen(s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,s_batch_size,
genoptions,s_hrupscaler,s_hr2ndsteps,s_denois_str,s_hr_scale,
id_task, prompt, negative_prompt, prompt_styles, steps, sampler_index, restore_faces, tiling, n_iter, batch_size, cfg_scale, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, seed_enable_extras, height, width, enable_hr, denoising_strength, hr_scale, hr_upscaler, hr_second_pass_steps, hr_resize_x, hr_resize_y, hr_sampler_index, hr_prompt, hr_negative_prompt, override_settings_texts, *args,
mergeinfo="",id_sets=[],modelid = "no id"):
shared.state.begin()
#params = [s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,s_batch_size,genoptions,s_hrupscaler,s_hr2ndsteps,s_denois_str,s_hr_scale]
#paramsname = ["s_prompt","s_nprompt","s_steps","s_sampler","s_cfg","s_seed","s_w","s_h","s_batch_size","genoptions","s_hrupscaler","s_hr2ndsteps","s_denois_str","s_hr_scale"]
#params = [prompt, negative_prompt, prompt_styles, steps, sampler_index, restore_faces, tiling, n_iter, batch_size, cfg_scale, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, seed_enable_extras, height, width, enable_hr, denoising_strength, hr_scale, hr_upscaler, hr_second_pass_steps, hr_resize_x, hr_resize_y, hr_sampler_index, hr_prompt, hr_negative_prompt, override_settings_texts]
#paramsname = ["prompt"," negative_prompt"," prompt_styles"," steps"," sampler_index"," restore_faces"," tiling"," n_iter"," batch_size"," cfg_scale"," seed"," subseed"," subseed_strength"," seed_resize_from_h"," seed_resize_from_w"," seed_enable_extras"," height"," width"," enable_hr"," denoising_strength"," hr_scale"," hr_upscaler"," hr_second_pass_steps"," hr_resize_x"," hr_resize_y"," hr_sampler_index"," hr_prompt"," hr_negative_prompt"," override_settings_texts"]
#from pprint import pprint
#pprint([f"{n}={v}"for v,n in zip(params,paramsname)])
override_settings = create_override_settings_dict(override_settings_texts)
if sampler_index is None:sampler_index = 0
if hr_sampler_index is None:hr_sampler_index = 0
if s_sampler is None: s_sampler = 0
p = processing.StableDiffusionProcessingTxt2Img(
sd_model=shared.sd_model,
outpath_samples=opts.outdir_samples or opts.outdir_txt2img_samples,
outpath_grids=opts.outdir_grids or opts.outdir_txt2img_grids,
prompt=prompt,
styles=prompt_styles,
negative_prompt=negative_prompt,
seed=seed,
subseed=subseed,
subseed_strength=subseed_strength,
seed_resize_from_h=seed_resize_from_h,
seed_resize_from_w=seed_resize_from_w,
seed_enable_extras=seed_enable_extras,
sampler_name=sd_samplers.samplers[sampler_index].name,
batch_size=batch_size,
n_iter=n_iter,
steps=steps,
cfg_scale=cfg_scale,
width=width,
height=height,
restore_faces=restore_faces,
tiling=tiling,
enable_hr=enable_hr,
denoising_strength=denoising_strength if enable_hr else None,
hr_scale=hr_scale,
hr_upscaler=hr_upscaler,
hr_second_pass_steps=hr_second_pass_steps,
hr_resize_x=hr_resize_x,
hr_resize_y=hr_resize_y,
override_settings=override_settings,
do_not_save_grid=True,
do_not_save_samples=True,
do_not_reload_embeddings=True,
)
p.batch_size = int(batch_size)
p.prompt = prompt if s_prompt == "" else s_prompt
p.negative_prompt = nprompt if s_nprompt == "" else s_nprompt
p.steps = steps if s_steps == 0 else s_steps
try:
p.sampler_name = sd_samplers.samplers[sampler].name if s_sampler == 0 or s_sampler == None else sd_samplers.samplers[s_sampler-1].name
except:
print(f"{bcolors.Fail}Error:sampler:{sampler},s_sampler:{s_sampler}{bcolors.ENDC}")
p.cfg_scale = cfg if s_cfg == 0 else s_cfg
p.seed = seed if s_seed == 0 else s_seed
p.width = w if s_w == 0 else s_w
p.height = h if s_h == 0 else s_h
p.seed_resize_from_w=0
p.seed_resize_from_h=0
p.denoising_strength=None
p.scripts = scripts.scripts_txt2img
p.script_args = args
p.all_seeds = [p.seed]
if s_batch_size != 1 :p.batch_size = int(s_batch_size)
if s_prompt: p.prompt = s_prompt
if s_nprompt: p.negative_prompt = s_nprompt
if s_steps: p.steps = s_steps
if s_sampler: p.sampler_name = sd_samplers.samplers[sampler_index].name
if s_cfg: p.cfg_scale = s_cfg
if s_seed: p.seed = s_seed
if s_w: p.width = s_w
if s_h: p.height = s_h
p.hr_prompt=hr_prompt
p.hr_negative_prompt=hr_negative_prompt
p.hr_sampler_name=sd_samplers.samplers_for_img2img[hr_sampler_index - 1].name if hr_sampler_index != 0 else None
if "Hires. fix" in genoptions:
if s_hrupscaler: p.hr_upscaler = s_hrupscaler
if s_hr2ndsteps:p.hr_second_pass_steps = s_hr2ndsteps
if s_denois_str:p.denoising_strength = s_denois_str
if s_hr_scale:p.hr_scale = s_hr_scale
if "Restore faces" in genoptions:
p.restore_faces = True
if "Tiling" in genoptions:
p.tiling = True
p.cached_c = [None,None]
p.cached_uc = [None,None]
@ -966,21 +1026,6 @@ def simggen(prompt, nprompt, steps, sampler, cfg, seed, w, h,genoptions,hrupscal
p.cached_hr_c = [None, None]
p.cached_hr_uc = [None, None]
#"Restore faces", "Tiling", "Hires. fix"
if "Hires. fix" in genoptions:
p.enable_hr = True
p.denoising_strength = denoise_str
p.hr_upscaler = hrupscaler
p.hr_second_pass_steps = hr2ndsteps
p.hr_scale = hr_scale
if "Tiling" in genoptions:
p.tiling = True
if "Restore faces" in genoptions:
p.restore_faces = True
if type(p.prompt) == list:
p.all_prompts = [shared.prompt_styles.apply_styles_to_prompt(x, p.styles) for x in p.prompt]
else:
@ -994,7 +1039,7 @@ def simggen(prompt, nprompt, steps, sampler, cfg, seed, w, h,genoptions,hrupscal
processed:Processed = processing.process_images(p)
if "image" in id_sets:
for i, image in enumerate(processed.images):
processed.images[i] = draw_origin(image, str(modelid),w,h,w)
processed.images[i] = draw_origin(image, str(modelid),p.width,p.height,p.width)
if "PNG info" in id_sets:mergeinfo = mergeinfo + " ID " + str(modelid)
@ -1011,7 +1056,7 @@ def simggen(prompt, nprompt, steps, sampler, cfg, seed, w, h,genoptions,hrupscal
for i, image in enumerate(processed.images):
images.save_image(image, opts.outdir_txt2img_samples, "",p.seed, p.prompt,shared.opts.samples_format, p=p,info=infotext)
if batch_size > 1:
if s_batch_size > 1:
grid = images.image_grid(processed.images, p.batch_size)
processed.images.insert(0, grid)
images.save_image(grid, opts.outdir_txt2img_grids, "grid", p.seed, p.prompt, opts.grid_format, info=infotext, short_filename=not opts.grid_extended_filename, p=p, grid=True)

View File

@ -41,10 +41,10 @@ def freezetime():
def numanager(startmode,xtype,xmen,ytype,ymen,ztype,zmen,esettings,
weights_a,weights_b,model_a,model_b,model_c,alpha,beta,mode,calcmode,
useblocks,custom_name,save_sets,id_sets,wpresets,deep,fine,bake_in_vae,
prompt,nprompt,steps,sampler,cfg,seed,w,h,
hireson,hrupscaler,hr2ndsteps,denoise_str,hr_scale,
prompt_s,nprompt_s,steps_s,sampler_s,cfg_s,seed_s,w_s,h_s,batch_size,
lmode,lsets,llimits_u,llimits_l,lseed,lserial,lcustom,lround):
s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,s_batch_size,
genoptions,s_hrupscaler,s_hr2ndsteps,s_denois_str,s_hr_scale,
lmode,lsets,llimits_u,llimits_l,lseed,lserial,lcustom,lround,
id_task, prompt, negative_prompt, prompt_styles, steps, sampler_index, restore_faces, tiling, n_iter, batch_size, cfg_scale, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, seed_enable_extras, height, width, enable_hr, denoising_strength, hr_scale, hr_upscaler, hr_second_pass_steps, hr_resize_x, hr_resize_y, hr_sampler_index, hr_prompt, hr_negative_prompt, override_settings_texts, *args):
global numadepth
grids = []
sep = "|"
@ -57,14 +57,13 @@ def numanager(startmode,xtype,xmen,ytype,ymen,ztype,zmen,esettings,
xtype,xmen,ytype,ymen,weights_a,weights_b = crazyslot(lmode,lsets,llimits_u,llimits_l,lseed,lserial,lcustom,xtype,xmen,ytype,ymen,weights_a,weights_b,startmode)
lucks = {"on":startmode == RAND, "mode":lmode,"set":lsets,"upp":llimits_u,"low":llimits_l,"seed":lseed,"num":lserial,"cust":lcustom,"round":int(lround)}
gensets = [prompt,nprompt,steps,sampler,cfg,seed,w,h]
gensets_s = [prompt_s,nprompt_s,steps_s,sampler_s,cfg_s,seed_s,w_s,h_s]
hr_sets = [hireson,hrupscaler,hr2ndsteps,denoise_str,hr_scale]
gensets = [id_task, prompt, negative_prompt, prompt_styles, steps, sampler_index, restore_faces, tiling, n_iter, batch_size, cfg_scale, seed, subseed, subseed_strength, seed_resize_from_h, seed_resize_from_w, seed_enable_extras, height, width, enable_hr, denoising_strength, hr_scale, hr_upscaler, hr_second_pass_steps, hr_resize_x, hr_resize_y, hr_sampler_index, hr_prompt, hr_negative_prompt, override_settings_texts, *args,]
gensets_s = [s_prompt,s_nprompt,s_steps,s_sampler,s_cfg,s_seed,s_w,s_h,s_batch_size,genoptions,s_hrupscaler,s_hr2ndsteps,s_denois_str,s_hr_scale]
allsets = [xtype,xmen,ytype,ymen,ztype,zmen,esettings,
weights_a,weights_b,model_a,model_b,model_c,alpha,beta,mode,calcmode,
useblocks,custom_name,save_sets,id_sets,wpresets,deep,fine,bake_in_vae,
gensets,hr_sets,gensets_s,batch_size,lucks]
gensets,gensets_s,lucks]
print(xtype,xmen,ytype,ymen,weights_a,weights_b)
@ -155,7 +154,7 @@ def caster(news,hear):
def sgenxyplot(xtype,xmen,ytype,ymen,ztype,zmen,esettings,
weights_a,weights_b,model_a,model_b,model_c,alpha,beta,mode,
calcmode,useblocks,custom_name,save_sets,id_sets,wpresets,deep,fine,bake_in_vae,
gensets,hr_sets,gensets_s,batch_size,lucks):
gensets,gensets_s,lucks):
global hear
esettings = " ".join(esettings)
savestat = "savestat" in deep
@ -398,7 +397,7 @@ def sgenxyplot(xtype,xmen,ytype,ymen,ztype,zmen,esettings,
if xcount == 0: statid = modelid
image_temp = simggen(*gensets,*hr_sets,*gensets_s,batch_size,currentmodel,id_sets,modelid)
image_temp = simggen(*gensets_s,*gensets,mergeinfo=currentmodel,id_sets=id_sets,modelid=modelid)
gc.collect()
devices.torch_gc()