adbrasi commited on
Commit
cab5b77
·
verified ·
1 Parent(s): ab579f5

Update setup_comfyui_wan22.sh

Browse files
Files changed (1) hide show
  1. setup_comfyui_wan22.sh +194 -40
setup_comfyui_wan22.sh CHANGED
@@ -1,6 +1,6 @@
1
  #!/usr/bin/env bash
2
- # setup_comfyui_wan22_final.sh
3
- # Script final corrigido para instalação do ComfyUI com Wan 2.2
4
  # Requisitos: Linux + Python3 + git + (opcional) NVCC/CUDA para SageAttention
5
 
6
  set -Eeuo pipefail
@@ -13,12 +13,16 @@ RED='\033[0;31m'
13
  GREEN='\033[0;32m'
14
  YELLOW='\033[1;33m'
15
  BLUE='\033[0;34m'
 
 
16
  NC='\033[0m' # No Color
17
 
18
  log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
19
  log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
20
  log_warn() { echo -e "${YELLOW}[!]${NC} $1"; }
21
  log_error() { echo -e "${RED}[✗]${NC} $1"; }
 
 
22
 
23
  # -----------------------------
24
  # Configuráveis
@@ -40,26 +44,105 @@ CIVITAI_TOKEN="${CIVITAI_TOKEN:-4fcb2834969399006a736ee402b061e5}"
40
  export HF_HUB_ENABLE_HF_TRANSFER=1
41
  export HF_TRANSFER_CONCURRENCY=16 # Aumentado para melhor performance
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  # Detecção de CPU cores para compilação
44
  CPU_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
 
45
 
46
- # Otimização para máquinas com muitos cores (como 112 cores)
47
  if [ $CPU_CORES -gt 32 ]; then
48
- # Para máquinas high-end, usar configurações agressivas
49
- export MAX_JOBS=32 # Limite do CUDA
50
- export EXT_PARALLEL=16 # Aumentado
51
- export NVCC_APPEND_FLAGS="--threads 16" # Aumentado
52
  COMPILE_JOBS=32
53
- log_info "Detectado sistema high-end: $CPU_CORES cores, usando MAX_JOBS=$MAX_JOBS"
54
  else
55
- # Para máquinas normais
56
  HALF_CORES=$((CPU_CORES / 2))
57
- export MAX_JOBS=$HALF_CORES
58
- export EXT_PARALLEL=4
59
- export NVCC_APPEND_FLAGS="--threads 8"
60
  COMPILE_JOBS=$HALF_CORES
61
  fi
62
 
 
 
 
63
  export UV_SYSTEM_PYTHON=1
64
  export PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True"
65
 
@@ -97,14 +180,17 @@ clone_or_update() {
97
 
98
  if [ -d "$dest/.git" ]; then
99
  log_info "Atualizando $repo_name..."
100
- git -C "$dest" pull --ff-only --quiet || true
 
101
  else
102
  log_info "Clonando $repo_name..."
103
- git clone --recursive --depth 1 "$url" "$dest" --quiet
 
104
  fi
105
 
106
  if [ -f "$dest/requirements.txt" ]; then
107
- python3 -m pip install --quiet --no-warn-script-location -r "$dest/requirements.txt" 2>/dev/null || true
 
108
  fi
109
  }
110
 
