Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,11 +2,11 @@
|
|
| 2 |
#
|
| 3 |
# Copyright (C) August 4, 2025 Carlos Rodrigues dos Santos
|
| 4 |
#
|
| 5 |
-
# Versão 7.
|
| 6 |
#
|
| 7 |
-
# Esta versão substitui o especialista
|
| 8 |
-
#
|
| 9 |
-
#
|
| 10 |
|
| 11 |
import gradio as gr
|
| 12 |
import yaml
|
|
@@ -21,7 +21,7 @@ import json
|
|
| 21 |
import aduc_framework
|
| 22 |
from aduc_framework.types import PreProductionParams, ProductionParams
|
| 23 |
# Importamos o novo e final especialista de visão
|
| 24 |
-
from aduc_framework.managers.
|
| 25 |
|
| 26 |
# --- CONFIGURAÇÃO DE TEMA E LOGGING ---
|
| 27 |
cinematic_theme = gr.themes.Base(
|
|
@@ -136,15 +136,15 @@ def run_audio_wrapper(source_video, audio_prompt, global_prompt, progress=gr.Pro
|
|
| 136 |
|
| 137 |
def analyze_video_wrapper(source_video):
|
| 138 |
if not source_video: raise gr.Error("Nenhum vídeo final foi gerado para ser analisado.")
|
| 139 |
-
yield "Analisando o movimento do vídeo com
|
| 140 |
-
analysis =
|
| 141 |
yield analysis
|
| 142 |
|
| 143 |
def answer_images_wrapper(image_paths, question):
|
| 144 |
-
if not image_paths: raise gr.Error("Nenhuma imagem de referência foi carregada
|
| 145 |
if not question or not question.strip(): raise gr.Error("Por favor, digite uma pergunta.")
|
| 146 |
-
yield "Analisando as imagens de referência com
|
| 147 |
-
all_answers = [f"--- Imagem {i+1} ---\nResposta: {
|
| 148 |
yield "\n".join(all_answers)
|
| 149 |
|
| 150 |
def get_log_content():
|
|
@@ -194,18 +194,16 @@ with gr.Blocks(theme=cinematic_theme, css="style.css") as demo:
|
|
| 194 |
audio_prompt_input = gr.Textbox(label="Prompt de Áudio Detalhado (Opcional)", lines=2, placeholder="Descreva os sons, efeitos e música.")
|
| 195 |
run_audio_button = gr.Button("Gerar Áudio", variant="secondary")
|
| 196 |
|
| 197 |
-
|
| 198 |
-
with gr.Accordion("📸 Grupo das Keyframes", open=True):
|
| 199 |
-
keyframe_gallery = gr.Gallery(label="Keyframes Gerados", visible=True, object_fit="contain", height="auto", type="filepath")
|
| 200 |
-
|
| 201 |
-
final_video_output = gr.Video(label="Filme Final (Resultado da Última Etapa)", visible=True, interactive=False)
|
| 202 |
|
|
|
|
|
|
|
| 203 |
|
| 204 |
with gr.Accordion("🧬 DNA Digital da Geração (JSON)", open=False):
|
| 205 |
storyboard_output = gr.JSON(label="Roteiro Gerado (Storyboard)")
|
| 206 |
generation_data_output = gr.JSON(label="Estado de Geração Completo")
|
| 207 |
|
| 208 |
-
with gr.Accordion("🔬 Etapa de Análise Multimodal (
|
| 209 |
with gr.Blocks():
|
| 210 |
gr.Markdown("### Analisar Movimento do Vídeo Final")
|
| 211 |
gr.Markdown("Peça ao especialista para descrever a ação, movimento e narrativa que se desenrolam através dos frames do vídeo.")
|
|
|
|
| 2 |
#
|
| 3 |
# Copyright (C) August 4, 2025 Carlos Rodrigues dos Santos
|
| 4 |
#
|
| 5 |
+
# Versão 7.1.0 (Qwen2-VL Integration)
|
| 6 |
#
|
| 7 |
+
# Esta versão substitui o especialista de visão anterior pelo Qwen2-VL, um
|
| 8 |
+
# MLLM de código aberto, e ajusta a UI e as chamadas de função para refletir
|
| 9 |
+
# essa nova integração.
|
| 10 |
|
| 11 |
import gradio as gr
|
| 12 |
import yaml
|
|
|
|
| 21 |
import aduc_framework
|
| 22 |
from aduc_framework.types import PreProductionParams, ProductionParams
|
| 23 |
# Importamos o novo e final especialista de visão
|
| 24 |
+
from aduc_framework.managers.qwen_vl_manager import qwen_vl_manager_singleton
|
| 25 |
|
| 26 |
# --- CONFIGURAÇÃO DE TEMA E LOGGING ---
|
| 27 |
cinematic_theme = gr.themes.Base(
|
|
|
|
| 136 |
|
| 137 |
def analyze_video_wrapper(source_video):
|
| 138 |
if not source_video: raise gr.Error("Nenhum vídeo final foi gerado para ser analisado.")
|
| 139 |
+
yield "Analisando o movimento do vídeo com Qwen2-VL... (Isso pode levar um momento)"
|
| 140 |
+
analysis = qwen_vl_manager_singleton.analyze_video_movement(video_path=source_video)
|
| 141 |
yield analysis
|
| 142 |
|
| 143 |
def answer_images_wrapper(image_paths, question):
|
| 144 |
+
if not image_paths: raise gr.Error("Nenhuma imagem de referência foi carregada.")
|
| 145 |
if not question or not question.strip(): raise gr.Error("Por favor, digite uma pergunta.")
|
| 146 |
+
yield "Analisando as imagens de referência com Qwen2-VL..."
|
| 147 |
+
all_answers = [f"--- Imagem {i+1} ---\nResposta: {qwen_vl_manager_singleton.answer_on_image(path, question)}\n" for i, path in enumerate(image_paths)]
|
| 148 |
yield "\n".join(all_answers)
|
| 149 |
|
| 150 |
def get_log_content():
|
|
|
|
| 194 |
audio_prompt_input = gr.Textbox(label="Prompt de Áudio Detalhado (Opcional)", lines=2, placeholder="Descreva os sons, efeitos e música.")
|
| 195 |
run_audio_button = gr.Button("Gerar Áudio", variant="secondary")
|
| 196 |
|
| 197 |
+
final_video_output = gr.Video(label="Filme Final (Resultado da Última Etapa)", visible=False, interactive=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
|
| 199 |
+
with gr.Accordion("Grupo das Keyframes", open=False):
|
| 200 |
+
keyframe_gallery = gr.Gallery(label="Keyframes Gerados", visible=True, object_fit="contain", height="auto", type="filepath")
|
| 201 |
|
| 202 |
with gr.Accordion("🧬 DNA Digital da Geração (JSON)", open=False):
|
| 203 |
storyboard_output = gr.JSON(label="Roteiro Gerado (Storyboard)")
|
| 204 |
generation_data_output = gr.JSON(label="Estado de Geração Completo")
|
| 205 |
|
| 206 |
+
with gr.Accordion("🔬 Etapa de Análise Multimodal (Qwen2-VL)", open=False):
|
| 207 |
with gr.Blocks():
|
| 208 |
gr.Markdown("### Analisar Movimento do Vídeo Final")
|
| 209 |
gr.Markdown("Peça ao especialista para descrever a ação, movimento e narrativa que se desenrolam através dos frames do vídeo.")
|