ehristoforu's picture
Upload folder using huggingface_hub
0163a2c verified
raw
history blame
6.83 kB
import gradio as gr
import scripts.mergers.components as components
from scripts.mergers.mergers import smergegen, simggen
from scripts.mergers.xyplot import numanager
from scripts.mergers.pluslora import frompromptf
from modules import scripts, script_callbacks
class GenParamGetter(scripts.Script):
txt2img_gen_button = None
img2img_gen_button = None
events_assigned = False
def title(self):
return "Super Marger Generation Parameter Getter"
def show(self, is_img2img):
return scripts.AlwaysVisible
def get_wanted_params(params,wanted):
output = []
for target in wanted:
if target is None:
output.append(params[0])
continue
for param in params:
if hasattr(param,"label"):
if param.label == target:
output.append(param)
return output
def after_component(self, component: gr.components.Component, **_kwargs):
"""Find generate button"""
if component.elem_id == "txt2img_generate":
GenParamGetter.txt2img_gen_button = component
elif component.elem_id == "img2img_generate":
GenParamGetter.img2img_gen_button = component
def get_components_by_ids(root: gr.Blocks, ids: list[int]):
components: list[gr.Blocks] = []
if root._id in ids:
components.append(root)
ids = [_id for _id in ids if _id != root._id]
if hasattr(root,"children"):
for block in root.children:
components.extend(GenParamGetter.get_components_by_ids(block, ids))
return components
def compare_components_with_ids(components: list[gr.Blocks], ids: list[int]):
return len(components) == len(ids) and all(component._id == _id for component, _id in zip(components, ids))
def get_params_components(demo: gr.Blocks, app):
for _id, _is_txt2img in zip([GenParamGetter.txt2img_gen_button._id, GenParamGetter.img2img_gen_button._id], [True, False]):
dependencies: list[dict] = [x for x in demo.dependencies if x["trigger"] == "click" and _id in x["targets"]]
dependency: dict = None
cnet_dependency: dict = None
UiControlNetUnit = None
for d in dependencies:
if len(d["outputs"]) == 1:
outputs = GenParamGetter.get_components_by_ids(demo, d["outputs"])
output = outputs[0]
if (
isinstance(output, gr.State)
and type(output.value).__name__ == "UiControlNetUnit"
):
cnet_dependency = d
UiControlNetUnit = type(output.value)
elif len(d["outputs"]) == 4:
dependency = d
params = [params for params in demo.fns if GenParamGetter.compare_components_with_ids(params.inputs, dependency["inputs"])]
from pprint import pprint
if _is_txt2img:
components.paramsnames = [x.label if hasattr(x,"label") else "None" for x in params[0].inputs]
if _is_txt2img:
components.txt2img_params = params[0].inputs
else:
components.img2img_params = params[0].inputs
if not GenParamGetter.events_assigned:
with demo:
components.merge.click(
fn=smergegen,
inputs=[*components.msettings,components.esettings1,*components.genparams,*components.hiresfix,*components.lucks,components.currentmodel,components.dfalse,*components.txt2img_params],
outputs=[components.submit_result,components.currentmodel]
)
components.mergeandgen.click(
fn=smergegen,
inputs=[*components.msettings,components.esettings1,*components.genparams,*components.hiresfix,*components.lucks,components.currentmodel,components.dtrue,*components.txt2img_params],
outputs=[components.submit_result,components.currentmodel,*components.imagegal]
)
components.gen.click(
fn=simggen,
inputs=[*components.genparams,*components.hiresfix,components.currentmodel,components.id_sets,gr.Textbox(value="No id",visible=False),*components.txt2img_params],
outputs=[*components.imagegal],
)
components.s_reserve.click(
fn=numanager,
inputs=[gr.Textbox(value="reserve",visible=False),*components.xysettings,*components.msettings,*components.genparams,*components.hiresfix,*components.lucks,*components.txt2img_params],
outputs=[components.numaframe]
)
components.s_reserve1.click(
fn=numanager,
inputs=[gr.Textbox(value="reserve",visible=False),*components.xysettings,*components.msettings,*components.genparams,*components.hiresfix,*components.lucks,*components.txt2img_params],
outputs=[components.numaframe]
)
components.gengrid.click(
fn=numanager,
inputs=[gr.Textbox(value="normal",visible=False),*components.xysettings,*components.msettings,*components.genparams,*components.hiresfix,*components.lucks,*components.txt2img_params],
outputs=[components.submit_result,components.currentmodel,*components.imagegal],
)
components.s_startreserve.click(
fn=numanager,
inputs=[gr.Textbox(value=" ",visible=False),*components.xysettings,*components.msettings,*components.genparams,*components.hiresfix,*components.lucks,*components.txt2img_params],
outputs=[components.submit_result,components.currentmodel,*components.imagegal],
)
components.rand_merge.click(
fn=numanager,
inputs=[gr.Textbox(value="random",visible=False),*components.xysettings,*components.msettings,*components.genparams,*components.hiresfix,*components.lucks,*components.txt2img_params],
outputs=[components.submit_result,components.currentmodel,*components.imagegal],
)
components.frompromptb.click(
fn=frompromptf,
inputs=[*components.txt2img_params],
outputs=components.sml_loranames,
)
GenParamGetter.events_assigned = True
if __package__ == "GenParamGetter":
script_callbacks.on_app_started(GenParamGetter.get_params_components)