adbrasi commited on
Commit
652a153
·
verified ·
1 Parent(s): 14522ab

Upload COMFYWAN_OFC.sh

Browse files
Files changed (1) hide show
  1. COMFYWAN_OFC.sh +419 -0
COMFYWAN_OFC.sh ADDED
@@ -0,0 +1,419 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 --fast-deps || {
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
+ # CRIAÇÃO DE DIRETÓRIOS DE MODELOS
194
+ # ============================================================================
195
+
196
+ create_model_directories() {
197
+ log_info "Criando diretórios para modelos..."
198
+
199
+ mkdir -p "$WORKSPACE_DIR/models/diffusion_models"
200
+ mkdir -p "$WORKSPACE_DIR/models/clip_vision"
201
+ mkdir -p "$WORKSPACE_DIR/models/vae"
202
+ mkdir -p "$WORKSPACE_DIR/models/text_encoders"
203
+ mkdir -p "$WORKSPACE_DIR/models/loras"
204
+
205
+ log_info "Diretórios de modelos criados."
206
+ }
207
+
208
+ # ============================================================================
209
+ # DOWNLOAD DE MODELOS COM HF_TRANSFER
210
+ # ============================================================================
211
+
212
+ download_hf_models() {
213
+ log_info "Iniciando downloads de modelos do HuggingFace em paralelo..."
214
+
215
+ # Array de downloads [repo:arquivo:destino]
216
+ local hf_downloads=(
217
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/diffusion_models/wan2.1_i2v_720p_14B_fp16.safetensors:$WORKSPACE_DIR/models/diffusion_models/"
218
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/clip_vision/clip_vision_h.safetensors:$WORKSPACE_DIR/models/clip_vision/"
219
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/vae/wan_2.1_vae.safetensors:$WORKSPACE_DIR/models/vae/"
220
+ "Comfy-Org/Wan_2.1_ComfyUI_repackaged:split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors:$WORKSPACE_DIR/models/text_encoders/"
221
+ "Kijai/WanVideo_comfy:Wan21_CausVid_14B_T2V_lora_rank32_v1_5_no_first_block.safetensors:$WORKSPACE_DIR/models/loras/"
222
+ )
223
+
224
+ local pids=()
225
+
226
+ for download in "${hf_downloads[@]}"; do
227
+ IFS=':' read -r repo file dest <<< "$download"
228
+
229
+ log_info "Iniciando download: $repo/$file -> $dest"
230
+
231
+ # Download em background
232
+ (
233
+ cd "$dest"
234
+ HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download "$repo" "$file" --local-dir . --local-dir-use-symlinks False
235
+ log_info "Concluído: $repo/$file"
236
+ ) &
237
+
238
+ pids+=($!)
239
+ done
240
+
241
+ log_info "Downloads do HuggingFace iniciados em paralelo. PIDs: ${pids[*]}"
242
+ return 0
243
+ }
244
+
245
+ # ============================================================================
246
+ # DOWNLOAD DE MODELOS DO CIVITAI
247
+ # ============================================================================
248
+
249
+ download_civitai_models() {
250
+ log_info "Iniciando downloads do CivitAI em paralelo..."
251
+
252
+ local civitai_downloads=(
253
+ "https://civitai.com/api/download/models/1516994?type=Model&format=SafeTensor"
254
+ )
255
+
256
+ local pids=()
257
+
258
+ for url in "${civitai_downloads[@]}"; do
259
+ log_info "Iniciando download: $url"
260
+
261
+ # Download em background
262
+ (
263
+ cd "$WORKSPACE_DIR/models/loras"
264
+ wget "$url" --content-disposition
265
+ log_info "Concluído download do CivitAI: $url"
266
+ ) &
267
+
268
+ pids+=($!)
269
+ done
270
+
271
+ log_info "Downloads do CivitAI iniciados. PIDs: ${pids[*]}"
272
+ return 0
273
+ }
274
+
275
+ # ============================================================================
276
+ # INSTALAÇÃO DO SAGEATTENTION
277
+ # ============================================================================
278
+
279
+ install_sageattention() {
280
+ log_info "Iniciando instalação do SageAttention em background..."
281
+
282
+ (
283
+ log_info "Clonando repositório SageAttention..."
284
+ if [ -d "SageAttention" ]; then
285
+ rm -rf SageAttention
286
+ fi
287
+
288
+ git clone https://github.com/thu-ml/SageAttention.git
289
+ cd SageAttention
290
+
291
+ log_info "Instalando SageAttention (isso pode demorar 5+ minutos)..."
292
+ python3 setup.py install
293
+
294
+ log_info "SageAttention instalado com sucesso!"
295
+
296
+ # Criar arquivo de flag para indicar que a instalação terminou
297
+ touch "$INSTALL_BASE_DIR/.sageattention_ready"
298
+
299
+ ) &
300
+
301
+ local sage_pid=$!
302
+ log_info "Instalação do SageAttention iniciada em background. PID: $sage_pid"
303
+
304
+ return 0
305
+ }
306
+
307
+ # ============================================================================
308
+ # AGUARDAR DOWNLOADS
309
+ # ============================================================================
310
+
311
+ wait_for_downloads() {
312
+ log_info "Aguardando conclusão dos downloads..."
313
+
314
+ # Aguarda todos os processos filhos (downloads)
315
+ for job in $(jobs -p); do
316
+ if kill -0 "$job" 2>/dev/null; then
317
+ log_info "Aguardando processo: $job"
318
+ wait "$job"
319
+ fi
320
+ done
321
+
322
+ log_info "Todos os downloads foram concluídos."
323
+ }
324
+
325
+ # ============================================================================
326
+ # AGUARDAR SAGEATTENTION
327
+ # ============================================================================
328
+
329
+ wait_for_sageattention() {
330
+ log_info "Verificando instalação do SageAttention..."
331
+
332
+ # Aguarda até que o arquivo de flag seja criado
333
+ while [ ! -f "$INSTALL_BASE_DIR/.sageattention_ready" ]; do
334
+ log_info "SageAttention ainda instalando... aguardando 30 segundos"
335
+ sleep 30
336
+ done
337
+
338
+ # Remove o arquivo de flag
339
+ rm -f "$INSTALL_BASE_DIR/.sageattention_ready"
340
+
341
+ log_info "SageAttention está pronto!"
342
+ }
343
+
344
+ # ============================================================================
345
+ # INICIAR O COMFYUI
346
+ # ============================================================================
347
+
348
+ launch_comfyui() {
349
+ log_info "Iniciando ComfyUI na porta 8818 com SageAttention..."
350
+ log_info "Workspace do ComfyUI: $WORKSPACE_DIR"
351
+ log_info "Arquivo de workflow disponível em: $WORKFLOW_FILE"
352
+ log_info "Para usar o workflow, arraste e solte o arquivo '$WORKFLOW_FILENAME' na interface do ComfyUI."
353
+ log_info "Acesse o ComfyUI em: http://127.0.0.1:8818 (ou o IP da sua máquina)"
354
+
355
+ # Inicia o ComfyUI com SageAttention
356
+ exec comfy --workspace "$WORKSPACE_DIR" launch -- --fast --listen 0.0.0.0 --port 8818 --use-sage-attention
357
+ }
358
+
359
+ # ============================================================================
360
+ # EXECUÇÃO PRINCIPAL
361
+ # ============================================================================
362
+
363
+ main() {
364
+ log_info "Iniciando instalação dinâmica do ComfyUI..."
365
+ log_info "Diretório de instalação base: $INSTALL_BASE_DIR"
366
+ log_info "================================================="
367
+
368
+ # Passo 1: Limpar instalações existentes no diretório alvo
369
+ cleanup_existing_installation
370
+
371
+ # Passo 2: Instalar comfy-cli
372
+ install_comfy_cli
373
+
374
+ # Passo 3: Instalar HuggingFace tools
375
+ install_hf_tools
376
+
377
+ # Passo 4: Instalar ComfyUI
378
+ install_comfyui
379
+
380
+ # Passo 5: Criar diretórios de modelos
381
+ create_model_directories
382
+
383
+ # Passo 6: Baixar o workflow
384
+ download_workflow
385
+
386
+ # Passo 7: Instalar dependências do workflow
387
+ install_workflow_dependencies
388
+
389
+ # Passo 8: Iniciar downloads paralelos e instalação do SageAttention
390
+ log_info "================================================="
391
+ log_info "Iniciando downloads paralelos e instalação do SageAttention..."
392
+ log_info "================================================="
393
+
394
+ download_hf_models
395
+ download_civitai_models
396
+ install_sageattention
397
+
398
+ # Passo 9: Aguardar downloads
399
+ wait_for_downloads
400
+
401
+ # Passo 10: Aguardar SageAttention
402
+ wait_for_sageattention
403
+
404
+ # Passo 11: Iniciar o ComfyUI
405
+ log_info "================================================="
406
+ log_info "Instalação concluída com sucesso!"
407
+ log_info "================================================="
408
+ launch_comfyui
409
+ }
410
+
411
+ # ============================================================================
412
+ # EXECUÇÃO DO SCRIPT
413
+ # ============================================================================
414
+
415
+ # Captura interrupções (Ctrl+C)
416
+ trap 'log_error "Script interrompido pelo usuário."; kill $(jobs -p) 2>/dev/null; exit 1' INT TERM
417
+
418
+ # Executa a função principal
419
+ main "$@"