from heapq import merge
from logging import exception
from pprint import pprint
import gradio as gr
import gc
import torch
import os
import os.path
import argparse
import modules.ui
import scripts.mergers.pluslora as pluslora
from scripts.mergers.mergers import simggen,typesg,smergegen,rwmergelog
from scripts.mergers.xyplot import freezetime,numaker,numanager,nulister
import csv
from modules import sd_models,script_callbacks,scripts, shared,sd_hijack,devices,sd_vae
from modules.ui import create_refresh_button, create_output_panel
from modules.shared import opts
from modules.sd_models import checkpoints_loaded
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 = scripts.basedir()
def on_ui_tabs():
filepath = os.path.join(path_root, "scripts","mbwpresets.txt")
weights_presets=""
try:
with open(filepath) as f:
weights_presets = f.read()
except OSError as e:
pass
with gr.Blocks(analytics_enabled=False) as ui:
with gr.Tab("Merge", elem_id="tab_merge"):
with gr.Row().style(equal_height=False):
with gr.Column(scale = 3):
gr.HTML(value="
Merge models and load it for generation
")
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")
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')
with gr.Row():
with gr.Column(scale = 4):
save_sets = gr.CheckboxGroup(["save model", "overwrite","safetensors","fp16"], 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.Row():
x_type = gr.Dropdown(label="X type", choices=[x for x in typesg], 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 typesg], 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_checkpoints:
checkpoints = gr.CheckboxGroup(label = "checkpoint",choices=[x.model_name for x in modules.sd_models.checkpoints_list.values()],type="value",interactive=True)
with gr.Tab("Weights Setting"):
with gr.Row():
addtoseq = gr.Button(elem_id="copytogen", value="Add weights to Sequence 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():
editweights = gr.Radio(label = "edit",choices = ["alpha","beta"], value = "alpha")
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.TextArea(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=" exampls: Change base alpha from 0.1 to 0.9
0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9
If you want to display the original model as well for comparison
0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1
")
# gr.HTML(value=" For block-by-block merging
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
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
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
")
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"],
)
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,useblocks,custom_name,save_sets,id_sets,wpresets]
imagegal = [mgallery,mgeninfo,mhtmlinfo,mhtmllog]
s_reverse.click(fn = reversparams,
inputs =mergeid,
outputs = [submit_result,*msettings[0:12]]
)
s_reserve.click(
fn=numaker,
inputs=[x_type,xgrid,y_type,ygrid,*msettings,*gensets.txt2img_preview_params],
outputs=[numaframe]
)
s_reserve1.click(
fn=numaker,
inputs=[x_type,xgrid,y_type,ygrid,*msettings,*gensets.txt2img_preview_params],
outputs=[numaframe]
)
merge.click(
fn=smergegen,
inputs=[*msettings,*gensets.txt2img_preview_params,currentmodel,dfalse],
outputs=[submit_result,currentmodel]
)
mergeandgen.click(
fn=smergegen,
inputs=[*msettings,*gensets.txt2img_preview_params,currentmodel,dtrue],
outputs=[submit_result,currentmodel,*imagegal]
)
gen.click(
fn=simggen,
inputs=[*gensets.txt2img_preview_params,currentmodel,id_sets],
outputs=[*imagegal],
)
gengrid.click(
fn=numanager,
inputs=[dtrue,x_type,xgrid,y_type,ygrid,*msettings,*gensets.txt2img_preview_params],
outputs=[submit_result,currentmodel,*imagegal],
)
s_startreserve.click(
fn=numanager,
inputs=[dfalse,x_type,xgrid,y_type,ygrid,*msettings,*gensets.txt2img_preview_params],
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])
addtoseq.click(fn=add_to_seq,inputs=[xgrid,weights_a],outputs=[xgrid])
stopgrid.click(fn=freezetime)
checkpoints.change(fn=lambda x:",".join(x),inputs=[checkpoints],outputs=[inputer])
blockids.change(fn=lambda x:" ".join(x),inputs=[blockids],outputs=[inputer])
menbers = [weights_a,weights_b,editweights,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]
base.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in00.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in01.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in02.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in03.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in04.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in05.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in06.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in07.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in08.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in09.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in10.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
in11.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
mi00.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou00.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou01.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou02.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou03.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou04.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou05.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou06.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou07.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou08.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou09.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou11.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
ou10.change(fn=reload_mbmaker,inputs=[x for x in menbers],outputs=[weights_a,weights_b])
editweights.change(fn=changesliders,inputs=[weights_a,weights_b,editweights],outputs=[x for x in menbers[3:]])
x_type.change(fn=showxy,inputs=[x_type,y_type], outputs=[row_blockids,row_checkpoints,row_inputers,ygrid])
y_type.change(fn=showxy,inputs=[x_type,y_type], outputs=[row_blockids,row_checkpoints,row_inputers,ygrid])
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 [(ui, "SuperMerger", "SuperMerger")]
msearch = []
mlist=[]
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(",")]
return [gr.update(value = "setting loaded") ,*[gr.update(value = x) for x in mgs[0:12]]]
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):
t = typesg
if t[y] == "none":
if "model" in t[x]:
return [gr.update(visible = False),gr.update(visible = True),gr.update(visible = True),gr.update(visible = False)]
if "pinpoint" in t[x]:
return [gr.update(visible = True),gr.update(visible = False),gr.update(visible = True),gr.update(visible = False)]
else:
return [gr.update(visible = False) for x in range(4)]
else:
if "model" in t[y]:
if "pinpoint" in t[x]:
return [gr.update(visible = True) for x in range(4)]
else:
return [gr.update(visible = False),*[gr.update(visible = True) for x in range(3)]]
if "pinpoint" in t[y]:
if "model" in t[x]:
return [gr.update(visible = True) for x in range(4)]
else:
return [gr.update(visible = True),gr.update(visible = False),gr.update(visible = True),gr.update(visible = True)]
return [*[gr.update(visible = False) for x in range(3)],gr.update(visible = True)]
def changesliders(texta,textb,target):
text = texta if target =="alpha" else textb
vals = [t.strip() for t in text.split(",")]
return [gr.update(value = float(v)) for v in vals]
def reload_mbmaker(weights_a,weights_b,editweights,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]
up = gr.Textbox.update()
text=",".join(str(s) for s in numbers)
if editweights == "alpha" :
if text ==weights_a:return up,up
return gr.Textbox.update(value = text),up
else:
if text ==weights_b:return up,up
return up,gr.Textbox.update(value = text)
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()))
script_callbacks.on_ui_train_tabs(on_ui_train_tabs)
script_callbacks.on_ui_tabs(on_ui_tabs)