Spaces:
Runtime error
Runtime error
Update aduc_orchestrator.py
Browse files- aduc_orchestrator.py +10 -46
aduc_orchestrator.py
CHANGED
|
@@ -127,16 +127,6 @@ class AducOrchestrator:
|
|
| 127 |
progress: gr.Progress) -> Tuple[List[str], str, Any]:
|
| 128 |
"""
|
| 129 |
Delega ao Roteirista (Gemini) a tarefa de criar o roteiro (storyboard).
|
| 130 |
-
|
| 131 |
-
Args:
|
| 132 |
-
prompt (str): A ideia geral do filme fornecida pelo usuário.
|
| 133 |
-
num_keyframes (int): O número de cenas a serem criadas.
|
| 134 |
-
ref_image_paths (List[str]): Caminhos para as imagens de referência.
|
| 135 |
-
progress (gr.Progress): Objeto do Gradio para reportar progresso.
|
| 136 |
-
|
| 137 |
-
Returns:
|
| 138 |
-
Tuple[List[str], str, Any]: O storyboard, o caminho da primeira imagem de referência,
|
| 139 |
-
e um update para a UI do Gradio.
|
| 140 |
"""
|
| 141 |
logger.info(f"Ato 1, Cena 1: Roteiro. Instruindo o Roteirista (Gemini) a criar {num_keyframes} cenas a partir de: '{prompt}'")
|
| 142 |
progress(0.2, desc="Consultando Roteirista IA (Gemini)...")
|
|
@@ -147,8 +137,6 @@ class AducOrchestrator:
|
|
| 147 |
self.director.update_state("storyboard", storyboard)
|
| 148 |
self.director.update_state("processed_ref_paths", ref_image_paths)
|
| 149 |
|
| 150 |
-
# Retorna o storyboard, a primeira imagem como referência inicial, e um comando
|
| 151 |
-
# para tornar o próximo acordeão da UI visível.
|
| 152 |
return storyboard, ref_image_paths[0], gr.update(visible=True, open=True)
|
| 153 |
|
| 154 |
def task_select_keyframes(self, storyboard: List[str], base_ref_paths: List[str],
|
|
@@ -156,14 +144,6 @@ class AducOrchestrator:
|
|
| 156 |
"""
|
| 157 |
Delega ao Editor/Fotógrafo (Gemini) a tarefa de selecionar as melhores imagens
|
| 158 |
de um "banco de cenas" para corresponder ao roteiro (Modo Fotógrafo).
|
| 159 |
-
|
| 160 |
-
Args:
|
| 161 |
-
storyboard (List[str]): O roteiro gerado.
|
| 162 |
-
base_ref_paths (List[str]): Imagens de referência principais.
|
| 163 |
-
pool_ref_paths (List[str]): O conjunto de imagens para seleção.
|
| 164 |
-
|
| 165 |
-
Returns:
|
| 166 |
-
List[str]: Uma lista ordenada de caminhos de imagem selecionados como keyframes.
|
| 167 |
"""
|
| 168 |
logger.info(f"Ato 1, Cena 2 (Modo Fotógrafo): Instruindo o Editor (Gemini) a selecionar {len(storyboard)} keyframes.")
|
| 169 |
|
|
@@ -178,16 +158,6 @@ class AducOrchestrator:
|
|
| 178 |
"""
|
| 179 |
Delega ao Diretor de Arte (ImageSpecialist) a tarefa de gerar os keyframes
|
| 180 |
visuais a partir do roteiro (Modo Diretor de Arte).
|
| 181 |
-
|
| 182 |
-
Args:
|
| 183 |
-
storyboard (List[str]): O roteiro gerado.
|
| 184 |
-
initial_ref_path (str): A imagem inicial que serve como base para o primeiro keyframe.
|
| 185 |
-
global_prompt (str): O prompt geral do filme.
|
| 186 |
-
keyframe_resolution (int): A resolução (em pixels) para os keyframes gerados.
|
| 187 |
-
progress_callback_factory (callable, optional): Uma função para criar callbacks de progresso.
|
| 188 |
-
|
| 189 |
-
Returns:
|
| 190 |
-
List[str]: Uma lista de caminhos para os keyframes gerados e salvos.
|
| 191 |
"""
|
| 192 |
logger.info("Ato 1, Cena 2 (Modo Diretor de Arte): Delegando ao Especialista de Imagem.")
|
| 193 |
|
|
@@ -208,24 +178,16 @@ class AducOrchestrator:
|
|
| 208 |
|
| 209 |
def task_produce_final_movie_with_feedback(self, keyframes: List[str], global_prompt: str, seconds_per_fragment: float,
|
| 210 |
trim_percent: int, handler_strength: float,
|
| 211 |
-
destination_convergence_strength: float,
|
| 212 |
-
|
|
|
|
|
|
|
| 213 |
"""
|
| 214 |
-
Delega ao Editor/Cineasta (Deformes4DEngine) a produção final do filme
|
| 215 |
-
gerando e retornando feedback sobre cada fragmento criado.
|
| 216 |
-
|
| 217 |
-
Args:
|
| 218 |
-
(Vários): Parâmetros de controle para a geração de vídeo.
|
| 219 |
-
progress (gr.Progress): Objeto do Gradio para reportar progresso.
|
| 220 |
-
|
| 221 |
-
Yields:
|
| 222 |
-
Generator[Dict[str, Any], None, None]: Dicionários contendo o caminho para
|
| 223 |
-
cada fragmento gerado ou o caminho final do filme.
|
| 224 |
"""
|
| 225 |
logger.info("Maestro: Delegando a produção do filme completo ao Deformes4DEngine.")
|
| 226 |
storyboard = self.director.get_state("storyboard", [])
|
| 227 |
|
| 228 |
-
# O gerador do Deformes4DEngine retorna atualizações de progresso.
|
| 229 |
for update in self.editor.generate_full_movie(
|
| 230 |
keyframes=keyframes,
|
| 231 |
global_prompt=global_prompt,
|
|
@@ -234,13 +196,15 @@ class AducOrchestrator:
|
|
| 234 |
trim_percent=trim_percent,
|
| 235 |
handler_strength=handler_strength,
|
| 236 |
destination_convergence_strength=destination_convergence_strength,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
video_resolution=video_resolution,
|
| 238 |
use_continuity_director=use_continuity_director,
|
| 239 |
progress=progress
|
| 240 |
):
|
| 241 |
-
if "
|
| 242 |
-
yield {"fragment_path": update["fragment_path"]}
|
| 243 |
-
elif "final_path" in update and update["final_path"]:
|
| 244 |
final_movie_path = update["final_path"]
|
| 245 |
self.director.update_state("final_video_path", final_movie_path)
|
| 246 |
yield {"final_path": final_movie_path}
|
|
|
|
| 127 |
progress: gr.Progress) -> Tuple[List[str], str, Any]:
|
| 128 |
"""
|
| 129 |
Delega ao Roteirista (Gemini) a tarefa de criar o roteiro (storyboard).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
"""
|
| 131 |
logger.info(f"Ato 1, Cena 1: Roteiro. Instruindo o Roteirista (Gemini) a criar {num_keyframes} cenas a partir de: '{prompt}'")
|
| 132 |
progress(0.2, desc="Consultando Roteirista IA (Gemini)...")
|
|
|
|
| 137 |
self.director.update_state("storyboard", storyboard)
|
| 138 |
self.director.update_state("processed_ref_paths", ref_image_paths)
|
| 139 |
|
|
|
|
|
|
|
| 140 |
return storyboard, ref_image_paths[0], gr.update(visible=True, open=True)
|
| 141 |
|
| 142 |
def task_select_keyframes(self, storyboard: List[str], base_ref_paths: List[str],
|
|
|
|
| 144 |
"""
|
| 145 |
Delega ao Editor/Fotógrafo (Gemini) a tarefa de selecionar as melhores imagens
|
| 146 |
de um "banco de cenas" para corresponder ao roteiro (Modo Fotógrafo).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
"""
|
| 148 |
logger.info(f"Ato 1, Cena 2 (Modo Fotógrafo): Instruindo o Editor (Gemini) a selecionar {len(storyboard)} keyframes.")
|
| 149 |
|
|
|
|
| 158 |
"""
|
| 159 |
Delega ao Diretor de Arte (ImageSpecialist) a tarefa de gerar os keyframes
|
| 160 |
visuais a partir do roteiro (Modo Diretor de Arte).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 161 |
"""
|
| 162 |
logger.info("Ato 1, Cena 2 (Modo Diretor de Arte): Delegando ao Especialista de Imagem.")
|
| 163 |
|
|
|
|
| 178 |
|
| 179 |
def task_produce_final_movie_with_feedback(self, keyframes: List[str], global_prompt: str, seconds_per_fragment: float,
|
| 180 |
trim_percent: int, handler_strength: float,
|
| 181 |
+
destination_convergence_strength: float,
|
| 182 |
+
use_upscaler: bool, use_refiner: bool, use_hd: bool, use_audio: bool,
|
| 183 |
+
video_resolution: int, use_continuity_director: bool,
|
| 184 |
+
progress: gr.Progress) -> Generator[Dict[str, Any], None, None]:
|
| 185 |
"""
|
| 186 |
+
Delega ao Editor/Cineasta (Deformes4DEngine) a produção final do filme.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 187 |
"""
|
| 188 |
logger.info("Maestro: Delegando a produção do filme completo ao Deformes4DEngine.")
|
| 189 |
storyboard = self.director.get_state("storyboard", [])
|
| 190 |
|
|
|
|
| 191 |
for update in self.editor.generate_full_movie(
|
| 192 |
keyframes=keyframes,
|
| 193 |
global_prompt=global_prompt,
|
|
|
|
| 196 |
trim_percent=trim_percent,
|
| 197 |
handler_strength=handler_strength,
|
| 198 |
destination_convergence_strength=destination_convergence_strength,
|
| 199 |
+
use_upscaler=use_upscaler,
|
| 200 |
+
use_refiner=use_refiner,
|
| 201 |
+
use_hd=use_hd,
|
| 202 |
+
use_audio=use_audio,
|
| 203 |
video_resolution=video_resolution,
|
| 204 |
use_continuity_director=use_continuity_director,
|
| 205 |
progress=progress
|
| 206 |
):
|
| 207 |
+
if "final_path" in update and update["final_path"]:
|
|
|
|
|
|
|
| 208 |
final_movie_path = update["final_path"]
|
| 209 |
self.director.update_state("final_video_path", final_movie_path)
|
| 210 |
yield {"final_path": final_movie_path}
|