File size: 8,102 Bytes
e9ed00d
 
 
d6f5ad8
e9ed00d
ad5dde8
 
 
 
 
 
 
 
e9ed00d
 
2277016
 
 
 
 
ad5dde8
263ec6a
ad5dde8
 
e9ed00d
ad5dde8
 
e9ed00d
ad5dde8
 
e9ed00d
ad5dde8
 
e9ed00d
ad5dde8
 
e9ed00d
ad5dde8
 
 
 
 
e9ed00d
ad5dde8
 
e9ed00d
 
ad5dde8
 
 
 
 
e9ed00d
71f2fb4
1865cab
ad5dde8
 
263ec6a
e9ed00d
ad5dde8
 
 
 
 
 
 
e9ed00d
ad5dde8
 
 
 
263ec6a
ad5dde8
 
263ec6a
bd2f84c
ad5dde8
 
e9ed00d
 
ad5dde8
 
 
 
263ec6a
ad5dde8
 
 
 
e9ed00d
ad5dde8
 
e9ed00d
ad5dde8
 
082c71d
bd2f84c
092b437
 
2277016
2183b74
092b437
 
 
 
 
72c0685
 
2183b74
05ad30b
 
 
 
 
 
 
 
 
092b437
 
2183b74
05ad30b
72c0685
ad5dde8
 
 
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
import os
from subprocess import getoutput

# Welcome to the world of python madness!

# Debugging with Verbose mode on...

os.system(f'echo "Starting verbose diagnostic setup for stable-diffusion-webui..."')

os.system(f'echo "Cloning Stable Diffusion WebUI repository from darkstorm2150..."')
os.system(f"git clone https://github.com/darkstorm2150/stable-diffusion-webui  /home/user/app/stable-diffusion-webui")

os.system(f'echo "Setting working directory to stable-diffusion-webui root folder..."')
os.chdir("/home/user/app/stable-diffusion-webui")

# Remove numpy/torch from requirements.txt to avoid version conflicts
os.system(f'echo "Removing numpy and torch from requirements.txt to prevent version conflicts..."')
os.system(f"sed -i '/numpy/d' /home/user/app/stable-diffusion-webui/requirements.txt")
os.system(f"sed -i '/torch/d' /home/user/app/stable-diffusion-webui/requirements.txt")

os.system(f'echo "Downloading environment patch script from camenduru/webui..."')
os.system(f"wget https://github.com/camenduru/webui/raw/main/env_patch.py  -O /home/user/app/env_patch.py")

