kingpreyansh commited on
Commit
8f595f5
1 Parent(s): 1f7bf86

Update sd/stable-diffusion-webui/webui.py

Browse files
Files changed (1) hide show
  1. sd/stable-diffusion-webui/webui.py +287 -286
sd/stable-diffusion-webui/webui.py CHANGED
@@ -1,286 +1,287 @@
1
- import os
2
- import sys
3
- import time
4
- import importlib
5
- import signal
6
- import re
7
- from fastapi import FastAPI
8
- from fastapi.middleware.cors import CORSMiddleware
9
- from fastapi.middleware.gzip import GZipMiddleware
10
- from packaging import version
11
-
12
- import logging
13
- logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage())
14
-
15
- from modules import import_hook, errors, extra_networks, ui_extra_networks_checkpoints
16
- from modules import extra_networks_hypernet, ui_extra_networks_hypernets, ui_extra_networks_textual_inversion
17
- from modules.call_queue import wrap_queued_call, queue_lock, wrap_gradio_gpu_call
18
-
19
- import torch
20
-
21
- # Truncate version number of nightly/local build of PyTorch to not cause exceptions with CodeFormer or Safetensors
22
- if ".dev" in torch.__version__ or "+git" in torch.__version__:
23
- torch.__long_version__ = torch.__version__
24
- torch.__version__ = re.search(r'[\d.]+[\d]', torch.__version__).group(0)
25
-
26
- from modules import shared, devices, sd_samplers, upscaler, extensions, localization, ui_tempdir, ui_extra_networks
27
- import modules.codeformer_model as codeformer
28
- import modules.face_restoration
29
- import modules.gfpgan_model as gfpgan
30
- import modules.img2img
31
-
32
- import modules.lowvram
33
- import modules.paths
34
- import modules.scripts
35
- import modules.sd_hijack
36
- import modules.sd_models
37
- import modules.sd_vae
38
- import modules.txt2img
39
- import modules.script_callbacks
40
- import modules.textual_inversion.textual_inversion
41
- import modules.progress
42
-
43
- import modules.ui
44
- from modules import modelloader
45
- from modules.shared import cmd_opts
46
- import modules.hypernetworks.hypernetwork
47
-
48
-
49
- if cmd_opts.server_name:
50
- server_name = cmd_opts.server_name
51
- else:
52
- server_name = "0.0.0.0" if cmd_opts.listen else None
53
-
54
-
55
- def check_versions():
56
- if shared.cmd_opts.skip_version_check:
57
- return
58
-
59
- expected_torch_version = "1.13.1"
60
-
61
- if version.parse(torch.__version__) < version.parse(expected_torch_version):
62
- errors.print_error_explanation(f"""
63
- You are running torch {torch.__version__}.
64
- The program is tested to work with torch {expected_torch_version}.
65
- To reinstall the desired version, run with commandline flag --reinstall-torch.
66
- Beware that this will cause a lot of large files to be downloaded, as well as
67
- there are reports of issues with training tab on the latest version.
68
-
69
- Use --skip-version-check commandline argument to disable this check.
70
- """.strip())
71
-
72
- expected_xformers_version = "0.0.16rc425"
73
- if shared.xformers_available:
74
- import xformers
75
-
76
- if version.parse(xformers.__version__) < version.parse(expected_xformers_version):
77
- errors.print_error_explanation(f"""
78
- You are running xformers {xformers.__version__}.
79
- The program is tested to work with xformers {expected_xformers_version}.
80
- To reinstall the desired version, run with commandline flag --reinstall-xformers.
81
-
82
- Use --skip-version-check commandline argument to disable this check.
83
- """.strip())
84
-
85
-
86
- def initialize():
87
- check_versions()
88
-
89
- extensions.list_extensions()
90
- localization.list_localizations(cmd_opts.localizations_dir)
91
-
92
- if cmd_opts.ui_debug_mode:
93
- shared.sd_upscalers = upscaler.UpscalerLanczos().scalers
94
- modules.scripts.load_scripts()
95
- return
96
-
97
- modelloader.cleanup_models()
98
- modules.sd_models.setup_model()
99
- codeformer.setup_model(cmd_opts.codeformer_models_path)
100
- gfpgan.setup_model(cmd_opts.gfpgan_models_path)
101
-
102
- modelloader.list_builtin_upscalers()
103
- modules.scripts.load_scripts()
104
- modelloader.load_upscalers()
105
-
106
- modules.sd_vae.refresh_vae_list()
107
-
108
- modules.textual_inversion.textual_inversion.list_textual_inversion_templates()
109
-
110
- try:
111
- modules.sd_models.load_model()
112
- except Exception as e:
113
- errors.display(e, "loading stable diffusion model")
114
- print("", file=sys.stderr)
115
- print("Stable diffusion model failed to load, exiting", file=sys.stderr)
116
- exit(1)
117
-
118
- shared.opts.data["sd_model_checkpoint"] = shared.sd_model.sd_checkpoint_info.title
119
-
120
- shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights()))
121
- shared.opts.onchange("sd_vae", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
122
- shared.opts.onchange("sd_vae_as_default", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
123
- shared.opts.onchange("temp_dir", ui_tempdir.on_tmpdir_changed)
124
-
125
- shared.reload_hypernetworks()
126
-
127
- ui_extra_networks.intialize()
128
- ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
129
- ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
130
- ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
131
-
132
- extra_networks.initialize()
133
- extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
134
-
135
- if cmd_opts.tls_keyfile is not None and cmd_opts.tls_keyfile is not None:
136
-
137
- try:
138
- if not os.path.exists(cmd_opts.tls_keyfile):
139
- print("Invalid path to TLS keyfile given")
140
- if not os.path.exists(cmd_opts.tls_certfile):
141
- print(f"Invalid path to TLS certfile: '{cmd_opts.tls_certfile}'")
142
- except TypeError:
143
- cmd_opts.tls_keyfile = cmd_opts.tls_certfile = None
144
- print("TLS setup invalid, running webui without TLS")
145
- else:
146
- print("Running with TLS")
147
-
148
- # make the program just exit at ctrl+c without waiting for anything
149
- def sigint_handler(sig, frame):
150
- print(f'Interrupted with signal {sig} in {frame}')
151
- os._exit(0)
152
-
153
- signal.signal(signal.SIGINT, sigint_handler)
154
-
155
-
156
- def setup_cors(app):
157
- if cmd_opts.cors_allow_origins and cmd_opts.cors_allow_origins_regex:
158
- app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
159
- elif cmd_opts.cors_allow_origins:
160
- app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
161
- elif cmd_opts.cors_allow_origins_regex:
162
- app.add_middleware(CORSMiddleware, allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
163
-
164
-
165
- def create_api(app):
166
- from modules.api.api import Api
167
- api = Api(app, queue_lock)
168
- return api
169
-
170
-
171
- def wait_on_server(demo=None):
172
- while 1:
173
- time.sleep(0.5)
174
- if shared.state.need_restart:
175
- shared.state.need_restart = False
176
- time.sleep(0.5)
177
- demo.close()
178
- time.sleep(0.5)
179
- break
180
-
181
-
182
- def api_only():
183
- initialize()
184
-
185
- app = FastAPI()
186
- setup_cors(app)
187
- app.add_middleware(GZipMiddleware, minimum_size=1000)
188
- api = create_api(app)
189
-
190
- modules.script_callbacks.app_started_callback(None, app)
191
-
192
- api.launch(server_name="0.0.0.0" if cmd_opts.listen else "127.0.0.1", port=cmd_opts.port if cmd_opts.port else 7861)
193
-
194
-
195
- def webui():
196
- launch_api = cmd_opts.api
197
- initialize()
198
-
199
- while 1:
200
- if shared.opts.clean_temp_dir_at_start:
201
- ui_tempdir.cleanup_tmpdr()
202
-
203
- modules.script_callbacks.before_ui_callback()
204
-
205
- shared.demo = modules.ui.create_ui()
206
-
207
- if cmd_opts.gradio_queue:
208
- shared.demo.queue(64)
209
-
210
- gradio_auth_creds = []
211
- if cmd_opts.gradio_auth:
212
- gradio_auth_creds += [x.strip() for x in cmd_opts.gradio_auth.strip('"').replace('\n', '').split(',') if x.strip()]
213
- if cmd_opts.gradio_auth_path:
214
- with open(cmd_opts.gradio_auth_path, 'r', encoding="utf8") as file:
215
- for line in file.readlines():
216
- gradio_auth_creds += [x.strip() for x in line.split(',') if x.strip()]
217
-
218
- app, local_url, share_url = shared.demo.launch(
219
- share=cmd_opts.share,
220
- server_name=server_name,
221
- server_port=cmd_opts.port,
222
- ssl_keyfile=cmd_opts.tls_keyfile,
223
- ssl_certfile=cmd_opts.tls_certfile,
224
- debug=cmd_opts.gradio_debug,
225
- auth=[tuple(cred.split(':')) for cred in gradio_auth_creds] if gradio_auth_creds else None,
226
- inbrowser=cmd_opts.autolaunch,
227
- prevent_thread_lock=True
228
- )
229
- # after initial launch, disable --autolaunch for subsequent restarts
230
- cmd_opts.autolaunch = False
231
-
232
- # gradio uses a very open CORS policy via app.user_middleware, which makes it possible for
233
- # an attacker to trick the user into opening a malicious HTML page, which makes a request to the
234
- # running web ui and do whatever the attacker wants, including installing an extension and
235
- # running its code. We disable this here. Suggested by RyotaK.
236
- app.user_middleware = [x for x in app.user_middleware if x.cls.__name__ != 'CORSMiddleware']
237
-
238
- setup_cors(app)
239
-
240
- app.add_middleware(GZipMiddleware, minimum_size=1000)
241
-
242
- modules.progress.setup_progress_api(app)
243
-
244
- if launch_api:
245
- create_api(app)
246
-
247
- ui_extra_networks.add_pages_to_demo(app)
248
-
249
- modules.script_callbacks.app_started_callback(shared.demo, app)
250
-
251
- wait_on_server(shared.demo)
252
- print('Restarting UI...')
253
-
254
- sd_samplers.set_samplers()
255
-
256
- modules.script_callbacks.script_unloaded_callback()
257
- extensions.list_extensions()
258
-
259
- localization.list_localizations(cmd_opts.localizations_dir)
260
-
261
- modelloader.forbid_loaded_nonbuiltin_upscalers()
262
- modules.scripts.reload_scripts()
263
- modules.script_callbacks.model_loaded_callback(shared.sd_model)
264
- modelloader.load_upscalers()
265
-
266
- for module in [module for name, module in sys.modules.items() if name.startswith("modules.ui")]:
267
- importlib.reload(module)
268
-
269
- modules.sd_models.list_models()
270
-
271
- shared.reload_hypernetworks()
272
-
273
- ui_extra_networks.intialize()
274
- ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
275
- ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
276
- ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
277
-
278
- extra_networks.initialize()
279
- extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
280
-
281
-
282
- if __name__ == "__main__":
283
- if cmd_opts.nowebui:
284
- api_only()
285
- else:
286
- webui()
 
 
1
+ import os
2
+ import sys
3
+ import time
4
+ import importlib
5
+ import signal
6
+ import re
7
+ from fastapi import FastAPI
8
+ from fastapi.middleware.cors import CORSMiddleware
9
+ from fastapi.middleware.gzip import GZipMiddleware
10
+ from packaging import version
11
+
12
+ import logging
13
+ logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage())
14
+
15
+ from modules import import_hook, errors, extra_networks, ui_extra_networks_checkpoints
16
+ from modules import extra_networks_hypernet, ui_extra_networks_hypernets, ui_extra_networks_textual_inversion
17
+ from modules.call_queue import wrap_queued_call, queue_lock, wrap_gradio_gpu_call
18
+
19
+ import torch
20
+
21
+ # Truncate version number of nightly/local build of PyTorch to not cause exceptions with CodeFormer or Safetensors
22
+ if ".dev" in torch.__version__ or "+git" in torch.__version__:
23
+ torch.__long_version__ = torch.__version__
24
+ torch.__version__ = re.search(r'[\d.]+[\d]', torch.__version__).group(0)
25
+
26
+ from modules import shared, devices, sd_samplers, upscaler, extensions, localization, ui_tempdir, ui_extra_networks
27
+ import modules.codeformer_model as codeformer
28
+ import modules.face_restoration
29
+ import modules.gfpgan_model as gfpgan
30
+ import modules.img2img
31
+
32
+ import modules.lowvram
33
+ import modules.paths
34
+ import modules.scripts
35
+ import modules.sd_hijack
36
+ import modules.sd_models
37
+ import modules.sd_vae
38
+ import modules.txt2img
39
+ import modules.script_callbacks
40
+ import modules.textual_inversion.textual_inversion
41
+ import modules.progress
42
+
43
+ import modules.ui
44
+ from modules import modelloader
45
+ from modules.shared import cmd_opts
46
+ import modules.hypernetworks.hypernetwork
47
+
48
+
49
+ if cmd_opts.server_name:
50
+ server_name = cmd_opts.server_name
51
+ else:
52
+ server_name = "0.0.0.0" if cmd_opts.listen else None
53
+
54
+
55
+ def check_versions():
56
+ if shared.cmd_opts.skip_version_check:
57
+ return
58
+
59
+ expected_torch_version = "1.13.1"
60
+
61
+ if version.parse(torch.__version__) < version.parse(expected_torch_version):
62
+ errors.print_error_explanation(f"""
63
+ You are running torch {torch.__version__}.
64
+ The program is tested to work with torch {expected_torch_version}.
65
+ To reinstall the desired version, run with commandline flag --reinstall-torch.
66
+ Beware that this will cause a lot of large files to be downloaded, as well as
67
+ there are reports of issues with training tab on the latest version.
68
+
69
+ Use --skip-version-check commandline argument to disable this check.
70
+ """.strip())
71
+
72
+ expected_xformers_version = "0.0.16rc425"
73
+ if shared.xformers_available:
74
+ import xformers
75
+
76
+ if version.parse(xformers.__version__) < version.parse(expected_xformers_version):
77
+ errors.print_error_explanation(f"""
78
+ You are running xformers {xformers.__version__}.
79
+ The program is tested to work with xformers {expected_xformers_version}.
80
+ To reinstall the desired version, run with commandline flag --reinstall-xformers.
81
+
82
+ Use --skip-version-check commandline argument to disable this check.
83
+ """.strip())
84
+
85
+
86
+ def initialize():
87
+ check_versions()
88
+
89
+ extensions.list_extensions()
90
+ localization.list_localizations(cmd_opts.localizations_dir)
91
+
92
+ if cmd_opts.ui_debug_mode:
93
+ shared.sd_upscalers = upscaler.UpscalerLanczos().scalers
94
+ modules.scripts.load_scripts()
95
+ return
96
+
97
+ modelloader.cleanup_models()
98
+ modules.sd_models.setup_model()
99
+ codeformer.setup_model(cmd_opts.codeformer_models_path)
100
+ gfpgan.setup_model(cmd_opts.gfpgan_models_path)
101
+
102
+ modelloader.list_builtin_upscalers()
103
+ modules.scripts.load_scripts()
104
+ modelloader.load_upscalers()
105
+
106
+ modules.sd_vae.refresh_vae_list()
107
+
108
+ modules.textual_inversion.textual_inversion.list_textual_inversion_templates()
109
+
110
+ try:
111
+ modules.sd_models.load_model()
112
+ except Exception as e:
113
+ errors.display(e, "loading stable diffusion model")
114
+ print("", file=sys.stderr)
115
+ print("Stable diffusion model failed to load, exiting", file=sys.stderr)
116
+ exit(1)
117
+
118
+ shared.opts.data["sd_model_checkpoint"] = shared.sd_model.sd_checkpoint_info.title
119
+
120
+ shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights()))
121
+ shared.opts.onchange("sd_vae", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
122
+ shared.opts.onchange("sd_vae_as_default", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
123
+ shared.opts.onchange("temp_dir", ui_tempdir.on_tmpdir_changed)
124
+
125
+ shared.reload_hypernetworks()
126
+
127
+ ui_extra_networks.intialize()
128
+ ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
129
+ ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
130
+ ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
131
+
132
+ extra_networks.initialize()
133
+ extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
134
+
135
+ if cmd_opts.tls_keyfile is not None and cmd_opts.tls_keyfile is not None:
136
+
137
+ try:
138
+ if not os.path.exists(cmd_opts.tls_keyfile):
139
+ print("Invalid path to TLS keyfile given")
140
+ if not os.path.exists(cmd_opts.tls_certfile):
141
+ print(f"Invalid path to TLS certfile: '{cmd_opts.tls_certfile}'")
142
+ except TypeError:
143
+ cmd_opts.tls_keyfile = cmd_opts.tls_certfile = None
144
+ print("TLS setup invalid, running webui without TLS")
145
+ else:
146
+ print("Running with TLS")
147
+
148
+ # make the program just exit at ctrl+c without waiting for anything
149
+ def sigint_handler(sig, frame):
150
+ print(f'Interrupted with signal {sig} in {frame}')
151
+ os._exit(0)
152
+
153
+ signal.signal(signal.SIGINT, sigint_handler)
154
+
155
+
156
+ def setup_cors(app):
157
+ if cmd_opts.cors_allow_origins and cmd_opts.cors_allow_origins_regex:
158
+ app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
159
+ elif cmd_opts.cors_allow_origins:
160
+ app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
161
+ elif cmd_opts.cors_allow_origins_regex:
162
+ app.add_middleware(CORSMiddleware, allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
163
+
164
+
165
+ def create_api(app):
166
+ from modules.api.api import Api
167
+ api = Api(app, queue_lock)
168
+ return api
169
+
170
+
171
+ def wait_on_server(demo=None):
172
+ while 1:
173
+ time.sleep(0.5)
174
+ if shared.state.need_restart:
175
+ shared.state.need_restart = False
176
+ time.sleep(0.5)
177
+ demo.close()
178
+ time.sleep(0.5)
179
+ break
180
+
181
+
182
+ def api_only():
183
+ initialize()
184
+
185
+ app = FastAPI()
186
+ setup_cors(app)
187
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
188
+ api = create_api(app)
189
+
190
+ modules.script_callbacks.app_started_callback(None, app)
191
+
192
+ api.launch(server_name="0.0.0.0" if cmd_opts.listen else "127.0.0.1", port=cmd_opts.port if cmd_opts.port else 7861)
193
+
194
+
195
+ def webui():
196
+ launch_api = cmd_opts.api
197
+ initialize()
198
+
199
+ while 1:
200
+ if shared.opts.clean_temp_dir_at_start:
201
+ ui_tempdir.cleanup_tmpdr()
202
+
203
+ modules.script_callbacks.before_ui_callback()
204
+
205
+ shared.demo = modules.ui.create_ui()
206
+
207
+ if cmd_opts.gradio_queue:
208
+ shared.demo.queue(64)
209
+
210
+ gradio_auth_creds = []
211
+ if cmd_opts.gradio_auth:
212
+ gradio_auth_creds += [x.strip() for x in cmd_opts.gradio_auth.strip('"').replace('\n', '').split(',') if x.strip()]
213
+ if cmd_opts.gradio_auth_path:
214
+ with open(cmd_opts.gradio_auth_path, 'r', encoding="utf8") as file:
215
+ for line in file.readlines():
216
+ gradio_auth_creds += [x.strip() for x in line.split(',') if x.strip()]
217
+
218
+ app, local_url, share_url = shared.demo.launch(
219
+ share=cmd_opts.share,
220
+ server_name=server_name,
221
+ server_port=cmd_opts.port,
222
+ ssl_keyfile=cmd_opts.tls_keyfile,
223
+ ssl_certfile=cmd_opts.tls_certfile,
224
+ debug=cmd_opts.gradio_debug,
225
+ auth=[tuple(cred.split(':')) for cred in gradio_auth_creds] if gradio_auth_creds else None,
226
+ inbrowser=cmd_opts.autolaunch,
227
+ prevent_thread_lock=True
228
+ )
229
+ # after initial launch, disable --autolaunch for subsequent restarts
230
+ cmd_opts.autolaunch = False
231
+
232
+ # gradio uses a very open CORS policy via app.user_middleware, which makes it possible for
233
+ # an attacker to trick the user into opening a malicious HTML page, which makes a request to the
234
+ # running web ui and do whatever the attacker wants, including installing an extension and
235
+ # running its code. We disable this here. Suggested by RyotaK.
236
+ app.user_middleware = [x for x in app.user_middleware if x.cls.__name__ != 'CORSMiddleware']
237
+
238
+ setup_cors(app)
239
+
240
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
241
+
242
+ modules.progress.setup_progress_api(app)
243
+
244
+ if launch_api:
245
+ create_api(app)
246
+
247
+ ui_extra_networks.add_pages_to_demo(app)
248
+
249
+ modules.script_callbacks.app_started_callback(shared.demo, app)
250
+
251
+ wait_on_server(shared.demo)
252
+ print('Restarting UI...')
253
+
254
+ sd_samplers.set_samplers()
255
+
256
+ modules.script_callbacks.script_unloaded_callback()
257
+ extensions.list_extensions()
258
+
259
+ localization.list_localizations(cmd_opts.localizations_dir)
260
+
261
+ modelloader.forbid_loaded_nonbuiltin_upscalers()
262
+ modules.scripts.reload_scripts()
263
+ modules.script_callbacks.model_loaded_callback(shared.sd_model)
264
+ modelloader.load_upscalers()
265
+
266
+ for module in [module for name, module in sys.modules.items() if name.startswith("modules.ui")]:
267
+ importlib.reload(module)
268
+
269
+ modules.sd_models.list_models()
270
+
271
+ shared.reload_hypernetworks()
272
+
273
+ ui_extra_networks.intialize()
274
+ ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
275
+ ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
276
+ ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
277
+
278
+ extra_networks.initialize()
279
+ extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
280
+
281
+
282
+ if __name__ == "__main__":
283
+ # if cmd_opts.nowebui:
284
+ # api_only()
285
+ # else:
286
+ # webui()
287
+ api_only()