|
import argparse |
|
import binascii |
|
|
|
|
|
def str_to_bool(value): |
|
if value.lower() in ('yes', 'true', 't', 'y', '1'): |
|
return True |
|
elif value.lower() in ('no', 'false', 'f', 'n', '0'): |
|
return False |
|
else: |
|
raise argparse.ArgumentTypeError('Invalid boolean value: {}'.format(value)) |
|
|
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
parser.add_argument('--UI', type=str) |
|
parser.add_argument('--Version', type=str) |
|
parser.add_argument('--ControlNet', type=str) |
|
|
|
parser.add_argument('--Roop', type=str_to_bool) |
|
parser.add_argument('--Drive_Map', type=str_to_bool) |
|
parser.add_argument('--Key_words', type=str_to_bool) |
|
parser.add_argument('--SadTalker', type=str_to_bool) |
|
|
|
|
|
args = parser.parse_args() |
|
|
|
UI = args.UI |
|
Roop = args.Roop |
|
Version = args.Version |
|
ControlNet = args.ControlNet |
|
Drive_Map = args.Drive_Map |
|
Key_words = args.Key_words |
|
SadTalker = args.SadTalker |
|
|
|
|
|
|
|
import sys |
|
import os |
|
import base64 |
|
import importlib.util |
|
from IPython import get_ipython |
|
from IPython.display import clear_output |
|
from google.colab import drive |
|
import tensorflow as tf |
|
|
|
|
|
print("TensorFlow version:", tf.__version__) |
|
if tf.test.gpu_device_name(): |
|
drive.mount('/content/drive') |
|
else: |
|
raise Exception("\n请在《代码执行程序》-《更改运行时类型》-设置为GPU~") |
|
|
|
|
|
|
|
sdw = binascii.unhexlify("737461626c652d646966667573696f6e2d7765627569").decode('ascii') |
|
w = binascii.unhexlify("7765627569").decode('ascii') |
|
wb = f'/content/{sdw}' |
|
gwb = f'/content/drive/MyDrive/{sdw}' |
|
|
|
get_ipython().run_line_magic('cd', '/content') |
|
get_ipython().run_line_magic('env', 'TF_CPP_MIN_LOG_LEVEL=1') |
|
|
|
|
|
def cloudDriveSync(cloudPath, localPath='', sync=False): |
|
|
|
if not os.path.exists(cloudPath): |
|
|
|
get_ipython().system(f'mkdir {cloudPath}') |
|
|
|
|
|
if not sync: |
|
return |
|
|
|
|
|
get_ipython().system(f'rm -rf {localPath}') |
|
|
|
get_ipython().system(f'ln -s {cloudPath} {localPath}') |
|
|
|
|
|
def initCloudDrive(): |
|
cloudDriveSync(f'{gwb}') |
|
cloudDriveSync(f'{gwb}/Config') |
|
cloudDriveSync(f'{gwb}/models', f'{wb}/models/Stable-diffusion', Drive_Map) |
|
cloudDriveSync(f'{gwb}/Lora', f'{wb}/models/Lora', Drive_Map) |
|
|
|
cloudDriveSync(f'{gwb}/VAE', f'{wb}/models/VAE', Drive_Map) |
|
cloudDriveSync(f'{gwb}/outputs', f'{wb}/outputs', Drive_Map) |
|
cloudDriveSync(f'{gwb}/embeddings', f'{wb}/embeddings/negative', Drive_Map) |
|
|
|
|
|
if not os.path.exists(f'{gwb}/Config/config.json'): |
|
get_ipython().system(f'wget -O {gwb}/Config/config.json "https://huggingface.co/gmk123/sd_config/raw/main/config.json"') |
|
|
|
def gitDownload(url, localPath): |
|
if os.path.exists(localPath): |
|
return |
|
|
|
get_ipython().system(f'git clone {url} {localPath}') |
|
|
|
|
|
|
|
def installAdditional(): |
|
|
|
urls = [ |
|
f'https://github.com/camenduru/{sdw}-images-browser', |
|
f'https://github.com/camenduru/{sdw}-huggingface', |
|
f'https://github.com/camenduru/sd-civitai-browser', |
|
f'https://github.com/kohya-ss/sd-{w}-additional-networks', |
|
f'https://github.com/fkunn1326/openpose-editor', |
|
f'https://github.com/jexom/sd-{w}-depth-lib', |
|
f'https://github.com/hnmr293/posex', |
|
f'https://github.com/nonnonstop/sd-{w}-3d-open-pose-editor', |
|
f'https://github.com/camenduru/sd-{w}-tunnels', |
|
f'https://github.com/etherealxx/batchlinks-{w}', |
|
f'https://github.com/camenduru/{sdw}-catppuccin', |
|
f'https://github.com/AUTOMATIC1111/{sdw}-rembg', |
|
f'https://github.com/ashen-sensored/{sdw}-two-shot', |
|
f'https://github.com/thomasasfk/sd-{w}-aspect-ratio-helper', |
|
|
|
f'https://github.com/s9roll7/ebsynth_utility', |
|
|
|
|
|
f'https://github.com/a2569875/{sdw}-composable-lora', |
|
|
|
f'https://github.com/KohakuBlueleaf/a1111-sd-{w}-lycoris', |
|
|
|
|
|
|
|
] |
|
for url in urls: |
|
|
|
filename = url.split('/')[-1] |
|
|
|
if 'github' in url: |
|
get_ipython().system(f'git clone {url} {wb}/extensions/{filename}') |
|
|
|
get_ipython().system(f'wget https://raw.githubusercontent.com/camenduru/{sdw}-scripts/main/run_n_times.py -O {wb}/scripts/run_n_times.py') |
|
get_ipython().system(f'aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/embed/upscale/resolve/main/4x-UltraSharp.pth -d {wb}/models/ESRGAN -o 4x-UltraSharp.pth') |
|
|
|
|
|
gitDownload(f'https://huggingface.co/embed/negative',f'{wb}/embeddings/negative') |
|
get_ipython().system(f'rm -rf {wb}/embeddings/negative/.git') |
|
get_ipython().system(f'rm {wb}/embeddings/negative/.gitattributes') |
|
|
|
gitDownload(f'https://huggingface.co/embed/lora',f'{wb}/models/Lora/positive') |
|
get_ipython().system(f'rm -rf {wb}/models/Lora/positive/.git') |
|
get_ipython().system(f'rm {wb}/models/Lora/positive/.gitattributes') |
|
|
|
|
|
gitDownload(f'https://github.com/DominikDoom/a1111-sd-{w}-tagcomplete',f'{wb}/extensions/a1111-sd-{w}-tagcomplete') |
|
get_ipython().system(f'rm -f {wb}/extensions/a1111-sd-{w}-tagcomplete/tags/danbooru.csv') |
|
get_ipython().system(f'wget https://beehomefile.oss-cn-beijing.aliyuncs.com/20210114/danbooru.csv -O {wb}/extensions/a1111-sd-{w}-tagcomplete/tags/danbooru.csv') |
|
gitDownload(f'https://github.com/toriato/{sdw}-wd14-tagger',f'{wb}/extensions/{sdw}-wd14-tagge') |
|
get_ipython().system(f'rm -f {wb}/localizations') |
|
gitDownload(f'https://github.com/dtlnor/{sdw}-localization-zh_CN',f'{wb}/extensions/{sdw}-localization-zh_CN') |
|
|
|
gitDownload(f'https://github.com/Bing-su/adetailer',f'{wb}/extensions/adetailer') |
|
gitDownload(f'https://github.com/hnmr293/sd-{w}-cutoff',f'{wb}/extensions/sd-{w}-cutoff') |
|
|
|
gitDownload(f'https://github.com/yankooliveira/sd-{w}-photopea-embed',f'{wb}/extensions/sd-{w}-photopea-embed') |
|
get_ipython().system(f'wget https://huggingface.co/gmk123/mhzs/raw/main/jubenchajian4_51.py -O {wb}/scripts/jubenchajian4_51.py') |
|
gitDownload(f'https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111',f'{wb}/extensions/multidiffusion-upscaler-for-automatic1111') |
|
|
|
if Roop: |
|
gitDownload(f'https://github.com/Gourieff/sd-{w}-reactor',f'{wb}/extensions/sd-{w}-reactor') |
|
print('Roop换脸启用') |
|
else: |
|
print('Roop换脸不启用') |
|
|
|
|
|
Cnt_models = [ |
|
'control_v11e_sd15_ip2p_fp16.safetensors', |
|
'control_v11e_sd15_shuffle_fp16.safetensors', |
|
'control_v11p_sd15_canny_fp16.safetensors', |
|
'control_v11f1p_sd15_depth_fp16.safetensors', |
|
'control_v11p_sd15_inpaint_fp16.safetensors', |
|
'control_v11p_sd15_lineart_fp16.safetensors', |
|
'control_v11p_sd15_mlsd_fp16.safetensors', |
|
'control_v11p_sd15_normalbae_fp16.safetensors', |
|
'control_v11p_sd15_openpose_fp16.safetensors', |
|
'control_v11p_sd15_scribble_fp16.safetensors', |
|
'control_v11p_sd15_seg_fp16.safetensors', |
|
'control_v11p_sd15_softedge_fp16.safetensors', |
|
'control_v11p_sd15s2_lineart_anime_fp16.safetensors', |
|
'control_v11f1e_sd15_tile_fp16.safetensors', |
|
] |
|
get_ipython().system(f'rm -rf {wb}/extensions/sd-{w}-controlnet') |
|
|
|
if ControlNet == "Colab": |
|
gitDownload(f'https://github.com/Mikubill/sd-{w}-controlnet',f'{wb}/extensions/sd-{w}-controlnet') |
|
for v in Cnt_models: |
|
get_ipython().system(f'aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/{v} -d {wb}/extensions/sd-{w}-controlnet/models -o {v}') |
|
|
|
|
|
elif ControlNet == "Google_Drive": |
|
cloudDriveSync(f'{gwb}/cnt_models') |
|
gitDownload(f'https://github.com/Mikubill/sd-{w}-controlnet',f'{wb}/extensions/sd-{w}-controlnet') |
|
for v in Cnt_models: |
|
if not os.path.exists(f'{gwb}/cnt_models/{v}'): |
|
get_ipython().system(f'aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/ckpt/ControlNet-v1-1/resolve/main/{v} -d {gwb}/cnt_models -o {v}') |
|
print("创建扩展",f'{v}') |
|
else: |
|
print("扩展存在",f'{v}') |
|
|
|
for v in os.listdir(f'{gwb}/cnt_models'): |
|
|
|
get_ipython().system(f'ln -s {gwb}/cnt_models/{v} {wb}/extensions/sd-{w}-controlnet/models') |
|
|
|
elif ControlNet == "No": |
|
print("不使用 ControlNet") |
|
|
|
|
|
if UI == "Kitchen_Ui": |
|
gitDownload(f'https://github.com/canisminor1990/sd-{w}-kitchen-theme-legacy', f'{wb}/extensions/sd-{w}-kitchen-theme-legacy') |
|
print("Kitchen界面插件启用") |
|
elif UI == "Lobe_Ui": |
|
gitDownload(f'https://github.com/canisminor1990/sd-web-ui-kitchen-theme', f'{wb}/extensions/sd-web-ui-kitchen-theme') |
|
print("Lobe界面插件启用") |
|
elif UI == "Ux_Ui": |
|
gitDownload(f'https://github.com/anapnoe/{sdw}-ux', f'{wb}/extensions/{sdw}-ux') |
|
print("UX界面插件启用") |
|
elif UI == "No": |
|
print("UI插件不启用") |
|
|
|
|
|
if Key_words: |
|
gitDownload(f'https://github.com/Physton/sd-{w}-prompt-all-in-one', f'{wb}/extensions/sd-{w}-prompt-all-in-one') |
|
cloudDriveSync(f'{gwb}/storage', f'{wb}/extensions/sd-{w}-prompt-all-in-one/storage', Key_words) |
|
print("关键词插件启用") |
|
else: |
|
get_ipython().system(f'rm -rf {wb}/extensions/sd-{w}-prompt-all-in-one') |
|
print("关键词插件不启用") |
|
|
|
|
|
if SadTalker: |
|
if not os.path.exists(f'{wb}/extensions/SadTalker'): |
|
get_ipython().system(f'git clone https://github.com/OpenTalker/SadTalker {wb}/extensions/SadTalker') |
|
get_ipython().system(f'git -C {wb}/extensions/SadTalker clone https://huggingface.co/gmk123/checkpoints') |
|
get_ipython().system(f'git -C {wb}/models clone https://huggingface.co/gmk123/GFPGAN') |
|
print("SadTalker启用") |
|
else: |
|
get_ipython().system(f'rm -rf {wb}/extensions/SadTalker') |
|
print("SadTalker不启用") |
|
|
|
|
|
def initLocal(): |
|
|
|
|
|
get_ipython().system(f'apt -y update -qq') |
|
get_ipython().system(f'wget https://huggingface.co/gmk123/sd_config/resolve/main/libtcmalloc_minimal.so.4 -O /content/libtcmalloc_minimal.so.4') |
|
get_ipython().run_line_magic('env', 'LD_PRELOAD=/content/libtcmalloc_minimal.so.4') |
|
|
|
|
|
get_ipython().system(f'apt -y install -qq aria2 libcairo2-dev pkg-config python3-dev') |
|
get_ipython().system(f'pip install -q torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 torchtext==0.15.2 torchdata==0.6.1 --extra-index-url https://download.pytorch.org/whl/cu118 -U') |
|
get_ipython().system(f'pip install -q xformers==0.0.20 triton==2.0.0 gradio_client==0.2.7 -U') |
|
|
|
|
|
if Version == "A1111": |
|
get_ipython().system(f'git clone https://github.com/AUTOMATIC1111/{sdw} {wb}') |
|
elif Version == "V2.2": |
|
get_ipython().system(f'git clone -b v2.2 https://github.com/camenduru/{sdw} {wb}') |
|
elif Version == "V2.3": |
|
get_ipython().system(f'git clone -b v2.5 https://github.com/camenduru/{sdw} {wb}') |
|
|
|
|
|
|
|
|
|
initCloudDrive() |
|
|
|
|
|
installAdditional() |
|
|
|
|
|
get_ipython().system(f'rm -f {wb}/config.json') |
|
|
|
|
|
get_ipython().system(f'ln -s {gwb}/Config/config.json {wb}/config.json') |
|
|
|
|
|
if len(os.listdir(f"{gwb}/models")) == 0: |
|
|
|
get_ipython().system(f'aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/ckpt/chilloutmix/resolve/main/chilloutmix_NiPrunedFp32Fix.safetensors -d {wb}/models/Stable-diffusion -o chilloutmix_NiPrunedFp32Fix.safetensors') |
|
|
|
|
|
if len(os.listdir(f"{gwb}/VAE")) == 0: |
|
|
|
get_ipython().system(f'aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -d {wb}/models/VAE -o vae-ft-mse-840000-ema-pruned.safetensors') |
|
|
|
model_dir = os.path.join(wb, "models", "Stable-diffusion") |
|
if any(f.endswith(('.ckpt', '.safetensors')) for f in os.listdir(model_dir)): |
|
get_ipython().system(f'sed -i \'s@weight_load_location =.*@weight_load_location = "cuda"@\' {wb}/modules/shared.py') |
|
get_ipython().system(f'sed -i "[email protected](model_file)@os.path.splitext(model_file); map_location=\'cuda\'@" {wb}/modules/sd_models.py') |
|
get_ipython().system(f'sed -i "s@map_location=\'cpu\'@map_location=\'cuda\'@" {wb}/modules/extras.py') |
|
get_ipython().system(f"sed -i '[email protected]_ui().*@ui.create_ui();shared.demo.queue(concurrency_count=999999,status_update_rate=0.1)@' {wb}/webui.py") |
|
|
|
|
|
|
|
def run(script): |
|
clear_output() |
|
get_ipython().run_line_magic('cd', f'{wb}') |
|
get_ipython().system(f'python {script} --listen --xformers --enable-insecure-extension-access --theme dark --gradio-queue --no-half-vae --disable-console-progressbars --multiple --opt-sdp-attention --api --cors-allow-origins=*') |
|
|
|
|
|
if os.path.exists(f'{wb}'): |
|
run('webui.py') |
|
else: |
|
|
|
initLocal() |
|
|
|
run('launch.py') |