adbrasi commited on
Commit
98af540
·
verified ·
1 Parent(s): b858fdc

Update WANcomfyui_installer_fixed.sh

Browse files
Files changed (1) hide show
  1. WANcomfyui_installer_fixed.sh +228 -268
WANcomfyui_installer_fixed.sh CHANGED
@@ -1,9 +1,8 @@
1
  #!/bin/bash
2
 
3
  # ============================================================================
4
- # Instalador Dinâmico para ComfyUI com Wan 2.2
5
- # Instala o ComfyUI e suas dependências no diretório atual.
6
- # Versão: 2.0 - Corrigida e Otimizada
7
  # ============================================================================
8
 
9
  set -e
@@ -13,18 +12,16 @@ set -o pipefail
13
  # CONFIGURAÇÕES GLOBAIS
14
  # ============================================================================
15
 
16
- # URL do workflow a ser baixado
17
- readonly WORKFLOW_URL="https://huggingface.co/adbrasi/akarris_trainer/resolve/main/Wan_GenerationBase.json"
18
-
19
- # --- Caminhos Dinâmicos ---
20
  readonly INSTALL_BASE_DIR="$(pwd)"
21
  readonly WORKSPACE_DIR="$INSTALL_BASE_DIR/ComfyUI"
22
  readonly WORKFLOW_FILENAME="workflow.json"
23
  readonly WORKFLOW_FILE="$INSTALL_BASE_DIR/$WORKFLOW_FILENAME"
24
-
25
- # Arquivo de log
26
  readonly LOG_FILE="$INSTALL_BASE_DIR/install.log"
27
 
 
 
 
28
  # ============================================================================
29
  # FUNÇÕES DE UTILIDADE
30
  # ============================================================================
