Skip to content

Commit e5690d0

Browse files
Merge pull request #4488 from d8ahazard/ExtensionPreload
Add option to preload extensions
2 parents 0ab0a50 + cfcadea commit e5690d0

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

modules/extensions.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import os
22
import sys
33
import traceback
4+
from importlib.machinery import SourceFileLoader
45

56
import git
67

78
from modules import paths, shared
89

9-
1010
extensions = []
1111
extensions_dir = os.path.join(paths.script_path, "extensions")
1212

@@ -84,3 +84,24 @@ def list_extensions():
8484

8585
extension = Extension(name=dirname, path=path, enabled=dirname not in shared.opts.disabled_extensions)
8686
extensions.append(extension)
87+
88+
89+
def preload_extensions(parser):
90+
if not os.path.isdir(extensions_dir):
91+
return
92+
93+
for dirname in sorted(os.listdir(extensions_dir)):
94+
path = os.path.join(extensions_dir, dirname)
95+
if not os.path.isdir(path):
96+
continue
97+
for file in os.listdir(path):
98+
if "preload.py" in file:
99+
full_file = os.path.join(path, file)
100+
print(f"Got preload file: {full_file}")
101+
102+
try:
103+
ext = SourceFileLoader("preload", full_file).load_module()
104+
parser = ext.preload(parser)
105+
except Exception as e:
106+
print(f"Exception preloading script: {e}")
107+
return parser

modules/shared.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import modules.sd_models
1616
import modules.styles
1717
import modules.devices as devices
18-
from modules import sd_samplers, sd_models, localization, sd_vae
18+
from modules import sd_samplers, sd_models, localization, sd_vae, extensions
1919
from modules.hypernetworks import hypernetwork
2020
from modules.paths import models_path, script_path, sd_path
2121

@@ -91,7 +91,10 @@
9191
parser.add_argument("--tls-certfile", type=str, help="Partially enables TLS, requires --tls-keyfile to fully function", default=None)
9292
parser.add_argument("--server-name", type=str, help="Sets hostname of server", default=None)
9393

94+
extensions.preload_extensions(parser)
95+
9496
cmd_opts = parser.parse_args()
97+
9598
restricted_opts = {
9699
"samples_filename_pattern",
97100
"directories_filename_pattern",

0 commit comments

Comments
 (0)