Eueuiaa commited on
Commit
edb8974
·
verified ·
1 Parent(s): 96085a9

Update setup.py

Browse files
Files changed (1) hide show
  1. setup.py +101 -31
setup.py CHANGED
@@ -1,63 +1,133 @@
1
  # setup.py
2
- #
3
- # Copyright (C) August 4, 2025 Carlos Rodrigues dos Santos
4
- #
5
- # Versão 2.0.0 (Clonagem Anônima e Robusta)
6
- # - Usa URLs HTTPS explícitas e anônimas para evitar que o Git tente
7
- # usar credenciais em cache desnecessariamente para repositórios públicos.
8
 
9
  import os
10
  import subprocess
11
  import sys
12
  from pathlib import Path
 
 
 
 
13
 
14
  # --- Configuração ---
15
  DEPS_DIR = Path("/data")
 
16
 
17
- # URLs explícitas e anônimas para os repositórios públicos
18
  REPOS_TO_CLONE = {
19
  "LTX-Video": "https://huggingface.co/spaces/Lightricks/ltx-video-distilled",
20
  "SeedVR_Space": "https://huggingface.co/spaces/ByteDance-Seed/SeedVR2-3B",
21
  "MMAudio": "https://github.com/hkchengrex/MMAudio.git"
22
  }
23
 
24
- def run_command(command, cwd=None):
25
- """Executa um comando no terminal e lida com erros."""
 
 
 
26
  print(f"Executando: {' '.join(command)}")
27
  try:
28
- # Redireciona o stdin para DEVNULL para garantir que o git não tente pedir senha
29
- subprocess.run(
30
- command,
31
- check=True,
32
- cwd=cwd,
33
- stdin=subprocess.DEVNULL,
34
- )
 
 
 
35
  except subprocess.CalledProcessError as e:
36
  print(f"ERRO: O comando falhou com o código de saída {e.returncode}")
37
- # stderr é capturado automaticamente se check=True falhar
38
- print(f"Stderr: {e.stderr}")
39
  sys.exit(1)
40
  except FileNotFoundError:
41
- print(f"ERRO: O comando '{command[0]}' não foi encontrado. Certifique-se de que o git está instalado e no seu PATH.")
42
  sys.exit(1)
43
 
44
- def main():
45
- print("--- Iniciando Setup do Ambiente ADUC-SDR ---")
46
-
47
- DEPS_DIR.mkdir(exist_ok=True)
48
-
49
  for repo_name, repo_url in REPOS_TO_CLONE.items():
50
  repo_path = DEPS_DIR / repo_name
51
- if repo_path.exists():
52
- print(f"Repositório '{repo_name}' já existe. Pulando a clonagem.")
53
  else:
54
  print(f"Clonando '{repo_name}' de {repo_url}...")
55
- run_command(["git", "clone", "--depth", "1", repo_url, str(repo_path)])
56
  print(f"'{repo_name}' clonado com sucesso.")
57
 
58
- print("\n--- Setup do Ambiente Concluído com Sucesso! ---")
59
- print("Você agora pode iniciar a aplicação principal (ex: python app.py).")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
  if __name__ == "__main__":
62
- main()
63
-
 
1
  # setup.py
 
 
 
 
 
 
2
 
3
  import os
4
  import subprocess
5
  import sys
6
  from pathlib import Path
7
+ import yaml
8
+
9
+ # Adiciona a importação do hf_hub_download
10
+ from huggingface_hub import hf_hub_download
11
 
12
  # --- Configuração ---
13
  DEPS_DIR = Path("/data")
14
+ MODELS_ROOT = DEPS_DIR / "ltx_models" # Diretório centralizado para modelos
15
 
16
+ # URLs explícitas para os repositórios
17
  REPOS_TO_CLONE = {
18
  "LTX-Video": "https://huggingface.co/spaces/Lightricks/ltx-video-distilled",
19
  "SeedVR_Space": "https://huggingface.co/spaces/ByteDance-Seed/SeedVR2-3B",
20
  "MMAudio": "https://github.com/hkchengrex/MMAudio.git"
21
  }
22
 
23
+ def run_command(command, cwd=None, is_pip=False):
24
+ """Executa um comando no terminal e exibe a saída em tempo real."""
25
+ if is_pip:
26
+ command = [sys.executable, "-m", "pip"] + command
27
+
28
  print(f"Executando: {' '.join(command)}")
29
  try:
30
+ with subprocess.Popen(
31
+ command, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
32
+ text=True, encoding='utf-8', bufsize=1
33
+ ) as process:
34
+ for line in iter(process.stdout.readline, ''):
35
+ print(line, end='')
36
+
37
+ return_code = process.wait()
38
+ if return_code != 0:
39
+ raise subprocess.CalledProcessError(return_code, command)
40
  except subprocess.CalledProcessError as e:
41
  print(f"ERRO: O comando falhou com o código de saída {e.returncode}")
 
 