@@ -118,11 +204,13 @@ hf_download_with_fallback() {
118
  # Tentar primeiro com HF Transfer
119
  if python3 -c "import hf_transfer" 2>/dev/null; then
120
  log_info " → Usando HF Transfer (rápido) para $repo..."
 
 
121
  HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download "$repo" \
122
  "${files[@]}" \
123
  --local-dir "$output_dir" \
124
  --local-dir-use-symlinks False \
125
- --resume-download 2>/dev/null || {
126
  log_warn " HF Transfer falhou, tentando método padrão..."
127
  HF_HUB_ENABLE_HF_TRANSFER=0 huggingface-cli download "$repo" \
128
  "${files[@]}" \
@@ -145,21 +233,25 @@ hf_download_with_fallback() {
145
  # -----------------------------
146
  echo ""
147
  log_info "========================================="
148
- log_info " ComfyUI + Wan 2.2 Setup Final"
149
- log_info " CPU Cores: $CPU_CORES | Compile Jobs: $COMPILE_JOBS"
 
150
  log_info " ComfyUI Dir: $COMFY_DIR"
151
  log_info "========================================="
152
  echo ""
153
 
154
  # [1/8] Atualizar pip e instalar ferramentas essenciais
155
  log_info "[1/8] Atualizando pip e instalando ferramentas..."
156
- python3 -m pip install --quiet --upgrade pip wheel setuptools >/dev/null 2>&1
 
157
 
158
  # Instalar HF Transfer primeiro para downloads mais rápidos
159
- python3 -m pip install --quiet --upgrade hf_transfer >/dev/null 2>&1 || true
 
160
 
161
  # Depois instalar o resto
162
- python3 -m pip install --quiet --upgrade comfy-cli "huggingface_hub>=0.23.0" aria2 >/dev/null 2>&1
 
163
  log_success "Ferramentas instaladas"
164
 
165
  # [2/8] Instalar ComfyUI
@@ -175,6 +267,7 @@ else
175
  [ -d "$COMFY_DIR" ] && rm -rf "$COMFY_DIR"
176
 
177
  # Instala ComfyUI (sempre vai para /root/comfy/ComfyUI)
 
178
  comfy --skip-prompt install --fast-deps --nvidia
179
 
180
  # Verifica se instalou no local correto
@@ -221,10 +314,11 @@ log_info "[3/8] Iniciando download dos modelos Wan 2.2..."
221
  "split_files/text_encoders/umt5_xxl_fp16.safetensors"
222
 
223
  # Copiar para destino
224
- cp -f "$TMPDL/wan22/split_files/diffusion_models/"*.safetensors "$MODELS_DIR/diffusion_models/" 2>/dev/null || true
225
- cp -f "$TMPDL/wan22/split_files/loras/"*.safetensors "$MODELS_DIR/loras/" 2>/dev/null || true
226
- cp -f "$TMPDL/wan22/split_files/vae/"*.safetensors "$MODELS_DIR/vae/" 2>/dev/null || true
227
- cp -f "$TMPDL/wan22/split_files/text_encoders/"*.safetensors "$MODELS_DIR/text_encoders/" 2>/dev/null || true
 
228
 
229
  log_success " Modelos Wan 2.2 baixados"
230
  ) &
@@ -238,7 +332,8 @@ log_info "[4/8] Baixando Wan 2.1 clip vision..."
238
  hf_download_with_fallback "$REPO_21" \
239
  "split_files/clip_vision/clip_vision_h.safetensors"
240
 
241
- cp -f "$TMPDL/wan21/split_files/clip_vision/"*.safetensors "$MODELS_DIR/clip_vision/" 2>/dev/null || true
 
242
 
243
  log_success " Clip vision baixado"
244
  ) &
@@ -252,7 +347,8 @@ log_info "[5/8] Baixando ControlNet Union..."
252
  hf_download_with_fallback "$REPO_CN" \
253
  "diffusion_pytorch_model_promax.safetensors"
254
 
255
- cp -f "$TMPDL/controlnet/diffusion_pytorch_model_promax.safetensors" \
 
256
  "$MODELS_DIR/controlnet/controlnet-union.safetensors"
257
 
258
  log_success " ControlNet baixado"
@@ -269,24 +365,47 @@ log_info "[6/8] Baixando modelo do Civitai..."
269
  # URL correta completa
270
  CIVITAI_URL="https://civitai.com/api/download/models/2122278?type=Model&format=SafeTensor&size=pruned&fp=fp16&token=${CIVITAI_TOKEN}"
271
 
 
 
 
272
  # Tentar com wget primeiro (melhor para nomes de arquivo)
 
273
  if ! wget --content-disposition \
274
  --tries=3 \
275
  --timeout=60 \
276
  --continue \
277
- --progress=bar:force:noscroll \
278
- "$CIVITAI_URL" 2>&1 | grep --line-buffered "%" | sed -u -e "s/^/ /"; then
279
 
280
  log_warn " Wget falhou, tentando com curl..."
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  curl -L \
282
  --retry 3 \
283
  --connect-timeout 30 \
284
  --progress-bar \
285
- -o "flux_unleashed_v2.safetensors" \
286
  "$CIVITAI_URL"
287
  fi
288
 
289
- log_success " Modelo Civitai baixado"
 
 
 
 
 
 
290
  ) &
