File size: 4,247 Bytes
ceeafb1
 
 
 
 
 
 
1291827
12ae06e
ceeafb1
12ae06e
ceeafb1
f9b46d8
 
c1d0017
 
 
 
f9b46d8
ceeafb1
 
 
 
 
5642a74
 
ceeafb1
 
5642a74
 
 
 
ceeafb1
f9b46d8
1291827
 
 
 
 
 
 
 
 
 
 
0540f3c
12ae06e
4424587
 
 
 
 
5642a74
4424587
 
 
0540f3c
5642a74
 
 
0540f3c
5642a74
0540f3c
5642a74
0540f3c
4424587
 
5642a74
4424587
 
1291827
 
 
4424587
 
 
 
12ae06e
 
ceeafb1
f9b46d8
1291827
5642a74
 
 
 
 
 
 
0540f3c
a3f8f07
0540f3c
5642a74
 
 
0540f3c
5642a74
 
 
 
0540f3c
ceeafb1
4424587
 
ceeafb1
12ae06e
ceeafb1
12ae06e
4424587
12ae06e
ceeafb1
f7c0346
 
 
 
0540f3c
4424587
ceeafb1
12ae06e
 
 
 
 
 
ceeafb1
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
##~   LAUNCH CODE | BY: ANXETY   ~##

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


# Setup Env
env = os.getenv('ENV_NAME')
root_path = os.getenv('ROOT_PATH')
webui_path = os.getenv('WEBUI_PATH')
free_plan = os.getenv('FREE_PLAN')


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

settings = load_settings()
ngrok_token = settings.get('ngrok_token', "")
zrok_token = settings.get('zrok_token', "")
commandline_arguments = settings.get('commandline_arguments', "")
change_webui = settings.get('change_webui', "")


# ========================== OTHER ==========================
def is_package_installed(package_name):
    try:
        subprocess.run(["npm", "ls", "-g", package_name], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        return True
    except subprocess.CalledProcessError:
        return False

lt_tunnel = is_package_installed('localtunnel')


# ======================== 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)
        return response.json().get('ip', 'N/A')
    except Exception as e:
        print(f"Error getting public {version} address:", e)

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

tunnel_class = pickle.load(open(f"{root_path}/new_tunnel", "rb"), encoding="utf-8")
tunnel_port = 1834
tunnel = tunnel_class(tunnel_port)
tunnel.add_tunnel(command="cl tunnel --url localhost:{port}", name="cl", pattern=re.compile(r"[\w-]+\.trycloudflare\.com"))

if lt_tunnel:
    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.")

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/",
    "ad_extra_models_dir": f"{webui_path}/models/adetailer/",
    "sd_checkpoint_hash": "",
    "sd_model_checkpoint": "",
    "sd_vae": "None"
}

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

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

    for key, value in paths_to_check.items():
        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)


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'

    if change_webui == 'A1111':
        commandline_arguments += ' --xformers'
    else:
        commandline_arguments += ' --disable-xformers --opt-sdp-attention --cuda-stream --pin-shared-memory'

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

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")

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