File size: 9,311 Bytes
62fd0a7
 
 
3e6dfa7
62fd0a7
3e6dfa7
 
 
 
 
 
 
 
 
 
 
 
62fd0a7
 
3e6dfa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0878910
3e6dfa7
 
62fd0a7
3e6dfa7
 
 
62fd0a7
 
3e6dfa7
 
 
 
 
 
 
 
 
 
 
 
 
62fd0a7
3e6dfa7
62fd0a7
f787766
 
3e6dfa7
 
 
 
 
 
 
 
 
 
f787766
3e6dfa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
825f751
3e6dfa7
 
 
 
 
f787766
3e6dfa7
 
 
62fd0a7
3e6dfa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62fd0a7
3e6dfa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
import os
from subprocess import getoutput

# Welcome to the world of python madness!

# Debugging with Verbose mode on...
os.system(f'echo "Checking Python Version"')
os.system(f"python --version")

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

# Clone repository
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")

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

# clean requirements.txt
#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")

# Patch environment
os.system(f'echo "Downloading environment patch script..."')
os.system(f"wget https://raw.githubusercontent.com/darkstorm2150/webui/refs/heads/main/env_patch.py  -O /home/user/app/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")

# UI customization
#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")

# Gradio shadowRoot fix
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''')

# Progress bar settings
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")

# Queue settings
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://raw.githubusercontent.com/darkstorm2150/webui/refs/heads/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://raw.githubusercontent.com/darkstorm2150/webui/refs/heads/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://raw.githubusercontent.com/darkstorm2150/webui/refs/heads/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 --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://raw.githubusercontent.com/darkstorm2150/webui/refs/heads/main/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 OpenGen v1.0 Stable Diffusion model..."')
    os.system(f"wget -q https://huggingface.co/darkstorm2150/OpenGen/resolve/main/OpenGen%20v1.0.safetensors  -O /home/user/app/stable-diffusion-webui/models/Stable-diffusion/OpenGen_v1.0.safetensors")
    
    # Critical dependency installation sequence
    #os.system(f'echo "starting dependency cleanup..."')
    #os.system(f'pip cache purge')

    # Running multiple times to remove stubborn copies
    #os.system(f'echo "Removing all existing numpy versions..."')
    #os.system(f'pip uninstall -y numpy numpy numpy')  
    
    # Force NumPy 1.26.4 first
    #os.system(f'echo "Installing NumPy 1.26.4..."')
    #os.system(f"pip install --no-cache-dir numpy==1.26.4")

    # Verify NumPy Version 1.26.4
    #os.system(f"python -c 'import numpy; print(numpy.__version__)'")

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

    #os.system(f'echo "Installing xformers..."')
    #os.system(f"pip install --no-cache-dir xformers==0.0.25 --extra-index-url https://download.pytorch.org/whl/cu118")

    os.system(f'echo "Installing build dependencies..."')
    os.system(f'pip install ninja packaging wheel')
    os.system(f'apt-get update && apt-get install -y build-essential cmake git')
    
    # Building xformers from source
    os.system(f'echo "Cloning xformers repo..."')
    os.system(f'git clone https://github.com/facebookresearch/xformers.git  /home/user/app/xformers')
    os.system("cd /home/user/app/xformers && git submodule update --init --recursive")

    # Change directory to xformers and install
    os.chdir('/home/user/app/xformers')
    os.system('pip install --no-cache-dir -e .')

    # Final verification
    os.system(f'echo "Verifying NumPy and PyTorch..."')
    
    os.system("python -c 'import numpy; print(\"NumPy:\", numpy.__version__)'")
    os.system("python -c 'import torch; print(\"PyTorch:\", torch.__version__)'")

    # Explicitly verify xformers import
    os.system("python -c 'import xformers; print(\"xformers version:\", xformers.__version__)'")
    
    # Launch WebUI with custom settings
    os.system(f'echo "Starting WebUI..."')

    # reinstalling libraries
    os.system(f'pip uninstall -y torch torchvision xformers')
    os.system(f'pip install torch==2.7.1+cu126 torchvision==0.18.1+cu126 --extra-index-url https://download.pytorch.org/whl/cu126')
    os.system(f'pip install xformers==0.0.32+0f0bb9d9.d20250720 --extra-index-url https://download.pytorch.org/whl/cu126')

    os.system(f'pip install -U ninja cmake pybind11')

    # starting xformers with WebUI...
    os.chdir('/home/user/app/stable-diffusion-webui')
    os.system("python launch.py --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")