mirror of https://github.com/vladmandic/automatic
eliminate possible race conditions during startup
Signed-off-by: vladmandic <mandic00@live.com>pull/4667/head
parent
6c5f7c298a
commit
9ad68c2ff4
68
installer.py
68
installer.py
|
|
@ -110,6 +110,13 @@ def print_dict(d):
|
||||||
return ' '.join([f'{k}={v}' for k, v in d.items()])
|
return ' '.join([f'{k}={v}' for k, v in d.items()])
|
||||||
|
|
||||||
|
|
||||||
|
def env_flag(name: str, default: bool = False) -> bool:
|
||||||
|
value = os.environ.get(name)
|
||||||
|
if value is None:
|
||||||
|
return default
|
||||||
|
return str(value).strip().lower() in ('1', 'true', 'yes', 'on')
|
||||||
|
|
||||||
|
|
||||||
def print_profile(profiler: cProfile.Profile, msg: str):
|
def print_profile(profiler: cProfile.Profile, msg: str):
|
||||||
profiler.disable()
|
profiler.disable()
|
||||||
from modules.errors import profile
|
from modules.errors import profile
|
||||||
|
|
@ -1256,7 +1263,6 @@ def get_version(force=False):
|
||||||
log.warning('Version: detached state detected')
|
log.warning('Version: detached state detected')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.warning(f'Version: where=branch {e}')
|
log.warning(f'Version: where=branch {e}')
|
||||||
cwd = os.getcwd()
|
|
||||||
try:
|
try:
|
||||||
if os.path.exists('extensions-builtin/sdnext-modernui'):
|
if os.path.exists('extensions-builtin/sdnext-modernui'):
|
||||||
res = subprocess.run('git rev-parse --abbrev-ref HEAD', capture_output=True, shell=True, check=True, cwd='extensions-builtin/sdnext-modernui')
|
res = subprocess.run('git rev-parse --abbrev-ref HEAD', capture_output=True, shell=True, check=True, cwd='extensions-builtin/sdnext-modernui')
|
||||||
|
|
@ -1268,8 +1274,6 @@ def get_version(force=False):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.warning(f'Version: where=modernui {e}')
|
log.warning(f'Version: where=modernui {e}')
|
||||||
version['ui'] = 'unknown'
|
version['ui'] = 'unknown'
|
||||||
finally:
|
|
||||||
os.chdir(cwd)
|
|
||||||
try:
|
try:
|
||||||
if os.environ.get('SD_KANVAS_DISABLE', None) is not None:
|
if os.environ.get('SD_KANVAS_DISABLE', None) is not None:
|
||||||
version['kanvas'] = 'disabled'
|
version['kanvas'] = 'disabled'
|
||||||
|
|
@ -1283,8 +1287,6 @@ def get_version(force=False):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.warning(f'Version: where=kanvas {e}')
|
log.warning(f'Version: where=kanvas {e}')
|
||||||
version['kanvas'] = 'unknown'
|
version['kanvas'] = 'unknown'
|
||||||
finally:
|
|
||||||
os.chdir(cwd)
|
|
||||||
ts('version', t_start)
|
ts('version', t_start)
|
||||||
return version
|
return version
|
||||||
|
|
||||||
|
|
@ -1298,17 +1300,13 @@ def check_ui(ver):
|
||||||
t_start = time.time()
|
t_start = time.time()
|
||||||
if not same(ver):
|
if not same(ver):
|
||||||
log.debug(f'Branch mismatch: {ver}')
|
log.debug(f'Branch mismatch: {ver}')
|
||||||
cwd = os.getcwd()
|
|
||||||
try:
|
try:
|
||||||
os.chdir('extensions-builtin/sdnext-modernui')
|
|
||||||
target = 'dev' if 'dev' in ver['branch'] else 'main'
|
target = 'dev' if 'dev' in ver['branch'] else 'main'
|
||||||
git('checkout ' + target, ignore=True, optional=True)
|
git('checkout ' + target, folder='extensions-builtin/sdnext-modernui', ignore=True, optional=True)
|
||||||
os.chdir(cwd)
|
|
||||||
ver = get_version(force=True)
|
ver = get_version(force=True)
|
||||||
log.debug(f'Branch sync: {ver}')
|
log.debug(f'Branch sync: {ver}')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug(f'Branch switch: {e}')
|
log.debug(f'Branch switch: {e}')
|
||||||
os.chdir(cwd)
|
|
||||||
ts('ui', t_start)
|
ts('ui', t_start)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1431,30 +1429,6 @@ def update_wiki():
|
||||||
ts('wiki', t_start)
|
ts('wiki', t_start)
|
||||||
|
|
||||||
|
|
||||||
def run_deferred_tasks():
|
|
||||||
t_start = time.time()
|
|
||||||
log.debug('Starting deferred tasks')
|
|
||||||
time.sleep(1.0) # wait for server to start
|
|
||||||
try:
|
|
||||||
from modules.sd_checkpoint import write_metadata
|
|
||||||
write_metadata()
|
|
||||||
except Exception as e:
|
|
||||||
log.error(f'Deferred task error: write_metadata {e}')
|
|
||||||
try:
|
|
||||||
check_version()
|
|
||||||
except Exception as e:
|
|
||||||
log.error(f'Deferred task error: check_version {e}')
|
|
||||||
try:
|
|
||||||
check_modified_files()
|
|
||||||
except Exception as e:
|
|
||||||
log.error(f'Deferred task error: check_modified_files {e}')
|
|
||||||
try:
|
|
||||||
update_wiki()
|
|
||||||
except Exception as e:
|
|
||||||
log.error(f'Deferred task error: update_wiki {e}')
|
|
||||||
log.debug(f'Deferred tasks complete: time={round(time.time() - t_start, 2)}')
|
|
||||||
|
|
||||||
|
|
||||||
@lru_cache
|
@lru_cache
|
||||||
def get_state():
|
def get_state():
|
||||||
state = {
|
state = {
|
||||||
|
|
@ -1540,19 +1514,19 @@ def check_timestamp():
|
||||||
|
|
||||||
def add_args(parser):
|
def add_args(parser):
|
||||||
group_install = parser.add_argument_group('Install')
|
group_install = parser.add_argument_group('Install')
|
||||||
group_install.add_argument('--quick', default=os.environ.get("SD_QUICK",False), action='store_true', help="Bypass version checks, default: %(default)s")
|
group_install.add_argument('--quick', default=env_flag("SD_QUICK", False), action='store_true', help="Bypass version checks, default: %(default)s")
|
||||||
group_install.add_argument('--reset', default=os.environ.get("SD_RESET",False), action='store_true', help="Reset main repository to latest version, default: %(default)s")
|
group_install.add_argument('--reset', default=env_flag("SD_RESET", False), action='store_true', help="Reset main repository to latest version, default: %(default)s")
|
||||||
group_install.add_argument('--upgrade', '--update', default=os.environ.get("SD_UPGRADE",False), action='store_true', help="Upgrade main repository to latest version, default: %(default)s")
|
group_install.add_argument('--upgrade', '--update', default=env_flag("SD_UPGRADE", False), action='store_true', help="Upgrade main repository to latest version, default: %(default)s")
|
||||||
group_install.add_argument('--requirements', default=os.environ.get("SD_REQUIREMENTS",False), action='store_true', help="Force re-check of requirements, default: %(default)s")
|
group_install.add_argument('--requirements', default=env_flag("SD_REQUIREMENTS", False), action='store_true', help="Force re-check of requirements, default: %(default)s")
|
||||||
group_install.add_argument('--reinstall', default=os.environ.get("SD_REINSTALL",False), action='store_true', help="Force reinstallation of all requirements, default: %(default)s")
|
group_install.add_argument('--reinstall', default=env_flag("SD_REINSTALL", False), action='store_true', help="Force reinstallation of all requirements, default: %(default)s")
|
||||||
group_install.add_argument('--uv', default=os.environ.get("SD_UV",False), action='store_true', help="Use uv instead of pip to install the packages")
|
group_install.add_argument('--uv', default=env_flag("SD_UV", False), action='store_true', help="Use uv instead of pip to install the packages")
|
||||||
group_install.add_argument('--optional', default=os.environ.get("SD_OPTIONAL",False), action='store_true', help="Force installation of optional requirements, default: %(default)s")
|
group_install.add_argument('--optional', default=env_flag("SD_OPTIONAL", False), action='store_true', help="Force installation of optional requirements, default: %(default)s")
|
||||||
group_install.add_argument('--skip-requirements', default=os.environ.get("SD_SKIPREQUIREMENTS",False), action='store_true', help="Skips checking and installing requirements, default: %(default)s")
|
group_install.add_argument('--skip-requirements', default=env_flag("SD_SKIPREQUIREMENTS", False), action='store_true', help="Skips checking and installing requirements, default: %(default)s")
|
||||||
group_install.add_argument('--skip-extensions', default=os.environ.get("SD_SKIPEXTENSION",False), action='store_true', help="Skips running individual extension installers, default: %(default)s")
|
group_install.add_argument('--skip-extensions', default=env_flag("SD_SKIPEXTENSION", False), action='store_true', help="Skips running individual extension installers, default: %(default)s")
|
||||||
group_install.add_argument('--skip-git', default=os.environ.get("SD_SKIPGIT",False), action='store_true', help="Skips running all GIT operations, default: %(default)s")
|
group_install.add_argument('--skip-git', default=env_flag("SD_SKIPGIT", False), action='store_true', help="Skips running all GIT operations, default: %(default)s")
|
||||||
group_install.add_argument('--skip-torch', default=os.environ.get("SD_SKIPTORCH",False), action='store_true', help="Skips running Torch checks, default: %(default)s")
|
group_install.add_argument('--skip-torch', default=env_flag("SD_SKIPTORCH", False), action='store_true', help="Skips running Torch checks, default: %(default)s")
|
||||||
group_install.add_argument('--skip-all', default=os.environ.get("SD_SKIPALL",False), action='store_true', help="Skips running all checks, default: %(default)s")
|
group_install.add_argument('--skip-all', default=env_flag("SD_SKIPALL", False), action='store_true', help="Skips running all checks, default: %(default)s")
|
||||||
group_install.add_argument('--skip-env', default=os.environ.get("SD_SKIPENV",False), action='store_true', help="Skips setting of env variables during startup, default: %(default)s")
|
group_install.add_argument('--skip-env', default=env_flag("SD_SKIPENV", False), action='store_true', help="Skips setting of env variables during startup, default: %(default)s")
|
||||||
|
|
||||||
|
|
||||||
def parse_args(parser):
|
def parse_args(parser):
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import shlex
|
import shlex
|
||||||
import threading
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import installer
|
import installer
|
||||||
|
|
@ -211,7 +210,6 @@ def start_server(immediate=True, server=None):
|
||||||
server = importlib.util.module_from_spec(module_spec)
|
server = importlib.util.module_from_spec(module_spec)
|
||||||
log.debug(f'Starting module: {server}')
|
log.debug(f'Starting module: {server}')
|
||||||
module_spec.loader.exec_module(server)
|
module_spec.loader.exec_module(server)
|
||||||
threading.Thread(target=installer.run_deferred_tasks, daemon=True).start()
|
|
||||||
|
|
||||||
uvicorn = None
|
uvicorn = None
|
||||||
if args.test:
|
if args.test:
|
||||||
|
|
@ -252,9 +250,10 @@ def main():
|
||||||
if args.skip_git or args.skip_all:
|
if args.skip_git or args.skip_all:
|
||||||
log.info('Skipping GIT operations')
|
log.info('Skipping GIT operations')
|
||||||
log.info(f'Platform: {installer.print_dict(installer.get_platform())}')
|
log.info(f'Platform: {installer.print_dict(installer.get_platform())}')
|
||||||
|
installer.check_version()
|
||||||
installer.check_venv()
|
installer.check_venv()
|
||||||
log.info(f'Args: {sys.argv[1:]}')
|
log.info(f'Args: {sys.argv[1:]}')
|
||||||
if not args.skip_env or args.skip_all:
|
if not args.skip_env and not args.skip_all:
|
||||||
installer.set_environment()
|
installer.set_environment()
|
||||||
if args.uv:
|
if args.uv:
|
||||||
installer.install('uv', 'uv')
|
installer.install('uv', 'uv')
|
||||||
|
|
@ -263,6 +262,7 @@ def main():
|
||||||
installer.check_onnx()
|
installer.check_onnx()
|
||||||
installer.check_transformers()
|
installer.check_transformers()
|
||||||
installer.check_diffusers()
|
installer.check_diffusers()
|
||||||
|
installer.check_modified_files()
|
||||||
if args.test:
|
if args.test:
|
||||||
log.info('Startup: mode=test')
|
log.info('Startup: mode=test')
|
||||||
installer.quick_allowed = False
|
installer.quick_allowed = False
|
||||||
|
|
@ -295,6 +295,7 @@ def main():
|
||||||
args = installer.parse_args(parser)
|
args = installer.parse_args(parser)
|
||||||
log.info(f'Installer time: {init_summary()}')
|
log.info(f'Installer time: {init_summary()}')
|
||||||
get_custom_args()
|
get_custom_args()
|
||||||
|
installer.update_wiki()
|
||||||
|
|
||||||
uv, instance = start_server(immediate=True, server=None)
|
uv, instance = start_server(immediate=True, server=None)
|
||||||
if installer.restart_required:
|
if installer.restart_required:
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ import argparse
|
||||||
import shlex
|
import shlex
|
||||||
|
|
||||||
|
|
||||||
|
def env_flag(name, default=False):
|
||||||
|
value = os.environ.get(name)
|
||||||
|
if value is None:
|
||||||
|
return default
|
||||||
|
return str(value).strip().lower() in ('1', 'true', 'yes', 'on')
|
||||||
|
|
||||||
|
|
||||||
def get_argv():
|
def get_argv():
|
||||||
return shlex.split(" ".join(sys.argv[1:])) if "USED_VSCODE_COMMAND_PICKARGS" in os.environ else sys.argv[1:]
|
return shlex.split(" ".join(sys.argv[1:])) if "USED_VSCODE_COMMAND_PICKARGS" in os.environ else sys.argv[1:]
|
||||||
|
|
||||||
|
|
@ -25,18 +32,18 @@ def add_config_arg(p, data_dir):
|
||||||
|
|
||||||
def add_compute_args(p):
|
def add_compute_args(p):
|
||||||
p.add_argument("--device-id", type=str, default=os.environ.get("SD_DEVICEID", None), help="Select the default GPU device to use, default: %(default)s")
|
p.add_argument("--device-id", type=str, default=os.environ.get("SD_DEVICEID", None), help="Select the default GPU device to use, default: %(default)s")
|
||||||
p.add_argument("--use-cuda", default=os.environ.get("SD_USECUDA", False), action='store_true', help="Force use nVidia CUDA backend, default: %(default)s")
|
p.add_argument("--use-cuda", default=env_flag("SD_USECUDA", False), action='store_true', help="Force use nVidia CUDA backend, default: %(default)s")
|
||||||
p.add_argument("--use-ipex", default=os.environ.get("SD_USEIPEX", False), action='store_true', help="Force use Intel OneAPI XPU backend, default: %(default)s")
|
p.add_argument("--use-ipex", default=env_flag("SD_USEIPEX", False), action='store_true', help="Force use Intel OneAPI XPU backend, default: %(default)s")
|
||||||
p.add_argument("--use-rocm", default=os.environ.get("SD_USEROCM", False), action='store_true', help="Force use AMD ROCm backend, default: %(default)s")
|
p.add_argument("--use-rocm", default=env_flag("SD_USEROCM", False), action='store_true', help="Force use AMD ROCm backend, default: %(default)s")
|
||||||
p.add_argument('--use-zluda', default=os.environ.get("SD_USEZLUDA", False), action='store_true', help="Force use ZLUDA, AMD GPUs only, default: %(default)s")
|
p.add_argument('--use-zluda', default=env_flag("SD_USEZLUDA", False), action='store_true', help="Force use ZLUDA, AMD GPUs only, default: %(default)s")
|
||||||
p.add_argument("--use-openvino", default=os.environ.get("SD_USEOPENVINO", False), action='store_true', help="Use Intel OpenVINO backend, default: %(default)s")
|
p.add_argument("--use-openvino", default=env_flag("SD_USEOPENVINO", False), action='store_true', help="Use Intel OpenVINO backend, default: %(default)s")
|
||||||
p.add_argument('--use-directml', default=os.environ.get("SD_USEDIRECTML", False), action='store_true', help="Use DirectML if no compatible GPU is detected, default: %(default)s")
|
p.add_argument('--use-directml', default=env_flag("SD_USEDIRECTML", False), action='store_true', help="Use DirectML if no compatible GPU is detected, default: %(default)s")
|
||||||
p.add_argument("--use-xformers", default=os.environ.get("SD_USEXFORMERS", False), action='store_true', help="Force use xFormers cross-optimization, default: %(default)s")
|
p.add_argument("--use-xformers", default=env_flag("SD_USEXFORMERS", False), action='store_true', help="Force use xFormers cross-optimization, default: %(default)s")
|
||||||
p.add_argument("--use-nightly", default=os.environ.get("SD_USENIGHTLY", False), action='store_true', help="Force use nightly torch builds, default: %(default)s")
|
p.add_argument("--use-nightly", default=env_flag("SD_USENIGHTLY", False), action='store_true', help="Force use nightly torch builds, default: %(default)s")
|
||||||
p.add_argument("--no-half", default=os.environ.get("SD_NOHALF", False), action='store_true', help="Do not switch the model to 16-bit float, default: %(default)s")
|
p.add_argument("--no-half", default=env_flag("SD_NOHALF", False), action='store_true', help="Do not switch the model to 16-bit float, default: %(default)s")
|
||||||
p.add_argument("--no-half-vae", default=os.environ.get("SD_NOHALFVAE", False), action='store_true', help="Do not switch VAE model to 16-bit float, default: %(default)s")
|
p.add_argument("--no-half-vae", default=env_flag("SD_NOHALFVAE", False), action='store_true', help="Do not switch VAE model to 16-bit float, default: %(default)s")
|
||||||
p.add_argument("--precision", type=str, help="Evaluate at this precision, default: %(default)s", choices=["full", "autocast"], default="autocast")
|
p.add_argument("--precision", type=str, help="Evaluate at this precision, default: %(default)s", choices=["full", "autocast"], default="autocast")
|
||||||
p.add_argument("--upcast-sampling", default=os.environ.get("SD_UPCASTSAMPLING", False), action='store_true', help="Upcast sampling, default: %(default)s")
|
p.add_argument("--upcast-sampling", default=env_flag("SD_UPCASTSAMPLING", False), action='store_true', help="Upcast sampling, default: %(default)s")
|
||||||
|
|
||||||
|
|
||||||
def add_ui_args(p):
|
def add_ui_args(p):
|
||||||
|
|
@ -48,27 +55,27 @@ def add_http_args(p):
|
||||||
p.add_argument("--server-name", type=str, default=os.environ.get("SD_SERVERNAME", None), help="Sets hostname of server, default: %(default)s")
|
p.add_argument("--server-name", type=str, default=os.environ.get("SD_SERVERNAME", None), help="Sets hostname of server, default: %(default)s")
|
||||||
p.add_argument("--tls-keyfile", type=str, default=os.environ.get("SD_TLSKEYFILE", None), help="Enable TLS and specify key file, default: %(default)s")
|
p.add_argument("--tls-keyfile", type=str, default=os.environ.get("SD_TLSKEYFILE", None), help="Enable TLS and specify key file, default: %(default)s")
|
||||||
p.add_argument("--tls-certfile", type=str, default=os.environ.get("SD_TLSCERTFILE", None), help="Enable TLS and specify cert file, default: %(default)s")
|
p.add_argument("--tls-certfile", type=str, default=os.environ.get("SD_TLSCERTFILE", None), help="Enable TLS and specify cert file, default: %(default)s")
|
||||||
p.add_argument("--tls-selfsign", action="store_true", default=os.environ.get("SD_TLSSELFSIGN", False), help="Enable TLS with self-signed certificates, default: %(default)s")
|
p.add_argument("--tls-selfsign", action="store_true", default=env_flag("SD_TLSSELFSIGN", False), help="Enable TLS with self-signed certificates, default: %(default)s")
|
||||||
p.add_argument("--cors-origins", type=str, default=os.environ.get("SD_CORSORIGINS", None), help="Allowed CORS origins as comma-separated list, default: %(default)s")
|
p.add_argument("--cors-origins", type=str, default=os.environ.get("SD_CORSORIGINS", None), help="Allowed CORS origins as comma-separated list, default: %(default)s")
|
||||||
p.add_argument("--cors-regex", type=str, default=os.environ.get("SD_CORSREGEX", None), help="Allowed CORS origins as regular expression, default: %(default)s")
|
p.add_argument("--cors-regex", type=str, default=os.environ.get("SD_CORSREGEX", None), help="Allowed CORS origins as regular expression, default: %(default)s")
|
||||||
p.add_argument('--subpath', type=str, default=os.environ.get("SD_SUBPATH", None), help='Customize the URL subpath for usage with reverse proxy')
|
p.add_argument('--subpath', type=str, default=os.environ.get("SD_SUBPATH", None), help='Customize the URL subpath for usage with reverse proxy')
|
||||||
p.add_argument("--autolaunch", default=os.environ.get("SD_AUTOLAUNCH", False), action='store_true', help="Open the UI URL in the system's default browser upon launch")
|
p.add_argument("--autolaunch", default=env_flag("SD_AUTOLAUNCH", False), action='store_true', help="Open the UI URL in the system's default browser upon launch")
|
||||||
p.add_argument("--auth", type=str, default=os.environ.get("SD_AUTH", None), help='Set access authentication like "user:pwd,user:pwd""')
|
p.add_argument("--auth", type=str, default=os.environ.get("SD_AUTH", None), help='Set access authentication like "user:pwd,user:pwd""')
|
||||||
p.add_argument("--auth-file", type=str, default=os.environ.get("SD_AUTHFILE", None), help='Set access authentication using file, default: %(default)s')
|
p.add_argument("--auth-file", type=str, default=os.environ.get("SD_AUTHFILE", None), help='Set access authentication using file, default: %(default)s')
|
||||||
p.add_argument("--allowed-paths", nargs='+', default=[], type=str, required=False, help="add additional paths to paths allowed for web access")
|
p.add_argument("--allowed-paths", nargs='+', default=[], type=str, required=False, help="add additional paths to paths allowed for web access")
|
||||||
p.add_argument("--share", default=os.environ.get("SD_SHARE", False), action='store_true', help="Enable UI accessible through Gradio site, default: %(default)s")
|
p.add_argument("--share", default=env_flag("SD_SHARE", False), action='store_true', help="Enable UI accessible through Gradio site, default: %(default)s")
|
||||||
p.add_argument("--insecure", default=os.environ.get("SD_INSECURE", False), action='store_true', help="Enable extensions tab regardless of other options, default: %(default)s")
|
p.add_argument("--insecure", default=env_flag("SD_INSECURE", False), action='store_true', help="Enable extensions tab regardless of other options, default: %(default)s")
|
||||||
p.add_argument("--listen", default=os.environ.get("SD_LISTEN", False), action='store_true', help="Launch web server using public IP address, default: %(default)s")
|
p.add_argument("--listen", default=env_flag("SD_LISTEN", False), action='store_true', help="Launch web server using public IP address, default: %(default)s")
|
||||||
p.add_argument("--remote", default=os.environ.get("SD_REMOTE", False), action='store_true', help="Reduce client-server communication, default: %(default)s")
|
p.add_argument("--remote", default=env_flag("SD_REMOTE", False), action='store_true', help="Reduce client-server communication, default: %(default)s")
|
||||||
p.add_argument("--port", type=int, default=os.environ.get("SD_PORT", 7860), help="Launch web server with given server port, default: %(default)s")
|
p.add_argument("--port", type=int, default=os.environ.get("SD_PORT", 7860), help="Launch web server with given server port, default: %(default)s")
|
||||||
|
|
||||||
|
|
||||||
def add_diag_args(p):
|
def add_diag_args(p):
|
||||||
p.add_argument('--experimental', default=os.environ.get("SD_EXPERIMENTAL", False), action='store_true', help="Allow unsupported versions of libraries, default: %(default)s")
|
p.add_argument('--experimental', default=env_flag("SD_EXPERIMENTAL", False), action='store_true', help="Allow unsupported versions of libraries, default: %(default)s")
|
||||||
p.add_argument('--ignore', default=os.environ.get("SD_IGNORE", False), action='store_true', help="Ignore any errors and attempt to continue")
|
p.add_argument('--ignore', default=env_flag("SD_IGNORE", False), action='store_true', help="Ignore any errors and attempt to continue")
|
||||||
p.add_argument('--new', default=os.environ.get("SD_NEW", False), action='store_true', help="Force newer/untested version of libraries, default: %(default)s")
|
p.add_argument('--new', default=env_flag("SD_NEW", False), action='store_true', help="Force newer/untested version of libraries, default: %(default)s")
|
||||||
p.add_argument('--safe', default=os.environ.get("SD_SAFE", False), action='store_true', help="Run in safe mode with no user extensions")
|
p.add_argument('--safe', default=env_flag("SD_SAFE", False), action='store_true', help="Run in safe mode with no user extensions")
|
||||||
p.add_argument('--test', default=os.environ.get("SD_TEST", False), action='store_true', help="Run test only and exit")
|
p.add_argument('--test', default=env_flag("SD_TEST", False), action='store_true', help="Run test only and exit")
|
||||||
p.add_argument('--version', default=False, action='store_true', help="Print version information")
|
p.add_argument('--version', default=False, action='store_true', help="Print version information")
|
||||||
p.add_argument("--monitor", default=os.environ.get("SD_MONITOR", 0), help="Run memory monitor, default: %(default)s")
|
p.add_argument("--monitor", default=os.environ.get("SD_MONITOR", 0), help="Run memory monitor, default: %(default)s")
|
||||||
p.add_argument("--status", default=os.environ.get("SD_STATUS", 120), help="Run server is-alive status, default: %(default)s")
|
p.add_argument("--status", default=os.environ.get("SD_STATUS", 120), help="Run server is-alive status, default: %(default)s")
|
||||||
|
|
@ -76,11 +83,11 @@ def add_diag_args(p):
|
||||||
|
|
||||||
def add_log_args(p):
|
def add_log_args(p):
|
||||||
p.add_argument("--log", type=str, default=os.environ.get("SD_LOG", None), help="Set log file, default: %(default)s")
|
p.add_argument("--log", type=str, default=os.environ.get("SD_LOG", None), help="Set log file, default: %(default)s")
|
||||||
p.add_argument('--debug', default=not os.environ.get("SD_NODEBUG", False), action='store_true', help="Run with debug logging, default: %(default)s")
|
p.add_argument('--debug', default=not env_flag("SD_NODEBUG", False), action='store_true', help="Run with debug logging, default: %(default)s")
|
||||||
p.add_argument("--trace", default=os.environ.get("SD_TRACE", False), action='store_true', help="Run with trace logging, default: %(default)s")
|
p.add_argument("--trace", default=env_flag("SD_TRACE", False), action='store_true', help="Run with trace logging, default: %(default)s")
|
||||||
p.add_argument("--profile", default=os.environ.get("SD_PROFILE", False), action='store_true', help="Run profiler, default: %(default)s")
|
p.add_argument("--profile", default=env_flag("SD_PROFILE", False), action='store_true', help="Run profiler, default: %(default)s")
|
||||||
p.add_argument('--docs', default=not os.environ.get("SD_NODOCS", False), action='store_true', help="Mount API docs, default: %(default)s")
|
p.add_argument('--docs', default=not env_flag("SD_NODOCS", False), action='store_true', help="Mount API docs, default: %(default)s")
|
||||||
p.add_argument("--api-log", default=not os.environ.get("SD_NOAPILOG", False), action='store_true', help="Log all API requests")
|
p.add_argument("--api-log", default=not env_flag("SD_NOAPILOG", False), action='store_true', help="Log all API requests")
|
||||||
|
|
||||||
|
|
||||||
parsed = None
|
parsed = None
|
||||||
|
|
@ -134,8 +141,8 @@ def compatibility_args():
|
||||||
from modules.paths import data_path
|
from modules.paths import data_path
|
||||||
group_compat = parser.add_argument_group('Compatibility options')
|
group_compat = parser.add_argument_group('Compatibility options')
|
||||||
group_compat.add_argument('--backend', type=str, choices=['diffusers', 'original'], help=argparse.SUPPRESS)
|
group_compat.add_argument('--backend', type=str, choices=['diffusers', 'original'], help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--allow-code", default=os.environ.get("SD_ALLOWCODE", False), action='store_true', help=argparse.SUPPRESS)
|
group_compat.add_argument("--allow-code", default=env_flag("SD_ALLOWCODE", False), action='store_true', help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--enable_insecure_extension_access", default=os.environ.get("SD_INSECURE", False), action='store_true', help=argparse.SUPPRESS)
|
group_compat.add_argument("--enable_insecure_extension_access", default=env_flag("SD_INSECURE", False), action='store_true', help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--use-cpu", nargs='+', default=[], type=str.lower, help=argparse.SUPPRESS)
|
group_compat.add_argument("--use-cpu", nargs='+', default=[], type=str.lower, help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("-f", action='store_true', help=argparse.SUPPRESS) # allows running as root; implemented outside of webui
|
group_compat.add_argument("-f", action='store_true', help=argparse.SUPPRESS) # allows running as root; implemented outside of webui
|
||||||
group_compat.add_argument('--vae', type=str, default=os.environ.get("SD_VAE", None), help=argparse.SUPPRESS)
|
group_compat.add_argument('--vae', type=str, default=os.environ.get("SD_VAE", None), help=argparse.SUPPRESS)
|
||||||
|
|
@ -149,16 +156,16 @@ def compatibility_args():
|
||||||
group_compat.add_argument("--api", action='store_true', help=argparse.SUPPRESS, default=True)
|
group_compat.add_argument("--api", action='store_true', help=argparse.SUPPRESS, default=True)
|
||||||
group_compat.add_argument("--api-auth", type=str, help=argparse.SUPPRESS, default=None)
|
group_compat.add_argument("--api-auth", type=str, help=argparse.SUPPRESS, default=None)
|
||||||
group_compat.add_argument('--api-only', default=False, help=argparse.SUPPRESS)
|
group_compat.add_argument('--api-only', default=False, help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--disable-queue", default=os.environ.get("SD_DISABLEQUEUE", False), action='store_true', help=argparse.SUPPRESS)
|
group_compat.add_argument("--disable-queue", default=env_flag("SD_DISABLEQUEUE", False), action='store_true', help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--no-hashing", default=os.environ.get("SD_NOHASHING", False), action='store_true', help=argparse.SUPPRESS)
|
group_compat.add_argument("--no-hashing", default=env_flag("SD_NOHASHING", False), action='store_true', help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--no-metadata", default=os.environ.get("SD_NOMETADATA", False), action='store_true', help=argparse.SUPPRESS)
|
group_compat.add_argument("--no-metadata", default=env_flag("SD_NOMETADATA", False), action='store_true', help=argparse.SUPPRESS)
|
||||||
|
|
||||||
|
|
||||||
def settings_args(opts, args):
|
def settings_args(opts, args):
|
||||||
# removed args are added here as hidden in fixed format for compatbility reasons
|
# removed args are added here as hidden in fixed format for compatbility reasons
|
||||||
from modules.paths import data_path
|
from modules.paths import data_path
|
||||||
group_compat = parser.add_argument_group('Compatibility options')
|
group_compat = parser.add_argument_group('Compatibility options')
|
||||||
group_compat.add_argument("--allow-code", default=os.environ.get("SD_ALLOWCODE", False), action='store_true', help=argparse.SUPPRESS)
|
group_compat.add_argument("--allow-code", default=env_flag("SD_ALLOWCODE", False), action='store_true', help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("--use-cpu", nargs='+', default=[], type=str.lower, help=argparse.SUPPRESS)
|
group_compat.add_argument("--use-cpu", nargs='+', default=[], type=str.lower, help=argparse.SUPPRESS)
|
||||||
group_compat.add_argument("-f", action='store_true', help=argparse.SUPPRESS) # allows running as root; implemented outside of webui
|
group_compat.add_argument("-f", action='store_true', help=argparse.SUPPRESS) # allows running as root; implemented outside of webui
|
||||||
group_compat.add_argument('--vae', type=str, default=os.environ.get("SD_VAE", None), help=argparse.SUPPRESS)
|
group_compat.add_argument('--vae', type=str, default=os.environ.get("SD_VAE", None), help=argparse.SUPPRESS)
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ def readfile(filename: str, silent: bool = False, lock: bool = False, *, as_type
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def writefile(data, filename, mode='w', silent=False, atomic=False):
|
def writefile(obj, filename, mode='w', silent=False, atomic=False):
|
||||||
import tempfile
|
import tempfile
|
||||||
global locking_available # pylint: disable=global-statement
|
global locking_available # pylint: disable=global-statement
|
||||||
lock_file = None
|
lock_file = None
|
||||||
|
|
@ -86,6 +86,7 @@ def writefile(data, filename, mode='w', silent=False, atomic=False):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
|
data = obj.copy()
|
||||||
# skipkeys=True, ensure_ascii=True, check_circular=True, allow_nan=True
|
# skipkeys=True, ensure_ascii=True, check_circular=True, allow_nan=True
|
||||||
if type(data) == dict:
|
if type(data) == dict:
|
||||||
output = json.dumps(data, indent=2, default=default)
|
output = json.dumps(data, indent=2, default=default)
|
||||||
|
|
|
||||||
14
webui.py
14
webui.py
|
|
@ -92,6 +92,8 @@ def initialize():
|
||||||
def _scan_models():
|
def _scan_models():
|
||||||
modules.modelloader.cleanup_models()
|
modules.modelloader.cleanup_models()
|
||||||
modules.sd_checkpoint.setup_model()
|
modules.sd_checkpoint.setup_model()
|
||||||
|
from modules.sd_checkpoint import write_metadata
|
||||||
|
write_metadata()
|
||||||
def _scan_lora():
|
def _scan_lora():
|
||||||
from modules.lora import lora_load
|
from modules.lora import lora_load
|
||||||
lora_load.list_available_networks()
|
lora_load.list_available_networks()
|
||||||
|
|
@ -300,6 +302,16 @@ def start_ui():
|
||||||
gradio_auth_creds += [x.strip() for x in line.split(',') if x.strip()]
|
gradio_auth_creds += [x.strip() for x in line.split(',') if x.strip()]
|
||||||
if len(gradio_auth_creds) > 0:
|
if len(gradio_auth_creds) > 0:
|
||||||
log.info(f'Authentication enabled: users={len(list(gradio_auth_creds))}')
|
log.info(f'Authentication enabled: users={len(list(gradio_auth_creds))}')
|
||||||
|
auth_pairs = []
|
||||||
|
for cred in gradio_auth_creds:
|
||||||
|
if ':' not in cred:
|
||||||
|
log.warning(f'Ignoring malformed auth entry: "{cred}"')
|
||||||
|
continue
|
||||||
|
user, password = cred.split(':', 1)
|
||||||
|
if len(user) == 0 or len(password) == 0:
|
||||||
|
log.warning(f'Ignoring malformed auth entry: "{cred}"')
|
||||||
|
continue
|
||||||
|
auth_pairs.append((user, password))
|
||||||
|
|
||||||
global local_url # pylint: disable=global-statement
|
global local_url # pylint: disable=global-statement
|
||||||
stdout = io.StringIO()
|
stdout = io.StringIO()
|
||||||
|
|
@ -320,7 +332,7 @@ def start_ui():
|
||||||
ssl_certfile=shared.cmd_opts.tls_certfile,
|
ssl_certfile=shared.cmd_opts.tls_certfile,
|
||||||
ssl_verify=not shared.cmd_opts.tls_selfsign,
|
ssl_verify=not shared.cmd_opts.tls_selfsign,
|
||||||
debug=False,
|
debug=False,
|
||||||
auth=[tuple(cred.split(':')) for cred in gradio_auth_creds] if gradio_auth_creds else None,
|
auth=auth_pairs if auth_pairs else None,
|
||||||
prevent_thread_lock=True,
|
prevent_thread_lock=True,
|
||||||
max_threads=64,
|
max_threads=64,
|
||||||
show_api=False,
|
show_api=False,
|
||||||
|
|
|
||||||
4
webui.sh
4
webui.sh
|
|
@ -99,11 +99,11 @@ then
|
||||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm/lib
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -z "${ACCELERATE}" ]] && [ ${ACCELERATE}="True" ] && [ -x "$(command -v accelerate)" ]
|
if [[ -n "${ACCELERATE}" ]] && [[ "${ACCELERATE}" == "True" ]] && [ -x "$(command -v accelerate)" ]
|
||||||
then
|
then
|
||||||
echo "Launch: accelerate"
|
echo "Launch: accelerate"
|
||||||
exec accelerate launch --num_cpu_threads_per_process=6 launch.py "$@"
|
exec accelerate launch --num_cpu_threads_per_process=6 launch.py "$@"
|
||||||
elif [[ ! -z "${IPEXRUN}" ]] && [ ${IPEXRUN}="True" ] && [ -x "$(command -v ipexrun)" ]
|
elif [[ -n "${IPEXRUN}" ]] && [[ "${IPEXRUN}" == "True" ]] && [ -x "$(command -v ipexrun)" ]
|
||||||
then
|
then
|
||||||
echo "Launch: ipexrun"
|
echo "Launch: ipexrun"
|
||||||
exec ipexrun --multi-task-manager 'taskset' --memory-allocator 'jemalloc' launch.py "$@"
|
exec ipexrun --multi-task-manager 'taskset' --memory-allocator 'jemalloc' launch.py "$@"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue