File size: 9,300 Bytes
69b6d36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
cd /workspace/madapps
cat > install_comfyui.sh << 'EOF'
#!/usr/bin/env bash
#!/usr/bin/env bash
# ---------------------------------------------------------------------------
# ComfyUI one‑shot installer for RunPod (rev‑2)
# ---------------------------------------------------------------------------
#  • Activates your virtualenv
#  • Installs official **system** CMake & tool‑chain first (avoids dlib build bug)
#  • Removes any pip‑provided cmake that might shadow /usr/bin/cmake
#  • Installs Python deps and downloads model weights (idempotent)
# ---------------------------------------------------------------------------
set -euo pipefail
COMFY_DIR="${COMFY_DIR:-/workspace/madapps/ComfyUI}"
VENV="${VENV:-$COMFY_DIR/.venv}"
info() { echo -e "\033[1;32m[INFO]\033[0m $*"; }
warn() { echo -e "\033[1;33m[WARN]\033[0m $*"; }
# ---------------------------------------------------------------------------
# Sanity checks
# ---------------------------------------------------------------------------
if [[ ! -d "$COMFY_DIR" ]]; then
  warn "ComfyUI directory '$COMFY_DIR' does not exist. Set COMFY_DIR or clone ComfyUI first."; exit 1; fi
if [[ ! -d "$VENV" ]]; then
  warn "Python venv '$VENV' not found. Create it with 'python -m venv $VENV' first."; exit 1; fi
# ---------------------------------------------------------------------------
# Activate env & upgrade pip
# ---------------------------------------------------------------------------
info "Activating virtualenv…"; source "$VENV/bin/activate"
info "Upgrading pip & wheel…"; pip install --upgrade pip wheel
# ---------------------------------------------------------------------------
# System build deps **first** so dlib finds a real /usr/bin/cmake
# ---------------------------------------------------------------------------
APT_CMD="apt-get"; [[ $(id -u) -ne 0 && $(command -v sudo) ]] && APT_CMD="sudo $APT_CMD"
if [[ -n "$APT_CMD" ]]; then
  info "Installing system CMake & tool‑chain…"
  $APT_CMD update -y && $APT_CMD install -y cmake build-essential python3-dev git wget
fi
# ---------------------------------------------------------------------------
# Ensure pip’s cmake, if present, doesn’t shadow the system one
# ---------------------------------------------------------------------------
if pip show cmake >/dev/null 2>&1; then
  warn "Removing pip‑installed cmake to avoid conflicts…"; pip uninstall -y cmake; fi
# ---------------------------------------------------------------------------
# Python packages that need the compiler tool‑chain
# ---------------------------------------------------------------------------
info "Installing Python deps (dlib, insightface)…"
pip install --no-cache-dir dlib insightface
info "Pinning transformers==4.52…"
if pip show transformers >/dev/null 2>&1; then pip uninstall -y transformers; fi
pip install --no-cache-dir transformers==4.52
# ---------------------------------------------------------------------------
# Helper for installing/updating ComfyUI custom nodes
# ---------------------------------------------------------------------------
install_or_update_custom_node() {
  local name="$1"
  local repo_url="$2"

  # Derive a sane target directory from repo name (lowercased, minus .git)
  local repo_base="${repo_url##*/}"
  repo_base="${repo_base%.git}"
  local target_dir="$COMFY_DIR/custom_nodes/${repo_base,,}"

  info "Installing/Updating ${name} custom node…"

  if [[ -d "$target_dir/.git" ]]; then
    info "Updating existing ${name} repo…"
    git -C "$target_dir" pull --rebase --autostash
  else
    info "Cloning ${name} into custom_nodes…"
    git clone --depth 1 "$repo_url" "$target_dir"
  fi

  # If the repo uses submodules, fetch them
  if [[ -f "$target_dir/.gitmodules" ]]; then
    info "Updating git submodules for ${name}…"
    git -C "$target_dir" submodule update --init --recursive --depth 1
  fi

  # Install Python requirements if present
  if [[ -f "$target_dir/requirements.txt" ]]; then
    info "Installing ${name} Python requirements…"
    pip install --no-cache-dir -r "$target_dir/requirements.txt"
  elif compgen -G "$target_dir/requirements*.txt" > /dev/null; then
    for req in "$target_dir"/requirements*.txt; do
      info "Installing ${name} Python requirements from $(basename "$req")…"
      pip install --no-cache-dir -r "$req"
    done
  fi

  # If it’s a Python package, install it (editable) as well
  if [[ -f "$target_dir/setup.py" || -f "$target_dir/pyproject.toml" ]]; then
    info "Installing ${name} as a Python package (editable)…"
    pip install --no-cache-dir -e "$target_dir"
  fi
}

# ---------------------------------------------------------------------------
# Custom nodes: install/update
# ---------------------------------------------------------------------------

