File size: 4,592 Bytes
26cdd88
 
a3d898e
 
 
 
 
5ad440e
a3d898e
5ad440e
a3d898e
a714fc0
a3d898e
 
db8b6d3
a3d898e
626caba
7e4ef02
a3d898e
 
 
 
fdc7ba2
a3d898e
fdc7ba2
a3d898e
 
 
 
 
 
 
 
 
 
 
 
90c2ce3
a3d898e
db8b6d3
a3d898e
67e8fdb
afae1b4
5ad440e
7e4ef02
 
 
 
 
 
 
 
 
 
 
afae1b4
 
 
 
 
 
 
 
7e4ef02
 
afae1b4
7e4ef02
 
 
 
 
 
 
 
5ad440e
 
a3d898e
047211d
afae1b4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b1f46f
 
afae1b4
a3d898e
db8b6d3
7e4ef02
 
67e8fdb
5ad440e
a3d898e
5ad440e
7e4ef02
5ad440e
67e8fdb
db8b6d3
fca9e7a
c4a53cf
db8b6d3
7e4ef02
67e8fdb
a3d898e
5ad440e
 
 
 
 
 
 
 
b224904
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
##~   LAUNCH CODE | BY: ANXETY   ~##

import os
import re
import time
import json
import requests
import cloudpickle as pickle
from datetime import timedelta
from IPython.display import clear_output


#  ================= DETECT ENV =================
def detect_environment():
    free_plan = (os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') / (1024 ** 3) <= 20)
    environments = {
        'COLAB_GPU': ('Google Colab', "/root" if free_plan else "/content"),
        'KAGGLE_URL_BASE': ('Kaggle', "/kaggle/working/content")
    }

    for env_var, (environment, path) in environments.items():
        if env_var in os.environ:
            return environment, path, free_plan

env, root_path, free_plan = detect_environment()
webui_path = f"{root_path}/sdw"
#  ----------------------------------------------

def load_settings():
    SETTINGS_FILE = f'{root_path}/settings.json'
    if os.path.exists(SETTINGS_FILE):
        with open(SETTINGS_FILE, 'r') as f:
            settings = json.load(f)
        return settings

settings = load_settings()
ngrok_token = settings['ngrok_token']
zrok_token = settings['zrok_token']
commandline_arguments = settings['commandline_arguments']
change_webui = settings['change_webui']


# ======================== TUNNEL V2 ========================
print('Please Wait...')

def get_public_ip(version='ipv4'):
    try:
        url = f'https://api64.ipify.org?format=json&{version}=true'
        response = requests.get(url)
        data = response.json()
        public_ip = data['ip']
        return public_ip
    except Exception as e:
        print(f"Error getting public {version} address:", e)

# Check if public IP is already saved, if not then get it
try:
    with open(f"{root_path}/public_ip.txt", "r") as file:
        public_ipv4 = file.read().strip()
except FileNotFoundError:
    public_ipv4 = get_public_ip(version='ipv4')
    with open(f"{root_path}/public_ip.txt", "w") as file:
        file.write(public_ipv4)

tunnel_class = pickle.load(open(f"{root_path}/new_tunnel", "rb"), encoding="utf-8")
tunnel_port = 1734
tunnel = tunnel_class(tunnel_port)
tunnel.add_tunnel(command="cl tunnel --url localhost:{port}", name="cl", pattern=re.compile(r"[\w-]+\.trycloudflare\.com"))
tunnel.add_tunnel(command="lt --port {port}", name="lt", pattern=re.compile(r"[\w-]+\.loca\.lt"), note="Password : " + "\033[32m" + public_ipv4 + "\033[0m" + " rerun cell if 404 error.")

''' add zrok tunnel '''
if zrok_token:
    get_ipython().system('zrok enable {zrok_token} &> /dev/null')
    tunnel.add_tunnel(command="zrok share public http://localhost:{port}/ --headless", name="zrok", pattern=re.compile(r"[\w-]+\.share\.zrok\.io"))

clear_output()


# =============== Automatic Fixing Path V3 ===============
paths_to_check = [
    ("tagger_hf_cache_dir", f"{webui_path}/models/interrogators/"),
    ("additional_networks_extra_lora_path", f"{webui_path}/models/Lora/"),
    ("ad_extra_models_dir", f"{webui_path}/models/adetailer/"),
    ("sd_checkpoint_hash", ""),
    ("sd_model_checkpoint", ""),
    ("sd_vae", "None")
]

config_path = f'{webui_path}/ui-config.json'

with open(config_path, 'r') as file:
    config_data = json.load(file)

for key, value in paths_to_check:
    if key in config_data and config_data[key] != value:
        sed_command = f"sed -i 's|\"{key}\": \".*\"|\"{key}\": \"{value}\"|' {config_path}"
        os.system(sed_command)

# Additional check for Kaggle
if env == 'Kaggle':
   get_ipython().system('sed -i \'s/"civitai_interface\\/NSFW content\\/value":.*/"civitai_interface\\/NSFW content\\/value": false/g\' {webui_path}/ui-config.json')
#  -------------------------------------------------------


with tunnel:
    get_ipython().run_line_magic('cd', '{webui_path}')

    commandline_arguments += f' --port={tunnel_port}'
    if ngrok_token:
        commandline_arguments += f' --ngrok {ngrok_token}'
    if env != "Google Colab":
        commandline_arguments += f' --encrypt-pass={tunnel_port} --api'

    # -- FORGE --
    if change_webui == 'Forge':
        commandline_arguments += ' --cuda-stream --pin-shared-memory'

    get_ipython().system('COMMANDLINE_ARGS="{commandline_arguments}" python launch.py')


# after runnig
start_colab = float(open(f'{webui_path}/static/colabTimer.txt', 'r').read())
time_since_start = str(timedelta(seconds=time.time()-start_colab)).split('.')[0]
print(f"\n⌚️ \033[0mВы проводите эту сессию в течение - \033[33m{time_since_start}\033[0m\n\n")

''' del zrok tunnel '''
if zrok_token:
    get_ipython().system('zrok disable &> /dev/null')