291
  CIVITAI_PID=$!
292
 
@@ -301,23 +420,40 @@ log_info "[7/8] Preparando SageAttention (paralelo com downloads)..."
301
  log_info " Usando configuração otimizada: MAX_JOBS=$MAX_JOBS, EXT_PARALLEL=$EXT_PARALLEL"
302
 
303
  # Instalar triton primeiro
304
- python3 -m pip install --quiet "triton>=3.0.0" 2>/dev/null || true
 
 
 
 
 
305
 
306
  # Clonar SageAttention
307
  SAGE_DIR="$TMPDL/SageAttention"
308
  if [ ! -d "$SAGE_DIR" ]; then
309
- git clone --depth 1 https://github.com/thu-ml/SageAttention.git "$SAGE_DIR" --quiet
 
310
  fi
311
 
312
  cd "$SAGE_DIR"
313
 
314
- # Compilar com configurações otimizadas para muitos cores
315
- log_info " Compilando SageAttention com $MAX_JOBS jobs paralelos..."
316
- python3 setup.py install 2>&1 | grep -E "(Building|Compiling|Installing)" || true
 
 
 
 
317
 
318
  # Testar se instalou
319
  if python3 -c "import sageattention" 2>/dev/null; then
320
  log_success " SageAttention instalado com sucesso"
 
 
 
 
 
 
 
321
  else
322
  log_warn " SageAttention não foi instalado corretamente"
323
  fi
@@ -370,6 +506,7 @@ log_info "[8/8] Instalando custom nodes..."
370
  )
371
 
372
  # Aguardar SageAttention terminar
 
373
  wait $SAGE_PID
374
 
375
  # Verificar instalação
@@ -378,7 +515,8 @@ ERROR_COUNT=0
378
 
