toto10's picture
Upload folder using huggingface_hub (#1)
34097e9
raw
history blame
29.9 kB
import argparse
import gc
import os
import os.path
import re
import shutil
from importlib import reload
from pprint import pprint
import gradio as gr
from modules import (devices, script_callbacks, scripts, sd_hijack, sd_models,sd_vae, shared)
from modules.scripts import basedir
from modules.sd_models import checkpoints_loaded
from modules.shared import opts
from modules.ui import create_output_panel, create_refresh_button
import scripts.mergers.mergers
import scripts.mergers.pluslora
import scripts.mergers.xyplot
reload(scripts.mergers.mergers) # update without restarting web-ui.bat
reload(scripts.mergers.xyplot)
reload(scripts.mergers.pluslora)
import csv
import scripts.mergers.pluslora as pluslora
from scripts.mergers.mergers import (TYPESEG, freezemtime, rwmergelog, simggen,smergegen)
from scripts.mergers.xyplot import freezetime, nulister, numaker, numanager
gensets=argparse.Namespace()
def on_ui_train_tabs(params):
txt2img_preview_params=params.txt2img_preview_params
gensets.txt2img_preview_params=txt2img_preview_params
return None
path_root = basedir()
def on_ui_tabs():
weights_presets=""
userfilepath = os.path.join(path_root, "scripts","mbwpresets.txt")
if os.path.isfile(userfilepath):
try:
with open(userfilepath) as f:
weights_presets = f.read()
filepath = userfilepath
except OSError as e:
pass
else:
filepath = os.path.join(path_root, "scripts","mbwpresets_master.txt")
try:
with open(filepath) as f:
weights_presets = f.read()
shutil.copyfile(filepath, userfilepath)
except OSError as e:
pass
with gr.Blocks() as supermergerui:
with gr.Tab("Merge"):
with gr.Row().style(equal_height=False):
with gr.Column(scale = 3):
gr.HTML(value="<p>Merge models and load it for generation</p>")
with gr.Row():
model_a = gr.Dropdown(sd_models.checkpoint_tiles(),elem_id="model_converter_model_name",label="Model A",interactive=True)
create_refresh_button(model_a, sd_models.list_models,lambda: {"choices": sd_models.checkpoint_tiles()},"refresh_checkpoint_Z")
model_b = gr.Dropdown(sd_models.checkpoint_tiles(),elem_id="model_converter_model_name",label="Model B",interactive=True)
create_refresh_button(model_b, sd_models.list_models,lambda: {"choices": sd_models.checkpoint_tiles()},"refresh_checkpoint_Z")
model_c = gr.Dropdown(sd_models.checkpoint_tiles(),elem_id="model_converter_model_name",label="Model C",interactive=True)
create_refresh_button(model_c, sd_models.list_models,lambda: {"choices": sd_models.checkpoint_tiles()},"refresh_checkpoint_Z")
mode = gr.Radio(label = "Merge Mode",choices = ["Weight sum:A*(1-alpha)+B*alpha", "Add difference:A+(B-C)*alpha",
"Triple sum:A*(1-alpha-beta)+B*alpha+C*beta",
"sum Twice:(A*(1-alpha)+B*alpha)*(1-beta)+C*beta",
], value = "Weight sum:A*(1-alpha)+B*alpha")
calcmode = gr.Radio(label = "Calcutation Mode",choices = ["normal", "cosineA", "cosineB", "smoothAdd","tensor"], value = "normal")
with gr.Row():
useblocks = gr.Checkbox(label="use MBW")
base_alpha = gr.Slider(label="alpha", minimum=-1.0, maximum=2, step=0.001, value=0.5)
base_beta = gr.Slider(label="beta", minimum=-1.0, maximum=2, step=0.001, value=0.25)
#weights = gr.Textbox(label="weights,base alpha,IN00,IN02,...IN11,M00,OUT00,...,OUT11",lines=2,value="0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5")
with gr.Row():
merge = gr.Button(elem_id="model_merger_merge", value="Merge!",variant='primary')
mergeandgen = gr.Button(elem_id="model_merger_merge", value="Merge&Gen",variant='primary')
gen = gr.Button(elem_id="model_merger_merge", value="Gen",variant='primary')
stopmerge = gr.Button(elem_id="stopmerge", value="Stop",variant='primary')
with gr.Row():
with gr.Column(scale = 4):
save_sets = gr.CheckboxGroup(["save model", "overwrite","safetensors","fp16","save metadata"], value=["safetensors"], label="save settings")
with gr.Column(scale = 2):
id_sets = gr.CheckboxGroup(["image", "PNG info"], label="write merged model ID to")
with gr.Row():
with gr.Column(min_width = 50, scale=2):
with gr.Row():
custom_name = gr.Textbox(label="Custom Name (Optional)", elem_id="model_converter_custom_name")
mergeid = gr.Textbox(label="merge from ID", elem_id="model_converter_custom_name",value = "-1")
with gr.Column(min_width = 50, scale=1):
with gr.Row():s_reverse= gr.Button(value="Set from ID(-1 for last)",variant='primary')
with gr.Accordion("Restore faces, Tiling, Hires. fix, Batch size",open = False):
batch_size = denois_str = gr.Slider(minimum=0, maximum=8, step=1, label='Batch size', value=1, elem_id="sm_txt2img_batch_size")
genoptions = gr.CheckboxGroup(label = "Gen Options",choices=["Restore faces", "Tiling", "Hires. fix"], visible = True,interactive=True,type="value")
with gr.Row(elem_id="txt2img_hires_fix_row1", variant="compact"):
hrupscaler = gr.Dropdown(label="Upscaler", elem_id="txt2img_hr_upscaler", choices=[*shared.latent_upscale_modes, *[x.name for x in shared.sd_upscalers]], value=shared.latent_upscale_default_mode)
hr2ndsteps = gr.Slider(minimum=0, maximum=150, step=1, label='Hires steps', value=0, elem_id="txt2img_hires_steps")
denois_str = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, label='Denoising strength', value=0.7, elem_id="txt2img_denoising_strength")
hr_scale = gr.Slider(minimum=1.0, maximum=4.0, step=0.05, label="Upscale by", value=2.0, elem_id="txt2img_hr_scale")
hiresfix = [genoptions,hrupscaler,hr2ndsteps,denois_str,hr_scale]
with gr.Accordion("Elemental Merge",open = False):
with gr.Row():
esettings1 = gr.CheckboxGroup(label = "settings",choices=["print change"],type="value",interactive=True)
with gr.Row():
deep = gr.Textbox(label="Blocks:Element:Ratio,Blocks:Element:Ratio,...",lines=2,value="")
with gr.Accordion("Tensor Merge",open = False,visible=False):
tensor = gr.Textbox(label="Blocks:Tensors",lines=2,value="")
with gr.Row():
x_type = gr.Dropdown(label="X type", choices=[x for x in TYPESEG], value="alpha", type="index")
x_randseednum = gr.Number(value=3, label="number of -1", interactive=True, visible = True)
xgrid = gr.Textbox(label="Sequential Merge Parameters",lines=3,value="0.25,0.5,0.75")
y_type = gr.Dropdown(label="Y type", choices=[y for y in TYPESEG], value="none", type="index")
ygrid = gr.Textbox(label="Y grid (Disabled if blank)",lines=3,value="",visible =False)
with gr.Row():
gengrid = gr.Button(elem_id="model_merger_merge", value="Sequential XY Merge and Generation",variant='primary')
stopgrid = gr.Button(elem_id="model_merger_merge", value="Stop XY",variant='primary')
s_reserve1 = gr.Button(value="Reserve XY Plot",variant='primary')
dtrue = gr.Checkbox(value = True, visible = False)
dfalse = gr.Checkbox(value = False,visible = False)
dummy_t = gr.Textbox(value = "",visible = False)
blockid=["BASE","IN00","IN01","IN02","IN03","IN04","IN05","IN06","IN07","IN08","IN09","IN10","IN11","M00","OUT00","OUT01","OUT02","OUT03","OUT04","OUT05","OUT06","OUT07","OUT08","OUT09","OUT10","OUT11"]
with gr.Column(scale = 2):
currentmodel = gr.Textbox(label="Current Model",lines=1,value="")
submit_result = gr.Textbox(label="Message")
mgallery, mgeninfo, mhtmlinfo, mhtmllog = create_output_panel("txt2img", opts.outdir_txt2img_samples)
with gr.Row(visible = False) as row_inputers:
inputer = gr.Textbox(label="",lines=1,value="")
addtox = gr.Button(value="Add to Sequence X")
addtoy = gr.Button(value="Add to Sequence Y")
with gr.Row(visible = False) as row_blockids:
blockids = gr.CheckboxGroup(label = "block IDs",choices=[x for x in blockid],type="value",interactive=True)
with gr.Row(visible = False) as row_calcmode:
calcmodes = gr.CheckboxGroup(label = "calcmode",choices=["normal", "cosineA", "cosineB", "smoothAdd","tensor"],type="value",interactive=True)
with gr.Row(visible = False) as row_checkpoints:
checkpoints = gr.CheckboxGroup(label = "checkpoint",choices=[x.model_name for x in sd_models.checkpoints_list.values()],type="value",interactive=True)
with gr.Row(visible = False) as row_esets:
esettings = gr.CheckboxGroup(label = "effective chekcer settings",choices=["save csv","save anime gif","not save grid","print change"],type="value",interactive=True)
with gr.Tab("Weights Setting"):
with gr.Row():
setalpha = gr.Button(elem_id="copytogen", value="set to alpha",variant='primary')
readalpha = gr.Button(elem_id="copytogen", value="read from alpha",variant='primary')
setbeta = gr.Button(elem_id="copytogen", value="set to beta",variant='primary')
readbeta = gr.Button(elem_id="copytogen", value="read from beta",variant='primary')
setx = gr.Button(elem_id="copytogen", value="set to X",variant='primary')
with gr.Row():
weights_a = gr.Textbox(label="weights for alpha, base alpha,IN00,IN02,...IN11,M00,OUT00,...,OUT11",value = "0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5")
weights_b = gr.Textbox(label="weights,for beta, base beta,IN00,IN02,...IN11,M00,OUT00,...,OUT11",value = "0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2")
with gr.Row():
base= gr.Slider(label="Base", minimum=0, maximum=1, step =0.01, value=0.5)
in00 = gr.Slider(label="IN00", minimum=0, maximum=1, step=0.01, value=0.5)
in01 = gr.Slider(label="IN01", minimum=0, maximum=1, step=0.01, value=0.5)
in02 = gr.Slider(label="IN02", minimum=0, maximum=1, step=0.01, value=0.5)
in03 = gr.Slider(label="IN03", minimum=0, maximum=1, step=0.01, value=0.5)
with gr.Row():
in04 = gr.Slider(label="IN04", minimum=0, maximum=1, step=0.01, value=0.5)
in05 = gr.Slider(label="IN05", minimum=0, maximum=1, step=0.01, value=0.5)
in06 = gr.Slider(label="IN06", minimum=0, maximum=1, step=0.01, value=0.5)
in07 = gr.Slider(label="IN07", minimum=0, maximum=1, step=0.01, value=0.5)
in08 = gr.Slider(label="IN08", minimum=0, maximum=1, step=0.01, value=0.5)
in09 = gr.Slider(label="IN09", minimum=0, maximum=1, step=0.01, value=0.5)
with gr.Row():
in10 = gr.Slider(label="IN10", minimum=0, maximum=1, step=0.01, value=0.5)
in11 = gr.Slider(label="IN11", minimum=0, maximum=1, step=0.01, value=0.5)
mi00 = gr.Slider(label="M00", minimum=0, maximum=1, step=0.01, value=0.5)
ou00 = gr.Slider(label="OUT00", minimum=0, maximum=1, step=0.01, value=0.5)
ou01 = gr.Slider(label="OUT01", minimum=0, maximum=1, step=0.01, value=0.5)
ou02 = gr.Slider(label="OUT02", minimum=0, maximum=1, step=0.01, value=0.5)
with gr.Row():
ou03 = gr.Slider(label="OUT03", minimum=0, maximum=1, step=0.01, value=0.5)
ou04 = gr.Slider(label="OUT04", minimum=0, maximum=1, step=0.01, value=0.5)
ou05 = gr.Slider(label="OUT05", minimum=0, maximum=1, step=0.01, value=0.5)
ou06 = gr.Slider(label="OUT06", minimum=0, maximum=1, step=0.01, value=0.5)
ou07 = gr.Slider(label="OUT07", minimum=0, maximum=1, step=0.01, value=0.5)
ou08 = gr.Slider(label="OUT08", minimum=0, maximum=1, step=0.01, value=0.5)
with gr.Row():
ou09 = gr.Slider(label="OUT09", minimum=0, maximum=1, step=0.01, value=0.5)
ou10 = gr.Slider(label="OUT10", minimum=0, maximum=1, step=0.01, value=0.5)
ou11 = gr.Slider(label="OUT11", minimum=0, maximum=1, step=0.01, value=0.5)
with gr.Tab("Weights Presets"):
with gr.Row():
s_reloadtext = gr.Button(value="Reload Presets",variant='primary')
s_reloadtags = gr.Button(value="Reload Tags",variant='primary')
s_savetext = gr.Button(value="Save Presets",variant='primary')
s_openeditor = gr.Button(value="Open TextEditor",variant='primary')
weightstags= gr.Textbox(label="available",lines = 2,value=tagdicter(weights_presets),visible =True,interactive =True)
wpresets= gr.TextArea(label="",value=weights_presets,visible =True,interactive = True)
with gr.Tab("Reservation"):
with gr.Row():
s_reserve = gr.Button(value="Reserve XY Plot",variant='primary')
s_reloadreserve = gr.Button(value="Reloat List",variant='primary')
s_startreserve = gr.Button(value="Start XY plot",variant='primary')
s_delreserve = gr.Button(value="Delete list(-1 for all)",variant='primary')
s_delnum = gr.Number(value=1, label="Delete num : ", interactive=True, visible = True,precision =0)
with gr.Row():
numaframe = gr.Dataframe(
headers=["No.","status","xtype","xmenber", "ytype","ymenber","model A","model B","model C","alpha","beta","mode","use MBW","weights alpha","weights beta"],
row_count=5,)
# with gr.Tab("manual"):
# with gr.Row():
# gr.HTML(value="<p> exampls: Change base alpha from 0.1 to 0.9 <br>0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9<br>If you want to display the original model as well for comparison<br>0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1</p>")
# gr.HTML(value="<p> For block-by-block merging <br>0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5<br>1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1<br>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1</p>")
with gr.Row():
currentcache = gr.Textbox(label="Current Cache")
loadcachelist = gr.Button(elem_id="model_merger_merge", value="Reload Cache List",variant='primary')
unloadmodel = gr.Button(value="unload model",variant='primary')
# main ui end
with gr.Tab("LoRA", elem_id="tab_lora"):
pluslora.on_ui_tabs()
with gr.Tab("History", elem_id="tab_history"):
with gr.Row():
load_history = gr.Button(value="load_history",variant='primary')
searchwrods = gr.Textbox(label="",lines=1,value="")
search = gr.Button(value="search")
searchmode = gr.Radio(label = "Search Mode",choices = ["or","and"], value = "or",type = "value")
with gr.Row():
history = gr.Dataframe(
headers=["ID","Time","Name","Weights alpha","Weights beta","Model A","Model B","Model C","alpha","beta","Mode","use MBW","custum name","save setting","use ID"],
)
with gr.Tab("Elements", elem_id="tab_deep"):
with gr.Row():
smd_model_a = gr.Dropdown(sd_models.checkpoint_tiles(),elem_id="model_converter_model_name",label="Checkpoint A",interactive=True)
create_refresh_button(smd_model_a, sd_models.list_models,lambda: {"choices": sd_models.checkpoint_tiles()},"refresh_checkpoint_Z")
smd_loadkeys = gr.Button(value="load keys",variant='primary')
with gr.Row():
keys = gr.Dataframe(headers=["No.","block","key"],)
with gr.Tab("Metadeta", elem_id="tab_metadata"):
with gr.Row():
meta_model_a = gr.Dropdown(sd_models.checkpoint_tiles(),elem_id="model_converter_model_name",label="read metadata",interactive=True)
create_refresh_button(meta_model_a, sd_models.list_models,lambda: {"choices": sd_models.checkpoint_tiles()},"refresh_checkpoint_Z")
smd_loadmetadata = gr.Button(value="load keys",variant='primary')
with gr.Row():
metadata = gr.TextArea()
smd_loadmetadata.click(
fn=loadmetadata,
inputs=[meta_model_a],
outputs=[metadata]
)
smd_loadkeys.click(
fn=loadkeys,
inputs=[smd_model_a],
outputs=[keys]
)
def unload():
if shared.sd_model == None: return "already unloaded"
sd_hijack.model_hijack.undo_hijack(shared.sd_model)
shared.sd_model = None
gc.collect()
devices.torch_gc()
return "model unloaded"
unloadmodel.click(fn=unload,outputs=[submit_result])
load_history.click(fn=load_historyf,outputs=[history ])
msettings=[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]
imagegal = [mgallery,mgeninfo,mhtmlinfo,mhtmllog]
xysettings=[x_type,xgrid,y_type,ygrid,esettings]
s_reverse.click(fn = reversparams,
inputs =mergeid,
outputs = [submit_result,*msettings[0:8],*msettings[9:13],deep,calcmode]
)
merge.click(
fn=smergegen,
inputs=[*msettings,esettings1,*gensets.txt2img_preview_params,*hiresfix,batch_size,currentmodel,dfalse],
outputs=[submit_result,currentmodel]
)
mergeandgen.click(
fn=smergegen,
inputs=[*msettings,esettings1,*gensets.txt2img_preview_params,*hiresfix,batch_size,currentmodel,dtrue],
outputs=[submit_result,currentmodel,*imagegal]
)
gen.click(
fn=simggen,
inputs=[*gensets.txt2img_preview_params,*hiresfix,batch_size,currentmodel,id_sets],
outputs=[*imagegal],
)
s_reserve.click(
fn=numaker,
inputs=[*xysettings,*msettings,*gensets.txt2img_preview_params,*hiresfix,batch_size],
outputs=[numaframe]
)
s_reserve1.click(
fn=numaker,
inputs=[*xysettings,*msettings,*gensets.txt2img_preview_params,*hiresfix,batch_size],
outputs=[numaframe]
)
gengrid.click(
fn=numanager,
inputs=[dtrue,*xysettings,*msettings,*gensets.txt2img_preview_params,*hiresfix,batch_size],
outputs=[submit_result,currentmodel,*imagegal],
)
s_startreserve.click(
fn=numanager,
inputs=[dfalse,*xysettings,*msettings,*gensets.txt2img_preview_params,*hiresfix,batch_size],
outputs=[submit_result,currentmodel,*imagegal],
)
search.click(fn = searchhistory,inputs=[searchwrods,searchmode],outputs=[history])
s_reloadreserve.click(fn=nulister,inputs=[dfalse],outputs=[numaframe])
s_delreserve.click(fn=nulister,inputs=[s_delnum],outputs=[numaframe])
loadcachelist.click(fn=load_cachelist,inputs=[],outputs=[currentcache])
addtox.click(fn=lambda x:gr.Textbox.update(value = x),inputs=[inputer],outputs=[xgrid])
addtoy.click(fn=lambda x:gr.Textbox.update(value = x),inputs=[inputer],outputs=[ygrid])
stopgrid.click(fn=freezetime)
stopmerge.click(fn=freezemtime)
checkpoints.change(fn=lambda x:",".join(x),inputs=[checkpoints],outputs=[inputer])
blockids.change(fn=lambda x:" ".join(x),inputs=[blockids],outputs=[inputer])
calcmodes.change(fn=lambda x:",".join(x),inputs=[calcmodes],outputs=[inputer])
menbers = [base,in00,in01,in02,in03,in04,in05,in06,in07,in08,in09,in10,in11,mi00,ou00,ou01,ou02,ou03,ou04,ou05,ou06,ou07,ou08,ou09,ou10,ou11]
setalpha.click(fn=slider2text,inputs=menbers,outputs=[weights_a])
setbeta.click(fn=slider2text,inputs=menbers,outputs=[weights_b])
setx.click(fn=add_to_seq,inputs=[xgrid,weights_a],outputs=[xgrid])
readalpha.click(fn=text2slider,inputs=weights_a,outputs=menbers)
readbeta.click(fn=text2slider,inputs=weights_b,outputs=menbers)
x_type.change(fn=showxy,inputs=[x_type,y_type], outputs=[row_blockids,row_checkpoints,row_inputers,ygrid,row_esets,row_calcmode])
y_type.change(fn=showxy,inputs=[x_type,y_type], outputs=[row_blockids,row_checkpoints,row_inputers,ygrid,row_esets,row_calcmode])
x_randseednum.change(fn=makerand,inputs=[x_randseednum],outputs=[xgrid])
import subprocess
def openeditors():
subprocess.Popen(['start', filepath], shell=True)
def reloadpresets():
try:
with open(filepath) as f:
return f.read()
except OSError as e:
pass
def savepresets(text):
with open(filepath,mode = 'w') as f:
f.write(text)
s_reloadtext.click(fn=reloadpresets,inputs=[],outputs=[wpresets])
s_reloadtags.click(fn=tagdicter,inputs=[wpresets],outputs=[weightstags])
s_savetext.click(fn=savepresets,inputs=[wpresets],outputs=[])
s_openeditor.click(fn=openeditors,inputs=[],outputs=[])
return (supermergerui, "SuperMerger", "supermerger"),
msearch = []
mlist=[]
def loadmetadata(model):
import json
checkpoint_info = sd_models.get_closet_checkpoint_match(model)
if ".safetensors" not in checkpoint_info.filename: return "no metadata(not safetensors)"
sdict = sd_models.read_metadata_from_safetensors(checkpoint_info.filename)
if sdict == {}: return "no metadata"
return json.dumps(sdict,indent=4)
def load_historyf():
filepath = os.path.join(path_root,"mergehistory.csv")
global mlist,msearch
msearch = []
mlist=[]
try:
with open(filepath, 'r') as f:
reader = csv.reader(f)
mlist = [raw for raw in reader]
mlist = mlist[1:]
for m in mlist:
msearch.append(" ".join(m))
maxlen = len(mlist[-1][0])
for i,m in enumerate(mlist):
mlist[i][0] = mlist[i][0].zfill(maxlen)
return mlist
except:
return [["no data","",""],]
def searchhistory(words,searchmode):
outs =[]
ando = "and" in searchmode
words = words.split(" ") if " " in words else [words]
for i, m in enumerate(msearch):
hit = ando
for w in words:
if ando:
if w not in m:hit = False
else:
if w in m:hit = True
print(i,len(mlist))
if hit :outs.append(mlist[i])
if outs == []:return [["no result","",""],]
return outs
#msettings=[0 weights_a,1 weights_b,2 model_a,3 model_b,4 model_c,5 base_alpha,6 base_beta,7 mode,8 useblocks,9 custom_name,10 save_sets,11 id_sets,12 wpresets]
def reversparams(id):
def selectfromhash(hash):
for model in sd_models.checkpoint_tiles():
if hash in model:
return model
return ""
try:
idsets = rwmergelog(id = id)
except:
return [gr.update(value = "ERROR: history file could not open"),*[gr.update() for x in range(14)]]
if type(idsets) == str:
print("ERROR")
return [gr.update(value = idsets),*[gr.update() for x in range(14)]]
if idsets[0] == "ID":return [gr.update(value ="ERROR: no history"),*[gr.update() for x in range(14)]]
mgs = idsets[3:]
if mgs[0] == "":mgs[0] = "0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5"
if mgs[1] == "":mgs[1] = "0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2"
mgs[2] = selectfromhash(mgs[2]) if len(mgs[2]) > 5 else ""
mgs[3] = selectfromhash(mgs[3]) if len(mgs[3]) > 5 else ""
mgs[4] = selectfromhash(mgs[4]) if len(mgs[4]) > 5 else ""
mgs[8] = True if mgs[8] =="True" else False
mgs[10] = mgs[10].replace("[","").replace("]","").replace("'", "")
mgs[10] = [x.strip() for x in mgs[10].split(",")]
mgs[11] = mgs[11].replace("[","").replace("]","").replace("'", "")
mgs[11] = [x.strip() for x in mgs[11].split(",")]
while len(mgs) < 14:
mgs.append("")
mgs[13] = "normal" if mgs[13] == "" else mgs[13]
return [gr.update(value = "setting loaded") ,*[gr.update(value = x) for x in mgs[0:14]]]
def add_to_seq(seq,maker):
return gr.Textbox.update(value = maker if seq=="" else seq+"\r\n"+maker)
def load_cachelist():
text = ""
for x in checkpoints_loaded.keys():
text = text +"\r\n"+ x.model_name
return text.replace("\r\n","",1)
def makerand(num):
text = ""
for x in range(int(num)):
text = text +"-1,"
text = text[:-1]
return text
#row_blockids,row_checkpoints,row_inputers,ygrid
def showxy(x,y):
flags =[False]*6
t = TYPESEG
txy = t[x] + t[y]
if "model" in txy : flags[1] = flags[2] = True
if "pinpoint" in txy : flags[0] = flags[2] = True
if "effective" in txy or "element" in txy : flags[4] = True
if "calcmode" in txy : flags[5] = True
if not "none" in t[y] : flags[3] = flags[2] = True
return [gr.update(visible = x) for x in flags]
def text2slider(text):
vals = [t.strip() for t in text.split(",")]
return [gr.update(value = float(v)) for v in vals]
def slider2text(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z):
numbers = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]
numbers = [str(x) for x in numbers]
return gr.update(value = ",".join(numbers) )
def tagdicter(presets):
presets=presets.splitlines()
wdict={}
for l in presets:
w=[]
if ":" in l :
key = l.split(":",1)[0]
w = l.split(":",1)[1]
if "\t" in l:
key = l.split("\t",1)[0]
w = l.split("\t",1)[1]
if len([w for w in w.split(",")]) == 26:
wdict[key.strip()]=w
return ",".join(list(wdict.keys()))
def loadkeys(model_a):
checkpoint_info = sd_models.get_closet_checkpoint_match(model_a)
sd = sd_models.read_state_dict(checkpoint_info.filename,"cpu")
keys = []
for i, key in enumerate(sd.keys()):
re_inp = re.compile(r'\.input_blocks\.(\d+)\.') # 12
re_mid = re.compile(r'\.middle_block\.(\d+)\.') # 1
re_out = re.compile(r'\.output_blocks\.(\d+)\.') # 12
weight_index = -1
blockid=["BASE","IN00","IN01","IN02","IN03","IN04","IN05","IN06","IN07","IN08","IN09","IN10","IN11","M00","OUT00","OUT01","OUT02","OUT03","OUT04","OUT05","OUT06","OUT07","OUT08","OUT09","OUT10","OUT11","Not Merge"]
NUM_INPUT_BLOCKS = 12
NUM_MID_BLOCK = 1
NUM_OUTPUT_BLOCKS = 12
NUM_TOTAL_BLOCKS = NUM_INPUT_BLOCKS + NUM_MID_BLOCK + NUM_OUTPUT_BLOCKS
if 'time_embed' in key:
weight_index = -2 # before input blocks
elif '.out.' in key:
weight_index = NUM_TOTAL_BLOCKS - 1 # after output blocks
else:
m = re_inp.search(key)
if m:
inp_idx = int(m.groups()[0])
weight_index = inp_idx
else:
m = re_mid.search(key)
if m:
weight_index = NUM_INPUT_BLOCKS
else:
m = re_out.search(key)
if m:
out_idx = int(m.groups()[0])
weight_index = NUM_INPUT_BLOCKS + NUM_MID_BLOCK + out_idx
keys.append([i,blockid[weight_index+1],key])
return keys
script_callbacks.on_ui_tabs(on_ui_tabs)
script_callbacks.on_ui_train_tabs(on_ui_train_tabs)