Spaces:
Runtime error
Runtime error
| #@markdown # Install/Update AUTOMATIC1111 repo | |
| from IPython.utils import capture | |
| from IPython.display import clear_output | |
| from subprocess import getoutput | |
| import ipywidgets as widgets | |
| import sys | |
| import fileinput | |
| import os | |
| import time | |
| import base64 | |
| import gdown | |
| from gdown.download import get_url_from_gdrive_confirmation | |
| import requests | |
| from urllib.request import urlopen, Request | |
| from urllib.parse import urlparse, parse_qs, unquote | |
| from tqdm import tqdm | |
| import six | |
| blsaphemy=base64.b64decode(("ZWJ1aQ==").encode('ascii')).decode('ascii') | |
| if not os.path.exists("/content/gdrive"): | |
| print('[1;31mGdrive not connected, using temporary colab storage ...') | |
| time.sleep(4) | |
| mainpth="MyDrive" | |
| !mkdir -p /content/gdrive/$mainpth | |
| Shared_Drive="" | |
| if Shared_Drive!="" and not os.path.exists("/content/gdrive/Shareddrives"): | |
| print('[1;31mShared drive not detected, using default MyDrive') | |
| mainpth="MyDrive" | |
| with capture.capture_output() as cap: | |
| def inf(msg, style, wdth): inf = widgets.Button(description=msg, disabled=True, button_style=style, layout=widgets.Layout(min_width=wdth));display(inf) | |
| fgitclone = "git clone --depth 1" | |
| %mkdir -p /content/gdrive/$mainpth/sd | |
| %cd /content/gdrive/$mainpth/sd | |
| !git clone -q --branch master https://github.com/AUTOMATIC1111/stable-diffusion-w$blsaphemy | |
| !mkdir -p /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/cache/ | |
| os.environ['TRANSFORMERS_CACHE']=f"/content/gdrive/{mainpth}/sd/stable-diffusion-w"+blsaphemy+"/cache" | |
| os.environ['TORCH_HOME'] = f"/content/gdrive/{mainpth}/sd/stable-diffusion-w"+blsaphemy+"/cache" | |
| with capture.capture_output() as cap: | |
| %cd /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/ | |
| !git reset --hard | |
| !git checkout master | |
| time.sleep(1) | |
| !rm webui.sh | |
| !git pull | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| #@markdown --- | |
| #@markdown # Requirements | |
| print('[1;32mInstalling requirements...') | |
| with capture.capture_output() as cap: | |
| %cd /content/ | |
| !wget -q -i https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/Dependencies/A1111.txt | |
| !dpkg -i *.deb | |
| if not os.path.exists('/content/gdrive/'+mainpth+'/sd/stablediffusiond'): #restore later | |
| !tar -C /content/gdrive/$mainpth --zstd -xf sd_mrep.tar.zst | |
| !tar -C / --zstd -xf gcolabdeps.tar.zst | |
| !rm *.deb | rm *.zst | rm *.txt | |
| if not os.path.exists('gdrive/'+mainpth+'/sd/libtcmalloc/libtcmalloc_minimal.so.4'): | |
| %env CXXFLAGS=-std=c++14 | |
| !wget -q https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz && tar zxf gperftools-2.5.tar.gz && mv gperftools-2.5 gperftools | |
| !wget -q https://github.com/TheLastBen/fast-stable-diffusion/raw/main/AUTOMATIC1111_files/Patch | |
| %cd /content/gperftools | |
| !patch -p1 < /content/Patch | |
| !./configure --enable-minimal --enable-libunwind --enable-frame-pointers --enable-dynamic-sized-delete-support --enable-sized-delete --enable-emergency-malloc; make -j4 | |
| !mkdir -p /content/gdrive/$mainpth/sd/libtcmalloc && cp .libs/libtcmalloc*.so* /content/gdrive/$mainpth/sd/libtcmalloc | |
| %env LD_PRELOAD=/content/gdrive/$mainpth/sd/libtcmalloc/libtcmalloc_minimal.so.4 | |
| %cd /content | |
| !rm *.tar.gz Patch && rm -r /content/gperftools | |
| else: | |
| %env LD_PRELOAD=/content/gdrive/$mainpth/sd/libtcmalloc/libtcmalloc_minimal.so.4 | |
| os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' | |
| os.environ['PYTHONWARNINGS'] = 'ignore' | |
| !sed -i 's@text = _formatwarnmsg(msg)@text =\"\"@g' /usr/lib/python3.10/warnings.py | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| #@markdown --- | |
| #@markdown # ControlNet | |
| from torch.hub import download_url_to_file | |
| from urllib.parse import urlparse | |
| import re | |
| from subprocess import run | |
| XL_Model = "None" #@param [ "None", "All", "Canny", "Depth", "Sketch", "OpenPose", "Recolor"] | |
| v1_Model = "None" #@param [ "None", "All (21GB)", "Canny", "Depth", "Lineart", "MLSD", "Normal", "OpenPose", "Scribble", "Seg", "ip2p", "Shuffle", "Inpaint", "Softedge", "Lineart_Anime", "Tile", "T2iadapter_Models"] | |
| v2_Model = "None" #@param [ "None", "All", "Canny", "Depth", "HED", "OpenPose", "Scribble"] | |
| #@markdown - Download/update ControlNet extension and its models | |
| def download(url, model_dir): | |
| filename = os.path.basename(urlparse(url).path) | |
| pth = os.path.abspath(os.path.join(model_dir, filename)) | |
| if not os.path.exists(pth): | |
| print('Downloading: '+os.path.basename(url)) | |
| download_url_to_file(url, pth, hash_prefix=None, progress=True) | |
| else: | |
| print(f"[1;32mThe model {filename} already exists[0m") | |
| Canny='https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/diffusers_xl_canny_mid.safetensors' | |
| Depth='https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/diffusers_xl_depth_mid.safetensors' | |
| Sketch='https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/sai_xl_sketch_256lora.safetensors' | |
| OpenPose='https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/thibaud_xl_openpose_256lora.safetensors' | |
| Recolor='https://huggingface.co/lllyasviel/sd_control_collection/resolve/main/sai_xl_recolor_128lora.safetensors' | |
| with capture.capture_output() as cap: | |
| %cd /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/extensions | |
| if not os.path.exists('sd-w'+blsaphemy+'-controlnet'): | |
| !git clone https://github.com/Mikubill/sd-w$blsaphemy-controlnet.git | |
| %cd /content | |
| else: | |
| %cd sd-w$blsaphemy-controlnet | |
| !git reset --hard | |
| !git pull | |
| %cd /content | |
| mdldir='/content/gdrive/'+mainpth+'/sd/stable-diffusion-w'+blsaphemy+'/extensions/sd-w'+blsaphemy+'-controlnet/models' | |
| for filename in os.listdir(mdldir): | |
| if "_sd14v1" in filename: | |
| renamed = re.sub("_sd14v1", "-fp16", filename) | |
| os.rename(os.path.join(mdldir, filename), os.path.join(mdldir, renamed)) | |
| !wget -q -O CN_models.txt https://github.com/TheLastBen/fast-stable-diffusion/raw/main/AUTOMATIC1111_files/CN_models.txt | |
| !wget -q -O CN_models_v2.txt https://github.com/TheLastBen/fast-stable-diffusion/raw/main/AUTOMATIC1111_files/CN_models_v2.txt | |
| !wget -q -O CN_models_XL.txt https://github.com/TheLastBen/fast-stable-diffusion/raw/main/AUTOMATIC1111_files/CN_models_XL.txt | |
| with open("CN_models.txt", 'r') as f: | |
| mdllnk = f.read().splitlines() | |
| with open("CN_models_v2.txt", 'r') as d: | |
| mdllnk_v2 = d.read().splitlines() | |
| with open("CN_models_XL.txt", 'r') as d: | |
| mdllnk_XL = d.read().splitlines() | |
| !rm CN_models.txt CN_models_v2.txt CN_models_XL.txt | |
| if XL_Model == "All": | |
| for lnk_XL in mdllnk_XL: | |
| download(lnk_XL, mdldir) | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| elif XL_Model == "None": | |
| pass | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| else: | |
| download(globals()[XL_Model], mdldir) | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| Canny='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_canny.pth' | |
| Depth='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth.pth' | |
| Lineart='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_lineart.pth' | |
| MLSD='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_mlsd.pth' | |
| Normal='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_normalbae.pth' | |
| OpenPose='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth' | |
| Scribble='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_scribble.pth' | |
| Seg='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_seg.pth' | |
| ip2p='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11e_sd15_ip2p.pth' | |
| Shuffle='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11e_sd15_shuffle.pth' | |
| Inpaint='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_inpaint.pth' | |
| Softedge='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_softedge.pth' | |
| Lineart_Anime='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15s2_lineart_anime.pth' | |
| Tile='https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1e_sd15_tile.pth' | |
| with capture.capture_output() as cap: | |
| cfgnames=[os.path.basename(url).split('.')[0]+'.yaml' for url in mdllnk_v2] | |
| %cd /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/extensions/sd-w$blsaphemy-controlnet/models | |
| for name in cfgnames: | |
| run(['cp', 'cldm_v21.yaml', name]) | |
| %cd /content | |
| if v1_Model == "All (21GB)": | |
| for lnk in mdllnk: | |
| download(lnk, mdldir) | |
| clear_output() | |
| elif v1_Model == "T2iadapter_Models": | |
| mdllnk=list(filter(lambda x: 't2i' in x, mdllnk)) | |
| for lnk in mdllnk: | |
| download(lnk, mdldir) | |
| clear_output() | |
| elif v1_Model == "None": | |
| pass | |
| clear_output() | |
| else: | |
| download(globals()[v1_Model], mdldir) | |
| clear_output() | |
| Canny='https://huggingface.co/thibaud/controlnet-sd21/resolve/main/control_v11p_sd21_canny.safetensors' | |
| Depth='https://huggingface.co/thibaud/controlnet-sd21/resolve/main/control_v11p_sd21_depth.safetensors' | |
| HED='https://huggingface.co/thibaud/controlnet-sd21/resolve/main/control_v11p_sd21_hed.safetensors' | |
| OpenPose='https://huggingface.co/thibaud/controlnet-sd21/resolve/main/control_v11p_sd21_openposev2.safetensors' | |
| Scribble='https://huggingface.co/thibaud/controlnet-sd21/resolve/main/control_v11p_sd21_scribble.safetensors' | |
| if v2_Model == "All": | |
| for lnk_v2 in mdllnk_v2: | |
| download(lnk_v2, mdldir) | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| elif v2_Model == "None": | |
| pass | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| else: | |
| download(globals()[v2_Model], mdldir) | |
| clear_output() | |
| inf('\u2714 Done','success', '50px') | |
| #@markdown --- | |
| #@markdown # Start Stable-Diffusion | |
| from IPython.utils import capture | |
| import time | |
| import sys | |
| import fileinput | |
| from pyngrok import ngrok, conf | |
| import re | |
| Use_Cloudflare_Tunnel = False #@param {type:"boolean"} | |
| #@markdown - Offers better gradio responsivity | |
| Ngrok_token = "" #@param {type:"string"} | |
| #@markdown - Input your ngrok token if you want to use ngrok server | |
| User = "" #@param {type:"string"} | |
| Password= "" #@param {type:"string"} | |
| #@markdown - Add credentials to your Gradio interface (optional) | |
| auth=f"--gradio-auth {User}:{Password}" | |
| if User =="" or Password=="": | |
| auth="" | |
| with capture.capture_output() as cap: | |
| %cd /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/ | |
| !wget -q -O extras.py https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-w$blsaphemy/master/modules/extras.py | |
| !wget -q -O sd_models.py https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-w$blsaphemy/master/modules/sd_models.py | |
| !wget -q -O /usr/local/lib/python3.10/dist-packages/gradio/blocks.py https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/AUTOMATIC1111_files/blocks.py | |
| %cd /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/ | |
| !sed -i 's@shared.opts.data\["sd_model_checkpoint"] = checkpoint_info.title@shared.opts.data\["sd_model_checkpoint"] = checkpoint_info.title;model.half()@' /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/sd_models.py | |
| #!sed -i 's@ui.create_ui().*@ui.create_ui();shared.demo.queue(concurrency_count=999999,status_update_rate=0.1)@' /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/webui.py | |
| !sed -i "s@map_location='cpu'@map_location='cuda'@" /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/extras.py | |
| !sed -i 's@possible_sd_paths =.*@possible_sd_paths = [\"/content/gdrive/{mainpth}/sd/stablediffusion\"]@' /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/paths.py | |
| !sed -i 's@\.\.\/@src/@g' /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/paths.py | |
| !sed -i 's@src/generative-models@generative-models@g' /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/paths.py | |
| !sed -i 's@print(\"No module.*@@' /content/gdrive/$mainpth/sd/stablediffusion/ldm/modules/diffusionmodules/model.py | |
| !sed -i 's@\["sd_model_checkpoint"\]@\["sd_model_checkpoint", "sd_vae", "CLIP_stop_at_last_layers", "inpainting_mask_weight", "initial_noise_multiplier"\]@g' /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/modules/shared.py | |
| share='' | |
| if Ngrok_token!="": | |
| ngrok.kill() | |
| srv=ngrok.connect(7860, pyngrok_config=conf.PyngrokConfig(auth_token=Ngrok_token) , bind_tls=True).public_url | |
| for line in fileinput.input('/usr/local/lib/python3.10/dist-packages/gradio/blocks.py', inplace=True): | |
| if line.strip().startswith('self.server_name ='): | |
| line = f' self.server_name = "{srv[8:]}"\n' | |
| if line.strip().startswith('self.protocol = "https"'): | |
| line = ' self.protocol = "https"\n' | |
| if line.strip().startswith('if self.local_url.startswith("https") or self.is_colab'): | |
| line = '' | |
| if line.strip().startswith('else "http"'): | |
| line = '' | |
| sys.stdout.write(line) | |
| elif Use_Cloudflare_Tunnel: | |
| with capture.capture_output() as cap: | |
| !pkill cloudflared | |
| time.sleep(4) | |
| !nohup cloudflared tunnel --url http://localhost:7860 > /content/srv.txt 2>&1 & | |
| time.sleep(4) | |
| with open('/content/srv.txt', "r") as file: text = file.read() | |
| srv= re.findall(r"https?://(?:\S+?\.)?trycloudflare\.com\S*", text)[0] | |
| for line in fileinput.input('/usr/local/lib/python3.10/dist-packages/gradio/blocks.py', inplace=True): | |
| if line.strip().startswith('self.server_name ='): | |
| line = f' self.server_name = "{srv[8:]}"\n' | |
| if line.strip().startswith('self.protocol = "https"'): | |
| line = ' self.protocol = "https"\n' | |
| if line.strip().startswith('if self.local_url.startswith("https") or self.is_colab'): | |
| line = '' | |
| if line.strip().startswith('else "http"'): | |
| line = '' | |
| sys.stdout.write(line) | |
| !rm /content/srv.txt | |
| else: | |
| share='--share' | |
| ckptdir='' | |
| if os.path.exists('/content/temp_models'): | |
| ckptdir='--ckpt-dir /content/temp_models' | |
| try: | |
| model | |
| if os.path.isfile(model): | |
| !python /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/webui.py $share --api --disable-safe-unpickle --enable-insecure-extension-access --no-download-sd-model --no-half-vae --ckpt "$model" --xformers $auth --disable-console-progressbars --upcast-sampling $ckptdir | |
| else: | |
| !python /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/webui.py $share --api --disable-safe-unpickle --enable-insecure-extension-access --no-download-sd-model --no-half-vae --ckpt-dir "$model" --xformers $auth --disable-console-progressbars --upcast-sampling | |
| except: | |
| !python /content/gdrive/$mainpth/sd/stable-diffusion-w$blsaphemy/webui.py $share --api --disable-safe-unpickle --enable-insecure-extension-access --no-download-sd-model --no-half-vae --xformers $auth --disable-console-progressbars --upcast-sampling $ckptdir |