lokesh180340026 commited on
Commit
7be5c1a
·
verified ·
1 Parent(s): 3edfdaf
Files changed (1) hide show
  1. Dockerfile +106 -12
Dockerfile CHANGED
@@ -7,6 +7,7 @@
7
  # - Persistent storage via /data (survives restarts)
8
  # - Auto GPU/CPU detection at runtime
9
  # - All models, custom nodes, outputs persist across rebuilds
 
10
  # =============================================================
11
 
12
  FROM python:3.11-slim-bookworm
@@ -53,8 +54,8 @@ WORKDIR /app
53
 
54
  # ---------------------------
55
  # Install PyTorch (CPU version — lightweight for build)
56
- # GPU Spaces will still work with this; for best GPU perf
57
- # switch to: --extra-index-url https://download.pytorch.org/whl/cu121
58
  # ---------------------------
59
  RUN pip install --upgrade pip && \
60
  pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
@@ -93,7 +94,7 @@ RUN pip install \
93
  pyyaml
94
 
95
  # ---------------------------
96
- # Create model directories (will be migrated to /data at runtime)
97
  # ---------------------------
98
  RUN mkdir -p \
99
  models/checkpoints \
@@ -118,12 +119,6 @@ RUN mkdir -p \
118
  user \
119
  && chmod -R 777 /app
120
 
121
- # ---------------------------
122
- # Copy entrypoint script
123
- # ---------------------------
124
- COPY start.sh /app/start.sh
125
- RUN chmod +x /app/start.sh
126
-
127
  # ---------------------------
128
  # Expose port (HuggingFace Spaces expects 7860)
129
  # ---------------------------
@@ -136,6 +131,105 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=5 \
136
  CMD curl -f http://localhost:${COMFYUI_PORT}/ || exit 1
137
 
138
  # ---------------------------
