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 |