379
  check_file() {
380
  if [ -f "$1" ]; then
381
- log_success " ✓ $(basename "$1")"
 
382
  return 0
383
  else
384
  log_error " ✗ $(basename "$1") não encontrado"
@@ -388,6 +526,7 @@ check_file() {
388
  }
389
 
390
  # Verificar ComfyUI
 
391
  check_file "$COMFY_DIR/main.py"
392
 
393
  # Verificar modelos principais
@@ -400,9 +539,15 @@ check_file "$MODELS_DIR/clip_vision/clip_vision_h.safetensors"
400
  check_file "$MODELS_DIR/controlnet/controlnet-union.safetensors"
401
 
402
  # Verificar se algum modelo Civitai foi baixado
403
- CIVITAI_COUNT=$(ls -1 "$MODELS_DIR/loras/"*.safetensors 2>/dev/null | wc -l)
 
 
 
404
  if [ "$CIVITAI_COUNT" -gt 0 ]; then
405
- log_success " ✓ $CIVITAI_COUNT modelo(s) Civitai encontrado(s)"
 
 
 
406
  else
407
  log_warn " ⚠ Nenhum modelo Civitai encontrado (não crítico)"
408
  fi
@@ -418,11 +563,19 @@ if [ $ERROR_COUNT -eq 0 ]; then
418
  SAGE_FLAG=""
419
  if python3 -c "import sageattention" 2>/dev/null; then
420
  SAGE_FLAG="--use-sage-attention"
421
- log_success "SageAttention disponível (compilado com $MAX_JOBS jobs)"
422
  else
423
  log_info "SageAttention não disponível"
424
  fi
425
 
 
 
 
 
 
 
 
 
426
  echo ""
427
  log_info "Iniciando ComfyUI..."
428
 
@@ -436,6 +589,7 @@ if [ $ERROR_COUNT -eq 0 ]; then
436
 
437
  # Mudar para o diretório do ComfyUI e executar
438
  cd "$COMFY_DIR"
 
439
  exec comfy launch -- $SAGE_FLAG --listen "$COMFY_HOST" --port "$COMFY_PORT"
440
  else
441
  log_error "Instalação completada com $ERROR_COUNT erro(s)"
 
1
  #!/usr/bin/env bash
2
+ # setup_comfyui_wan22_verbose.sh
3
+ # Script com logs completos para instalação do ComfyUI com Wan 2.2
4
  # Requisitos: Linux + Python3 + git + (opcional) NVCC/CUDA para SageAttention
5
 
6
  set -Eeuo pipefail
 
13
  GREEN='\033[0;32m'
14
  YELLOW='\033[1;33m'
15
  BLUE='\033[0;34m'
16
+ CYAN='\033[0;36m'
17
+ MAGENTA='\033[0;35m'
18
  NC='\033[0m' # No Color
19
 
20
  log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
21
  log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
22
  log_warn() { echo -e "${YELLOW}[!]${NC} $1"; }
23
  log_error() { echo -e "${RED}[✗]${NC} $1"; }
24
+ log_debug() { echo -e "${CYAN}[DEBUG]${NC} $1"; }
25
+ log_cmd() { echo -e "${MAGENTA}[CMD]${NC} $1"; }
26
 
27
  # -----------------------------
28
  # Configuráveis
 
44
  export HF_HUB_ENABLE_HF_TRANSFER=1
45
  export HF_TRANSFER_CONCURRENCY=16 # Aumentado para melhor performance
46
 
47
+ # -----------------------------
48
+ # Detectar capacidades do CUDA
49
+ # -----------------------------
50
+ detect_cuda_capabilities() {
51
+ if command -v nvidia-smi >/dev/null 2>&1; then
52
+ log_info "Detectando capacidades do CUDA..."
53
+
54
+ # Obter informações da GPU
55
+ GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader | head -n1)
56
+ GPU_MEMORY=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits | head -n1)
57
+ GPU_COUNT=$(nvidia-smi --query-gpu=count --format=csv,noheader | wc -l)
58
+
59
+ log_debug "GPU: $GPU_NAME ($GPU_MEMORY MB) x$GPU_COUNT"
60
+
61
+ # Detectar compute capability
62
+ if command -v nvcc >/dev/null 2>&1; then
63
+ CUDA_VERSION=$(nvcc --version | grep "release" | awk '{print $6}' | cut -d',' -f1)
64
+ log_debug "CUDA Version: $CUDA_VERSION"
65
+
66
+ # Obter compute capability via nvidia-ml-py se disponível
67
+ COMPUTE_CAP=$(python3 -c "
68
+ try:
69
+ import pynvml
70
+ pynvml.nvmlInit()
71
+ handle = pynvml.nvmlDeviceGetHandleByIndex(0)
72
+ major, minor = pynvml.nvmlDeviceGetCudaComputeCapability(handle)
73
+ print(f'{major}.{minor}')
74
+ except:
75
+ print('unknown')
76
+ " 2>/dev/null || echo "unknown")
77
+
78
+ if [ "$COMPUTE_CAP" != "unknown" ]; then
79
+ log_debug "Compute Capability: $COMPUTE_CAP"
80
+ fi
81
+
82
+ # Determinar MAX_JOBS baseado na GPU e memória
83
+ # RTX 4090/A100: 128 SMs -> pode usar 32 jobs
84
+ # RTX 3090: 82 SMs -> pode usar 24 jobs
85
+ # RTX 3080: 68 SMs -> pode usar 16 jobs
86
+ # Regra geral: ~4 jobs por GB de VRAM, máximo 32
87
+
88
+ if [ "$GPU_MEMORY" -gt 0 ]; then
89
+ SUGGESTED_JOBS=$((GPU_MEMORY / 1024 / 4)) # 4 jobs por GB
90
+ if [ $SUGGESTED_JOBS -gt 32 ]; then
91
+ SUGGESTED_JOBS=32 # Limite do CUDA
92
+ elif [ $SUGGESTED_JOBS -lt 4 ]; then
93
+ SUGGESTED_JOBS=4 # Mínimo razoável
94
+ fi
95
+
96
+ # Para GPUs conhecidas, usar valores otimizados
97
+ if [[ "$GPU_NAME" == *"4090"* ]] || [[ "$GPU_NAME" == *"A100"* ]]; then
98
+ SUGGESTED_JOBS=32
99
+ SUGGESTED_THREADS=16
100
+ elif [[ "$GPU_NAME" == *"3090"* ]] || [[ "$GPU_NAME" == *"A6000"* ]]; then
101
+ SUGGESTED_JOBS=24
102
+ SUGGESTED_THREADS=12
103
+ elif [[ "$GPU_NAME" == *"3080"* ]] || [[ "$GPU_NAME" == *"A5000"* ]]; then
104
+ SUGGESTED_JOBS=16
105
+ SUGGESTED_THREADS=8
106
+ else
107
+ SUGGESTED_THREADS=$((SUGGESTED_JOBS / 2))
108
+ fi
109
+
110
+ export MAX_JOBS=$SUGGESTED_JOBS
111
+ export NVCC_APPEND_FLAGS="--threads $SUGGESTED_THREADS"
112
+ export EXT_PARALLEL=$((SUGGESTED_JOBS / 2))
113
+
114
+ log_success "Configuração CUDA otimizada:"
115
+ log_debug " MAX_JOBS=$MAX_JOBS"
116
+ log_debug " NVCC threads=$SUGGESTED_THREADS"
117
+ log_debug " EXT_PARALLEL=$EXT_PARALLEL"
118
+ fi
119
+ fi
120
+ else
121
+ log_warn "nvidia-smi não encontrado, usando configuração padrão"
122
+ fi
123
+ }
124
+
125
  # Detecção de CPU cores para compilação
