File size: 6,015 Bytes
a3d898e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26cdd88
 
a3d898e
 
 
 
 
5ad440e
a3d898e
5ad440e
a3d898e
a714fc0
a3d898e
 
37eccea
a3d898e
626caba
7e4ef02
a3d898e
 
 
 
fdc7ba2
a3d898e
fdc7ba2
a3d898e
 
 
 
 
 
 
 
 
 
 
 
90c2ce3
a3d898e
db8b6d3
a3d898e
67e8fdb
a3d898e
5ad440e
7e4ef02
 
 
 
 
 
 
 
 
 
 
 
 
 
5ad440e
7e4ef02
 
 
 
 
 
 
 
5ad440e
 
a3d898e
 
047211d
83e7fa0
2fb830d
 
 
14c3887
9b1f46f
 
 
a3d898e
db8b6d3
7e4ef02
 
67e8fdb
5ad440e
a3d898e
5ad440e
7e4ef02
5ad440e
67e8fdb
db8b6d3
fca9e7a
c4a53cf
db8b6d3
7e4ef02
67e8fdb
b224904
5ad440e
 
 
 
 
 
 
 
a3d898e
 
 
 
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
131
132
133
134
{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "JKTCrY9LU7Oq"
      },
      "outputs": [],
      "source": [
        "##~   LAUNCH CODE | BY: ANXETY   ~##\n",
        "\n",
        "import os\n",
        "import re\n",
        "import time\n",
        "import json\n",
        "import requests\n",
        "import cloudpickle as pickle\n",
        "from datetime import timedelta\n",
        "from IPython.display import clear_output\n",
        "\n",
        "\n",
        "#  ================= DETECT ENV =================\n",
        "def detect_environment():\n",
        "    free_plan = (os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') / (1024 ** 3) <= 20)\n",
        "    environments = {\n",
        "        'COLAB_GPU': ('Google Colab', \"/root\" if free_plan else \"/content\"),\n",
        "        'KAGGLE_URL_BASE': ('Kaggle', \"/kaggle/working/content\")\n",
        "    }\n",
        "\n",
        "    for env_var, (environment, path) in environments.items():\n",
        "        if env_var in os.environ:\n",
        "            return environment, path, free_plan\n",
        "\n",
        "env, root_path, free_plan = detect_environment()\n",
        "webui_path = f\"{root_path}/sdw\"\n",
        "#  ----------------------------------------------\n",
        "\n",
        "def load_settings():\n",
        "    SETTINGS_FILE = f'{root_path}/settings.json'\n",
        "    if os.path.exists(SETTINGS_FILE):\n",
        "        with open(SETTINGS_FILE, 'r') as f:\n",
        "            settings = json.load(f)\n",
        "        return settings\n",
        "\n",
        "settings = load_settings()\n",
        "ngrok_token = settings['ngrok_token']\n",
        "zrok_token = settings['zrok_token']\n",
        "commandline_arguments = settings['commandline_arguments']\n",
        "change_webui = settings['change_webui']\n",
        "\n",
        "\n",
        "# ======================== TUNNEL ========================\n",
        "print('Please Wait...')\n",
        "\n",
        "def get_public_ip(version='ipv4'):\n",
        "    try:\n",
        "        url = f'https://api64.ipify.org?format=json&{version}=true'\n",
        "        response = requests.get(url)\n",
        "        data = response.json()\n",
        "        public_ip = data['ip']\n",
        "        return public_ip\n",
        "    except Exception as e:\n",
        "        print(f\"Error getting public {version} address:\", e)\n",
        "\n",
        "public_ipv4 = get_public_ip(version='ipv4')\n",
        "\n",
        "tunnel_class = pickle.load(open(f\"{root_path}/new_tunnel\", \"rb\"), encoding=\"utf-8\")\n",
        "tunnel_port= 1734\n",
        "tunnel = tunnel_class(tunnel_port)\n",
        "tunnel.add_tunnel(command=\"cl tunnel --url localhost:{port}\", name=\"cl\", pattern=re.compile(r\"[\\w-]+\\.trycloudflare\\.com\"))\n",
        "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.\")\n",
        "\n",
        "''' add zrok tunnel '''\n",
        "if zrok_token:\n",
        "    get_ipython().system('zrok enable {zrok_token} &> /dev/null')\n",
        "    tunnel.add_tunnel(command=\"zrok share public http://localhost:{port}/ --headless\", name=\"zrok\", pattern=re.compile(r\"[\\w-]+\\.share\\.zrok\\.io\"))\n",
        "\n",
        "clear_output()\n",
        "# ======================== TUNNEL ========================\n",
        "\n",
        "\n",
        "# automatic fixing path V2\n",
        "!sed -i 's|\"tagger_hf_cache_dir\": \".*\"|\"tagger_hf_cache_dir\": \"{webui_path}/models/interrogators/\"|' {webui_path}/config.json\n",
        "!sed -i 's|\"additional_networks_extra_lora_path\": \".*\"|\"additional_networks_extra_lora_path\": \"{webui_path}/models/Lora/\"|' {webui_path}/config.json\n",
        "!sed -i 's|\"ad_extra_models_dir\": \".*\"|\"ad_extra_models_dir\": \"{webui_path}/models/adetailer/\"|' {webui_path}/config.json\n",
        "!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\n",
        "# for kaggle\n",
        "if env == 'Kaggle':\n",
        "   !sed -i 's/\"civitai_interface\\/NSFW content\\/value\":.*/\"civitai_interface\\/NSFW content\\/value\": false/g' {webui_path}/ui-config.json\n",
        "\n",
        "\n",
        "with tunnel:\n",
        "    %cd {webui_path}\n",
        "\n",
        "    commandline_arguments += f' --port={tunnel_port}'\n",
        "    if ngrok_token:\n",
        "        commandline_arguments += f' --ngrok {ngrok_token}'\n",
        "    if env != \"Google Colab\":\n",
        "        commandline_arguments += f' --encrypt-pass={tunnel_port} --api'\n",
        "\n",
        "    # -- FORGE --\n",
        "    if change_webui == 'Forge':\n",
        "        commandline_arguments += ' --cuda-stream --pin-shared-memory'\n",
        "\n",
        "    !COMMANDLINE_ARGS=\"{commandline_arguments}\" python launch.py\n",
        "\n",
        "\n",
        "# after runnig\n",
        "start_colab = float(open(f'{webui_path}/static/colabTimer.txt', 'r').read())\n",
        "time_since_start = str(timedelta(seconds=time.time()-start_colab)).split('.')[0]\n",
        "print(f\"\\n⌚️ \\033[0mВы проводите эту сессию в течение - \\033[33m{time_since_start}\\033[0m\\n\\n\")\n",
        "\n",
        "''' del zrok tunnel '''\n",
        "if zrok_token:\n",
        "    !zrok disable &> /dev/null"
      ]
    }
  ]
}