139
- # Run via entrypoint (handles persistent storage + auto GPU/CPU)
140
- # ---------------------------
141
- ENTRYPOINT ["/app/start.sh"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  # - Persistent storage via /data (survives restarts)
8
  # - Auto GPU/CPU detection at runtime
9
  # - All models, custom nodes, outputs persist across rebuilds
10
+ # - Self-contained — no external scripts needed
11
  # =============================================================
12
 
13
  FROM python:3.11-slim-bookworm
 
54
 
55
  # ---------------------------
56
  # Install PyTorch (CPU version — lightweight for build)
57
+ # For GPU Spaces, replace with:
58
+ # --extra-index-url https://download.pytorch.org/whl/cu121
59
  # ---------------------------
60
  RUN pip install --upgrade pip && \
61
  pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
 
94
  pyyaml
95
 
96
  # ---------------------------
97
+ # Create model directories (migrated to /data at runtime)
98
  # ---------------------------
99
  RUN mkdir -p \
100
  models/checkpoints \
 
119
  user \
120
  && chmod -R 777 /app
121
 
 
 
 
 
 
 
122
  # ---------------------------
123
  # Expose port (HuggingFace Spaces expects 7860)
124
  # ---------------------------
 
131
  CMD curl -f http://localhost:${COMFYUI_PORT}/ || exit 1
132
 
133
  # ---------------------------
134
+ # Entrypoint: persistent storage setup + start ComfyUI
135
+ # Everything is inline — no external script needed
136
+ # ---------------------------
137
+ CMD ["bash", "-c", "\
138
+ set -e && \
139
+ echo '============================================' && \
140
+ echo ' ComfyUI for Hugging Face Spaces' && \
141
+ echo ' Starting up...' && \
142
+ echo '============================================' && \
143
+ PERSISTENT_DIR=/data/comfyui && \
144
+ if [ -d /data ] && [ -w /data ]; then \
145
+ echo '[INFO] Persistent storage detected at /data' && \
146
+ echo '[INFO] Setting up persistent directories...' && \
147
+ mkdir -p ${PERSISTENT_DIR}/models/checkpoints && \
148
+ mkdir -p ${PERSISTENT_DIR}/models/clip && \
149
+ mkdir -p ${PERSISTENT_DIR}/models/clip_vision && \
150
+ mkdir -p ${PERSISTENT_DIR}/models/controlnet && \
151
+ mkdir -p ${PERSISTENT_DIR}/models/diffusers && \
152
+ mkdir -p ${PERSISTENT_DIR}/models/embeddings && \
153
+ mkdir -p ${PERSISTENT_DIR}/models/gligen && \
154
+ mkdir -p ${PERSISTENT_DIR}/models/hypernetworks && \
155
+ mkdir -p ${PERSISTENT_DIR}/models/loras && \
156
+ mkdir -p ${PERSISTENT_DIR}/models/photomaker && \
157
+ mkdir -p ${PERSISTENT_DIR}/models/style_models && \
158
+ mkdir -p ${PERSISTENT_DIR}/models/unet && \
159
+ mkdir -p ${PERSISTENT_DIR}/models/upscale_models && \
160
+ mkdir -p ${PERSISTENT_DIR}/models/vae && \
161
+ mkdir -p ${PERSISTENT_DIR}/models/vae_approx && \
162
+ mkdir -p ${PERSISTENT_DIR}/models/configs && \
163
+ mkdir -p ${PERSISTENT_DIR}/custom_nodes && \
164
+ mkdir -p ${PERSISTENT_DIR}/output && \
165
+ mkdir -p ${PERSISTENT_DIR}/input && \
166
+ mkdir -p ${PERSISTENT_DIR}/user && \
167
+ mkdir -p ${PERSISTENT_DIR}/temp && \
168
+ mkdir -p ${PERSISTENT_DIR}/.cache/huggingface && \
169
+ if [ -d ${COMFYUI_PATH}/models ] && [ ! -L ${COMFYUI_PATH}/models ]; then \
170
+ echo '[INFO] Migrating built-in models to persistent storage...' && \
171
+ cp -rn ${COMFYUI_PATH}/models/* ${PERSISTENT_DIR}/models/ 2>/dev/null || true && \
172
+ rm -rf ${COMFYUI_PATH}/models; \
173
+ fi && \
174
+ if [ -d ${COMFYUI_PATH}/custom_nodes ] && [ ! -L ${COMFYUI_PATH}/custom_nodes ]; then \
175
+ echo '[INFO] Migrating custom nodes to persistent storage...' && \
176
+ cp -rn ${COMFYUI_PATH}/custom_nodes/* ${PERSISTENT_DIR}/custom_nodes/ 2>/dev/null || true && \
177
+ rm -rf ${COMFYUI_PATH}/custom_nodes; \
178
+ fi && \
179
+ if [ -d ${COMFYUI_PATH}/output ] && [ ! -L ${COMFYUI_PATH}/output ]; then \
180
+ cp -rn ${COMFYUI_PATH}/output/* ${PERSISTENT_DIR}/output/ 2>/dev/null || true && \
181
+ rm -rf ${COMFYUI_PATH}/output; \
182
+ fi && \
183
+ if [ -d ${COMFYUI_PATH}/input ] && [ ! -L ${COMFYUI_PATH}/input ]; then \
184
+ cp -rn ${COMFYUI_PATH}/input/* ${PERSISTENT_DIR}/input/ 2>/dev/null || true && \
185
+ rm -rf ${COMFYUI_PATH}/input; \
186
+ fi && \
187
+ if [ -d ${COMFYUI_PATH}/user ] && [ ! -L ${COMFYUI_PATH}/user ]; then \
188
+ cp -rn ${COMFYUI_PATH}/user/* ${PERSISTENT_DIR}/user/ 2>/dev/null || true && \
189
+ rm -rf ${COMFYUI_PATH}/user; \
190
+ fi && \
191
+ ln -sfn ${PERSISTENT_DIR}/models ${COMFYUI_PATH}/models && \
192
+ ln -sfn ${PERSISTENT_DIR}/custom_nodes ${COMFYUI_PATH}/custom_nodes && \
193
+ ln -sfn ${PERSISTENT_DIR}/output ${COMFYUI_PATH}/output && \
194
+ ln -sfn ${PERSISTENT_DIR}/input ${COMFYUI_PATH}/input && \
195
+ ln -sfn ${PERSISTENT_DIR}/user ${COMFYUI_PATH}/user && \
196
+ ln -sfn ${PERSISTENT_DIR}/temp ${COMFYUI_PATH}/temp && \
197
+ export HF_HOME=${PERSISTENT_DIR}/.cache/huggingface && \
198
+ echo '[INFO] Persistent storage setup complete!' && \
199
+ echo '[INFO] Models: ${PERSISTENT_DIR}/models/' && \
200
+ echo '[INFO] Custom nodes: ${PERSISTENT_DIR}/custom_nodes/' && \
201
+ echo '[INFO] Outputs: ${PERSISTENT_DIR}/output/'; \
202
+ else \
203
+ echo '[WARNING] ==================================================' && \
204
+ echo '[WARNING] Persistent storage (/data) is NOT available!' && \
205
+ echo '[WARNING] All models and data will be LOST on restart.' && \
206
+ echo '[WARNING] Enable persistent storage in your Space settings.' && \
207
+ echo '[WARNING] =================================================='; \
208
+ fi && \
209
+ MANAGER_DIR=${COMFYUI_PATH}/custom_nodes/ComfyUI-Manager && \
210
+ if [ ! -d ${MANAGER_DIR} ] || [ -z \"$(ls -A ${MANAGER_DIR} 2>/dev/null)\" ]; then \
211
+ echo '[INFO] ComfyUI-Manager not found, installing...' && \
212
+ rm -rf ${MANAGER_DIR} && \
213
+ git clone --depth 1 https://github.com/Comfy-Org/ComfyUI-Manager.git ${MANAGER_DIR}; \
214
+ fi && \
215
+ EXTRA_ARGS='' && \
216
+ if command -v nvidia-smi > /dev/null 2>&1 && nvidia-smi > /dev/null 2>&1; then \
217
+ echo '[INFO] NVIDIA GPU detected! Running in GPU mode.' && \
218
+ EXTRA_ARGS='--cuda-malloc'; \
219
+ else \
220
+ echo '[INFO] No GPU detected. Running in CPU mode.' && \
221
+ EXTRA_ARGS='--cpu'; \
222
+ fi && \
223
+ chmod -R 777 ${COMFYUI_PATH} 2>/dev/null || true && \
224
+ chmod -R 777 /data 2>/dev/null || true && \
225
+ echo '============================================' && \
226
+ echo ' ComfyUI starting on port ${COMFYUI_PORT}' && \
227
+ echo '============================================' && \
228
+ cd ${COMFYUI_PATH} && \
229
+ exec python main.py \
230
+ --listen 0.0.0.0 \
231
+ --port ${COMFYUI_PORT} \
232
+ --enable-cors-header \
233
+ --preview-method auto \
234
+ ${EXTRA_ARGS} \
235
+ "]