126
  CPU_CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)
127
+ log_debug "CPU Cores detectados: $CPU_CORES"
128
 
129
+ # Configuração inicial baseada em CPU (será sobrescrita pela detecção CUDA se disponível)
130
  if [ $CPU_CORES -gt 32 ]; then
131
+ export MAX_JOBS=${MAX_JOBS:-32}
132
+ export EXT_PARALLEL=${EXT_PARALLEL:-16}
133
+ export NVCC_APPEND_FLAGS=${NVCC_APPEND_FLAGS:-"--threads 16"}
 
134
  COMPILE_JOBS=32
 
135
  else
 
136
  HALF_CORES=$((CPU_CORES / 2))
137
+ export MAX_JOBS=${MAX_JOBS:-$HALF_CORES}
138
+ export EXT_PARALLEL=${EXT_PARALLEL:-4}
139
+ export NVCC_APPEND_FLAGS=${NVCC_APPEND_FLAGS:-"--threads 8"}
140
  COMPILE_JOBS=$HALF_CORES
141
  fi
142
 
143
+ # Detectar e otimizar para CUDA
144
+ detect_cuda_capabilities
145
+
146
  export UV_SYSTEM_PYTHON=1
147
  export PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True"
148
 
 
180
 
181
  if [ -d "$dest/.git" ]; then
182
  log_info "Atualizando $repo_name..."
183
+ log_cmd "git -C \"$dest\" pull --ff-only"
184
+ git -C "$dest" pull --ff-only || true
185
  else
186
  log_info "Clonando $repo_name..."
187
+ log_cmd "git clone --recursive --depth 1 \"$url\" \"$dest\""
188
+ git clone --recursive --depth 1 "$url" "$dest"
189
  fi
190
 
191
  if [ -f "$dest/requirements.txt" ]; then
