| import os |
| if os.environ.get("SPACES_ZERO_GPU") is not None: |
| import spaces |
| else: |
| class spaces: |
| @staticmethod |
| def GPU(func): |
| def wrapper(*args, **kwargs): |
| return func(*args, **kwargs) |
| return wrapper |
| from sys import executable as pyexecutable |
| import subprocess |
| import pathlib |
| import gc |
| from huggingface_hub import hf_hub_download |
| import re |
| import urllib.parse |
|
|
| @spaces.GPU |
| def fake_gpu(): |
| pass |
|
|
| def split_hf_url(url: str): |
| try: |
| s = list(re.findall(r'^(?:https?://huggingface.co/)(?:(datasets)/)?(.+?/.+?)/\w+?/.+?/(?:(.+)/)?(.+?.\w+)(?:\?download=true)?$', url)[0]) |
| if len(s) < 4: return "", "", "", "" |
| repo_id = s[1] |
| repo_type = "dataset" if s[0] == "datasets" else "model" |
| subfolder = urllib.parse.unquote(s[2]) if s[2] else None |
| filename = urllib.parse.unquote(s[3]) |
| return repo_id, filename, subfolder, repo_type |
| except Exception as e: |
| print(e) |
|
|
| def download_hf_file(directory, url): |
| repo_id, filename, subfolder, repo_type = split_hf_url(url) |
| try: |
| if subfolder is not None: hf_hub_download(repo_id=repo_id, filename=filename, subfolder=subfolder, repo_type=repo_type, local_dir=directory) |
| else: hf_hub_download(repo_id=repo_id, filename=filename, repo_type=repo_type, local_dir=directory) |
| print(f"Downloading: {url}") |
| return True |
| except Exception as e: |
| print(f"Failed to download: {e}") |
| return False |
|
|
| def Gitclone(URI:str,ClonePath:str = "",HASH:str = "") -> int : |
| if(ClonePath == "") : |
| while True: |
| try: |
| user_home =pathlib.Path.home().resolve() |
| os.chdir(str(user_home)) |
| except Exception: |
| pass |
| i=subprocess.run([r"git",r"clone",URI]) |
| try: |
| if HASH: os.system(f"git reset --hard {HASH}") |
| except Exception: |
| pass |
| if(i.returncode == 0 ): |
| del i |
| gc.collect() |
| return 0 |
| else : |
| del i |
| else: |
| while True: |
| i=subprocess.run([r"git",r"clone",URI,ClonePath]) |
| try: |
| os.chdir(ClonePath) |
| if HASH: os.system(f"git reset --hard {HASH}") |
| user_home =pathlib.Path.home().resolve() |
| os.chdir(str(user_home)) |
| except Exception: |
| pass |
| if(i.returncode == 0 ): |
| del i |
| gc.collect() |
| return 0 |
| else : |
| del i |
| def DownLoad(URI:str,DownloadPath:str,DownLoadFileName:str ) -> int: |
| while (True): |
| if "huggingface.co" in URI: |
| success=download_hf_file(DownloadPath, URI) |
| if success: return 0 |
| else: |
| i=subprocess.run([r"aria2c",r"-c",r"-x" ,r"16", r"-s",r"16", r"-k" ,r"1M" ,r"-m",r"0",r"--enable-mmap=false",r"--console-log-level=error",r"-d",DownloadPath,r"-o",DownLoadFileName,URI]); |
| if(i.returncode == 0 ): |
| del i |
| gc.collect() |
| return 0 |
| else : |
| del i |
| user_home =pathlib.Path.home().resolve() |
| os.chdir(str(user_home)) |
| |
| print("cloning stable-diffusion-webui repo") |
| Gitclone(r"https://github.com/AUTOMATIC1111/stable-diffusion-webui.git",str(user_home / r"stable-diffusion-webui")) |
| |
| |
| |
|
|
| |
| print("installing extensions") |
| Gitclone(r"https://huggingface.co/embed/negative",str(user_home / r"stable-diffusion-webui" / r"embeddings" / r"negative")) |
| Gitclone(r"https://huggingface.co/embed/lora",str(user_home / r"stable-diffusion-webui" / r"models" / r"Lora" / r"positive")) |
| DownLoad(r"https://huggingface.co/embed/upscale/resolve/main/4x-UltraSharp.pth",str(user_home / r"stable-diffusion-webui" / r"models" / r"ESRGAN") ,r"4x-UltraSharp.pth") |
| while True: |
| if(subprocess.run([r"wget",r"https://raw.githubusercontent.com/camenduru/stable-diffusion-webui-scripts/main/run_n_times.py",r"-O",str(user_home / r"stable-diffusion-webui" / r"scripts" / r"run_n_times.py")]).returncode == 0): |
| break |
| |
| |
| Gitclone(r"https://github.com/camenduru/stable-diffusion-webui-huggingface",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"stable-diffusion-webui-huggingface")) |
| |
| Gitclone(r"https://github.com/etherealxx/batchlinks-webui",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"batchlinks-webui")) |
| Gitclone(r"https://github.com/kohya-ss/sd-webui-additional-networks",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"sd-webui-additional-networks")) |
| Gitclone(r"https://github.com/Akegarasu/sd-webui-model-converter",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"sd-webui-model-converter")) |
| |
| Gitclone(r"https://github.com/tmzint/sd-webui-supermerger",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"sd-webui-supermerger")) |
| Gitclone(r"https://github.com/bbc-mc/sdweb-merge-block-weighted-gui",str(user_home / r"stable-diffusion-webui" / r"extensions"/ r"sdweb-merge-block-weighted-gui")) |
|
|
| |
| |
| Gitclone(r"https://github.com/jexom/sd-webui-depth-lib",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"sd-webui-depth-lib")) |
| Gitclone(r"https://github.com/hnmr293/posex",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"posex")) |
| |
| |
| |
| |
| Gitclone(r"https://github.com/camenduru/sd-webui-tunnels",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"sd-webui-tunnels")) |
| |
| Gitclone(r"https://github.com/catppuccin/stable-diffusion-webui",str(user_home / r"stable-diffusion-webui" / r"extensions" / r"stable-diffusion-webui-catppuccin")) |
|
|
| |
| |
| |
| |
|
|
| os.chdir(user_home / r"stable-diffusion-webui") |
|
|
| |
| print("extensions dolwnload done .\ndownloading ControlNet models") |
| dList =[r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11e_sd15_ip2p_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11e_sd15_shuffle_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_canny_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_inpaint_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_lineart_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_mlsd_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_normalbae_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_scribble_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_seg_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15_softedge_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11p_sd15s2_lineart_anime_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/control_v11f1e_sd15_tile_fp16.safetensors", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11e_sd15_ip2p_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11e_sd15_shuffle_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_canny_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11f1p_sd15_depth_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_inpaint_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_lineart_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_mlsd_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_normalbae_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_openpose_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_scribble_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_seg_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15_softedge_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11p_sd15s2_lineart_anime_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/raw/main/control_v11f1e_sd15_tile_fp16.yaml", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_style_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_sketch_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_seg_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_openpose_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_keypose_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_depth_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_canny_sd14v1.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_canny_sd15v2.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_depth_sd15v2.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_sketch_sd15v2.pth", |
| r"https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/t2iadapter_zoedepth_sd15v1.pth"] |
| for i in range(0,len(dList)): DownLoad(dList[i],str(user_home / "stable-diffusion-webui" / "extensions" / "sd-webui-controlnet" / "models"),pathlib.Path(dList[i]).name) |
| del dList |
|
|
| |
| |
| print("ControlNet models download done.\ndownloading model") |
|
|
| DownLoad(r"https://huggingface.co/Yntec/IncredibleOdds/resolve/main/IncredibleOdds.safetensors",str(user_home / r"stable-diffusion-webui" / r"models" / r"Stable-diffusion"),r"!IncredibleOdds.safetensors") |
| DownLoad(r"https://huggingface.co/Yntec/IncredibleWorld/resolve/main/incredibleWorld_v10.safetensors",str(user_home / r"stable-diffusion-webui" / r"models" / r"Stable-diffusion"),r"incredibleWorld_v10.safetensors") |
| DownLoad(r"https://huggingface.co/Yntec/IncredibleWorld2/resolve/main/incredibleWorld_v20.safetensors",str(user_home / r"stable-diffusion-webui" / r"models" / r"Stable-diffusion"),r"incredibleWorld_v20.safetensors") |
|
|
|
|
|
|
| |
|
|
| print("Done\nStarting Webui...") |
| os.chdir(user_home / r"stable-diffusion-webui") |
| while True: |
| ret=subprocess.run([r"python3" ,r"launch.py",r"--precision",r"full",r"--no-half",r"--no-half-vae",r"--enable-insecure-extension-access",r"--medvram",r"--skip-torch-cuda-test",r"--enable-console-prompts",r"--ui-settings-file="+str(pathlib.Path(__file__).parent /r"config.json")]) |
| if(ret.returncode == 0 ): |
| del ret |
| gc.collect() |
| else : |
| del ret |
|
|
| del os ,user_home ,pyexecutable ,subprocess |