adbrasi commited on
Commit
5367779
·
verified ·
1 Parent(s): c4bb207

Upload comfywan_optimized2.sh

Browse files
Files changed (1) hide show
  1. comfywan_optimized2.sh +496 -0
comfywan_optimized2.sh ADDED
@@ -0,0 +1,496 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # ============================================================================
4
+ # Instalador Dinâmico para ComfyUI
5
+ # Instala o ComfyUI e suas dependências no diretório atual.
6
+ # ============================================================================
7
+
8
+ set -e
9
+ set -o pipefail
10
+
11
+ # ============================================================================
12
+ # CONFIGURAÇÕES GLOBAIS
13
+ # ============================================================================
14
+
15
+ # URL do workflow a ser baixado
16
+ readonly WORKFLOW_URL="https://huggingface.co/adbrasi/testedownload/resolve/main/modo%20balanco3.json"
17
+
18
+ # --- Caminhos Dinâmicos ---
19
+ # Define o diretório de instalação como o diretório atual onde o script é executado
20
+ readonly INSTALL_BASE_DIR="$(pwd)"
21
+ # O ComfyUI será instalado em uma subpasta "ComfyUI"
22
+ readonly WORKSPACE_DIR="$INSTALL_BASE_DIR/ComfyUI"
23
+ # O arquivo de workflow será salvo na raiz do diretório de instalação
24
+ readonly WORKFLOW_FILENAME="workflow.json"
25
+ readonly WORKFLOW_FILE="$INSTALL_BASE_DIR/$WORKFLOW_FILENAME"
26
+
27
+ # ============================================================================
28
+ # FUNÇÕES DE UTILIDADE
29
+ # ============================================================================
30
+
31
+ log_info() {
32
+ echo "INFO: $1" >&2
33
+ }
34
+
35
+ log_warning() {
36
+ echo "WARNING: $1" >&2
37
+ }
38
+
39
+ log_error() {
40
+ echo "ERROR: $1" >&2
41
+ }
42
+
43
+ command_exists() {
44
+ command -v "$1" >/dev/null 2>&1
45
+ }
46
+
47
+ # ============================================================================
48
+ # FUNÇÃO DE LIMPEZA
49
+ # ============================================================================
50
+
51
+ cleanup_existing_installation() {
52
+ log_info "Verificando instalações existentes em: $WORKSPACE_DIR"
53
+
54
+ if [ -d "$WORKSPACE_DIR" ]; then
55
+ log_warning "Diretório existente encontrado: $WORKSPACE_DIR"
56
+ log_info "Removendo a instalação existente para evitar conflitos..."
57
+ rm -rf "$WORKSPACE_DIR"
58
+ log_info "Diretório removido."
59
+ else
60
+ log_info "Nenhuma instalação anterior encontrada no local. Continuando..."
61
+ fi
62
+ }
63
+
64
+ # ============================================================================
65
+ # INSTALAÇÃO DO COMFY-CLI
66
+ # ============================================================================
67
+
68
+ install_comfy_cli() {
69
+ log_info "Instalando/atualizando comfy-cli..."
70
+
71
+ python3 -m pip install --upgrade comfy-cli || {
72
+ log_error "Falha ao instalar comfy-cli"
73
+ exit 1
74
+ }
75
+
76
+ # Verifica se o 'comfy' está no PATH
77
+ if ! command_exists comfy; then
78
+ if [ -d "$HOME/.local/bin" ] && [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
79
+ export PATH="$HOME/.local/bin:$PATH"
80
+ log_info "Adicionado $HOME/.local/bin ao PATH para esta sessão."
81
+ fi
82
+
83
+ if ! command_exists comfy; then
84
+ log_error "Comando 'comfy' não encontrado no PATH após a instalação."
85
+ log_error "Verifique se '$HOME/.local/bin' está em seu PATH."
86
+ exit 1
87
+ fi
88
+ fi
89
+
90
+ log_info "comfy-cli version: $(comfy --version 2>/dev/null || echo 'desconhecida')"
91
+ }
92
+
93
+ # ============================================================================
94
+ # INSTALAÇÃO DO COMFYUI
95
+ # ============================================================================
96
+
97
+ install_comfyui() {
98
+ log_info "Instalando ComfyUI em: $WORKSPACE_DIR"
99
+
100
+ # Instala ComfyUI com dependências rápidas
101
+ comfy --workspace "$WORKSPACE_DIR" --skip-prompt install --nvidia || {
102
+ log_error "Falha ao instalar ComfyUI"
103
+ exit 1
104
+ }
105
+
106
+ log_info "ComfyUI instalado com sucesso."
107
+ }
108
+
109
+ # ============================================================================
110
+ # INSTALAÇÃO DO HUGGINGFACE HUB E HF_TRANSFER
111
+ # ============================================================================
112
+
113
+ install_hf_tools() {
114
+ log_info "Instalando HuggingFace Hub CLI e hf_transfer..."
115
+
116
+ python3 -m pip install -U "huggingface_hub[cli]" || {
117
+ log_error "Falha ao instalar huggingface_hub[cli]"
118
+ exit 1
119
+ }
120
+
121
+ python3 -m pip install hf_transfer || {
122
+ log_error "Falha ao instalar hf_transfer"
123
+ exit 1
124
+ }
125
+
126
+ log_info "HuggingFace tools instalados com sucesso."
127
+ }
128
+
129
+ # ============================================================================
130
+ # DOWNLOAD DO WORKFLOW
131
+ # ============================================================================
132
+
133
+ download_workflow() {
134
+ log_info "Baixando o workflow de: $WORKFLOW_URL"
135
+ log_info "Salvando como: $WORKFLOW_FILE"
136
+
137
+ local success=false
138
+
139
+ # Tenta diferentes métodos de download
140
+ if command_exists wget; then
141
+ if wget -q --show-progress -O "$WORKFLOW_FILE" "$WORKFLOW_URL"; then
142
+ success=true
143
+ fi
144
+ elif command_exists curl; then
145
+ if curl -L -o "$WORKFLOW_FILE" "$WORKFLOW_URL"; then
146
+ success=true
147
+ fi
148
+ elif command_exists aria2c; then
149
+ # aria2c precisa do nome do arquivo e diretório separados
150
+ if aria2c -q -o "$(basename "$WORKFLOW_FILE")" -d "$(dirname "$WORKFLOW_FILE")" "$WORKFLOW_URL"; then
151
+ success=true
152
+ fi
153
+ else
154
+ log_error "Nenhuma ferramenta de download disponível (wget, curl ou aria2c)."
155
+ exit 1
156
+ fi
157
+
158
+ if ! $success; then
159
+ log_error "Falha ao baixar o arquivo do workflow."
160
+ exit 1
161
+ fi
162
+
163
+ if [ ! -f "$WORKFLOW_FILE" ]; then
164
+ log_error "O arquivo do workflow não foi baixado com sucesso."
165
+ exit 1
166
+ fi
167
+
168
+ log_info "Workflow baixado com sucesso."
169
+ }
170
+
171
+ # ============================================================================
172
+ # DEPENDÊNCIAS DO WORKFLOW
173
+ # ============================================================================
174
+
175
+ install_workflow_dependencies() {
176
+ log_info "Instalando dependências do workflow a partir de: $WORKFLOW_FILE"
177
+
178
+ if [ ! -f "$WORKFLOW_FILE" ]; then
179
+ log_error "Arquivo de workflow não encontrado: $WORKFLOW_FILE"
180
+ exit 1
181
+ fi
182
+
183
+ # Usa o workspace correto para instalar as dependências
184
+ comfy --workspace "$WORKSPACE_DIR" node install-deps --workflow="$WORKFLOW_FILE" || {
185
+ log_warning "Algumas dependências do workflow podem ter falhado ao instalar."
186
+ log_info "Isso pode ser normal. O ComfyUI mostrará os nós ausentes ao iniciar."
187
+ }
188
+
189
+ log_info "Instalação de dependências do workflow concluída."
190
+ }
191
+
192
+ # ============================================================================
193
+ # INSTALAÇÃO DO CUSTOM NODE WANVIDEOWRAPPER
194
+ # ============================================================================
195
+
196
+ install_wanvideo_wrapper() {
197
+ log_info "Instalando custom node ComfyUI-WanVideoWrapper..."
198
+
199
+ local custom_nodes_dir="$WORKSPACE_DIR/custom_nodes"
200
+ local wrapper_dir="$custom_nodes_dir/ComfyUI-WanVideoWrapper"
201
+
202
+ # Cria diretório de custom_nodes se não existir
203
+ mkdir -p "$custom_nodes_dir"
204
+
205
+ # Clone do repositório
206
+ if [ -d "$wrapper_dir" ]; then
207
+ log_warning "Diretório ComfyUI-WanVideoWrapper já existe, removendo..."
208
+ rm -rf "$wrapper_dir"
209
+ fi
210
+
211
+ cd "$custom_nodes_dir"
212
+ git clone https://github.com/kijai/ComfyUI-WanVideoWrapper.git || {
213
+ log_error "Falha ao clonar ComfyUI-WanVideoWrapper"
214
+ exit 1
215
+ }
216
+
217
+ # Instala dependências
218
+ if [ -f "$wrapper_dir/requirements.txt" ]; then
219
+ log_info "Instalando dependências do ComfyUI-WanVideoWrapper..."
220
+ python3 -m pip install -r "$wrapper_dir/requirements.txt" || {
221
+ log_warning "Algumas dependências do WanVideoWrapper podem ter falhado"
222
+ }
223
+ fi
224
+
225
+ # Volta para o diretório base
226
+ cd "$INSTALL_BASE_DIR"
227
+
228
+ log_info "ComfyUI-WanVideoWrapper instalado com sucesso."
229
+ }
230
+
231
+ # ============================================================================
232
+ # CRIAÇÃO DE DIRETÓRIOS DE MODELOS
233
+ # ============================================================================
234
+
235
+ create_model_directories() {
236
+ log_info "Criando diretórios para modelos..."
237
+
238
+ mkdir -p "$WORKSPACE_DIR/models/diffusion_models"
239
+ mkdir -p "$WORKSPACE_DIR/models/clip_vision"
240
+ mkdir -p "$WORKSPACE_DIR/models/vae"
241
+ mkdir -p "$WORKSPACE_DIR/models/text_encoders"
242
+ mkdir -p "$WORKSPACE_DIR/models/loras"
243
+
244
+ log_info "Diretórios de modelos criados."
245
+ }
246
+
247
+ # ============================================================================
248
+ # INSTALAÇÃO DO SAGEATTENTION (OTIMIZADO PARA EXECUTAR PRIMEIRO EM BACKGROUND)
249
+ # ============================================================================
250
+
251
+ install_sageattention() {
252
+ log_info "Iniciando instalação do SageAttention em background (otimizado)..."
253
+
254
+ (
255
+ log_info "Clonando repositório SageAttention..."
256
+ if [ -d "SageAttention" ]; then
257
+ rm -rf SageAttention
258
+ fi
259
+
260
+ git clone https://github.com/thu-ml/SageAttention.git
261
+ cd SageAttention
262
+
263
+ log_info "Instalando SageAttention (isso pode demorar 5+ minutos)..."
264
+ python3 setup.py install
265
+
266
+ log_info "SageAttention instalado com sucesso!"
267
+
268
+ # Criar arquivo de flag para indicar que a instalação terminou
269
+ touch "$INSTALL_BASE_DIR/.sageattention_ready"
270
+
271
+ ) &
272
+
273
+ local sage_pid=$!
274
+ log_info "Instalação do SageAttention iniciada em background. PID: $sage_pid"
275
+
276
+ return 0
277
+ }
278
+
279
+ # ============================================================================
280
+ # DOWNLOAD DE MODELOS COM HF_TRANSFER
281
+ # ============================================================================
282
+
283
+ download_hf_models() {
284
+ log_info "Iniciando downloads de modelos do HuggingFace em paralelo..."
285
+
286
+ local pids=()
287
+
288
+ # Downloads usando HuggingFace CLI
289
+ local hf_cli_downloads=(
290
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/diffusion_models/wan2.1_i2v_720p_14B_fp16.safetensors:$WORKSPACE_DIR/models/diffusion_models/"
291
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/clip_vision/clip_vision_h.safetensors:$WORKSPACE_DIR/models/clip_vision/"
292
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/vae/wan_2.1_vae.safetensors:$WORKSPACE_DIR/models/vae/"
293
+ )
294
+
295
+ # Downloads diretos via URL
296
+ local direct_downloads=(
297
+ "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp16.safetensors:$WORKSPACE_DIR/models/text_encoders/"
298
+ "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan21_CausVid_14B_T2V_lora_rank32_v2.safetensors:$WORKSPACE_DIR/models/loras/"
299
+ "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors:$WORKSPACE_DIR/models/loras/"
300
+ )
301
+
302
+ # Processa downloads HF CLI
303
+ for download in "${hf_cli_downloads[@]}"; do
304
+ IFS=':' read -r repo file dest <<< "$download"
305
+ log_info "Iniciando download HF: $repo/$file -> $dest"
306
+
307
+ (
308
+ cd "$dest"
309
+ HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download "$repo" "$file" --local-dir . --local-dir-use-symlinks False
310
+ log_info "Concluído: $repo/$file"
311
+ ) &
312
+
313
+ pids+=($!)
314
+ done
315
+
316
+ # Processa downloads diretos
317
+ for download in "${direct_downloads[@]}"; do
318
+ IFS=':' read -r url dest <<< "$download"
319
+ log_info "Iniciando download direto: $url -> $dest"
320
+
321
+ (
322
+ cd "$dest"
323
+ if command_exists wget; then
324
+ wget "$url" --content-disposition
325
+ elif command_exists curl; then
326
+ curl -L -O "$url"
327
+ else
328
+ log_error "Nenhuma ferramenta de download disponível"
329
+ exit 1
330
+ fi
331
+ log_info "Concluído download direto: $url"
332
+ ) &
333
+
334
+ pids+=($!)
335
+ done
336
+
337
+ log_info "Downloads do HuggingFace iniciados em paralelo. PIDs: ${pids[*]}"
338
+ return 0
339
+ }
340
+
341
+ # ============================================================================
342
+ # DOWNLOAD DE MODELOS DO CIVITAI
343
+ # ============================================================================
344
+
345
+ download_civitai_models() {
346
+ log_info "Iniciando downloads do CivitAI em paralelo..."
347
+
348
+ local civitai_downloads=(
349
+ "https://civitai.com/api/download/models/1516994?type=Model&format=SafeTensor"
350
+ )
351
+
352
+ local pids=()
353
+
354
+ for url in "${civitai_downloads[@]}"; do
355
+ log_info "Iniciando download: $url"
356
+
357
+ # Download em background
358
+ (
359
+ cd "$WORKSPACE_DIR/models/loras"
360
+ wget "$url" --content-disposition
361
+ log_info "Concluído download do CivitAI: $url"
362
+ ) &
363
+
364
+ pids+=($!)
365
+ done
366
+
367
+ log_info "Downloads do CivitAI iniciados. PIDs: ${pids[*]}"
368
+ return 0
369
+ }
370
+
371
+ # ============================================================================
372
+ # AGUARDAR DOWNLOADS
373
+ # ============================================================================
374
+
375
+ wait_for_downloads() {
376
+ log_info "Aguardando conclusão dos downloads..."
377
+
378
+ # Aguarda todos os processos filhos (downloads)
379
+ for job in $(jobs -p); do
380
+ if kill -0 "$job" 2>/dev/null; then
381
+ log_info "Aguardando processo: $job"
382
+ wait "$job"
383
+ fi
384
+ done
385
+
386
+ log_info "Todos os downloads foram concluídos."
387
+ }
388
+
389
+ # ============================================================================
390
+ # AGUARDAR SAGEATTENTION
391
+ # ============================================================================
392
+
393
+ wait_for_sageattention() {
394
+ log_info "Verificando instalação do SageAttention..."
395
+
396
+ # Aguarda até que o arquivo de flag seja criado
397
+ while [ ! -f "$INSTALL_BASE_DIR/.sageattention_ready" ]; do
398
+ log_info "SageAttention ainda instalando... aguardando 30 segundos"
399
+ sleep 30
400
+ done
401
+
402
+ # Remove o arquivo de flag
403
+ rm -f "$INSTALL_BASE_DIR/.sageattention_ready"
404
+
405
+ log_info "SageAttention está pronto!"
406
+ }
407
+
408
+ # ============================================================================
409
+ # INICIAR O COMFYUI
410
+ # ============================================================================
411
+
412
+ launch_comfyui() {
413
+ log_info "Iniciando ComfyUI na porta 8818 com SageAttention e preview latent2rgb..."
414
+ log_info "Workspace do ComfyUI: $WORKSPACE_DIR"
415
+ log_info "Arquivo de workflow disponível em: $WORKFLOW_FILE"
416
+ log_info "Para usar o workflow, arraste e solte o arquivo '$WORKFLOW_FILENAME' na interface do ComfyUI."
417
+ log_info "Acesse o ComfyUI em: http://127.0.0.1:8818 (ou o IP da sua máquina)"
418
+
419
+ # Inicia o ComfyUI com SageAttention e preview latent2rgb
420
+ exec comfy --workspace "$WORKSPACE_DIR" launch -- --fast --listen 0.0.0.0 --port 8818 --use-sage-attention --preview-method latent2rgb
421
+ }
422
+
423
+ # ============================================================================
424
+ # EXECUÇÃO PRINCIPAL
425
+ # ============================================================================
426
+
427
+ main() {
428
+
429
+ # Passo 8: OTIMIZAÇÃO - Iniciar SageAttention PRIMEIRO (processo mais longo)
430
+ log_info "================================================="
431
+ log_info "Iniciando SageAttention em background (processo mais longo - ~5+ minutos)..."
432
+ log_info "Enquanto isso, continuaremos com as outras instalações..."
433
+ log_info "================================================="
434
+ install_sageattention
435
+
436
+
437
+ log_info "Iniciando instalação dinâmica do ComfyUI..."
438
+ log_info "Diretório de instalação base: $INSTALL_BASE_DIR"
439
+ log_info "================================================="
440
+
441
+ # Passo 1: Limpar instalações existentes no diretório alvo
442
+ cleanup_existing_installation
443
+
444
+ # Passo 2: Instalar comfy-cli
445
+ install_comfy_cli
446
+
447
+ # Passo 3: Instalar HuggingFace tools
448
+ install_hf_tools
449
+
450
+ # Passo 4: Instalar ComfyUI
451
+ install_comfyui
452
+
453
+ # Passo 5: Criar diretórios de modelos
454
+ create_model_directories
455
+
456
+ # Passo 6: Baixar o workflow
457
+ download_workflow
458
+
459
+ # Passo 7: Instalar dependências do workflow
460
+ install_workflow_dependencies
461
+
462
+
463
+
464
+ # Passo 9: Instalar custom node WanVideoWrapper
465
+ install_wanvideo_wrapper
466
+
467
+ # Passo 10: Iniciar downloads paralelos enquanto SageAttention instala
468
+ log_info "================================================="
469
+ log_info "Iniciando downloads paralelos enquanto SageAttention instala..."
470
+ log_info "================================================="
471
+
472
+ download_hf_models
473
+ download_civitai_models
474
+
475
+ # Passo 11: Aguardar downloads
476
+ wait_for_downloads
477
+
478
+ # Passo 12: Aguardar SageAttention (que provavelmente ainda estará rodando)
479
+ wait_for_sageattention
480
+
481
+ # Passo 13: Iniciar o ComfyUI
482
+ log_info "================================================="
483
+ log_info "Instalação concluída com sucesso!"
484
+ log_info "================================================="
485
+ launch_comfyui
486
+ }
487
+
488
+ # ============================================================================
489
+ # EXECUÇÃO DO SCRIPT
490
+ # ============================================================================
491
+
492
+ # Captura interrupções (Ctrl+C)
493
+ trap 'log_error "Script interrompido pelo usuário."; kill $(jobs -p) 2>/dev/null; exit 1' INT TERM
494
+
495
+ # Executa a função principal
496
+ main "$@"