# (Optional) You can swap your existing Crystools block for this one-liner:
install_or_update_custom_node "Crystools" "https://github.com/crystian/ComfyUI-Crystools.git"

install_or_update_custom_node "Custom Scripts"        "https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git"
install_or_update_custom_node "KJ Nodes"              "https://github.com/kijai/ComfyUI-KJNodes.git"
install_or_update_custom_node "LayerStyle Advance"    "https://github.com/chflame163/ComfyUI_LayerStyle_Advance.git"
install_or_update_custom_node "Easy Use"              "https://github.com/yolain/ComfyUI-Easy-Use.git"
install_or_update_custom_node "ControlNet Aux"        "https://github.com/Fannovel16/comfyui_controlnet_aux.git"
install_or_update_custom_node "Essentials"            "https://github.com/cubiq/ComfyUI_essentials.git"
install_or_update_custom_node "Face Parsing"          "https://github.com/Ryuukeisyou/comfyui_face_parsing.git"
install_or_update_custom_node "Face Analysis"         "https://github.com/cubiq/ComfyUI_FaceAnalysis.git"
install_or_update_custom_node "ControlAltAI Nodes"    "https://github.com/gseth/ControlAltAI-Nodes.git"
install_or_update_custom_node "Masquerade Nodes"      "https://github.com/BadCafeCode/masquerade-nodes-comfyui.git"
install_or_update_custom_node "rgthree"               "https://github.com/rgthree/rgthree-comfy.git"
install_or_update_custom_node "WAS Node Suite"        "https://github.com/WASasquatch/was-node-suite-comfyui.git"
# ---------------------------------------------------------------------------
# Helper for idempotent downloads
# ---------------------------------------------------------------------------
download() {
  local url="$1" dst="$2";
  if [[ -f "$dst" ]]; then info "✓ $(basename "$dst") already exists"; else
    info "↓ $(basename "$dst")"; wget -q --show-progress -O "$dst" "$url"; fi }
# Create dirs
mkdir -p "$COMFY_DIR/models/"{checkpoints,unet,clip,vae,loras,controlnet}
# ---------------------------------------------------------------------------
# Model weights
# ---------------------------------------------------------------------------
info "Downloading model weights (skip if already present)…"
# Checkpoint
download "https://huggingface.co/stabletable25/lustifyxl/resolve/main/lustifySDXLNSFW_oltFIXEDTEXTURES.safetensors?download=true" \
         "$COMFY_DIR/models/checkpoints/lustifySDXLNSFW_oltFIXEDTEXTURES.safetensors"
# UNet
download "https://huggingface.co/stabletable25/lustifyxl/resolve/main/flux1-dev-fp8.safetensors?download=true" \
         "$COMFY_DIR/models/unet/flux1-dev-fp8.safetensors"
download "https://huggingface.co/6chan/flux1-kontext-dev-fp8/resolve/main/flux1-kontext-dev-fp8-e4m3fn.safetensors?download=true" \
         "$COMFY_DIR/models/unet/flux1-kontext-dev-fp8-e4m3fn.safetensors"
download "https://huggingface.co/stabletable25/lustifyxl/resolve/main/realDream_flux1V1.safetensors?download=true" \
         "$COMFY_DIR/models/unet/realDream_flux1V1.safetensors"
# CLIP
download "https://huggingface.co/GraydientPlatformAPI/flux-clip/resolve/main/clip_l.safetensors?download=true" \
         "$COMFY_DIR/models/clip/clip_l.safetensors"
download "https://huggingface.co/GraydientPlatformAPI/flux-clip/resolve/main/t5xxl_fp8_e4m3fn.safetensors?download=true" \
         "$COMFY_DIR/models/clip/t5xxl_fp8_e4m3fn.safetensors"
# VAE
download "https://huggingface.co/stabletable25/lustifyxl/resolve/main/ae.safetensors?download=true" \
         "$COMFY_DIR/models/vae/ae.safetensors"
# Lora
download "https://huggingface.co/XLabs-AI/flux-RealismLora/resolve/main/lora.safetensors?download=true" \
         "$COMFY_DIR/models/loras/flux-RealismLora.safetensors"
download "https://huggingface.co/stabletable25/lustifyxl/resolve/main/MysticXXX-v7.safetensors?download=true" \
         "$COMFY_DIR/models/loras/MysticXXX-v7.safetensors"
# ControlNet
download "https://huggingface.co/jasperai/Flux.1-dev-Controlnet-Depth/resolve/main/diffusion_pytorch_model.safetensors?download=true" \
         "$COMFY_DIR/models/controlnet/jasparaidepth.safetensors"
download "https://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0/resolve/main/diffusion_pytorch_model.safetensors?download=true" \
         "$COMFY_DIR/models/controlnet/controlnetunionpro2.safetensors"
# ---------------------------------------------------------------------------
info "✔ Setup finished. Launch ComfyUI with:\n   cd $COMFY_DIR && bash run.sh"
EOF
chmod +x install_comfyui.sh