os.system(f'echo "Patching modules/ui.py to import image_from_url_text from env_patch.py..."')
os.system(f"sed -i -e '/import image_from_url_text/r /home/user/app/env_patch.py' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Removing Checkpoint Merger tab from UI..."')
os.system(f"sed -i -e '/(modelmerger_interface, \"Checkpoint Merger\", \"modelmerger\"),/d' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Removing Training tab from UI..."')
os.system(f"sed -i -e '/(train_interface, \"Train\", \"ti\"),/d' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Removing Extensions tab from UI..."')
os.system(f"sed -i -e '/extensions_interface, \"Extensions\", \"extensions\"/d' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Removing Settings tab from UI..."')
os.system(f"sed -i -e '/settings_interface, \"Settings\", \"settings\"/d' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Fixing Gradio shadowRoot access in script.js for Hugging Face compatibility..."')
os.system(f'''sed -i -e "s/document.getElementsByTagName('gradio-app')\\[0\\].shadowRoot/!!document.getElementsByTagName('gradio-app')[0].shadowRoot ? document.getElementsByTagName('gradio-app')[0].shadowRoot : document/g" /home/user/app/stable-diffusion-webui/script.js''')

os.system(f'echo "Enabling progress bars in UI for better user feedback..."')
os.system(f"sed -i -e 's/                show_progress=False,/                show_progress=True,/g' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Modifying webui.py to enable queuing for async processing..."')
os.system(f"sed -i -e 's/shared.demo.launch/shared.demo.queue().launch/g' /home/user/app/stable-diffusion-webui/webui.py")

os.system(f'echo "Disabling queuing for input components to reduce latency..."')
os.system(f"sed -i -e 's/inputs=\\[component\\],/&\\n                queue=False,/g' /home/user/app/stable-diffusion-webui/modules/ui.py")

os.system(f'echo "Disabling queuing for token counter outputs..."')
os.system(f"sed -i -e 's/outputs=\\[token_counter\\]/outputs=[token_counter], queue=False/g' /home/user/app/stable-diffusion-webui/modules/ui.py")



# ----------------------------Patch UI Header for Hugging Face Spaces----------------------------
os.system(f'echo "Downloading header_patch.py to customize UI header banners..."')
os.system(f"wget https://github.com/camenduru/webui/raw/main/header_patch.py  -O /home/user/app/header_patch.py")

os.system(f'echo "Injecting header_patch.py content into modules/ui.py under the demo section..."')
os.system(f"sed -i -e '/demo:/r /home/user/app/header_patch.py' /home/user/app/stable-diffusion-webui/modules/ui.py")
# ---------------------------------------------------------------------------------------------



# Handle shared vs. non-shared UI setup with verbose logging
if "IS_SHARED_UI" in os.environ:
    os.system(f'echo "IS_SHARED_UI IS ENABLED: Loading shared configurations..."')
    
    # Download shared UI configuration files
    os.system(f"echo 'Downloading shared-config.json for UI settings...'")
    os.system(f"wget https://github.com/camenduru/webui/raw/main/shared-config.json  -O /home/user/app/shared-config.json")
    
    os.system(f"echo 'Downloading shared-ui-config.json for layout preferences...'") 
    os.system(f"wget https://github.com/camenduru/webui/raw/main/shared-ui-config.json  -O /home/user/app/shared-ui-config.json")

    # Launch WebUI with shared settings
    os.system(f'echo "Starting WebUI with shared configurations..."')
    os.system(f"python launch.py --force-enable-xformers --disable-console-progressbars --enable-console-prompts --ui-config-file /home/user/app/shared-ui-config.json --ui-settings-file /home/user/app/shared-config.json --cors-allow-origins huggingface.co,hf.space --no-progressbar-hiding")
else:
    os.system(f'echo "IS_SHARED_UI IS DISABLED: Setting up custom environment..."')
    
    # Download custom scripts
    os.system(f'echo "Installing run_n_times.py script for batch processing..."')
    os.system(f"wget https://gist.github.com/camenduru/9ec5f8141db9902e375967e93250860f/raw/d0bcf01786f20107c329c03f8968584ee67be12a/run_n_times.py  -O /home/user/app/stable-diffusion-webui/scripts/run_n_times.py")
    
    # Install extensions (commented lines can be activated by removing #)
    os.system(f'echo "Installing image browser extension for managing outputs..."')
    os.system(f"git clone https://github.com/yfszzx/stable-diffusion-webui-images-browser  /home/user/app/stable-diffusion-webui/extensions/stable-diffusion-webui-images-browser")
    
    os.system(f'echo "Installing Deforum animation extension..."')
    os.system(f"git clone https://github.com/deforum-art/deforum-for-automatic1111-webui  /home/user/app/stable-diffusion-webui/extensions/deforum-for-automatic1111-webui")
    
    # Load Protogen model (example custom model)
    os.system(f'echo "Downloading Protogen X3.4 Stable Diffusion model..."')
    os.system(f"wget -q https://huggingface.co/darkstorm2150/Protogen_x3.4_Official_Release/resolve/main/ProtoGen_X3.4.safetensors  -O /home/user/app/stable-diffusion-webui/models/Stable-diffusion/ProtoGen_X3.4.safetensors")

    # Downgrade NumPy
    os.system(f'echo "Downgrading NumPy to 1.26.4 for compatibility..."')
    os.system(f"pip install --no-cache-dir numpy==1.26.4")

    # Install compatible PyTorch version (2.1.2 works with NumPy 1.26.4)
    os.system(f'echo "Installing PyTorch 2.1.2..."')
    os.system(f"pip install torch==2.1.2+cu121 torchvision==0.16.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121 ")

    # Install xformers
    os.system(f'echo "Installing xformers for attention optimization..."')
    os.system(f"pip install xformers==0.0.25")

    # Remove NumPy 2.x (if pulled in by other packages)
    os.system(f'echo "Removing NumPy 2.x (if present)..."')
    os.system(f"pip uninstall -y numpy && pip install --no-cache-dir numpy==1.26.4")

    # Reinstall xformers to ensure compatibility
    os.system(f'echo "Reinstalling xformers to ensure NumPy 1.26.4 compatibility..."')
    os.system(f"pip uninstall -y xformers && pip install --no-cache-dir xformers==0.0.25")

    # Diagnostic checks
    os.system(f'echo "Verifying NumPy, PyTorch, and xformers versions..."')
    os.system(f"python -c 'import numpy; print(numpy.__version__)'")
    os.system(f"python -c 'import torch; print(torch.__version__)'")
    os.system(f"python -c 'import xformers; print(xformers.__version__)")
    
    # Launch WebUI with custom settings
    os.system(f'echo "Starting WebUI with custom configurations..."')
    os.system(f"python launch.py --force-enable-xformers --ui-config-file /home/user/app/shared-ui-config.json --ui-settings-file /home/user/app/shared-config.json --disable-console-progressbars --enable-console-prompts --cors-allow-origins huggingface.co,hf.space --no-progressbar-hiding --api --skip-torch-cuda-test")