diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2022-10-02 18:33:32 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-02 18:33:32 +0000 |
commit | ad0503c1b59de0654e3b34c72e81a3c410ba7788 (patch) | |
tree | 39c3221e99ca90b7238057bc555c5b4d63fcf960 /modules | |
parent | 852fd90c0dcda9cb5fbbfdf0c7308ce58034935c (diff) | |
parent | 688c4a914a6cb152b5f5e4088bace709ed3dcc35 (diff) | |
download | stable-diffusion-webui-gfx803-ad0503c1b59de0654e3b34c72e81a3c410ba7788.tar.gz stable-diffusion-webui-gfx803-ad0503c1b59de0654e3b34c72e81a3c410ba7788.tar.bz2 stable-diffusion-webui-gfx803-ad0503c1b59de0654e3b34c72e81a3c410ba7788.zip |
Merge pull request #1454 from AUTOMATIC1111/1404-script-reload-without-restart
Gradio+custom script+js+css reload without model reloading
Diffstat (limited to 'modules')
-rw-r--r-- | modules/scripts.py | 34 | ||||
-rw-r--r-- | modules/ui.py | 45 |
2 files changed, 70 insertions, 9 deletions
diff --git a/modules/scripts.py b/modules/scripts.py index 7c3bd5e7..45230f9a 100644 --- a/modules/scripts.py +++ b/modules/scripts.py @@ -162,6 +162,40 @@ class ScriptRunner: return processed
+ def reload_sources(self):
+ for si, script in list(enumerate(self.scripts)):
+ with open(script.filename, "r", encoding="utf8") as file:
+ args_from = script.args_from
+ args_to = script.args_to
+ filename = script.filename
+ text = file.read()
+
+ from types import ModuleType
+
+ compiled = compile(text, filename, 'exec')
+ module = ModuleType(script.filename)
+ exec(compiled, module.__dict__)
+
+ for key, script_class in module.__dict__.items():
+ if type(script_class) == type and issubclass(script_class, Script):
+ self.scripts[si] = script_class()
+ self.scripts[si].filename = filename
+ self.scripts[si].args_from = args_from
+ self.scripts[si].args_to = args_to
scripts_txt2img = ScriptRunner()
scripts_img2img = ScriptRunner()
+
+def reload_script_body_only():
+ scripts_txt2img.reload_sources()
+ scripts_img2img.reload_sources()
+
+
+def reload_scripts(basedir):
+ global scripts_txt2img, scripts_img2img
+
+ scripts_data.clear()
+ load_scripts(basedir)
+
+ scripts_txt2img = ScriptRunner()
+ scripts_img2img = ScriptRunner()
diff --git a/modules/ui.py b/modules/ui.py index c8f5bb84..78a15d83 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -1145,6 +1145,31 @@ def create_ui(wrap_gradio_gpu_call): _js='function(){}'
)
+ with gr.Row():
+ reload_script_bodies = gr.Button(value='Reload custom script bodies (No ui updates, No restart)', variant='secondary')
+ restart_gradio = gr.Button(value='Restart Gradio and Refresh components (Custom Scripts, ui.py, js and css only)', variant='primary')
+
+
+ def reload_scripts():
+ modules.scripts.reload_script_body_only()
+
+ reload_script_bodies.click(
+ fn=reload_scripts,
+ inputs=[],
+ outputs=[],
+ _js='function(){}'
+ )
+
+ def request_restart():
+ settings_interface.gradio_ref.do_restart = True
+
+ restart_gradio.click(
+ fn=request_restart,
+ inputs=[],
+ outputs=[],
+ _js='function(){restart_reload()}'
+ )
+
if column is not None:
column.__exit__()
@@ -1170,7 +1195,9 @@ def create_ui(wrap_gradio_gpu_call): css += css_hide_progressbar
with gr.Blocks(css=css, analytics_enabled=False, title="Stable Diffusion") as demo:
-
+
+ settings_interface.gradio_ref = demo
+
with gr.Tabs() as tabs:
for interface, label, ifid in interfaces:
with gr.TabItem(label, id=ifid):
@@ -1350,12 +1377,12 @@ for filename in sorted(os.listdir(jsdir)): javascript += f"\n<script>{jsfile.read()}</script>"
-def template_response(*args, **kwargs):
- res = gradio_routes_templates_response(*args, **kwargs)
- res.body = res.body.replace(b'</head>', f'{javascript}</head>'.encode("utf8"))
- res.init_headers()
- return res
-
+if 'gradio_routes_templates_response' not in globals():
+ def template_response(*args, **kwargs):
+ res = gradio_routes_templates_response(*args, **kwargs)
+ res.body = res.body.replace(b'</head>', f'{javascript}</head>'.encode("utf8"))
+ res.init_headers()
+ return res
-gradio_routes_templates_response = gradio.routes.templates.TemplateResponse
-gradio.routes.templates.TemplateResponse = template_response
+ gradio_routes_templates_response = gradio.routes.templates.TemplateResponse
+ gradio.routes.templates.TemplateResponse = template_response
|