192
+ log_debug "Instalando requirements para $repo_name..."
193
+ python3 -m pip install --no-warn-script-location -r "$dest/requirements.txt"
194
  fi
195
  }
196
 
 
204
  # Tentar primeiro com HF Transfer
205
  if python3 -c "import hf_transfer" 2>/dev/null; then
206
  log_info " → Usando HF Transfer (rápido) para $repo..."
207
+ log_cmd "HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download \"$repo\" ..."
208
+
209
  HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download "$repo" \
210
  "${files[@]}" \
211
  --local-dir "$output_dir" \
212
  --local-dir-use-symlinks False \
213
+ --resume-download || {
214
  log_warn " HF Transfer falhou, tentando método padrão..."
215
  HF_HUB_ENABLE_HF_TRANSFER=0 huggingface-cli download "$repo" \
216
  "${files[@]}" \
 
233
  # -----------------------------
234
  echo ""
235
  log_info "========================================="
236
+ log_info " ComfyUI + Wan 2.2 Setup (Verbose)"
237
+ log_info " CPU: $CPU_CORES cores | Compile Jobs: $COMPILE_JOBS"
238
+ log_info " CUDA MAX_JOBS: ${MAX_JOBS:-não detectado}"
239
  log_info " ComfyUI Dir: $COMFY_DIR"
240
  log_info "========================================="
241
  echo ""
242
 
243
  # [1/8] Atualizar pip e instalar ferramentas essenciais
244
  log_info "[1/8] Atualizando pip e instalando ferramentas..."
245
+ log_cmd "python3 -m pip install --upgrade pip wheel setuptools"
246
+ python3 -m pip install --upgrade pip wheel setuptools
247
 
248
  # Instalar HF Transfer primeiro para downloads mais rápidos
249
+ log_cmd "python3 -m pip install --upgrade hf_transfer"
250
+ python3 -m pip install --upgrade hf_transfer || true
251
 
252
  # Depois instalar o resto
253
+ log_cmd "python3 -m pip install --upgrade comfy-cli huggingface_hub>=0.23.0 aria2"
254
+ python3 -m pip install --upgrade comfy-cli "huggingface_hub>=0.23.0" aria2
255
  log_success "Ferramentas instaladas"
256
 
257
  # [2/8] Instalar ComfyUI
 
267
  [ -d "$COMFY_DIR" ] && rm -rf "$COMFY_DIR"
268
 
269
  # Instala ComfyUI (sempre vai para /root/comfy/ComfyUI)
270
+ log_cmd "comfy --skip-prompt install --fast-deps --nvidia"
271
  comfy --skip-prompt install --fast-deps --nvidia
272
 
273
  # Verifica se instalou no local correto
 
314
  "split_files/text_encoders/umt5_xxl_fp16.safetensors"
315
 
316
  # Copiar para destino
317
+ log_debug "Copiando modelos Wan 2.2 para $MODELS_DIR..."
318
+ cp -fv "$TMPDL/wan22/split_files/diffusion_models/"*.safetensors "$MODELS_DIR/diffusion_models/" 2>/dev/null || true
319
+ cp -fv "$TMPDL/wan22/split_files/loras/"*.safetensors "$MODELS_DIR/loras/" 2>/dev/null || true
320
+ cp -fv "$TMPDL/wan22/split_files/vae/"*.safetensors "$MODELS_DIR/vae/" 2>/dev/null || true
321
+ cp -fv "$TMPDL/wan22/split_files/text_encoders/"*.safetensors "$MODELS_DIR/text_encoders/" 2>/dev/null || true
322
 
323
  log_success " Modelos Wan 2.2 baixados"
324
  ) &
 
332
  hf_download_with_fallback "$REPO_21" \
333
  "split_files/clip_vision/clip_vision_h.safetensors"
334
 
335
+ log_debug "Copiando clip vision para $MODELS_DIR/clip_vision..."
336
+ cp -fv "$TMPDL/wan21/split_files/clip_vision/"*.safetensors "$MODELS_DIR/clip_vision/" 2>/dev/null || true
337
 
