File size: 4,446 Bytes
d99a751
 
 
 
 
 
 
 
 
 
 
 
 
 
a714fc0
d99a751
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67e8fdb
d99a751
e6945bf
a714fc0
 
047211d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d99a751
 
047211d
83e7fa0
 
 
14c3887
 
d99a751
 
e6945bf
047211d
67e8fdb
047211d
67e8fdb
047211d
 
31d9df8
67e8fdb
 
 
 
 
 
 
047211d
d99a751
047211d
67e8fdb
d99a751
67e8fdb
 
 
 
 
 
 
047211d
 
d99a751
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
#!/usr/bin/env python
# coding: utf-8

# In[ ]:


import os
import re
import sys
import time
import json
import requests
from datetime import timedelta


#  ================= DETECT ENV =================
def detect_environment():
    environments = {
        'COLAB_GPU': ('Google Colab', "/content"),
        'KAGGLE_URL_BASE': ('Kaggle', "/kaggle/working/content"),
        'SAGEMAKER_INTERNAL_IMAGE_URI': ('SageMaker Studio Lab', "/home/studio-lab-user/content")
    }

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

    sys.exit("\033[31mError: an unsupported runtime environment was detected.\n\033[34mSupported environments:\033[0m Google Colab, Kaggle, Sagemaker Studio Lab")

env, root_path = 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']
commandline_arguments = settings['commandline_arguments']


# ======================== TUNNEL ========================
if env != "SageMaker Studio Lab":
    import cloudpickle as pickle

    password = "x1101"
    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)

    public_ipv4 = get_public_ip(version='ipv4')

    tunnel_class = pickle.load(open(f"{root_path}/new_tunnel", "rb"), encoding="utf-8")
    tunnel_port= 1101
    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.")
# ======================== TUNNEL ========================


# automatic fixing path V2
get_ipython().system('sed -i \'s#"tagger_hf_cache_dir": ".*models/interrogators"#"tagger_hf_cache_dir": "{root_path}/sdw/models/interrogators"#\' {webui_path}/config.json')
get_ipython().system('sed -i \'s#"additional_networks_extra_lora_path": ".*models/Lora/"#"additional_networks_extra_lora_path": "{root_path}/sdw/models/Lora/"#\' {webui_path}/config.json')
# ---
get_ipython().system('sed -i \'s/"sd_checkpoint_hash": ".*"/"sd_checkpoint_hash": ""/g; s/"sd_model_checkpoint": ".*"/"sd_model_checkpoint": ""/g; s/"sd_vae": ".*"/"sd_vae": "None"/g\' {webui_path}/config.json')


if env != "SageMaker Studio Lab":
    with tunnel:
        get_ipython().system('#python -m http.server 1101')
        get_ipython().run_line_magic('cd', '{webui_path}')

        if ngrok_token:
            commandline_arguments += ' --ngrok ' + ngrok_token
        commandline_arguments += f" --port=1101 --encrypt-pass=1769" #  --encrypt-pass={password}

        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[0mYou have been conducting this session for - \033[33m{time_since_start}\033[0m\n\n")

else:
    if ngrok_token:
        get_ipython().run_line_magic('cd', '{webui_path}')

        commandline_arguments += ' --ngrok ' + ngrok_token

        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[0mYou have been conducting this session for - \033[33m{time_since_start}\033[0m\n\n")

    else:
        print("Oops... I think you forgot to insert the token `ngrok`..... go back to widgets and insert it to start webui... no way without it :/\nYou can get the token here:\n\nhttps://dashboard.ngrok.com/get-started/your-authtoken")