msrcam commited on
Commit
607ece5
Β·
verified Β·
1 Parent(s): 3351b72

Upload installers/nudify/install_flux_ultimate_nudify_v0.19.sh with huggingface_hub

Browse files
installers/nudify/install_flux_ultimate_nudify_v0.19.sh ADDED
@@ -0,0 +1,468 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # ═══════════════════════════════════════════════════════════════════════════════
3
+ # FLUX Ultimate Nudify - Installation Script v0.19
4
+ # ═══════════════════════════════════════════════════════════════════════════════
5
+ #
6
+ # Core 3-Stage Pipeline:
7
+ # Stage 1: Clothes Removal (FLUX.1 Kontext Dev)
8
+ # Stage 2: Anatomy Enhancement (FLUX.1 Dev - Fluxed Up 7.1)
9
+ # Stage 3: Detail Refinement (FLUX.2 Klein 9B + LoRAs)
10
+ #
11
+ # ═══════════════════════════════════════════════════════════════════════════════
12
+
13
+ set -e
14
+
15
+ # Colors
16
+ RED=''
17
+ GREEN=''
18
+ YELLOW=''
19
+ BLUE=''
20
+ MAGENTA=''
21
+ CYAN=''
22
+ NC=''
23
+
24
+ # Configuration
25
+ COMFY_DIR="${COMFY_DIR:-/workspace/ComfyUI}"
26
+ CIVITAI_TOKEN="${CIVITAI_TOKEN:-eff2ba98a34d6fd7918164753e878bb9}"
27
+
28
+ # Mirror repo for risky models
29
+ MIRROR_REPO="https://huggingface.co/msrcam/ComfyUI_Models/resolve/main"
30
+
31
+ # Auto-detect HF token
32
+ if [ -n "$HF_TOKEN" ]; then
33
+ :
34
+ elif [ -f "$HOME/.cache/huggingface/token" ]; then
35
+ HF_TOKEN=$(cat "$HOME/.cache/huggingface/token")
36
+ echo -e "${GREEN}βœ“ Using cached HuggingFace token${NC}"
37
+ elif [ -f "$HOME/.huggingface/token" ]; then
38
+ HF_TOKEN=$(cat "$HOME/.huggingface/token")
39
+ echo -e "${GREEN}βœ“ Using cached HuggingFace token${NC}"
40
+ else
41
+ echo -e "${YELLOW}! No HF token found - gated models may fail${NC}"
42
+ HF_TOKEN=""
43
+ fi
44
+
45
+ # Banner
46
+ echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════════════${NC}"
47
+ echo -e "${CYAN} FLUX ULTIMATE NUDIFY v0.19${NC}"
48
+ echo -e "${CYAN}═══════════════════════════════════════════════════════════════════════════════${NC}"
49
+ echo ""
50
+
51
+ # ═══════════════════════════════════════════════════════════════════════════════
52
+ # INSTALL ARIA2C IF MISSING
53
+ # ═══════════════════════════════════════════════════════════════════════════════
54
+ if ! command -v aria2c &> /dev/null; then
55
+ echo -e "${YELLOW}Installing aria2c...${NC}"
56
+ apt-get update -qq && apt-get install -y -qq aria2 > /dev/null 2>&1 || true
57
+ fi
58
+
59
+ # ═══════════════════════════════════════════════════════════════════════════════
60
+ # DOWNLOAD FUNCTION WITH FALLBACK
61
+ # ═══════════════════════════════════════════════════════════════════════════════
62
+ dl() {
63
+ local url="$1"
64
+ local dest="$2"
65
+ local desc="$3"
66
+ local fallback_url="${4:-}"
67
+
68
+ if [ -f "$dest" ]; then
69
+ echo -e "${GREEN}βœ“ Already exists: ${desc}${NC}"
70
+ return 0
71
+ fi
72
+
73
+ mkdir -p "$(dirname "$dest")"
74
+ echo -e "${YELLOW}↓ ${desc}${NC}"
75
+
76
+ # Add civitai token if needed
77
+ if [[ "$url" == *"civitai.com"* ]]; then
78
+ url="${url}?token=${CIVITAI_TOKEN}"
79
+ fi
80
+
81
+ # Try primary URL
82
+ if command -v aria2c &> /dev/null; then
83
+ if [[ "$url" == *"huggingface.co"* ]] && [ -n "$HF_TOKEN" ]; then
84
+ aria2c -x 16 -s 16 -k 1M -c --console-log-level=warn \
85
+ --header="Authorization: Bearer ${HF_TOKEN}" \
86
+ -d "$(dirname "$dest")" -o "$(basename "$dest")" "$url" 2>/dev/null && {
87
+ echo -e "${GREEN}βœ“ Downloaded: ${desc}${NC}"
88
+ return 0
89
+ }
90
+ else
91
+ aria2c -x 16 -s 16 -k 1M -c --console-log-level=warn \
92
+ -d "$(dirname "$dest")" -o "$(basename "$dest")" "$url" 2>/dev/null && {
93
+ echo -e "${GREEN}βœ“ Downloaded: ${desc}${NC}"
94
+ return 0
95
+ }
96
+ fi
97
+ fi
98
+
99
+ # Try wget as backup
100
+ wget -q --show-progress -O "$dest" "$url" 2>/dev/null && {
101
+ echo -e "${GREEN}βœ“ Downloaded: ${desc}${NC}"
102
+ return 0
103
+ }
104
+
105
+ # Try fallback URL if provided
106
+ if [ -n "$fallback_url" ]; then
107
+ echo -e "${YELLOW} Trying fallback URL...${NC}"
108
+ aria2c -x 16 -s 16 -k 1M -c --console-log-level=warn \
109
+ -d "$(dirname "$dest")" -o "$(basename "$dest")" "$fallback_url" 2>/dev/null && {
110
+ echo -e "${GREEN}βœ“ Downloaded from fallback: ${desc}${NC}"
111
+ return 0
112
+ }
113
+ wget -q --show-progress -O "$dest" "$fallback_url" 2>/dev/null && {
114
+ echo -e "${GREEN}βœ“ Downloaded from fallback: ${desc}${NC}"
115
+ return 0
116
+ }
117
+ fi
118
+
119
+ echo -e "${RED}βœ— Failed: ${desc}${NC}"
120
+ rm -f "$dest" 2>/dev/null
121
+ return 1
122
+ }
123
+
124
+ # ═══════════════════════════════════════════════════════════════════════════════
125
+ # STEP 1: VERIFY COMFYUI
126
+ # ═══════════════════════════════════════════════════════════════════════════════
127
+ echo -e "
128
+ ${YELLOW}[1/8] Verifying ComfyUI Installation...${NC}"
129
+
130
+ if [ ! -d "$COMFY_DIR" ]; then
131
+ echo -e "${RED}Error: ComfyUI not found at $COMFY_DIR${NC}"
132
+ exit 1
133
+ fi
134
+
135
+ echo -e "${GREEN}βœ“ ComfyUI found at $COMFY_DIR${NC}"
136
+
137
+ # ═══════════════════════════════════════════════════════════════════════════════
138
+ # STEP 2: CREATE DIRECTORIES
139
+ # ═══════════════════════════════════════════════════════════════════════════════
140
+ echo -e "
141
+ ${YELLOW}[2/8] Creating Directory Structure...${NC}"
142
+
143
+ dirs=(
144
+ "models/checkpoints"
145
+ "models/unet"
146
+ "models/diffusion_models"
147
+ "models/vae"
148
+ "models/clip"
149
+ "models/clip/t5"
150
+ "models/text_encoders"
151
+ "models/loras"
152
+ "models/upscale_models"
153
+ "models/ipadapter"
154
+ "models/clip_vision"
155
+ "models/controlnet"
156
+ "models/facerestore_models"
157
+ "models/facedetection"
158
+ "models/insightface/models/buffalo_l"
159
+ "models/ultralytics/bbox"
160
+ "models/ultralytics/segm"
161
+ "models/sams"
162
+ "models/reswapper"
163
+ "models/hyperswap"
164
+ "user/default/workflows"
165
+ )
166
+
167
+ for dir in "${dirs[@]}"; do
168
+ mkdir -p "$COMFY_DIR/$dir"
169
+ done
170
+
171
+ echo -e "${GREEN}βœ“ Directories created${NC}"
172
+
173
+ # ═══════════════════════════════════════════════════════════════════════════════
174
+ # STEP 3: INSTALL CUSTOM NODES
175
+ # ═══════════════════════════════════════════════════════════════════════════════
176
+ echo -e "
177
+ ${YELLOW}[3/8] Installing Custom Nodes...${NC}"
178
+
179
+ cd "$COMFY_DIR/custom_nodes"
180
+
181
+ # Core nodes
182
+ for repo in \
183
+ "https://github.com/ltdrdata/ComfyUI-Manager.git" \
184
+ "https://github.com/rgthree/rgthree-comfy.git" \
185
+ "https://github.com/cubiq/ComfyUI_essentials.git" \
186
+ "https://github.com/ltdrdata/ComfyUI-Impact-Pack.git" \
187
+ "https://github.com/ltdrdata/ComfyUI-Impact-Subpack.git" \
188
+ "https://github.com/Gourieff/ComfyUI-ReActor.git" \
189
+ "https://github.com/cubiq/ComfyUI_IPAdapter_plus.git" \
190
+ "https://github.com/Fannovel16/comfyui_controlnet_aux.git" \
191
+ "https://github.com/ssitu/ComfyUI_UltimateSDUpscale.git" \
192
+ "https://github.com/kijai/ComfyUI-segment-anything-2.git" \
193
+ "https://github.com/kijai/ComfyUI-KJNodes.git" \
194
+ "https://github.com/spacepxl/ComfyUI-Image-Filters.git" \
195
+ "https://github.com/EllangoK/ComfyUI-post-processing-nodes.git" \
196
+ "https://github.com/chrisgoringe/cg-use-everywhere.git" \
197
+ "https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git"
198
+ do
199
+ name=$(basename "$repo" .git)
200
+ if [ ! -d "$name" ]; then
201
+ echo -e "${GREEN}β†’ Installing $name${NC}"
202
+ git clone "$repo" 2>/dev/null || true
203
+ [ -f "$name/requirements.txt" ] && pip install -r "$name/requirements.txt" --break-system-packages 2>/dev/null || true
204
+ else
205
+ echo -e "${GREEN}βœ“ $name already installed${NC}"
206
+ fi
207
+ done
208
+
209
+ # Run Impact Pack install script
210
+ [ -f "ComfyUI-Impact-Pack/install.py" ] && python ComfyUI-Impact-Pack/install.py 2>/dev/null || true
211
+
212
+ echo -e "${GREEN}βœ“ All custom nodes installed${NC}"
213
+
214
+ # ═══════════════════════════════════════════════════════════════════════════════
215
+ # STEP 4: CORE PIPELINE MODELS
216
+ # ═══════════════════════════════════════════════════════════════════════════════
217
+ echo -e "
218
+ ${YELLOW}[4/8] Downloading Core Pipeline Models...${NC}"
219
+
220
+ # Stage 1: Kontext
221
+ echo -e "
222
+ ${MAGENTA}═══ Stage 1: FLUX.1 Kontext Dev ═══${NC}"
223
+
224
+ dl "https://huggingface.co/black-forest-labs/FLUX.1-Kontext-dev/resolve/main/flux1-kontext-dev.safetensors" \
225
+ "$COMFY_DIR/models/unet/flux1-kontext-dev.safetensors" \
226
+ "FLUX.1 Kontext Dev"
227
+
228
+ dl "https://huggingface.co/msrcam/ComfyUI_Models/resolve/main/loras/kontext/clothes_remover_v0.safetensors" \
229
+ "$COMFY_DIR/models/loras/clothes_remover_v0.safetensors" \
230
+ "Clothes Remover LoRA"
231
+
232
+ # Stage 2: Flux Dev
233
+ echo -e "
234
+ ${MAGENTA}═══ Stage 2: FLUX.1 Dev ═══${NC}"
235
+
236
+ dl "$MIRROR_REPO/checkpoints/flux/fluxed-up-7.1-fp16.safetensors" \
237
+ "$COMFY_DIR/models/checkpoints/fluxed-up-7.1-fp16.safetensors" \
238
+ "Fluxed Up 7.1 FP16" \
239
+ "https://civitai.com/api/download/models/2577735?type=Model&format=SafeTensor&size=pruned&fp=fp16"
240
+
241
+ dl "https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors" \
242
+ "$COMFY_DIR/models/clip/clip_l.safetensors" \
243
+ "CLIP-L"
244
+
245
+ dl "https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp8_e4m3fn.safetensors" \
246
+ "$COMFY_DIR/models/clip/t5/t5xxl_fp8_e4m3fn.safetensors" \
247
+ "T5-XXL FP8"
248
+
249
+ # Stage 3: Klein 9B
250
+ echo -e "
251
+ ${MAGENTA}═══ Stage 3: FLUX.2 Klein 9B ═══${NC}"
252
+
253
+ dl "https://huggingface.co/black-forest-labs/FLUX.2-klein-base-9b-fp8/resolve/main/flux-2-klein-base-9b-fp8.safetensors" \
254
+ "$COMFY_DIR/models/unet/flux-2-klein-base-9b-fp8.safetensors" \
255
+ "FLUX.2 Klein 9B FP8"
256
+
257
+ dl "https://huggingface.co/Comfy-Org/flux2-klein-9B/resolve/main/split_files/text_encoders/qwen_3_8b_fp8mixed.safetensors" \
258
+ "$COMFY_DIR/models/text_encoders/qwen_3_8b_fp8mixed.safetensors" \
259
+ "Qwen 3 8B FP8"
260
+
261
+ dl "https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/vae/flux2-vae.safetensors" \
262
+ "$COMFY_DIR/models/vae/flux2-vae.safetensors" \
263
+ "FLUX2 VAE"
264
+
265
+ # FLUX.2 Dev main model (gated - requires HF token)
266
+ dl "https://huggingface.co/black-forest-labs/FLUX.2-dev/resolve/main/flux2-dev.safetensors" \
267
+ "$COMFY_DIR/models/diffusion_models/flux2-dev.safetensors" \
268
+ "FLUX.2 Dev"
269
+
270
+ # FLUX.2 Text Encoder - Mistral 3 Small
271
+ dl "https://huggingface.co/Comfy-Org/flux2-dev/resolve/main/split_files/text_encoders/mistral_3_small_flux2_bf16.safetensors" \
272
+ "$COMFY_DIR/models/text_encoders/mistral_3_small_flux2_bf16.safetensors" \
273
+ "Mistral 3 Small (FLUX.2 Text Encoder)"
274
+
275
+ # Shared VAE
276
+ dl "https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/ae.safetensors" \
277
+ "$COMFY_DIR/models/vae/ae.safetensors" \
278
+ "FLUX.1 VAE"
279
+
280
+ # ═══════════════════════════════════════════════════════════════════════════════
281
+ # STEP 5: LoRAs
282
+ # ═══════════════════════════════════════════════════════════════════════════════
283
+ echo -e "
284
+ ${YELLOW}[5/8] Downloading LoRAs...${NC}"
285
+
286
+ # Download from mirror repo (consolidated)
287
+ echo -e "${CYAN}═══ Downloading LoRAs from mirror ═══${NC}"
288
+
289
+ for lora in \
290
+ "flux1dev/flux1dev_nudity_female_v2.safetensors" \
291
+ "flux1dev/flux1dev_anatomy_female.safetensors" \
292
+ "flux1dev/flux1dev_nipple_default.safetensors" \
293
+ "flux1dev/flux1dev_pussy_default.safetensors" \
294
+ "flux2klein/flux2klein_nsfw.safetensors" \
295
+ "flux2klein/flux2klein_nipple.safetensors" \
296
+ "flux2klein/flux2klein_pussy.safetensors" \
297
+ "flux2klein/flux2klein_body_version_a.safetensors"
298
+ do
299
+ name=$(basename "$lora")
300
+ dl "$MIRROR_REPO/loras/$lora" \
301
+ "$COMFY_DIR/models/loras/$name" \
302
+ "$name"
303
+ done
304
+
305
+ # Detail LoRAs - mirror first
306
+ dl "$MIRROR_REPO/loras/add_detail.safetensors" \
307
+ "$COMFY_DIR/models/loras/add_detail.safetensors" \
308
+ "Add Detail LoRA" \
309
+ "https://civitai.com/api/download/models/135867"
310
+
311
+ dl "$MIRROR_REPO/loras/skin_detail.safetensors" \
312
+ "$COMFY_DIR/models/loras/skin_detail.safetensors" \
313
+ "Skin Detail LoRA" \
314
+ "https://civitai.com/api/download/models/87153"
315
+
316
+ # ═══════════════════════════════════════════════════════════════════════════════
317
+ # STEP 6: FACE & DETECTION MODELS
318
+ # ═══════════════════════════════════════════════════════════════════════════════
319
+ echo -e "
320
+ ${YELLOW}[6/8] Downloading Face & Detection Models...${NC}"
321
+
322
+ # Face Restore - mirror first
323
+ echo -e "${CYAN}═══ Face Restore ═══${NC}"
324
+
325
+ dl "$MIRROR_REPO/facerestore/codeformer.pth" \
326
+ "$COMFY_DIR/models/facerestore_models/codeformer.pth" \
327
+ "CodeFormer" \
328
+ "https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth"
329
+
330
+ dl "$MIRROR_REPO/facerestore/GFPGANv1.4.pth" \
331
+ "$COMFY_DIR/models/facerestore_models/GFPGANv1.4.pth" \
332
+ "GFPGAN v1.4" \
333
+ "https://github.com/TencentARC/GFPGAN/releases/download/v1.3.4/GFPGANv1.4.pth"
334
+
335
+ dl "$MIRROR_REPO/facerestore/GPEN-BFR-1024.onnx" \
336
+ "$COMFY_DIR/models/facerestore_models/GPEN-BFR-1024.onnx" \
337
+ "GPEN-BFR-1024"
338
+
339
+ dl "$MIRROR_REPO/facerestore/GPEN-BFR-2048.onnx" \
340
+ "$COMFY_DIR/models/facerestore_models/GPEN-BFR-2048.onnx" \
341
+ "GPEN-BFR-2048"
342
+
343
+ # Detection models - from mirror
344
+ echo -e "${CYAN}═══ Detection Models ═══${NC}"
345
+
346
+ dl "$MIRROR_REPO/detection/parsing_parsenet.pth" \
347
+ "$COMFY_DIR/models/facedetection/parsing_parsenet.pth" \
348
+ "Parsing ParseNet"
349
+
350
+ dl "$MIRROR_REPO/detection/detection_Resnet50_Final.pth" \
351
+ "$COMFY_DIR/models/facedetection/detection_Resnet50_Final.pth" \
352
+ "Detection Resnet50"
353
+
354
+ dl "$MIRROR_REPO/detection/face_yolov8m.pt" \
355
+ "$COMFY_DIR/models/ultralytics/bbox/face_yolov8m.pt" \
356
+ "YOLOv8m Face"
357
+
358
+ dl "$MIRROR_REPO/detection/hand_yolov8s.pt" \
359
+ "$COMFY_DIR/models/ultralytics/bbox/hand_yolov8s.pt" \
360
+ "YOLOv8s Hand"
361
+
362
+ dl "$MIRROR_REPO/detection/person_yolov8s-seg.pt" \
363
+ "$COMFY_DIR/models/ultralytics/segm/person_yolov8s-seg.pt" \
364
+ "YOLOv8s Person Seg"
365
+
366
+ dl "$MIRROR_REPO/detection/sam_vit_l_0b3195.pth" \
367
+ "$COMFY_DIR/models/sams/sam_vit_l_0b3195.pth" \
368
+ "SAM ViT-L"
369
+
370
+ # InsightFace - from mirror
371
+ echo -e "${CYAN}═══ InsightFace ═══${NC}"
372
+
373
+ for model in 1k3d68.onnx 2d106det.onnx det_10g.onnx genderage.onnx w600k_r50.onnx; do
374
+ dl "$MIRROR_REPO/insightface/buffalo_l/$model" \
375
+ "$COMFY_DIR/models/insightface/models/buffalo_l/$model" \
376
+ "Buffalo_L $model"
377
+ done
378
+
379
+ # Swappers - from mirror
380
+ echo -e "${CYAN}═══ Swappers ═══${NC}"
381
+
382
+ dl "$MIRROR_REPO/swappers/reswapper_128.onnx" \
383
+ "$COMFY_DIR/models/reswapper/reswapper_128.onnx" \
384
+ "ReSwapper 128"
385
+
386
+ dl "$MIRROR_REPO/swappers/reswapper_256.onnx" \
387
+ "$COMFY_DIR/models/reswapper/reswapper_256.onnx" \
388
+ "ReSwapper 256"
389
+
390
+ dl "$MIRROR_REPO/swappers/hyperswap_1a_256.onnx" \
391
+ "$COMFY_DIR/models/hyperswap/hyperswap_1a_256.onnx" \
392
+ "HyperSwap 1A"
393
+
394
+ dl "$MIRROR_REPO/swappers/hyperswap_1b_256.onnx" \
395
+ "$COMFY_DIR/models/hyperswap/hyperswap_1b_256.onnx" \
396
+ "HyperSwap 1B"
397
+
398
+ dl "$MIRROR_REPO/swappers/hyperswap_1c_256.onnx" \
399
+ "$COMFY_DIR/models/hyperswap/hyperswap_1c_256.onnx" \
400
+ "HyperSwap 1C"
401
+
402
+ # ═══════════════════════════════════════════════════════════════════════════════
403
+ # STEP 7: UPSCALE & POST-PROCESSING
404
+ # ═══════════════════════════════════════════════════════════════════════════════
405
+ echo -e "
406
+ ${YELLOW}[7/8] Downloading Upscale & Post-Processing Models...${NC}"
407
+
408
+ echo -e "${CYAN}═══ Upscalers ═══${NC}"
409
+
410
+ dl "$MIRROR_REPO/upscalers/4x_NMKD-Siax_200k.pth" \
411
+ "$COMFY_DIR/models/upscale_models/4x_NMKD-Siax_200k.pth" \
412
+ "4x NMKD-Siax"
413
+
414
+ dl "$MIRROR_REPO/upscalers/4x-UltraSharp.pth" \
415
+ "$COMFY_DIR/models/upscale_models/4x-UltraSharp.pth" \
416
+ "4x UltraSharp"
417
+
418
+ dl "$MIRROR_REPO/upscalers/RealESRGAN_x4.pth" \
419
+ "$COMFY_DIR/models/upscale_models/RealESRGAN_x4.pth" \
420
+ "RealESRGAN x4"
421
+
422
+ echo -e "${CYAN}═══ IP-Adapter ═══${NC}"
423
+
424
+ dl "$MIRROR_REPO/ipadapter/ip-adapter-plus_sdxl_vit-h.safetensors" \
425
+ "$COMFY_DIR/models/ipadapter/ip-adapter-plus_sdxl_vit-h.safetensors" \
426
+ "IP-Adapter Plus SDXL"
427
+
428
+ dl "$MIRROR_REPO/ipadapter/ip-adapter-plus-face_sdxl_vit-h.safetensors" \
429
+ "$COMFY_DIR/models/ipadapter/ip-adapter-plus-face_sdxl_vit-h.safetensors" \
430
+ "IP-Adapter Plus Face"
431
+
432
+ echo -e "${CYAN}═══ CLIP Vision ═══${NC}"
433
+
434
+ dl "$MIRROR_REPO/clip/CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors" \
435
+ "$COMFY_DIR/models/clip_vision/CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors" \
436
+ "CLIP ViT-H-14"
437
+
438
+ echo -e "${CYAN}═══ ControlNet ═══${NC}"
439
+
440
+ dl "$MIRROR_REPO/controlnet/flux-depth-controlnet-v3.safetensors" \
441
+ "$COMFY_DIR/models/controlnet/flux-depth-controlnet-v3.safetensors" \
442
+ "FLUX Depth ControlNet v3"
443
+
444
+ # ═══════════════════════════════════════════════════════════════════════════════
445
+ # STEP 8: WORKFLOW
446
+ # ═══════════════════════════════════════════════════════════════════════════════
447
+ # STEP 8: WORKFLOW INSTALLATION
448
+ # ═══════════════════════════════════════════════════════════════════════════════
449
+ echo -e "\n${YELLOW}[8/8] Installing Workflow...${NC}"
450
+
451
+ curl -sL "https://huggingface.co/msrcam/ComfyUI_AutoInstallers/resolve/main/installers/nudify/Flux_Ultimate_Nudify_v0.19.json" \
452
+ -o "$COMFY_DIR/user/default/workflows/Flux_Ultimate_Nudify_v0.19.json"
453
+
454
+ echo -e "${GREEN}βœ“ Workflow installed${NC}"
455
+
456
+ # ═══════════════════════════════════════════════════════════════════════════════
457
+ # DONE
458
+ # ═══════════════════════════════════════════════════════════════════════════════
459
+ echo -e "\n${GREEN}═══════════════════════════════════════════════════════════════════════════════${NC}"
460
+ echo -e "${GREEN} βœ“ FLUX Ultimate Nudify v0.19 - Installation Complete!${NC}"
461
+ echo -e "${GREEN}═══════════════════════════════════════════════════════════════════════════════${NC}"
462
+
463
+ echo -e "\n${CYAN}To start ComfyUI:${NC}"
464
+ echo " cd $COMFY_DIR && python main.py --listen 0.0.0.0 --port 8188"
465
+
466
+ echo -e "\n${CYAN}Workflow location:${NC}"
467
+ echo " $COMFY_DIR/user/default/workflows/Flux_Ultimate_Nudify_v0.19.json"
468
+ echo ""