338
  log_success " Clip vision baixado"
339
  ) &
 
347
  hf_download_with_fallback "$REPO_CN" \
348
  "diffusion_pytorch_model_promax.safetensors"
349
 
350
+ log_debug "Copiando ControlNet para $MODELS_DIR/controlnet..."
351
+ cp -fv "$TMPDL/controlnet/diffusion_pytorch_model_promax.safetensors" \
352
  "$MODELS_DIR/controlnet/controlnet-union.safetensors"
353
 
354
  log_success " ControlNet baixado"
 
365
  # URL correta completa
366
  CIVITAI_URL="https://civitai.com/api/download/models/2122278?type=Model&format=SafeTensor&size=pruned&fp=fp16&token=${CIVITAI_TOKEN}"
367
 
368
+ log_debug "Baixando de: $CIVITAI_URL"
369
+ log_cmd "wget --content-disposition \"$CIVITAI_URL\""
370
+
371
  # Tentar com wget primeiro (melhor para nomes de arquivo)
372
+ # Não suprimir output para ver o progresso
373
  if ! wget --content-disposition \
374
  --tries=3 \
375
  --timeout=60 \
376
  --continue \
377
+ --progress=bar:force \
378
+ "$CIVITAI_URL"; then
379
 
380
  log_warn " Wget falhou, tentando com curl..."
381
+
382
+ # Tentar obter o nome do arquivo do header primeiro
383
+ FILENAME=$(curl -sI -L "$CIVITAI_URL" | grep -i "content-disposition" | sed -n 's/.*filename="\([^"]*\)".*/\1/p')
384
+
385
+ if [ -z "$FILENAME" ]; then
386
+ # Se não conseguir detectar, usar nome genérico
387
+ FILENAME="civitai_model_$(date +%s).safetensors"
388
+ log_warn "Não foi possível detectar nome do arquivo, usando: $FILENAME"
389
+ else
390
+ log_debug "Nome do arquivo detectado: $FILENAME"
391
+ fi
392
+
393
+ log_cmd "curl -L \"$CIVITAI_URL\" -o \"$FILENAME\""
394
  curl -L \
395
  --retry 3 \
396
  --connect-timeout 30 \
397
  --progress-bar \
398
+ -o "$FILENAME" \
399
  "$CIVITAI_URL"
400
  fi
401
 
402
+ # Verificar se algum arquivo foi baixado
403
+ DOWNLOADED_FILE=$(ls -t *.safetensors 2>/dev/null | head -n1)
404
+ if [ -n "$DOWNLOADED_FILE" ]; then
405
+ log_success " Modelo Civitai baixado: $DOWNLOADED_FILE"
406
+ else
407
+ log_error " Falha ao baixar modelo Civitai"
408
+ fi
409
  ) &
410
  CIVITAI_PID=$!
411
 
 
420
  log_info " Usando configuração otimizada: MAX_JOBS=$MAX_JOBS, EXT_PARALLEL=$EXT_PARALLEL"
421
 
422
  # Instalar triton primeiro
423
+ log_cmd "python3 -m pip install \"triton>=3.0.0\""
424
+ python3 -m pip install "triton>=3.0.0"
425
+
426
+ # Instalar pynvml para melhor detecção de GPU
427
+ log_cmd "python3 -m pip install pynvml"
428
+ python3 -m pip install pynvml || true
429
 
430
  # Clonar SageAttention
431
  SAGE_DIR="$TMPDL/SageAttention"
432
  if [ ! -d "$SAGE_DIR" ]; then
433
+ log_cmd "git clone --depth 1 https://github.com/thu-ml/SageAttention.git \"$SAGE_DIR\""
434
+ git clone --depth 1 https://github.com/thu-ml/SageAttention.git "$SAGE_DIR"
435
  fi
436
 
437
  cd "$SAGE_DIR"
438
 