42
  sys.exit(1)
43
  except FileNotFoundError:
44
+ print(f"ERRO: O comando '{command[0]}' não foi encontrado.")
45
  sys.exit(1)
46
 
47
+ def clone_repos():
48
+ """ETAPA 1: Garante que todos os repositórios de código necessários existam."""
49
+ print("--- ETAPA 1: Verificando e clonando repositórios de código ---")
 
 
50
  for repo_name, repo_url in REPOS_TO_CLONE.items():
51
  repo_path = DEPS_DIR / repo_name
52
+ if repo_path.exists() and (repo_path / ".git").exists():
53
+ print(f"Repositório '{repo_name}' já existe. Pulando.")
54
  else:
55
  print(f"Clonando '{repo_name}' de {repo_url}...")
56
+ run_command(["git", "clone", "--depth", "1", "-q", repo_url, str(repo_path)])
57
  print(f"'{repo_name}' clonado com sucesso.")
58
 
59
+ def install_ltx_dependencies():
60
+ """ETAPA 2: Instala as dependências Python do LTX-Video."""
61
+ print("\n--- ETAPA 2: Instalando dependências Python do LTX-Video ---")
62
+ ltx_repo_path = DEPS_DIR / "LTX-Video"
63
+ if ltx_repo_path.exists():
64
+ run_command(["install", "-e", ".[inference]"], cwd=str(ltx_repo_path), is_pip=True)
65
+ print("Dependências do LTX-Video instaladas com sucesso.")
66
+ else:
67
+ print("ERRO CRÍTICO: Diretório LTX-Video não encontrado. Não foi possível instalar dependências.")
68
+ sys.exit(1)
69
+
70
+ def download_ltx_models():
71
+ """
72
+ ETAPA 3: Verifica e baixa os modelos LTX necessários, lendo os configs
73
+ do repositório já clonado.
74
+ """
75
+ print("\n--- ETAPA 3: Verificando e baixando modelos LTX ---")
76
+ LTX_REPO_ID = "Lightricks/LTX-Video" # Repositório dos modelos no Hub
77
+ ltx_configs_dir = DEPS_DIR / "LTX-Video" / "configs"
78
+
79
+ if not ltx_configs_dir.is_dir():
80
+ print(f"ERRO CRÍTICO: Diretório de configs '{ltx_configs_dir}' não encontrado. O clone do LTX-Video pode ter falhado.")
81
+ sys.exit(1)
82
+
83
+ required_model_files = set()
84
+ for cfg_path in ltx_configs_dir.glob("*.yaml"):
85
+ try:
86
+ with open(cfg_path, 'r') as f:
87
+ config = yaml.safe_load(f)
88
+ if config and config.get("checkpoint_path"):
89
+ required_model_files.add(config["checkpoint_path"])
90
+ if config and config.get("spatial_upscaler_model_path"):
91
+ required_model_files.add(config["spatial_upscaler_model_path"])
92
+ except Exception as e:
93
+ print(f"AVISO: Falha ao ler o arquivo de configuração {cfg_path}: {e}")
94
+
95
+ if not required_model_files:
96
+ print("AVISO: Nenhum arquivo de modelo foi encontrado nos arquivos de configuração. Verifique os configs.")
97
+ return
98
+
99
+ print(f"Modelos necessários encontrados: {required_model_files}")
100
+ MODELS_ROOT.mkdir(exist_ok=True)
101
+
102
+ for model_filename in required_model_files:
103
+ local_path = MODELS_ROOT / model_filename
104
+ if local_path.exists():
105
+ print(f"Modelo '{model_filename}' já existe localmente. Pulando.")
106
+ else:
107
+ print(f"Baixando modelo '{model_filename}'...")
108
+ try:
109
+ hf_hub_download(
110
+ repo_id=LTX_REPO_ID,
111
+ filename=model_filename,
112
+ local_dir=str(MODELS_ROOT),
113
+ local_dir_use_symlinks=False,
114
+ token=os.getenv("HF_TOKEN")
115
+ )
116
+ print(f"'{model_filename}' baixado com sucesso.")
117
+ except Exception as e:
118
+ print(f"ERRO: Falha ao baixar '{model_filename}'. Verifique o nome do arquivo e a conexão. Erro: {e}")
119
+
120
+ def main():
121
+ print("--- Iniciando Setup Completo do Ambiente ADUC-SDR ---")
122
+ DEPS_DIR.mkdir(exist_ok=True)
123
+
124
+ # Executa as etapas na ordem correta
125
+ clone_repos()
126
+ install_ltx_dependencies()
127
+ download_ltx_models()
128
+
129
+ print("\n--- ✅ Setup do Ambiente Concluído com Sucesso! ---")
130
+ print("Todos os repositórios, dependências e modelos estão prontos.")
131
 
132
  if __name__ == "__main__":
133
+ main()