Spaces:
Running
Running
Update start.sh
Browse files
start.sh
CHANGED
|
@@ -4,48 +4,10 @@ set -Eeuo pipefail
|
|
| 4 |
COMFY="${COMFYUI_PATH:-/app/ComfyUI}"
|
| 5 |
|
| 6 |
# ------------------------------------------------------------
|
| 7 |
-
#
|
| 8 |
-
# ------------------------------------------------------------
|
| 9 |
-
# ตรวจสอบว่ามีโฟลเดอร์ ComfyUI หรือไม่ ถ้าไม่มีให้ Clone ใหม่
|
| 10 |
-
if [ ! -d "$COMFY" ]; then
|
| 11 |
-
echo "[INFO] ComfyUI not found. Cloning from GitHub..."
|
| 12 |
-
git clone https://github.com/comfyanonymous/ComfyUI.git "$COMFY"
|
| 13 |
-
fi
|
| 14 |
-
|
| 15 |
-
# อัปเดต ComfyUI และ Dependencies หากตั้งค่า COMFYUI_UPDATE=1
|
| 16 |
-
if [ "${COMFYUI_UPDATE:-0}" = "1" ]; then
|
| 17 |
-
echo "[INFO] Updating ComfyUI core via git pull..."
|
| 18 |
-
cd "$COMFY"
|
| 19 |
-
git pull origin master
|
| 20 |
-
|
| 21 |
-
echo "[INFO] Updating ComfyUI dependencies via pip..."
|
| 22 |
-
python -m pip install --no-cache-dir --upgrade -r requirements.txt
|
| 23 |
-
fi
|
| 24 |
-
|
| 25 |
-
# อัปเดต Custom Nodes ทั้งหมดที่มีไฟล์ .git และ requirements.txt
|
| 26 |
-
if [ "${COMFYUI_UPDATE:-0}" = "1" ] && [ -d "$COMFY/custom_nodes" ]; then
|
| 27 |
-
echo "[INFO] Updating custom nodes via git & pip..."
|
| 28 |
-
find "$COMFY/custom_nodes" -mindepth 1 -maxdepth 1 -type d | while read -r node_dir; do
|
| 29 |
-
if [ -d "$node_dir/.git" ]; then
|
| 30 |
-
echo " -> Updating $(basename "$node_dir")"
|
| 31 |
-
git -C "$node_dir" pull --rebase || echo " [WARN] Failed to pull $(basename "$node_dir")"
|
| 32 |
-
|
| 33 |
-
if [ -f "$node_dir/requirements.txt" ]; then
|
| 34 |
-
python -m pip install --no-cache-dir -r "$node_dir/requirements.txt" || echo " [WARN] Failed to install requirements for $(basename "$node_dir")"
|
| 35 |
-
fi
|
| 36 |
-
fi
|
| 37 |
-
done
|
| 38 |
-
fi
|
| 39 |
-
|
| 40 |
-
# ติดตั้ง Python Packages เพิ่มเติมแบบไดนามิก (ถ้ามีการระบุในตัวแปรสภาพแวดล้อม)
|
| 41 |
-
if [ -n "${EXTRA_PIP_PACKAGES:-}" ]; then
|
| 42 |
-
echo "[INFO] Installing extra pip packages: $EXTRA_PIP_PACKAGES"
|
| 43 |
-
python -m pip install --no-cache-dir $EXTRA_PIP_PACKAGES
|
| 44 |
-
fi
|
| 45 |
-
|
| 46 |
-
# ------------------------------------------------------------
|
| 47 |
-
# 2. Runtime directories
|
| 48 |
# ------------------------------------------------------------
|
|
|
|
|
|
|
| 49 |
mkdir -p \
|
| 50 |
"$COMFY/user" \
|
| 51 |
"$COMFY/input" \
|
|
@@ -57,8 +19,23 @@ mkdir -p \
|
|
| 57 |
"$COMFY/models/vae"
|
| 58 |
|
| 59 |
# ------------------------------------------------------------
|
| 60 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
# ------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
| 62 |
PERSIST_ROOT="/data/comfyui"
|
| 63 |
|
| 64 |
if [ -d "/data" ] && [ -w "/data" ]; then
|
|
@@ -75,8 +52,10 @@ mkdir -p \
|
|
| 75 |
"$MODEL_ROOT/vae"
|
| 76 |
|
| 77 |
# ------------------------------------------------------------
|
| 78 |
-
#
|
| 79 |
# ------------------------------------------------------------
|
|
|
|
|
|
|
| 80 |
link_model_dir() {
|
| 81 |
local name="$1"
|
| 82 |
local target="$COMFY/models/$name"
|
|
@@ -107,7 +86,7 @@ link_model_dir text_encoders
|
|
| 107 |
link_model_dir vae
|
| 108 |
|
| 109 |
echo "============================================================"
|
| 110 |
-
echo "ComfyUI Krea2 - Hugging Face CPU
|
| 111 |
echo "============================================================"
|
| 112 |
|
| 113 |
python - <<'PY'
|
|
@@ -121,8 +100,9 @@ print("RAM limit is controlled by the Hugging Face Space hardware.")
|
|
| 121 |
PY
|
| 122 |
|
| 123 |
# ------------------------------------------------------------
|
| 124 |
-
#
|
| 125 |
# ------------------------------------------------------------
|
|
|
|
| 126 |
GGUF_REPO="${KREA2_GGUF_REPO:-realrebelai/KREA-2_GGUFs}"
|
| 127 |
GGUF_FILE="${KREA2_GGUF_FILE:-TURBO/Krea-2-Turbo-Q3_K_S.gguf}"
|
| 128 |
|
|
@@ -140,6 +120,9 @@ QWEN_PATH="$COMFY/models/text_encoders/$(basename "$QWEN_FILE")"
|
|
| 140 |
VAE_PATH="$COMFY/models/vae/$(basename "$VAE_FILE")"
|
| 141 |
WORKFLOW_PATH="$COMFY/workflows/$(basename "$WORKFLOW_FILE")"
|
| 142 |
|
|
|
|
|
|
|
|
|
|
| 143 |
download_hf() {
|
| 144 |
local repo="$1"
|
| 145 |
local file="$2"
|
|
@@ -176,6 +159,9 @@ print("[OK] downloaded:", dest)
|
|
| 176 |
PY
|
| 177 |
}
|
| 178 |
|
|
|
|
|
|
|
|
|
|
| 179 |
if [ "${KREA2_DOWNLOAD_MODELS:-1}" = "1" ]; then
|
| 180 |
download_hf "$GGUF_REPO" "$GGUF_FILE" "$GGUF_PATH"
|
| 181 |
download_hf "$QWEN_REPO" "$QWEN_FILE" "$QWEN_PATH"
|
|
@@ -186,7 +172,7 @@ else
|
|
| 186 |
fi
|
| 187 |
|
| 188 |
# ------------------------------------------------------------
|
| 189 |
-
#
|
| 190 |
# ------------------------------------------------------------
|
| 191 |
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-2}"
|
| 192 |
export MKL_NUM_THREADS="${MKL_NUM_THREADS:-2}"
|
|
|
|
| 4 |
COMFY="${COMFYUI_PATH:-/app/ComfyUI}"
|
| 5 |
|
| 6 |
# ------------------------------------------------------------
|
| 7 |
+
# Runtime directories
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
# ------------------------------------------------------------
|
| 9 |
+
# This is intentionally done before ComfyUI starts.
|
| 10 |
+
# ComfyUI 0.35.x creates /app/ComfyUI/user itself.
|
| 11 |
mkdir -p \
|
| 12 |
"$COMFY/user" \
|
| 13 |
"$COMFY/input" \
|
|
|
|
| 19 |
"$COMFY/models/vae"
|
| 20 |
|
| 21 |
# ------------------------------------------------------------
|
| 22 |
+
# ComfyUI Manager Security Setup
|
| 23 |
+
# ------------------------------------------------------------
|
| 24 |
+
MANAGER_CONFIG_DIR="$COMFY/user/default/ComfyUI-Manager"
|
| 25 |
+
# mkdir -p "$MANAGER_CONFIG_DIR"
|
| 26 |
+
# cat << 'EOF' > "$MANAGER_CONFIG_DIR/config.ini"
|
| 27 |
+
# [ComfyUI-Manager]
|
| 28 |
+
# security_level = weak
|
| 29 |
+
# privacy_mode = false
|
| 30 |
+
# EOF
|
| 31 |
+
# echo "[INFO] ComfyUI Manager security level set to weak."
|
| 32 |
+
|
| 33 |
+
# ------------------------------------------------------------
|
| 34 |
+
# Persistent storage
|
| 35 |
# ------------------------------------------------------------
|
| 36 |
+
# If HF Storage is mounted at /data, models survive Space restarts.
|
| 37 |
+
# Without persistent storage, downloaded models live in the container
|
| 38 |
+
# filesystem and may have to be downloaded again after a rebuild/restart.
|
| 39 |
PERSIST_ROOT="/data/comfyui"
|
| 40 |
|
| 41 |
if [ -d "/data" ] && [ -w "/data" ]; then
|
|
|
|
| 52 |
"$MODEL_ROOT/vae"
|
| 53 |
|
| 54 |
# ------------------------------------------------------------
|
| 55 |
+
# Model directory links
|
| 56 |
# ------------------------------------------------------------
|
| 57 |
+
# Only replace an empty ComfyUI model directory.
|
| 58 |
+
# This avoids deleting any models supplied in the Space image.
|
| 59 |
link_model_dir() {
|
| 60 |
local name="$1"
|
| 61 |
local target="$COMFY/models/$name"
|
|
|
|
| 86 |
link_model_dir vae
|
| 87 |
|
| 88 |
echo "============================================================"
|
| 89 |
+
echo "ComfyUI Krea2 - Hugging Face CPU"
|
| 90 |
echo "============================================================"
|
| 91 |
|
| 92 |
python - <<'PY'
|
|
|
|
| 100 |
PY
|
| 101 |
|
| 102 |
# ------------------------------------------------------------
|
| 103 |
+
# Model configuration
|
| 104 |
# ------------------------------------------------------------
|
| 105 |
+
# Q3_K_S is selected for the ~15 GB RAM CPU Space.
|
| 106 |
GGUF_REPO="${KREA2_GGUF_REPO:-realrebelai/KREA-2_GGUFs}"
|
| 107 |
GGUF_FILE="${KREA2_GGUF_FILE:-TURBO/Krea-2-Turbo-Q3_K_S.gguf}"
|
| 108 |
|
|
|
|
| 120 |
VAE_PATH="$COMFY/models/vae/$(basename "$VAE_FILE")"
|
| 121 |
WORKFLOW_PATH="$COMFY/workflows/$(basename "$WORKFLOW_FILE")"
|
| 122 |
|
| 123 |
+
# ------------------------------------------------------------
|
| 124 |
+
# Hugging Face downloader
|
| 125 |
+
# ------------------------------------------------------------
|
| 126 |
download_hf() {
|
| 127 |
local repo="$1"
|
| 128 |
local file="$2"
|
|
|
|
| 159 |
PY
|
| 160 |
}
|
| 161 |
|
| 162 |
+
# ------------------------------------------------------------
|
| 163 |
+
# Download models
|
| 164 |
+
# ------------------------------------------------------------
|
| 165 |
if [ "${KREA2_DOWNLOAD_MODELS:-1}" = "1" ]; then
|
| 166 |
download_hf "$GGUF_REPO" "$GGUF_FILE" "$GGUF_PATH"
|
| 167 |
download_hf "$QWEN_REPO" "$QWEN_FILE" "$QWEN_PATH"
|
|
|
|
| 172 |
fi
|
| 173 |
|
| 174 |
# ------------------------------------------------------------
|
| 175 |
+
# CPU optimization
|
| 176 |
# ------------------------------------------------------------
|
| 177 |
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-2}"
|
| 178 |
export MKL_NUM_THREADS="${MKL_NUM_THREADS:-2}"
|