Merge commit 'e7254746bbfbff45099db44a8d4d25dd6181877d' into 3825-save-hypernet-strength-to-info
This commit is contained in:
commit
e709afb0f7
9 changed files with 104 additions and 54 deletions
12
CODEOWNERS
12
CODEOWNERS
|
@ -1 +1,13 @@
|
||||||
* @AUTOMATIC1111
|
* @AUTOMATIC1111
|
||||||
|
/localizations/ar_AR.json @xmodar @blackneoo
|
||||||
|
/localizations/de_DE.json @LunixWasTaken
|
||||||
|
/localizations/es_ES.json @innovaciones
|
||||||
|
/localizations/fr_FR.json @tumbly
|
||||||
|
/localizations/it_IT.json @EugenioBuffo
|
||||||
|
/localizations/ja_JP.json @yuuki76
|
||||||
|
/localizations/ko_KR.json @36DB
|
||||||
|
/localizations/pt_BR.json @M-art-ucci
|
||||||
|
/localizations/ru_RU.json @kabachuha
|
||||||
|
/localizations/tr_TR.json @camenduru
|
||||||
|
/localizations/zh_CN.json @dtlnor @bgluminous
|
||||||
|
/localizations/zh_TW.json @benlisquare
|
||||||
|
|
|
@ -5,7 +5,7 @@ import modules.shared as shared
|
||||||
from modules.api.models import *
|
from modules.api.models import *
|
||||||
from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images
|
from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images
|
||||||
from modules.sd_samplers import all_samplers
|
from modules.sd_samplers import all_samplers
|
||||||
from modules.extras import run_extras
|
from modules.extras import run_extras, run_pnginfo
|
||||||
|
|
||||||
def upscaler_to_index(name: str):
|
def upscaler_to_index(name: str):
|
||||||
try:
|
try:
|
||||||
|
@ -32,6 +32,7 @@ class Api:
|
||||||
self.app.add_api_route("/sdapi/v1/img2img", self.img2imgapi, methods=["POST"], response_model=ImageToImageResponse)
|
self.app.add_api_route("/sdapi/v1/img2img", self.img2imgapi, methods=["POST"], response_model=ImageToImageResponse)
|
||||||
self.app.add_api_route("/sdapi/v1/extra-single-image", self.extras_single_image_api, methods=["POST"], response_model=ExtrasSingleImageResponse)
|
self.app.add_api_route("/sdapi/v1/extra-single-image", self.extras_single_image_api, methods=["POST"], response_model=ExtrasSingleImageResponse)
|
||||||
self.app.add_api_route("/sdapi/v1/extra-batch-images", self.extras_batch_images_api, methods=["POST"], response_model=ExtrasBatchImagesResponse)
|
self.app.add_api_route("/sdapi/v1/extra-batch-images", self.extras_batch_images_api, methods=["POST"], response_model=ExtrasBatchImagesResponse)
|
||||||
|
self.app.add_api_route("/sdapi/v1/png-info", self.pnginfoapi, methods=["POST"], response_model=PNGInfoResponse)
|
||||||
|
|
||||||
def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
|
def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
|
||||||
sampler_index = sampler_to_index(txt2imgreq.sampler_index)
|
sampler_index = sampler_to_index(txt2imgreq.sampler_index)
|
||||||
|
@ -125,8 +126,13 @@ class Api:
|
||||||
|
|
||||||
return ExtrasBatchImagesResponse(images=list(map(encode_pil_to_base64, result[0])), html_info=result[1])
|
return ExtrasBatchImagesResponse(images=list(map(encode_pil_to_base64, result[0])), html_info=result[1])
|
||||||
|
|
||||||
def pnginfoapi(self):
|
def pnginfoapi(self, req: PNGInfoRequest):
|
||||||
raise NotImplementedError
|
if(not req.image.strip()):
|
||||||
|
return PNGInfoResponse(info="")
|
||||||
|
|
||||||
|
result = run_pnginfo(decode_base64_to_image(req.image.strip()))
|
||||||
|
|
||||||
|
return PNGInfoResponse(info=result[1])
|
||||||
|
|
||||||
def launch(self, server_name, port):
|
def launch(self, server_name, port):
|
||||||
self.app.include_router(self.router)
|
self.app.include_router(self.router)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import inspect
|
import inspect
|
||||||
|
from click import prompt
|
||||||
from pydantic import BaseModel, Field, create_model
|
from pydantic import BaseModel, Field, create_model
|
||||||
from typing import Any, Optional
|
from typing import Any, Optional
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
@ -148,4 +149,10 @@ class ExtrasBatchImagesRequest(ExtrasBaseRequest):
|
||||||
imageList: list[FileData] = Field(title="Images", description="List of images to work on. Must be Base64 strings")
|
imageList: list[FileData] = Field(title="Images", description="List of images to work on. Must be Base64 strings")
|
||||||
|
|
||||||
class ExtrasBatchImagesResponse(ExtraBaseResponse):
|
class ExtrasBatchImagesResponse(ExtraBaseResponse):
|
||||||
images: list[str] = Field(title="Images", description="The generated images in base64 format.")
|
images: list[str] = Field(title="Images", description="The generated images in base64 format.")
|
||||||
|
|
||||||
|
class PNGInfoRequest(BaseModel):
|
||||||
|
image: str = Field(title="Image", description="The base64 encoded PNG image")
|
||||||
|
|
||||||
|
class PNGInfoResponse(BaseModel):
|
||||||
|
info: str = Field(title="Image info", description="A string with all the info the image had")
|
|
@ -6,7 +6,7 @@ import gradio as gr
|
||||||
from modules.shared import script_path
|
from modules.shared import script_path
|
||||||
from modules import shared
|
from modules import shared
|
||||||
import tempfile
|
import tempfile
|
||||||
from PIL import Image, PngImagePlugin
|
from PIL import Image
|
||||||
|
|
||||||
re_param_code = r'\s*([\w ]+):\s*("(?:\\|\"|[^\"])+"|[^,]*)(?:,|$)'
|
re_param_code = r'\s*([\w ]+):\s*("(?:\\|\"|[^\"])+"|[^,]*)(?:,|$)'
|
||||||
re_param = re.compile(re_param_code)
|
re_param = re.compile(re_param_code)
|
||||||
|
@ -61,6 +61,24 @@ def add_paste_fields(tabname, init_img, fields):
|
||||||
modules.ui.img2img_paste_fields = fields
|
modules.ui.img2img_paste_fields = fields
|
||||||
|
|
||||||
|
|
||||||
|
def integrate_settings_paste_fields(component_dict):
|
||||||
|
from modules import ui
|
||||||
|
|
||||||
|
settings_map = {
|
||||||
|
'sd_hypernetwork': 'Hypernet',
|
||||||
|
'CLIP_stop_at_last_layers': 'Clip skip',
|
||||||
|
'sd_model_checkpoint': 'Model hash',
|
||||||
|
}
|
||||||
|
settings_paste_fields = [
|
||||||
|
(component_dict[k], lambda d, k=k, v=v: ui.apply_setting(k, d.get(v, None)))
|
||||||
|
for k, v in settings_map.items()
|
||||||
|
]
|
||||||
|
|
||||||
|
for tabname, info in paste_fields.items():
|
||||||
|
if info["fields"] is not None:
|
||||||
|
info["fields"] += settings_paste_fields
|
||||||
|
|
||||||
|
|
||||||
def create_buttons(tabs_list):
|
def create_buttons(tabs_list):
|
||||||
buttons = {}
|
buttons = {}
|
||||||
for tab in tabs_list:
|
for tab in tabs_list:
|
||||||
|
@ -87,24 +105,22 @@ def run_bind():
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
button.click(
|
button.click(
|
||||||
fn=lambda x:x,
|
fn=lambda x: x,
|
||||||
inputs=[send_image],
|
inputs=[send_image],
|
||||||
outputs=[paste_fields[tab]["init_img"]],
|
outputs=[paste_fields[tab]["init_img"]],
|
||||||
)
|
)
|
||||||
|
|
||||||
if send_generate_info and paste_fields[tab]["fields"] is not None:
|
if send_generate_info and paste_fields[tab]["fields"] is not None:
|
||||||
paste_field_names = ['Prompt', 'Negative prompt', 'Steps', 'Face restoration', 'Size-1', 'Size-2']
|
|
||||||
if shared.opts.send_seed:
|
|
||||||
paste_field_names += ["Seed"]
|
|
||||||
if send_generate_info in paste_fields:
|
if send_generate_info in paste_fields:
|
||||||
button.click(
|
paste_field_names = ['Prompt', 'Negative prompt', 'Steps', 'Face restoration', 'Size-1', 'Size-2'] + (["Seed"] if shared.opts.send_seed else [])
|
||||||
fn=lambda *x:x,
|
|
||||||
inputs=[field for field,name in paste_fields[send_generate_info]["fields"] if name in paste_field_names],
|
|
||||||
outputs=[field for field,name in paste_fields[tab]["fields"] if name in paste_field_names],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
button.click(
|
||||||
|
fn=lambda *x: x,
|
||||||
|
inputs=[field for field, name in paste_fields[send_generate_info]["fields"] if name in paste_field_names],
|
||||||
|
outputs=[field for field, name in paste_fields[tab]["fields"] if name in paste_field_names],
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
connect_paste(button, [(field, name) for field, name in paste_fields[tab]["fields"] if name in paste_field_names], send_generate_info)
|
connect_paste(button, paste_fields[tab]["fields"], send_generate_info)
|
||||||
|
|
||||||
button.click(
|
button.click(
|
||||||
fn=None,
|
fn=None,
|
||||||
|
|
|
@ -479,7 +479,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
|
||||||
model_hijack.embedding_db.load_textual_inversion_embeddings()
|
model_hijack.embedding_db.load_textual_inversion_embeddings()
|
||||||
|
|
||||||
if p.scripts is not None:
|
if p.scripts is not None:
|
||||||
p.scripts.run_alwayson_scripts(p)
|
p.scripts.process(p)
|
||||||
|
|
||||||
infotexts = []
|
infotexts = []
|
||||||
output_images = []
|
output_images = []
|
||||||
|
@ -502,7 +502,7 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
|
||||||
seeds = p.all_seeds[n * p.batch_size:(n + 1) * p.batch_size]
|
seeds = p.all_seeds[n * p.batch_size:(n + 1) * p.batch_size]
|
||||||
subseeds = p.all_subseeds[n * p.batch_size:(n + 1) * p.batch_size]
|
subseeds = p.all_subseeds[n * p.batch_size:(n + 1) * p.batch_size]
|
||||||
|
|
||||||
if (len(prompts) == 0):
|
if len(prompts) == 0:
|
||||||
break
|
break
|
||||||
|
|
||||||
with devices.autocast():
|
with devices.autocast():
|
||||||
|
@ -591,7 +591,13 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
|
||||||
images.save_image(grid, p.outpath_grids, "grid", p.all_seeds[0], p.all_prompts[0], opts.grid_format, info=infotext(), short_filename=not opts.grid_extended_filename, p=p, grid=True)
|
images.save_image(grid, p.outpath_grids, "grid", p.all_seeds[0], p.all_prompts[0], opts.grid_format, info=infotext(), short_filename=not opts.grid_extended_filename, p=p, grid=True)
|
||||||
|
|
||||||
devices.torch_gc()
|
devices.torch_gc()
|
||||||
return Processed(p, output_images, p.all_seeds[0], infotext() + "".join(["\n\n" + x for x in comments]), subseed=p.all_subseeds[0], all_prompts=p.all_prompts, all_seeds=p.all_seeds, all_subseeds=p.all_subseeds, index_of_first_image=index_of_first_image, infotexts=infotexts)
|
|
||||||
|
res = Processed(p, output_images, p.all_seeds[0], infotext() + "".join(["\n\n" + x for x in comments]), subseed=p.all_subseeds[0], all_prompts=p.all_prompts, all_seeds=p.all_seeds, all_subseeds=p.all_subseeds, index_of_first_image=index_of_first_image, infotexts=infotexts)
|
||||||
|
|
||||||
|
if p.scripts is not None:
|
||||||
|
p.scripts.postprocess(p, res)
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
|
class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
|
||||||
|
|
|
@ -64,7 +64,16 @@ class Script:
|
||||||
def process(self, p, *args):
|
def process(self, p, *args):
|
||||||
"""
|
"""
|
||||||
This function is called before processing begins for AlwaysVisible scripts.
|
This function is called before processing begins for AlwaysVisible scripts.
|
||||||
scripts. You can modify the processing object (p) here, inject hooks, etc.
|
You can modify the processing object (p) here, inject hooks, etc.
|
||||||
|
args contains all values returned by components from ui()
|
||||||
|
"""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
def postprocess(self, p, processed, *args):
|
||||||
|
"""
|
||||||
|
This function is called after processing ends for AlwaysVisible scripts.
|
||||||
|
args contains all values returned by components from ui()
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
@ -289,13 +298,22 @@ class ScriptRunner:
|
||||||
|
|
||||||
return processed
|
return processed
|
||||||
|
|
||||||
def run_alwayson_scripts(self, p):
|
def process(self, p):
|
||||||
for script in self.alwayson_scripts:
|
for script in self.alwayson_scripts:
|
||||||
try:
|
try:
|
||||||
script_args = p.script_args[script.args_from:script.args_to]
|
script_args = p.script_args[script.args_from:script.args_to]
|
||||||
script.process(p, *script_args)
|
script.process(p, *script_args)
|
||||||
except Exception:
|
except Exception:
|
||||||
print(f"Error running alwayson script: {script.filename}", file=sys.stderr)
|
print(f"Error running process: {script.filename}", file=sys.stderr)
|
||||||
|
print(traceback.format_exc(), file=sys.stderr)
|
||||||
|
|
||||||
|
def postprocess(self, p, processed):
|
||||||
|
for script in self.alwayson_scripts:
|
||||||
|
try:
|
||||||
|
script_args = p.script_args[script.args_from:script.args_to]
|
||||||
|
script.postprocess(p, processed, *script_args)
|
||||||
|
except Exception:
|
||||||
|
print(f"Error running postprocess: {script.filename}", file=sys.stderr)
|
||||||
print(traceback.format_exc(), file=sys.stderr)
|
print(traceback.format_exc(), file=sys.stderr)
|
||||||
|
|
||||||
def reload_sources(self, cache):
|
def reload_sources(self, cache):
|
||||||
|
|
|
@ -589,6 +589,7 @@ def create_refresh_button(refresh_component, refresh_method, refreshed_args, ele
|
||||||
)
|
)
|
||||||
return refresh_button
|
return refresh_button
|
||||||
|
|
||||||
|
|
||||||
def create_output_panel(tabname, outdir):
|
def create_output_panel(tabname, outdir):
|
||||||
def open_folder(f):
|
def open_folder(f):
|
||||||
if not os.path.exists(f):
|
if not os.path.exists(f):
|
||||||
|
@ -716,6 +717,7 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
custom_inputs = modules.scripts.scripts_txt2img.setup_ui(is_img2img=False)
|
custom_inputs = modules.scripts.scripts_txt2img.setup_ui(is_img2img=False)
|
||||||
|
|
||||||
txt2img_gallery, generation_info, html_info = create_output_panel("txt2img", opts.outdir_txt2img_samples)
|
txt2img_gallery, generation_info, html_info = create_output_panel("txt2img", opts.outdir_txt2img_samples)
|
||||||
|
parameters_copypaste.bind_buttons({"txt2img": txt2img_paste}, None, txt2img_prompt)
|
||||||
|
|
||||||
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
|
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
|
||||||
connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
|
connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
|
||||||
|
@ -784,7 +786,7 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
parameters_copypaste.add_paste_fields("txt2img", None, [
|
txt2img_paste_fields = [
|
||||||
(txt2img_prompt, "Prompt"),
|
(txt2img_prompt, "Prompt"),
|
||||||
(txt2img_negative_prompt, "Negative prompt"),
|
(txt2img_negative_prompt, "Negative prompt"),
|
||||||
(steps, "Steps"),
|
(steps, "Steps"),
|
||||||
|
@ -805,7 +807,8 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
(firstphase_width, "First pass size-1"),
|
(firstphase_width, "First pass size-1"),
|
||||||
(firstphase_height, "First pass size-2"),
|
(firstphase_height, "First pass size-2"),
|
||||||
*modules.scripts.scripts_txt2img.infotext_fields
|
*modules.scripts.scripts_txt2img.infotext_fields
|
||||||
])
|
]
|
||||||
|
parameters_copypaste.add_paste_fields("txt2img", None, txt2img_paste_fields)
|
||||||
|
|
||||||
txt2img_preview_params = [
|
txt2img_preview_params = [
|
||||||
txt2img_prompt,
|
txt2img_prompt,
|
||||||
|
@ -893,6 +896,7 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
custom_inputs = modules.scripts.scripts_img2img.setup_ui(is_img2img=True)
|
custom_inputs = modules.scripts.scripts_img2img.setup_ui(is_img2img=True)
|
||||||
|
|
||||||
img2img_gallery, generation_info, html_info = create_output_panel("img2img", opts.outdir_img2img_samples)
|
img2img_gallery, generation_info, html_info = create_output_panel("img2img", opts.outdir_img2img_samples)
|
||||||
|
parameters_copypaste.bind_buttons({"img2img": img2img_paste}, None, img2img_prompt)
|
||||||
|
|
||||||
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
|
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
|
||||||
connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
|
connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
|
||||||
|
@ -1038,7 +1042,6 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
parameters_copypaste.add_paste_fields("img2img", init_img, img2img_paste_fields)
|
parameters_copypaste.add_paste_fields("img2img", init_img, img2img_paste_fields)
|
||||||
parameters_copypaste.add_paste_fields("inpaint", init_img_with_mask, img2img_paste_fields)
|
parameters_copypaste.add_paste_fields("inpaint", init_img_with_mask, img2img_paste_fields)
|
||||||
|
|
||||||
|
|
||||||
with gr.Blocks(analytics_enabled=False) as extras_interface:
|
with gr.Blocks(analytics_enabled=False) as extras_interface:
|
||||||
with gr.Row().style(equal_height=False):
|
with gr.Row().style(equal_height=False):
|
||||||
with gr.Column(variant='panel'):
|
with gr.Column(variant='panel'):
|
||||||
|
@ -1050,12 +1053,8 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
image_batch = gr.File(label="Batch Process", file_count="multiple", interactive=True, type="file")
|
image_batch = gr.File(label="Batch Process", file_count="multiple", interactive=True, type="file")
|
||||||
|
|
||||||
with gr.TabItem('Batch from Directory'):
|
with gr.TabItem('Batch from Directory'):
|
||||||
extras_batch_input_dir = gr.Textbox(label="Input directory", **shared.hide_dirs,
|
extras_batch_input_dir = gr.Textbox(label="Input directory", **shared.hide_dirs, placeholder="A directory on the same machine where the server is running.")
|
||||||
placeholder="A directory on the same machine where the server is running."
|
extras_batch_output_dir = gr.Textbox(label="Output directory", **shared.hide_dirs, placeholder="Leave blank to save images to the default path.")
|
||||||
)
|
|
||||||
extras_batch_output_dir = gr.Textbox(label="Output directory", **shared.hide_dirs,
|
|
||||||
placeholder="Leave blank to save images to the default path."
|
|
||||||
)
|
|
||||||
show_extras_results = gr.Checkbox(label='Show result images', value=True)
|
show_extras_results = gr.Checkbox(label='Show result images', value=True)
|
||||||
|
|
||||||
with gr.Tabs(elem_id="extras_resize_mode"):
|
with gr.Tabs(elem_id="extras_resize_mode"):
|
||||||
|
@ -1087,7 +1086,6 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
|
|
||||||
submit = gr.Button('Generate', elem_id="extras_generate", variant='primary')
|
submit = gr.Button('Generate', elem_id="extras_generate", variant='primary')
|
||||||
|
|
||||||
|
|
||||||
result_images, html_info_x, html_info = create_output_panel("extras", opts.outdir_extras_samples)
|
result_images, html_info_x, html_info = create_output_panel("extras", opts.outdir_extras_samples)
|
||||||
|
|
||||||
submit.click(
|
submit.click(
|
||||||
|
@ -1121,7 +1119,6 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
)
|
)
|
||||||
parameters_copypaste.add_paste_fields("extras", extras_image, None)
|
parameters_copypaste.add_paste_fields("extras", extras_image, None)
|
||||||
|
|
||||||
|
|
||||||
extras_image.change(
|
extras_image.change(
|
||||||
fn=modules.extras.clear_cache,
|
fn=modules.extras.clear_cache,
|
||||||
inputs=[], outputs=[]
|
inputs=[], outputs=[]
|
||||||
|
@ -1587,9 +1584,6 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
if column is not None:
|
if column is not None:
|
||||||
column.__exit__()
|
column.__exit__()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
interfaces = [
|
interfaces = [
|
||||||
(txt2img_interface, "txt2img", "txt2img"),
|
(txt2img_interface, "txt2img", "txt2img"),
|
||||||
(img2img_interface, "img2img", "img2img"),
|
(img2img_interface, "img2img", "img2img"),
|
||||||
|
@ -1599,10 +1593,6 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
(train_interface, "Train", "ti"),
|
(train_interface, "Train", "ti"),
|
||||||
]
|
]
|
||||||
|
|
||||||
interfaces += script_callbacks.ui_tabs_callback()
|
|
||||||
|
|
||||||
interfaces += [(settings_interface, "Settings", "settings")]
|
|
||||||
|
|
||||||
css = ""
|
css = ""
|
||||||
|
|
||||||
for cssfile in modules.scripts.list_files_with_name("style.css"):
|
for cssfile in modules.scripts.list_files_with_name("style.css"):
|
||||||
|
@ -1619,6 +1609,9 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
if not cmd_opts.no_progressbar_hiding:
|
if not cmd_opts.no_progressbar_hiding:
|
||||||
css += css_hide_progressbar
|
css += css_hide_progressbar
|
||||||
|
|
||||||
|
interfaces += script_callbacks.ui_tabs_callback()
|
||||||
|
interfaces += [(settings_interface, "Settings", "settings")]
|
||||||
|
|
||||||
with gr.Blocks(css=css, analytics_enabled=False, title="Stable Diffusion") as demo:
|
with gr.Blocks(css=css, analytics_enabled=False, title="Stable Diffusion") as demo:
|
||||||
with gr.Row(elem_id="quicksettings"):
|
with gr.Row(elem_id="quicksettings"):
|
||||||
for i, k, item in quicksettings_list:
|
for i, k, item in quicksettings_list:
|
||||||
|
@ -1627,6 +1620,9 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
|
|
||||||
settings_interface.gradio_ref = demo
|
settings_interface.gradio_ref = demo
|
||||||
|
|
||||||
|
parameters_copypaste.integrate_settings_paste_fields(component_dict)
|
||||||
|
parameters_copypaste.run_bind()
|
||||||
|
|
||||||
with gr.Tabs(elem_id="tabs") as tabs:
|
with gr.Tabs(elem_id="tabs") as tabs:
|
||||||
for interface, label, ifid in interfaces:
|
for interface, label, ifid in interfaces:
|
||||||
with gr.TabItem(label, id=ifid, elem_id='tab_' + ifid):
|
with gr.TabItem(label, id=ifid, elem_id='tab_' + ifid):
|
||||||
|
@ -1681,16 +1677,6 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
settings_map = {
|
|
||||||
'sd_hypernetwork': 'Hypernet',
|
|
||||||
'sd_hypernetwork_strength': 'Hypernetwork strength',
|
|
||||||
'CLIP_stop_at_last_layers': 'Clip skip',
|
|
||||||
'sd_model_checkpoint': 'Model hash',
|
|
||||||
}
|
|
||||||
|
|
||||||
parameters_copypaste.run_bind()
|
|
||||||
|
|
||||||
ui_config_file = cmd_opts.ui_config_file
|
ui_config_file = cmd_opts.ui_config_file
|
||||||
ui_settings = {}
|
ui_settings = {}
|
||||||
settings_count = len(ui_settings)
|
settings_count = len(ui_settings)
|
||||||
|
@ -1709,7 +1695,7 @@ def create_ui(wrap_gradio_gpu_call):
|
||||||
def apply_field(obj, field, condition=None, init_field=None):
|
def apply_field(obj, field, condition=None, init_field=None):
|
||||||
key = path + "/" + field
|
key = path + "/" + field
|
||||||
|
|
||||||
if getattr(obj,'custom_script_source',None) is not None:
|
if getattr(obj, 'custom_script_source', None) is not None:
|
||||||
key = 'customscript/' + obj.custom_script_source + '/' + key
|
key = 'customscript/' + obj.custom_script_source + '/' + key
|
||||||
|
|
||||||
if getattr(obj, 'do_not_save_to_config', False):
|
if getattr(obj, 'do_not_save_to_config', False):
|
||||||
|
|
7
webui.sh
7
webui.sh
|
@ -102,15 +102,14 @@ then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf "\n%s\n" "${delimiter}"
|
|
||||||
printf "Clone or update stable-diffusion-webui"
|
|
||||||
printf "\n%s\n" "${delimiter}"
|
|
||||||
cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; }
|
cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; }
|
||||||
if [[ -d "${clone_dir}" ]]
|
if [[ -d "${clone_dir}" ]]
|
||||||
then
|
then
|
||||||
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
||||||
"${GIT}" pull
|
|
||||||
else
|
else
|
||||||
|
printf "\n%s\n" "${delimiter}"
|
||||||
|
printf "Clone stable-diffusion-webui"
|
||||||
|
printf "\n%s\n" "${delimiter}"
|
||||||
"${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}"
|
"${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}"
|
||||||
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue