adbrasi commited on
Commit
99669fe
·
verified ·
1 Parent(s): e67a5af

Upload comfywan_optimized2.sh

Browse files
Files changed (1) hide show
  1. comfywan_optimized2.sh +495 -0
comfywan_optimized2.sh ADDED
@@ -0,0 +1,495 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ )
300
+
301
+ # Processa downloads HF CLI
302
+ for download in "${hf_cli_downloads[@]}"; do
303
+ IFS=':' read -r repo file dest <<< "$download"
304
+ log_info "Iniciando download HF: $repo/$file -> $dest"
305
+
306
+ (
307
+ cd "$dest"
308
+ HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download "$repo" "$file" --local-dir . --local-dir-use-symlinks False
309
+ log_info "Concluído: $repo/$file"
310
+ ) &
311
+
312
+ pids+=($!)
313
+ done
314
+
315
+ # Processa downloads diretos
316
+ for download in "${direct_downloads[@]}"; do
317
+ IFS=':' read -r url dest <<< "$download"
318
+ log_info "Iniciando download direto: $url -> $dest"
319
+
320
+ (
321
+ cd "$dest"
322
+ if command_exists wget; then
323
+ wget "$url" --content-disposition
324
+ elif command_exists curl; then
325
+ curl -L -O "$url"
326
+ else
327
+ log_error "Nenhuma ferramenta de download disponível"
328
+ exit 1
329
+ fi
330
+ log_info "Concluído download direto: $url"
331
+ ) &
332
+
333
+ pids+=($!)
334
+ done
335
+
336
+ log_info "Downloads do HuggingFace iniciados em paralelo. PIDs: ${pids[*]}"
337
+ return 0
338
+ }
339
+
340
+ # ============================================================================
341
+ # DOWNLOAD DE MODELOS DO CIVITAI
342
+ # ============================================================================
343
+
344
+ download_civitai_models() {
345
+ log_info "Iniciando downloads do CivitAI em paralelo..."
346
+
347
+ local civitai_downloads=(
348
+ "https://civitai.com/api/download/models/1516994?type=Model&format=SafeTensor"
349
+ )
350
+
351
+ local pids=()
352
+
353
+ for url in "${civitai_downloads[@]}"; do
354
+ log_info "Iniciando download: $url"
355
+
356
+ # Download em background
357
+ (
358
+ cd "$WORKSPACE_DIR/models/loras"
359
+ wget "$url" --content-disposition
360
+ log_info "Concluído download do CivitAI: $url"
361
+ ) &
362
+
363
+ pids+=($!)
364
+ done
365
+
366
+ log_info "Downloads do CivitAI iniciados. PIDs: ${pids[*]}"
367
+ return 0
368
+ }
369
+
370
+ # ============================================================================
371
+ # AGUARDAR DOWNLOADS
372
+ # ============================================================================
373
+
374
+ wait_for_downloads() {
375
+ log_info "Aguardando conclusão dos downloads..."
376
+
377
+ # Aguarda todos os processos filhos (downloads)
378
+ for job in $(jobs -p); do
379
+ if kill -0 "$job" 2>/dev/null; then
380
+ log_info "Aguardando processo: $job"
381
+ wait "$job"
382
+ fi
383
+ done
384
+
385
+ log_info "Todos os downloads foram concluídos."
386
+ }
387
+
388
+ # ============================================================================
389
+ # AGUARDAR SAGEATTENTION
390
+ # ============================================================================
391
+
392
+ wait_for_sageattention() {
393
+ log_info "Verificando instalação do SageAttention..."
394
+
395
+ # Aguarda até que o arquivo de flag seja criado
396
+ while [ ! -f "$INSTALL_BASE_DIR/.sageattention_ready" ]; do
397
+ log_info "SageAttention ainda instalando... aguardando 30 segundos"
398
+ sleep 30
399
+ done
400
+
401
+ # Remove o arquivo de flag
402
+ rm -f "$INSTALL_BASE_DIR/.sageattention_ready"
403
+
404
+ log_info "SageAttention está pronto!"
405
+ }
406
+
407
+ # ============================================================================
408
+ # INICIAR O COMFYUI
409
+ # ============================================================================
410
+
411
+ launch_comfyui() {
412
+ log_info "Iniciando ComfyUI na porta 8818 com SageAttention e preview latent2rgb..."
413
+ log_info "Workspace do ComfyUI: $WORKSPACE_DIR"
414
+ log_info "Arquivo de workflow disponível em: $WORKFLOW_FILE"
415
+ log_info "Para usar o workflow, arraste e solte o arquivo '$WORKFLOW_FILENAME' na interface do ComfyUI."
416
+ log_info "Acesse o ComfyUI em: http://127.0.0.1:8818 (ou o IP da sua máquina)"
417
+
418
+ # Inicia o ComfyUI com SageAttention e preview latent2rgb
419
+ exec comfy --workspace "$WORKSPACE_DIR" launch -- --fast --listen 0.0.0.0 --port 8818 --use-sage-attention --preview-method latent2rgb
420
+ }
421
+
422
+ # ============================================================================
423
+ # EXECUÇÃO PRINCIPAL
424
+ # ============================================================================
425
+
426
+ main() {
427
+
428
+ # Passo 8: OTIMIZAÇÃO - Iniciar SageAttention PRIMEIRO (processo mais longo)
429
+ log_info "================================================="
430
+ log_info "Iniciando SageAttention em background (processo mais longo - ~5+ minutos)..."
431
+ log_info "Enquanto isso, continuaremos com as outras instalações..."
432
+ log_info "================================================="
433
+ install_sageattention
434
+
435
+
436
+ log_info "Iniciando instalação dinâmica do ComfyUI..."
437
+ log_info "Diretório de instalação base: $INSTALL_BASE_DIR"
438
+ log_info "================================================="
439
+
440
+ # Passo 1: Limpar instalações existentes no diretório alvo
441
+ cleanup_existing_installation
442
+
443
+ # Passo 2: Instalar comfy-cli
444
+ install_comfy_cli
445
+
446
+ # Passo 3: Instalar HuggingFace tools
447
+ install_hf_tools
448
+
449
+ # Passo 4: Instalar ComfyUI
450
+ install_comfyui
451
+
452
+ # Passo 5: Criar diretórios de modelos
453
+ create_model_directories
454
+
455
+ # Passo 6: Baixar o workflow
456
+ download_workflow
457
+
458
+ # Passo 7: Instalar dependências do workflow
459
+ install_workflow_dependencies
460
+
461
+
462
+
463
+ # Passo 9: Instalar custom node WanVideoWrapper
464
+ install_wanvideo_wrapper
465
+
466
+ # Passo 10: Iniciar downloads paralelos enquanto SageAttention instala
467
+ log_info "================================================="
468
+ log_info "Iniciando downloads paralelos enquanto SageAttention instala..."
469
+ log_info "================================================="
470
+
471
+ download_hf_models
472
+ download_civitai_models
473
+
474
+ # Passo 11: Aguardar downloads
475
+ wait_for_downloads
476
+
477
+ # Passo 12: Aguardar SageAttention (que provavelmente ainda estará rodando)
478
+ wait_for_sageattention
479
+
480
+ # Passo 13: Iniciar o ComfyUI
481
+ log_info "================================================="
482
+ log_info "Instalação concluída com sucesso!"
483
+ log_info "================================================="
484
+ launch_comfyui
485
+ }
486
+
487
+ # ============================================================================
488
+ # EXECUÇÃO DO SCRIPT
489
+ # ============================================================================
490
+
491
+ # Captura interrupções (Ctrl+C)
492
+ trap 'log_error "Script interrompido pelo usuário."; kill $(jobs -p) 2>/dev/null; exit 1' INT TERM
493
+
494
+ # Executa a função principal
495
+ main "$@"