@@ -75,7 +72,7 @@ check_requirements() {
75
 
76
  if [ ${#missing_deps[@]} -gt 0 ]; then
77
  log_error "Dependências faltando: ${missing_deps[*]}"
78
- log_error "Por favor, instale as dependências faltando e execute o script novamente."
79
  exit 1
80
  fi
81
 
@@ -92,7 +89,7 @@ check_requirements() {
92
  }
93
 
94
  # ============================================================================
95
- # FUNÇÃO DE LIMPEZA
96
  # ============================================================================
97
 
98
  cleanup_existing_installation() {
@@ -111,7 +108,7 @@ cleanup_existing_installation() {
111
  exit 1
112
  fi
113
  else
114
- log_info "Nenhuma instalação anterior encontrada no local."
115
  fi
116
  }
117
 
@@ -131,12 +128,11 @@ install_comfy_cli() {
131
  # Adiciona ~/.local/bin ao PATH se necessário
132
  if [ -d "$HOME/.local/bin" ] && [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
133
  export PATH="$HOME/.local/bin:$PATH"
134
- log_info "Adicionado $HOME/.local/bin ao PATH para esta sessão."
135
  fi
136
 
137
  if ! command_exists comfy; then
138
- log_error "Comando 'comfy' não encontrado no PATH após a instalação."
139
- log_error "Tente executar: export PATH=\"\$HOME/.local/bin:\$PATH\""
140
  return 1
141
  fi
142
 
@@ -162,13 +158,13 @@ install_comfyui() {
162
  }
163
 
164
  # ============================================================================
165
- # INSTALAÇÃO DO HUGGINGFACE HUB E HF_TRANSFER
166
  # ============================================================================
167
 
168
  install_hf_tools() {
169
- log_info "Instalando HuggingFace Hub CLI e hf_transfer..."
170
 
171
- python3 -m pip install -U "huggingface_hub[cli]" hf_transfer || {
172
  log_error "Falha ao instalar ferramentas HuggingFace"
173
  return 1
174
  }
@@ -181,7 +177,7 @@ install_hf_tools() {
181
  }
182
 
183
  # ============================================================================
184
- # INSTALAÇÃO DO SAGEATTENTION 2.2.0 (COMPILAÇÃO OTIMIZADA)
185
  # ============================================================================
186
 
187
  install_sageattention() {
@@ -196,7 +192,7 @@ install_sageattention() {
196
  fi
197
 
198
  # Instala dependências necessárias
199
- log_info "Instalando dependências do SageAttention (Triton e utilidades)..."
200
  python3 -m pip install 'triton>=3.0.0,<3.1.0' packaging ninja || {
201
  log_error "Falha ao instalar dependências do SageAttention"
202
  return 1
@@ -223,18 +219,17 @@ install_sageattention() {
223
  local cuda_capability=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -n1 | tr -d '.')
224
  if [ -n "$cuda_capability" ]; then
225
  log_info "Detectada capacidade CUDA: $cuda_capability"
226
- # Adiciona a arquitetura detectada se não for Ada
227
  if [ "$cuda_capability" != "89" ]; then
228
  export TORCH_CUDA_ARCH_LIST="$TORCH_CUDA_ARCH_LIST;${cuda_capability:0:1}.${cuda_capability:1}"
229
- log_info "TORCH_CUDA_ARCH_LIST configurado para: $TORCH_CUDA_ARCH_LIST"
230
  fi
231
  fi
232
  fi
233
 
234
  # Compila e instala
235
- log_info "Compilando SageAttention (isso pode demorar 5-10 minutos)..."
236
  if ! python3 setup.py install >> "$LOG_FILE" 2>&1; then
237
- log_error "Falha ao compilar SageAttention. Verifique $LOG_FILE para detalhes."
238
  cd "$INSTALL_BASE_DIR"
239
  return 1
240
  fi
@@ -244,77 +239,6 @@ install_sageattention() {
244
  return 0
245
  }
246
 
247
- # ============================================================================
248
- # FUNÇÃO DE DOWNLOAD COM RETRY E VERIFICAÇÃO
249
- # ============================================================================
250
-
251
- download_file_with_retry() {
252
- local url="$1"
253
- local dest_dir="$2"
254
- local filename="${3:-}"
255
- local max_retries=3
256
- local retry_count=0
257
-
258
- # Remove parâmetros de query do nome do arquivo se não foi especificado
259
- if [ -z "$filename" ]; then
260
- filename=$(basename "${url%%\?*}")
261
- fi
262
-
263
- local dest_file="$dest_dir/$filename"
264
-
265
- # Cria o diretório de destino se não existir
266
- mkdir -p "$dest_dir"
267
-
268
- while [ $retry_count -lt $max_retries ]; do
269
- log_info "Baixando: $filename (tentativa $((retry_count + 1))/$max_retries)"
270
-
271
- # Usa huggingface-cli se disponível (mais confiável para HF)
272
- if command_exists huggingface-cli && [[ "$url" == *"huggingface.co"* ]]; then
273
- # Extrai repo e filename do URL do HuggingFace
274
- local hf_path=$(echo "$url" | sed -n 's|.*huggingface.co/\([^/]*/[^/]*\)/resolve/main/\(.*\)\?.*|\1 \2|p')
275
- if [ -n "$hf_path" ]; then
276
- local repo=$(echo "$hf_path" | cut -d' ' -f1)
277
- local file_path=$(echo "$hf_path" | cut -d' ' -f2)
278
-
279
- export HF_HUB_ENABLE_HF_TRANSFER=1
280
- if huggingface-cli download "$repo" "$file_path" --local-dir "$dest_dir" --local-dir-use-symlinks False >> "$LOG_FILE" 2>&1; then
281
- # Move o arquivo para o nome correto se necessário
282
- if [ -f "$dest_dir/$file_path" ] && [ "$file_path" != "$filename" ]; then
283
- mv "$dest_dir/$file_path" "$dest_file"
284
- fi
285
- log_info "Download concluído: $filename"
286
- return 0
287
- fi
288
- fi
289
- fi
290
-
291
- # Fallback para wget/curl
292
- if command_exists wget; then
293
- if wget -c -O "$dest_file" "$url" >> "$LOG_FILE" 2>&1; then
294
- log_info "Download concluído: $filename"
295
- return 0
296
- fi
297
- elif command_exists curl; then
298
- if curl -L -C - -o "$dest_file" "$url" >> "$LOG_FILE" 2>&1; then
299
- log_info "Download concluído: $filename"
300
- return 0
301
- fi
302
- else
303
- log_error "Nenhuma ferramenta de download (wget/curl) encontrada."
304
- return 1
305
- fi
306
-
307
- retry_count=$((retry_count + 1))
308
- if [ $retry_count -lt $max_retries ]; then
309
- log_warning "Download falhou. Tentando novamente em 5 segundos..."
310
- sleep 5
311
- fi
312
- done
313
-
314
- log_error "Falha ao baixar $filename após $max_retries tentativas"
315
- return 1
316
- }
317
-
318
  # ============================================================================
319
  # DOWNLOAD DO WORKFLOW
320
  # ============================================================================
@@ -322,19 +246,27 @@ download_file_with_retry() {
322
  download_workflow() {
323
  log_info "Baixando o workflow..."
324
 
325
- if download_file_with_retry "$WORKFLOW_URL" "$INSTALL_BASE_DIR" "$WORKFLOW_FILENAME"; then
326
- if [ -f "$WORKFLOW_FILE" ]; then
327
- log_info "Workflow baixado com sucesso."
328
- return 0
329
- fi
 
 
 
330
  fi
331
 
332
- log_error "Falha ao baixar o arquivo do workflow."
333
- return 1
 
 
 
 
 
334
  }
335
 
336
  # ============================================================================
337
- # DOWNLOAD DE MODELOS WAN 2.2
338
  # ============================================================================
339
 
340
  download_models() {
@@ -351,131 +283,103 @@ download_models() {
351
 
352
  for dir in "${dirs[@]}"; do
353
  mkdir -p "$dir"
354
- log_info "Diretório criado: $dir"
355
  done
356
 
357
- # Lista de modelos Wan 2.2 - usando huggingface-cli quando possível
358
- log_info "Configurando lista de modelos para download..."
359
 
360
- # Verifica se huggingface-cli está disponível
361
- if command_exists huggingface-cli; then
362
- log_info "Usando huggingface-cli para downloads (mais confiável)"
363
- export HF_HUB_ENABLE_HF_TRANSFER=1
364
-
365
- # Download com huggingface-cli
366
- local hf_downloads=(
367
- # Diffusion Models
368
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors:$WORKSPACE_DIR/models/diffusion_models"
369
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors:$WORKSPACE_DIR/models/diffusion_models"
370
-
371
- # LoRAs
372
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors:$WORKSPACE_DIR/models/loras"
373
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors:$WORKSPACE_DIR/models/loras"
374
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors:$WORKSPACE_DIR/models/loras"
375
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors:$WORKSPACE_DIR/models/loras"
376
-
377
- # Text Encoders
378
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/text_encoders/umt5_xxl_fp16.safetensors:$WORKSPACE_DIR/models/text_encoders"
379
- "Comfy-Org/Wan_2.2_ComfyUI_Repackaged:split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors:$WORKSPACE_DIR/models/text_encoders"
380
-
381
- # VAE
382
- "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/vae/wan_2.1_vae.safetensors:$WORKSPACE_DIR/models/vae"
383
-
384
- # CLIP Vision
385
- "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/clip_vision/clip_vision_h.safetensors:$WORKSPACE_DIR/models/clip_vision"
386
- )
387
-
388
- local total=${#hf_downloads[@]}
389
- local current=0
390
- local failed_downloads=()
391
-
392
- for download_info in "${hf_downloads[@]}"; do
393
- IFS=':' read -r repo file dest_dir <<< "$download_info"
394
- current=$((current + 1))
395
- local filename=$(basename "$file")
396
-
397
- log_info "[$current/$total] Baixando: $filename"
398
- log_info " Repositório: $repo"
399
- log_info " Arquivo: $file"
400
- log_info " Destino: $dest_dir"
401
-
402
- # Tenta download com huggingface-cli
403
- if huggingface-cli download "$repo" "$file" \
404
- --local-dir "$dest_dir" \
405
- --local-dir-use-symlinks False \
406
- 2>&1 | tee -a "$LOG_FILE"; then
407
-
408
- # Move o arquivo para o local correto se necessário
409
- if [ -f "$dest_dir/$file" ]; then
410
- mv "$dest_dir/$file" "$dest_dir/$filename"
411
- log_info " Download concluído: $filename"
412
- elif [ -f "$dest_dir/$filename" ]; then
413
- log_info "✓ Download concluído: $filename"
414
- else
415
- log_warning "Arquivo baixado mas não encontrado no destino esperado"
416
- failed_downloads+=("$filename")
417
- fi
418
- else
419
- log_warning "Falha ao baixar com huggingface-cli: $filename"
420
- failed_downloads+=("$filename")
421
- fi
422
- done
423
-
424
- else
425
- # Fallback para wget/curl
426
- log_info "huggingface-cli não disponível, usando wget/curl"
427
-
428
- local models=(
429
- # URLs completas com destinos
430
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors:$WORKSPACE_DIR/models/diffusion_models:wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors"
431
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors:$WORKSPACE_DIR/models/diffusion_models:wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors"
432
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors:$WORKSPACE_DIR/models/loras:wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors"
433
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors:$WORKSPACE_DIR/models/loras:wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors"
434
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors:$WORKSPACE_DIR/models/loras:wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors"
435
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors:$WORKSPACE_DIR/models/loras:wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors"
436
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp16.safetensors:$WORKSPACE_DIR/models/text_encoders:umt5_xxl_fp16.safetensors"
437
- "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors:$WORKSPACE_DIR/models/text_encoders:umt5_xxl_fp8_e4m3fn_scaled.safetensors"
438
- "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/vae/wan_2.1_vae.safetensors:$WORKSPACE_DIR/models/vae:wan_2.1_vae.safetensors"
439
- "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/clip_vision/clip_vision_h.safetensors:$WORKSPACE_DIR/models/clip_vision:clip_vision_h.safetensors"
440
- )
441
-
442
- local total=${#models[@]}
443
- local current=0
444
- local failed_downloads=()
445
-
446
- for model_info in "${models[@]}"; do
447
- IFS=':' read -r url dest_dir filename <<< "$model_info"
448
- current=$((current + 1))
449
-
450
- log_info "[$current/$total] Baixando: $filename"
451
-
452
- if ! download_file_with_retry "$url" "$dest_dir" "$filename"; then
453
- failed_downloads+=("$filename")
454
- log_warning "Falha ao baixar: $filename"
455
- fi
456
- done
457
  fi
458
 
459
- # Relatório final
460
- log_info "================================================="
461
- if [ ${#failed_downloads[@]} -gt 0 ]; then
462
- log_warning "Downloads com falha:"
463
- for model in "${failed_downloads[@]}"; do
464
- log_warning " ✗ $model"
465
- done
466
- log_warning "Execute o script novamente ou baixe manualmente os modelos faltando."
467
- return 1
468
- else
469
- log_info "✓ Todos os modelos foram baixados com sucesso!"
470
  fi
471
- log_info "================================================="
472
 
473
- # Lista arquivos baixados para verificação
 
 
 
 
 
 
 
 
 
 
 
 
 
474
  log_info "Verificando modelos baixados:"
475
  for dir in "${dirs[@]}"; do
476
  if [ -d "$dir" ]; then
477
- local count=$(ls -1 "$dir" 2>/dev/null | wc -l)
478
- log_info " $dir: $count arquivo(s)"
 
 
 
 
 
 
 
 
479
  fi
480
  done
481
 
@@ -483,48 +387,81 @@ download_models() {
483
  }
484
 
485
  # ============================================================================
486
- # INSTALAÇÃO DE CUSTOM NODES E DEPENDÊNCIAS
487
  # ============================================================================
488
 
489
- install_custom_nodes_and_deps() {
490
- log_info "Instalando custom nodes e dependências..."
491
 
492
- # Instala dependências do workflow se existir
493
- if [ -f "$WORKFLOW_FILE" ]; then
494
- log_info "Instalando dependências do workflow..."
495
- comfy --workspace "$WORKSPACE_DIR" node install-deps --workflow="$WORKFLOW_FILE" >> "$LOG_FILE" 2>&1 || {
496
- log_warning "Algumas dependências do workflow podem ter falhado ao instalar."
497
- }
498
- fi
499
 
500
- # Lista de custom nodes
501
  local custom_nodes=(
502
- "https://github.com/LAOGOU-666/Comfyui-Memory_Cleanup"
503
- "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes"
504
  "https://github.com/kijai/ComfyUI-KJNodes"
505
- "https://github.com/kijai/ComfyUI-WanVideoWrapper.git"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
506
  )
507
 
508
- local failed_nodes=()
509
 
510
  for node_url in "${custom_nodes[@]}"; do
511
- log_info "Instalando custom node: $(basename "$node_url" .git)"
512
- if ! comfy --workspace "$WORKSPACE_DIR" node install "$node_url" >> "$LOG_FILE" 2>&1; then
513
- failed_nodes+=("$node_url")
514
- log_warning "Falha ao instalar: $(basename "$node_url" .git)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  fi
516
  done
517
 
518
- if [ ${#failed_nodes[@]} -gt 0 ]; then
519
- log_warning "Os seguintes custom nodes falharam:"
520
- for node in "${failed_nodes[@]}"; do
521
- log_warning " - $node"
522
- done
523
- else
524
- log_info "Todos os custom nodes foram instalados com sucesso!"
525
- fi
526
-
527
- return 0
528
  }
529
 
530
  # ============================================================================
@@ -546,25 +483,49 @@ verify_installation() {
546
  issues+=("Arquivo de workflow não encontrado")
547
  fi
548
 
549
- # Verifica pelo menos um modelo
550
- if [ -z "$(ls -A "$WORKSPACE_DIR/models/diffusion_models" 2>/dev/null)" ]; then
551
- issues+=("Nenhum modelo de difusão encontrado")
552
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
553
 
554
  # Verifica SageAttention
555
  if ! python3 -c "import sageattention" 2>/dev/null; then
556
  log_warning "SageAttention não está instalado (opcional)"
 
 
557
  fi
558
 
559
  if [ ${#issues[@]} -gt 0 ]; then
560
  log_error "Problemas encontrados na instalação:"
561
  for issue in "${issues[@]}"; do
562
- log_error " - $issue"
563
  done
564
  return 1
565
  fi
566
 
567
- log_info "Instalação verificada com sucesso!"
568
  return 0
569
  }
570
 
@@ -583,8 +544,8 @@ launch_comfyui() {
583
  log_info " Workflow: $WORKFLOW_FILE"
584
  log_info ""
585
  log_info "Para usar o workflow:"
586
- log_info " 1. Acesse http://127.0.0.1:8818 no seu navegador"
587
- log_info " 2. Arraste e solte o arquivo '$WORKFLOW_FILENAME' na interface"
588
  log_info ""
589
  log_info "Pressione Ctrl+C para parar o servidor"
590
  log_info "================================================="
@@ -614,7 +575,7 @@ main() {
614
  echo "=== Instalação ComfyUI iniciada em $(date) ===" > "$LOG_FILE"
615
 
616
  log_info "================================================="
617
- log_info "Instalador ComfyUI com Wan 2.2"
618
  log_info "================================================="
619
 
620
  # Etapa 1: Verificar requisitos
@@ -635,29 +596,27 @@ main() {
635
  # Etapa 6: Baixar workflow
636
  download_workflow || log_warning "Workflow não foi baixado"
637
 
638
- # Etapa 7: Instalar custom nodes
639
- install_custom_nodes_and_deps
640
 
641
- # Etapa 8: PROCESSOS PARALELOS - SageAttention e Downloads de Modelos
642
  log_info "================================================="
643
  log_info "Iniciando processos paralelos:"
644
- log_info " 1. Instalação do SageAttention (5-10 minutos)"
645
- log_info " 2. Download dos modelos Wan 2.2 (vários GB)"
646
  log_info "================================================="
647
 
648
  # Inicia instalação do SageAttention em background
649
- log_info "Iniciando instalação do SageAttention em background..."
650
  install_sageattention &
651
  local sage_pid=$!
652
 
653
  # Inicia downloads dos modelos em background
654
- log_info "Iniciando downloads dos modelos em background..."
655
  download_models &
656
  local models_pid=$!
657
 
658
  # Monitor de progresso
659
  log_info "Aguardando conclusão dos processos paralelos..."
660
- log_info "Você pode monitorar o progresso em: $LOG_FILE"
661
 
662
  local both_done=false
663
  local sage_done=false
@@ -696,22 +655,23 @@ main() {
696
  if [ "$sage_done" = true ] && [ "$models_done" = true ]; then
697
  both_done=true
698
  else
699
- # Mostra status a cada 30 segundos
700
- sleep 30
701
  if [ "$sage_done" = false ] && ps -p $sage_pid > /dev/null 2>&1; then
702
- log_info "... SageAttention ainda compilando..."
703
  fi
704
  if [ "$models_done" = false ] && ps -p $models_pid > /dev/null 2>&1; then
705
- log_info "... Downloads ainda em progresso..."
706
  fi
707
  fi
708
  done
709
 
 
710
  log_info "Todos os processos paralelos foram concluídos!"
711
 
712
  # Etapa 9: Verificar instalação
713
  verify_installation || {
714
  log_error "A instalação teve problemas. Verifique o log em: $LOG_FILE"
 
715
  exit 1
716
  }
717
 
 
1
  #!/bin/bash
2
 
3
  # ============================================================================
4
+ # Instalador Otimizado para ComfyUI com Wan 2.2
5
+ # Versão 3.0 - Corrigida com instalação manual de custom nodes
 
6
  # ============================================================================
7
 
8
  set -e
 
12
  # CONFIGURAÇÕES GLOBAIS
13
  # ============================================================================
14
 
15
+ # Diretórios base
 
 
 
16
  readonly INSTALL_BASE_DIR="$(pwd)"
17
  readonly WORKSPACE_DIR="$INSTALL_BASE_DIR/ComfyUI"
18
  readonly WORKFLOW_FILENAME="workflow.json"
19
  readonly WORKFLOW_FILE="$INSTALL_BASE_DIR/$WORKFLOW_FILENAME"
 
 
20
  readonly LOG_FILE="$INSTALL_BASE_DIR/install.log"
21
 
22
+ # URL do workflow
23
+ readonly WORKFLOW_URL="https://huggingface.co/adbrasi/akarris_trainer/resolve/main/Wan_GenerationBase.json"
24
+
25
  # ============================================================================
26
  # FUNÇÕES DE UTILIDADE
27
  # ============================================================================
 
72
 
73
  if [ ${#missing_deps[@]} -gt 0 ]; then
74
  log_error "Dependências faltando: ${missing_deps[*]}"
75
+ log_error "Por favor, instale as dependências e execute o script novamente."
76
  exit 1
77
  fi
78
 
 
89
  }
90
 
91
  # ============================================================================
92
+ # LIMPEZA DE INSTALAÇÃO EXISTENTE
93
  # ============================================================================
94
 
95
  cleanup_existing_installation() {
 
108
  exit 1
109
  fi
110
  else
111
+ log_info "Nenhuma instalação anterior encontrada."
112
  fi
113
  }
114
 
 
128
  # Adiciona ~/.local/bin ao PATH se necessário
129
  if [ -d "$HOME/.local/bin" ] && [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
130
  export PATH="$HOME/.local/bin:$PATH"
131
+ log_info "Adicionado $HOME/.local/bin ao PATH."
132
  fi
133
 
134
  if ! command_exists comfy; then
135
+ log_error "Comando 'comfy' não encontrado no PATH."
 
136
  return 1
137
  fi
138
 
 
158
  }
159
 
160
  # ============================================================================
161
+ # INSTALAÇÃO DO HUGGINGFACE HUB
162
  # ============================================================================
163
 
164
  install_hf_tools() {
165
+ log_info "Instalando HuggingFace Hub e hf_transfer..."
166
 
167
+ python3 -m pip install -U "huggingface_hub[cli,hf_transfer]" || {
168
  log_error "Falha ao instalar ferramentas HuggingFace"
169
  return 1
170
  }
 
177
  }
178
 
179
  # ============================================================================
180
+ # INSTALAÇÃO DO SAGEATTENTION 2.2.0
181
  # ============================================================================
182
 
183
  install_sageattention() {
 
192
  fi
193
 
194
  # Instala dependências necessárias
195
+ log_info "Instalando dependências do SageAttention..."
196
  python3 -m pip install 'triton>=3.0.0,<3.1.0' packaging ninja || {
197
  log_error "Falha ao instalar dependências do SageAttention"
198
  return 1
 
219
  local cuda_capability=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -n1 | tr -d '.')
220
  if [ -n "$cuda_capability" ]; then
221
  log_info "Detectada capacidade CUDA: $cuda_capability"
 
222
  if [ "$cuda_capability" != "89" ]; then
223
  export TORCH_CUDA_ARCH_LIST="$TORCH_CUDA_ARCH_LIST;${cuda_capability:0:1}.${cuda_capability:1}"
224
+ log_info "TORCH_CUDA_ARCH_LIST: $TORCH_CUDA_ARCH_LIST"
225
  fi
226
  fi
227
  fi
228
 
229
  # Compila e instala
230
+ log_info "Compilando SageAttention (5-10 minutos)..."
231
  if ! python3 setup.py install >> "$LOG_FILE" 2>&1; then
232
+ log_error "Falha ao compilar SageAttention. Verifique $LOG_FILE"
233
  cd "$INSTALL_BASE_DIR"
234
  return 1
235
  fi
 
239
  return 0
240
  }
241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  # ============================================================================
243
  # DOWNLOAD DO WORKFLOW
244
  # ============================================================================
 
246
  download_workflow() {
247
  log_info "Baixando o workflow..."
248
 
249
+ # Usa wget com user-agent para evitar bloqueios
250
+ if command_exists wget; then
251
+ wget -U "Mozilla/5.0" -O "$WORKFLOW_FILE" "$WORKFLOW_URL" 2>&1 | tee -a "$LOG_FILE"
252
+ elif command_exists curl; then
253
+ curl -L -H "User-Agent: Mozilla/5.0" -o "$WORKFLOW_FILE" "$WORKFLOW_URL" 2>&1 | tee -a "$LOG_FILE"
254
+ else
255
+ log_error "wget ou curl não encontrado"
256
+ return 1
257
  fi
258
 
259
+ if [ -f "$WORKFLOW_FILE" ] && [ -s "$WORKFLOW_FILE" ]; then
260
+ log_info "Workflow baixado com sucesso."
261
+ return 0
262
+ else
263
+ log_error "Falha ao baixar o workflow."
264
+ return 1
265
+ fi
266
  }
267
 
268
  # ============================================================================
269
+ # DOWNLOAD DE MODELOS WAN 2.2 (CORRIGIDO)
270
  # ============================================================================
271
 
272
  download_models() {
 
283
 
284
  for dir in "${dirs[@]}"; do
285
  mkdir -p "$dir"
286
+ log_info "Diretório criado/verificado: $dir"
287
  done
288
 
289
+ # Configuração para usar hf
290
+ export HF_HUB_ENABLE_HF_TRANSFER=1
291
 
292
+ # Lista de modelos organizados por tipo
293
+ log_info "Baixando modelos de difusão..."
294
+
295
+ # Diffusion Models
296
+ hf download "Comfy-Org/Wan_2.2_ComfyUI_Repackaged" \
297
+ "split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors" \
298
+ "split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors" \
299
+ --local-dir "$WORKSPACE_DIR/models" \
300
+ --cache-dir "$WORKSPACE_DIR/models/.cache" 2>&1 | tee -a "$LOG_FILE"
301
+
302
+ log_info "Baixando LoRAs..."
303
+
304
+ # LoRAs
305
+ hf download "Comfy-Org/Wan_2.2_ComfyUI_Repackaged" \
306
+ "split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors" \
307
+ "split_files/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors" \
308
+ "split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors" \
309
+ "split_files/loras/wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors" \
310
+ --local-dir "$WORKSPACE_DIR/models" \
311
+ --cache-dir "$WORKSPACE_DIR/models/.cache" 2>&1 | tee -a "$LOG_FILE"
312
+
313
+ log_info "Baixando Text Encoders..."
314
+
315
+ # Text Encoders
316
+ hf download "Comfy-Org/Wan_2.2_ComfyUI_Repackaged" \
317
+ "split_files/text_encoders/umt5_xxl_fp16.safetensors" \
318
+ "split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors" \
319
+ --local-dir "$WORKSPACE_DIR/models" \
320
+ --cache-dir "$WORKSPACE_DIR/models/.cache" 2>&1 | tee -a "$LOG_FILE"
321
+
322
+ log_info "Baixando VAE..."
323
+
324
+ # VAE
325
+ hf download "Comfy-Org/Wan_2.1_ComfyUI_repackaged" \
326
+ "split_files/vae/wan_2.1_vae.safetensors" \
327
+ --local-dir "$WORKSPACE_DIR/models" \
328
+ --cache-dir "$WORKSPACE_DIR/models/.cache" 2>&1 | tee -a "$LOG_FILE"
329
+
330
+ log_info "Baixando CLIP Vision..."
331
+
332
+ # CLIP Vision
333
+ hf download "Comfy-Org/Wan_2.1_ComfyUI_repackaged" \
334
+ "split_files/clip_vision/clip_vision_h.safetensors" \
335
+ --local-dir "$WORKSPACE_DIR/models" \
336
+ --cache-dir "$WORKSPACE_DIR/models/.cache" 2>&1 | tee -a "$LOG_FILE"
337
+
338
+ # Move arquivos dos subdiretórios para os locais corretos
339
+ log_info "Organizando arquivos de modelos..."
340
+
341
+ # Move diffusion models
342
+ if [ -d "$WORKSPACE_DIR/models/split_files/diffusion_models" ]; then
343
+ mv "$WORKSPACE_DIR/models/split_files/diffusion_models/"*.safetensors "$WORKSPACE_DIR/models/diffusion_models/" 2>/dev/null || true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
344
  fi
345
 
346
+ # Move loras
347
+ if [ -d "$WORKSPACE_DIR/models/split_files/loras" ]; then
348
+ mv "$WORKSPACE_DIR/models/split_files/loras/"*.safetensors "$WORKSPACE_DIR/models/loras/" 2>/dev/null || true
349
+ fi
350
+
351
+ # Move text encoders
352
+ if [ -d "$WORKSPACE_DIR/models/split_files/text_encoders" ]; then
353
+ mv "$WORKSPACE_DIR/models/split_files/text_encoders/"*.safetensors "$WORKSPACE_DIR/models/text_encoders/" 2>/dev/null || true
 
 
 
354
  fi
 
355
 
356
+ # Move vae
357
+ if [ -d "$WORKSPACE_DIR/models/split_files/vae" ]; then
358
+ mv "$WORKSPACE_DIR/models/split_files/vae/"*.safetensors "$WORKSPACE_DIR/models/vae/" 2>/dev/null || true
359
+ fi
360
+
361
+ # Move clip vision
362
+ if [ -d "$WORKSPACE_DIR/models/split_files/clip_vision" ]; then
363
+ mv "$WORKSPACE_DIR/models/split_files/clip_vision/"*.safetensors "$WORKSPACE_DIR/models/clip_vision/" 2>/dev/null || true
364
+ fi
365
+
366
+ # Remove diretório split_files vazio
367
+ rm -rf "$WORKSPACE_DIR/models/split_files" 2>/dev/null || true
368
+
369
+ # Verifica arquivos baixados
370
  log_info "Verificando modelos baixados:"
371
  for dir in "${dirs[@]}"; do
372
  if [ -d "$dir" ]; then
373
+ local count=$(ls -1 "$dir"/*.safetensors 2>/dev/null | wc -l)
374
+ log_info " $(basename $(dirname "$dir"))/$(basename "$dir"): $count arquivo(s)"
375
+
376
+ # Lista os arquivos
377
+ for file in "$dir"/*.safetensors; do
378
+ if [ -f "$file" ]; then
379
+ local size=$(du -h "$file" | cut -f1)
380
+ log_info " - $(basename "$file") ($size)"
381
+ fi
382
+ done
383
  fi
384
  done
385
 
 
387
  }
388
 
389
  # ============================================================================
390
+ # INSTALAÇÃO MANUAL DE CUSTOM NODES
391
  # ============================================================================
392
 
393
+ install_custom_nodes_manually() {
394
+ log_info "Instalando custom nodes manualmente..."
395
 
396
+ local custom_nodes_dir="$WORKSPACE_DIR/custom_nodes"
 
 
 
 
 
 
397
 
398
+ # Lista completa de custom nodes (sem duplicatas)
399
  local custom_nodes=(
400
+ "https://github.com/kijai/ComfyUI-WanVideoWrapper"
401
+ "https://github.com/kijai/ComfyUI-MelBandRoFormer"
402
  "https://github.com/kijai/ComfyUI-KJNodes"
403
+ "https://github.com/kijai/ComfyUI-Florence2"
404
+ "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite"
405
+ "https://github.com/Fannovel16/ComfyUI-Frame-Interpolation"
406
+ "https://github.com/Artificial-Sweetener/comfyui-WhiteRabbit"
407
+ "https://github.com/rdancer/ComfyUI_Florence2SAM2"
408
+ "https://github.com/1038lab/ComfyUI-RMBG"
409
+ "https://github.com/fpgaminer/joycaption_comfyui"
410
+ "https://github.com/MieMieeeee/ComfyUI-CaptionThis"
411
+ "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes"
412
+ "https://github.com/LAOGOU-666/Comfyui-Memory_Cleanup"
413
+ "https://github.com/chrisgoringe/cg-use-everywhere"
414
+ "https://github.com/pythongosssss/ComfyUI-Custom-Scripts"
415
+ "https://github.com/chibiace/ComfyUI-Chibi-Nodes"
416
+ "https://github.com/ptmaster/comfyui-audio-speed"
417
+ "https://github.com/filliptm/ComfyUI_Fill-Nodes"
418
+ "https://github.com/justUmen/Bjornulf_custom_nodes"
419
+ "https://github.com/raindrop313/ComfyUI-WanVideoStartEndFrames"
420
+ "https://github.com/ShmuelRonen/ComfyUI_wav2lip"
421
+ "https://github.com/crystian/ComfyUI-Crystools"
422
+ "https://github.com/bash-j/mikey_nodes"
423
  )
424
 
425
+ cd "$custom_nodes_dir"
426
 
427
  for node_url in "${custom_nodes[@]}"; do
428
+ local node_name=$(basename "$node_url" .git)
429
+ log_info "Instalando: $node_name"
430
+
431
+ # Remove instalação anterior se existir
432
+ if [ -d "$node_name" ]; then
433
+ log_info " Removendo versão anterior..."
434
+ rm -rf "$node_name"
435
+ fi
436
+
437
+ # Clona o repositório
438
+ if git clone --depth 1 "$node_url" "$node_name" 2>&1 | tee -a "$LOG_FILE"; then
439
+ log_info " Clone concluído: $node_name"
440
+
441
+ # Instala requirements se existir
442
+ if [ -f "$node_name/requirements.txt" ]; then
443
+ log_info " Instalando dependências de $node_name..."
444
+ python3 -m pip install -r "$node_name/requirements.txt" 2>&1 | tee -a "$LOG_FILE" || {
445
+ log_warning " Algumas dependências de $node_name falharam"
446
+ }
447
+ fi
448
+
449
+ # Executa install.py se existir
450
+ if [ -f "$node_name/install.py" ]; then
451
+ log_info " Executando install.py de $node_name..."
452
+ cd "$node_name"
453
+ python3 install.py 2>&1 | tee -a "$LOG_FILE" || {
454
+ log_warning " install.py de $node_name retornou erro"
455
+ }
456
+ cd ..
457
+ fi
458
+ else
459
+ log_warning " Falha ao clonar: $node_name"
460
  fi
461
  done
462
 
463
+ cd "$INSTALL_BASE_DIR"
464
+ log_info "Instalação de custom nodes concluída!"
 
 
 
 
 
 
 
 
465
  }
466
 
467
  # ============================================================================
 
483
  issues+=("Arquivo de workflow não encontrado")
484
  fi
485
 
486
+ # Verifica modelos em cada diretório
487
+ log_info "Verificando modelos instalados:"
488
+
489
+ local expected_models=(
490
+ "diffusion_models:2"
491
+ "loras:4"
492
+ "text_encoders:2"
493
+ "vae:1"
494
+ "clip_vision:1"
495
+ )
496
+
497
+ for expectation in "${expected_models[@]}"; do
498
+ IFS=':' read -r dir_name expected_count <<< "$expectation"
499
+ local dir="$WORKSPACE_DIR/models/$dir_name"
500
+
501
+ if [ -d "$dir" ]; then
502
+ local count=$(ls -1 "$dir"/*.safetensors 2>/dev/null | wc -l)
503
+ log_info " $dir_name: $count arquivo(s) (esperado: $expected_count)"
504
+
505
+ if [ $count -lt $expected_count ]; then
506
+ issues+=("Faltam modelos em $dir_name ($count/$expected_count)")
507
+ fi
508
+ else
509
+ issues+=("Diretório não existe: $dir_name")
510
+ fi
511
+ done
512
 
513
  # Verifica SageAttention
514
  if ! python3 -c "import sageattention" 2>/dev/null; then
515
  log_warning "SageAttention não está instalado (opcional)"
516
+ else
517
+ log_info "✓ SageAttention instalado corretamente"
518
  fi
519
 
520
  if [ ${#issues[@]} -gt 0 ]; then
521
  log_error "Problemas encontrados na instalação:"
522
  for issue in "${issues[@]}"; do
523
+ log_error " $issue"
524
  done
525
  return 1
526
  fi
527
 
528
+ log_info "Instalação verificada com sucesso!"
529
  return 0
530
  }
531
 
 
544
  log_info " Workflow: $WORKFLOW_FILE"
545
  log_info ""
546
  log_info "Para usar o workflow:"
547
+ log_info " 1. Acesse http://127.0.0.1:8818"
548
+ log_info " 2. Arraste o arquivo '$WORKFLOW_FILENAME' na interface"
549
  log_info ""
550
  log_info "Pressione Ctrl+C para parar o servidor"
551
  log_info "================================================="
 
575
  echo "=== Instalação ComfyUI iniciada em $(date) ===" > "$LOG_FILE"
576
 
577
  log_info "================================================="
578
+ log_info "Instalador ComfyUI com Wan 2.2 - v3.0"
579
  log_info "================================================="
580
 
581
  # Etapa 1: Verificar requisitos
 
596
  # Etapa 6: Baixar workflow
597
  download_workflow || log_warning "Workflow não foi baixado"
598
 
599
+ # Etapa 7: Instalar custom nodes manualmente
600
+ install_custom_nodes_manually
601
 
602
+ # Etapa 8: PROCESSOS PARALELOS - SageAttention e Downloads
603
  log_info "================================================="
604
  log_info "Iniciando processos paralelos:"
605
+ log_info " 1. Instalação do SageAttention (5-10 min)"
606
+ log_info " 2. Download dos modelos Wan 2.2"
607
  log_info "================================================="
608
 
609
  # Inicia instalação do SageAttention em background
 
610
  install_sageattention &
611
  local sage_pid=$!
612
 
613
  # Inicia downloads dos modelos em background
 
614
  download_models &
615
  local models_pid=$!
616
 
617
  # Monitor de progresso
618
  log_info "Aguardando conclusão dos processos paralelos..."
619
+ log_info "Monitore o progresso em: $LOG_FILE"
620
 
621
  local both_done=false
622
  local sage_done=false
 
655
  if [ "$sage_done" = true ] && [ "$models_done" = true ]; then
656
  both_done=true
657
  else
658
+ sleep 10
 
659
  if [ "$sage_done" = false ] && ps -p $sage_pid > /dev/null 2>&1; then
660
+ echo -n "."
661
  fi
662
  if [ "$models_done" = false ] && ps -p $models_pid > /dev/null 2>&1; then
663
+ echo -n "."
664
  fi
665
  fi
666
  done
667
 
668
+ echo ""
669
  log_info "Todos os processos paralelos foram concluídos!"
670
 
671
  # Etapa 9: Verificar instalação
672
  verify_installation || {
673
  log_error "A instalação teve problemas. Verifique o log em: $LOG_FILE"
674
+ log_error "Você pode tentar executar o script novamente."
675
  exit 1
676
  }
677