stable-diffusion-webui
/
webui.py
162 строки · 5.3 Кб
1from __future__ import annotations2
3import os4import time5
6from modules import timer7from modules import initialize_util8from modules import initialize9
10startup_timer = timer.startup_timer11startup_timer.record("launcher")12
13initialize.imports()14
15initialize.check_versions()16
17
18def create_api(app):19from modules.api.api import Api20from modules.call_queue import queue_lock21
22api = Api(app, queue_lock)23return api24
25
26def api_only():27from fastapi import FastAPI28from modules.shared_cmd_options import cmd_opts29
30initialize.initialize()31
32app = FastAPI()33initialize_util.setup_middleware(app)34api = create_api(app)35
36from modules import script_callbacks37script_callbacks.before_ui_callback()38script_callbacks.app_started_callback(None, app)39
40print(f"Startup time: {startup_timer.summary()}.")41api.launch(42server_name=initialize_util.gradio_server_name(),43port=cmd_opts.port if cmd_opts.port else 7861,44root_path=f"/{cmd_opts.subpath}" if cmd_opts.subpath else ""45)46
47
48def webui():49from modules.shared_cmd_options import cmd_opts50
51launch_api = cmd_opts.api52initialize.initialize()53
54from modules import shared, ui_tempdir, script_callbacks, ui, progress, ui_extra_networks55
56while 1:57if shared.opts.clean_temp_dir_at_start:58ui_tempdir.cleanup_tmpdr()59startup_timer.record("cleanup temp dir")60
61script_callbacks.before_ui_callback()62startup_timer.record("scripts before_ui_callback")63
64shared.demo = ui.create_ui()65startup_timer.record("create ui")66
67if not cmd_opts.no_gradio_queue:68shared.demo.queue(64)69
70gradio_auth_creds = list(initialize_util.get_gradio_auth_creds()) or None71
72auto_launch_browser = False73if os.getenv('SD_WEBUI_RESTARTING') != '1':74if shared.opts.auto_launch_browser == "Remote" or cmd_opts.autolaunch:75auto_launch_browser = True76elif shared.opts.auto_launch_browser == "Local":77auto_launch_browser = not cmd_opts.webui_is_non_local78
79app, local_url, share_url = shared.demo.launch(80share=cmd_opts.share,81server_name=initialize_util.gradio_server_name(),82server_port=cmd_opts.port,83ssl_keyfile=cmd_opts.tls_keyfile,84ssl_certfile=cmd_opts.tls_certfile,85ssl_verify=cmd_opts.disable_tls_verify,86debug=cmd_opts.gradio_debug,87auth=gradio_auth_creds,88inbrowser=auto_launch_browser,89prevent_thread_lock=True,90allowed_paths=cmd_opts.gradio_allowed_path,91app_kwargs={92"docs_url": "/docs",93"redoc_url": "/redoc",94},95root_path=f"/{cmd_opts.subpath}" if cmd_opts.subpath else "",96)97
98startup_timer.record("gradio launch")99
100# gradio uses a very open CORS policy via app.user_middleware, which makes it possible for101# an attacker to trick the user into opening a malicious HTML page, which makes a request to the102# running web ui and do whatever the attacker wants, including installing an extension and103# running its code. We disable this here. Suggested by RyotaK.104app.user_middleware = [x for x in app.user_middleware if x.cls.__name__ != 'CORSMiddleware']105
106initialize_util.setup_middleware(app)107
108progress.setup_progress_api(app)109ui.setup_ui_api(app)110
111if launch_api:112create_api(app)113
114ui_extra_networks.add_pages_to_demo(app)115
116startup_timer.record("add APIs")117
118with startup_timer.subcategory("app_started_callback"):119script_callbacks.app_started_callback(shared.demo, app)120
121timer.startup_record = startup_timer.dump()122print(f"Startup time: {startup_timer.summary()}.")123
124try:125while True:126server_command = shared.state.wait_for_server_command(timeout=5)127if server_command:128if server_command in ("stop", "restart"):129break130else:131print(f"Unknown server command: {server_command}")132except KeyboardInterrupt:133print('Caught KeyboardInterrupt, stopping...')134server_command = "stop"135
136if server_command == "stop":137print("Stopping server...")138# If we catch a keyboard interrupt, we want to stop the server and exit.139shared.demo.close()140break141
142# disable auto launch webui in browser for subsequent UI Reload143os.environ.setdefault('SD_WEBUI_RESTARTING', '1')144
145print('Restarting UI...')146shared.demo.close()147time.sleep(0.5)148startup_timer.reset()149script_callbacks.app_reload_callback()150startup_timer.record("app reload callback")151script_callbacks.script_unloaded_callback()152startup_timer.record("scripts unloaded callback")153initialize.initialize_rest(reload_script_modules=True)154
155
156if __name__ == "__main__":157from modules.shared_cmd_options import cmd_opts158
159if cmd_opts.nowebui:160api_only()161else:162webui()163