stable-diffusion-webui
160 строк · 4.2 Кб
1import json2import os3import sys4
5import platform6import hashlib7import pkg_resources8import psutil9import re10
11import launch12from modules import paths_internal, timer, shared, extensions, errors13
14checksum_token = "DontStealMyGamePlz__WINNERS_DONT_USE_DRUGS__DONT_COPY_THAT_FLOPPY"15environment_whitelist = {16"GIT",17"INDEX_URL",18"WEBUI_LAUNCH_LIVE_OUTPUT",19"GRADIO_ANALYTICS_ENABLED",20"PYTHONPATH",21"TORCH_INDEX_URL",22"TORCH_COMMAND",23"REQS_FILE",24"XFORMERS_PACKAGE",25"CLIP_PACKAGE",26"OPENCLIP_PACKAGE",27"ASSETS_REPO",28"STABLE_DIFFUSION_REPO",29"K_DIFFUSION_REPO",30"BLIP_REPO",31"ASSETS_COMMIT_HASH",32"STABLE_DIFFUSION_COMMIT_HASH",33"K_DIFFUSION_COMMIT_HASH",34"BLIP_COMMIT_HASH",35"COMMANDLINE_ARGS",36"IGNORE_CMD_ARGS_ERRORS",37}
38
39
40def pretty_bytes(num, suffix="B"):41for unit in ["", "K", "M", "G", "T", "P", "E", "Z", "Y"]:42if abs(num) < 1024 or unit == 'Y':43return f"{num:.0f}{unit}{suffix}"44num /= 102445
46
47def get():48res = get_dict()49
50text = json.dumps(res, ensure_ascii=False, indent=4)51
52h = hashlib.sha256(text.encode("utf8"))53text = text.replace(checksum_token, h.hexdigest())54
55return text56
57
58re_checksum = re.compile(r'"Checksum": "([0-9a-fA-F]{64})"')59
60
61def check(x):62m = re.search(re_checksum, x)63if not m:64return False65
66replaced = re.sub(re_checksum, f'"Checksum": "{checksum_token}"', x)67
68h = hashlib.sha256(replaced.encode("utf8"))69return h.hexdigest() == m.group(1)70
71
72def get_dict():73ram = psutil.virtual_memory()74
75res = {76"Platform": platform.platform(),77"Python": platform.python_version(),78"Version": launch.git_tag(),79"Commit": launch.commit_hash(),80"Script path": paths_internal.script_path,81"Data path": paths_internal.data_path,82"Extensions dir": paths_internal.extensions_dir,83"Checksum": checksum_token,84"Commandline": get_argv(),85"Torch env info": get_torch_sysinfo(),86"Exceptions": errors.get_exceptions(),87"CPU": {88"model": platform.processor(),89"count logical": psutil.cpu_count(logical=True),90"count physical": psutil.cpu_count(logical=False),91},92"RAM": {93x: pretty_bytes(getattr(ram, x, 0)) for x in ["total", "used", "free", "active", "inactive", "buffers", "cached", "shared"] if getattr(ram, x, 0) != 094},95"Extensions": get_extensions(enabled=True),96"Inactive extensions": get_extensions(enabled=False),97"Environment": get_environment(),98"Config": get_config(),99"Startup": timer.startup_record,100"Packages": sorted([f"{pkg.key}=={pkg.version}" for pkg in pkg_resources.working_set]),101}102
103return res104
105
106def get_environment():107return {k: os.environ[k] for k in sorted(os.environ) if k in environment_whitelist}108
109
110def get_argv():111res = []112
113for v in sys.argv:114if shared.cmd_opts.gradio_auth and shared.cmd_opts.gradio_auth == v:115res.append("<hidden>")116continue117
118if shared.cmd_opts.api_auth and shared.cmd_opts.api_auth == v:119res.append("<hidden>")120continue121
122res.append(v)123
124return res125
126re_newline = re.compile(r"\r*\n")127
128
129def get_torch_sysinfo():130try:131import torch.utils.collect_env132info = torch.utils.collect_env.get_env_info()._asdict()133
134return {k: re.split(re_newline, str(v)) if "\n" in str(v) else v for k, v in info.items()}135except Exception as e:136return str(e)137
138
139def get_extensions(*, enabled):140
141try:142def to_json(x: extensions.Extension):143return {144"name": x.name,145"path": x.path,146"version": x.version,147"branch": x.branch,148"remote": x.remote,149}150
151return [to_json(x) for x in extensions.extensions if not x.is_builtin and x.enabled == enabled]152except Exception as e:153return str(e)154
155
156def get_config():157try:158return shared.opts.data159except Exception as e:160return str(e)161