439
+ # Compilar com configurações otimizadas
440
+ log_info " Compilando SageAttention com MAX_JOBS=$MAX_JOBS..."
441
+ log_debug " NVCC flags: $NVCC_APPEND_FLAGS"
442
+
443
+ # Mostrar output completo da compilação
444
+ log_cmd "python3 setup.py install"
445
+ python3 setup.py install
446
 
447
  # Testar se instalou
448
  if python3 -c "import sageattention" 2>/dev/null; then
449
  log_success " SageAttention instalado com sucesso"
450
+
451
+ # Mostrar informações sobre a instalação
452
+ python3 -c "
453
+ import sageattention
454
+ print(f' SageAttention version: {sageattention.__version__ if hasattr(sageattention, \"__version__\") else \"unknown\"}')
455
+ print(f' SageAttention path: {sageattention.__file__}')
456
+ " 2>/dev/null || true
457
  else
458
  log_warn " SageAttention não foi instalado corretamente"
459
  fi
 
506
  )
507
 
508
  # Aguardar SageAttention terminar
509
+ log_info "Aguardando conclusão da instalação do SageAttention..."
510
  wait $SAGE_PID
511
 
512
  # Verificar instalação
 
515
 
516
  check_file() {
517
  if [ -f "$1" ]; then
518
+ SIZE=$(du -h "$1" | cut -f1)
519
+ log_success " ✓ $(basename "$1") ($SIZE)"
520
  return 0
521
  else
522
  log_error " ✗ $(basename "$1") não encontrado"
 
526
  }
527
 
528
  # Verificar ComfyUI
529
+ log_debug "Verificando ComfyUI..."
530
  check_file "$COMFY_DIR/main.py"
531
 
532
  # Verificar modelos principais
 
539
  check_file "$MODELS_DIR/controlnet/controlnet-union.safetensors"
540
 
541
  # Verificar se algum modelo Civitai foi baixado
542
+ log_debug "Verificando modelos Civitai em $MODELS_DIR/loras..."
543
+ CIVITAI_FILES=$(ls -1 "$MODELS_DIR/loras/"*.safetensors 2>/dev/null || true)
544
+ CIVITAI_COUNT=$(echo "$CIVITAI_FILES" | grep -c safetensors || echo 0)
545
+
546
  if [ "$CIVITAI_COUNT" -gt 0 ]; then
547
+ log_success " ✓ $CIVITAI_COUNT modelo(s) Civitai encontrado(s):"
548
+ echo "$CIVITAI_FILES" | while read file; do
549
+ [ -n "$file" ] && log_debug " - $(basename "$file") ($(du -h "$file" | cut -f1))"
550
+ done
551
  else
552
  log_warn " ⚠ Nenhum modelo Civitai encontrado (não crítico)"
553
  fi
 
563
  SAGE_FLAG=""
564
  if python3 -c "import sageattention" 2>/dev/null; then
565
  SAGE_FLAG="--use-sage-attention"
566
+ log_success "SageAttention disponível (compilado com MAX_JOBS=$MAX_JOBS)"
567
  else
568
  log_info "SageAttention não disponível"
569
  fi
570
 
571
+ # Mostrar informações do sistema
572
+ log_debug "Configuração final:"
573
+ log_debug " CPU: $CPU_CORES cores"
574
+ if command -v nvidia-smi >/dev/null 2>&1; then
575
+ log_debug " GPU: $(nvidia-smi --query-gpu=name --format=csv,noheader | head -n1)"
576
+ log_debug " VRAM: $(nvidia-smi --query-gpu=memory.total --format=csv,noheader | head -n1)"
577
+ fi
578
+
579
  echo ""
580
  log_info "Iniciando ComfyUI..."
581
 
 
589
 
590
  # Mudar para o diretório do ComfyUI e executar
591
  cd "$COMFY_DIR"
592
+ log_cmd "comfy launch -- $SAGE_FLAG --listen \"$COMFY_HOST\" --port \"$COMFY_PORT\""
593
  exec comfy launch -- $SAGE_FLAG --listen "$COMFY_HOST" --port "$COMFY_PORT"
594
  else
595
  log_error "Instalação completada com $ERROR_COUNT erro(s)"