gnosticdev commited on
Commit
30e9b85
·
verified ·
1 Parent(s): 4c089c2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -19
app.py CHANGED
@@ -895,7 +895,7 @@ def run_app(prompt_type, prompt_ia, prompt_manual, musica_file):
895
 
896
 
897
  # Interfaz de Gradio
898
- with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="""
899
  .gradio-container {max-width: 800px; margin: auto;}
900
  h1 {text-align: center;}
901
  """) as app:
@@ -912,16 +912,18 @@ with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="
912
  )
913
 
914
  # Contenedores para los campos de texto para controlar la visibilidad
915
- # Nombrados para que coincidan con los outputs del evento change
916
  with gr.Column(visible=True) as ia_guion_column:
917
  prompt_ia = gr.Textbox(
918
  label="Tema para IA",
919
  lines=2,
920
- placeholder="Ej: Un paisaje natural con montañas y ríos al amanecer, mostrando la belleza de la naturaleza...",
921
  max_lines=4,
922
  value=""
 
923
  )
924
 
 
925
  with gr.Column(visible=False) as manual_guion_column:
926
  prompt_manual = gr.Textbox(
927
  label="Tu Guion Completo",
@@ -929,6 +931,7 @@ with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="
929
  placeholder="Ej: En este video exploraremos los misterios del océano. Veremos la vida marina fascinante y los arrecifes de coral vibrantes. ¡Acompáñanos en esta aventura subacuática!",
930
  max_lines=10,
931
  value=""
 
932
  )
933
 
934
  musica_input = gr.Audio(
@@ -936,8 +939,20 @@ with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="
936
  type="filepath",
937
  interactive=True,
938
  value=None
 
939
  )
940
 
 
 
 
 
 
 
 
 
 
 
 
941
  generate_btn = gr.Button("✨ Generar Video", variant="primary")
942
 
943
  with gr.Column():
@@ -945,11 +960,12 @@ with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="
945
  label="Previsualización del Video Generado",
946
  interactive=False,
947
  height=400
 
948
  )
949
  file_output = gr.File(
950
  label="Descargar Archivo de Video",
951
  interactive=False,
952
- visible=False # Ocultar inicialmente
953
  )
954
  status_output = gr.Textbox(
955
  label="Estado",
@@ -957,44 +973,39 @@ with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="
957
  show_label=False,
958
  placeholder="Esperando acción...",
959
  value="Esperando entrada..."
 
960
  )
961
 
962
  # Evento para mostrar/ocultar los campos de texto según el tipo de prompt
963
- # Apuntar a los componentes Column padre para controlar la visibilidad
964
  prompt_type.change(
965
  lambda x: (gr.update(visible=x == "Generar Guion con IA"),
966
  gr.update(visible=x == "Usar Mi Guion")),
967
  inputs=prompt_type,
968
- # Pasar los componentes Column
969
  outputs=[ia_guion_column, manual_guion_column]
970
  )
971
 
972
  # Evento click del botón de generar video
973
  generate_btn.click(
974
- # Acción 1 (síncrona): Resetear salidas y establecer estado a procesando
975
- # Retorna None para los 3 outputs iniciales
976
  lambda: (None, None, gr.update(value="⏳ Procesando... Esto puede tomar varios minutos.", interactive=False)),
977
  outputs=[video_output, file_output, status_output],
978
- queue=True, # Usar la cola de Gradio para tareas largas
979
  ).then(
980
- # Acción 2 (asíncrona): Llamar a la función principal de procesamiento
981
  run_app,
982
- # PASAR TODOS LOS INPUTS DE LA INTERFAZ que run_app espera
983
- inputs=[prompt_type, prompt_ia, prompt_manual, musica_input],
984
- # run_app retornará los 3 outputs esperados aquí
 
985
  outputs=[video_output, file_output, status_output]
986
  ).then(
987
- # Acción 3 (síncrona): Hacer visible el enlace de descarga si se retornó un archivo
988
- # Esta función recibe las salidas de la Acción 2 (video_path, file_path, status_msg)
989
- # Solo necesitamos video_path o file_path para decidir si mostrar el enlace
990
  lambda video_path, file_path, status_msg: gr.update(visible=file_path is not None),
991
- # Inputs son las salidas de la función .then() anterior
992
  inputs=[video_output, file_output, status_output],
993
- # Actualizamos la visibilidad del componente file_output
994
  outputs=[file_output]
995
  )
996
 
997
-
998
  gr.Markdown("### Instrucciones:")
999
  gr.Markdown("""
1000
  1. **Clave API de Pexels:** Asegúrate de haber configurado la variable de entorno `PEXELS_API_KEY` con tu clave.
 
895
 
896
 
897
  # Interfaz de Gradio
898
+ with gr.Blocks(title="Generador de Videos con IA", theme=gr.themes.Soft(), css="""
899
  .gradio-container {max-width: 800px; margin: auto;}
900
  h1 {text-align: center;}
901
  """) as app:
 
912
  )
913
 
914
  # Contenedores para los campos de texto para controlar la visibilidad
915
+ # visible=True/False está aquí en la COLUMNA
916
  with gr.Column(visible=True) as ia_guion_column:
917
  prompt_ia = gr.Textbox(
918
  label="Tema para IA",
919
  lines=2,
920
+ placeholder="Ej: Un paisaje natural con montañas y ríos al amanecer...",
921
  max_lines=4,
922
  value=""
923
+ # visible=... <--- NO DEBE ESTAR AQUÍ
924
  )
925
 
926
+ # visible=True/False está aquí en la COLUMNA
927
  with gr.Column(visible=False) as manual_guion_column:
928
  prompt_manual = gr.Textbox(
929
  label="Tu Guion Completo",
 
931
  placeholder="Ej: En este video exploraremos los misterios del océano. Veremos la vida marina fascinante y los arrecifes de coral vibrantes. ¡Acompáñanos en esta aventura subacuática!",
932
  max_lines=10,
933
  value=""
934
+ # visible=... <--- NO DEBE ESTAR AQUÍ
935
  )
936
 
937
  musica_input = gr.Audio(
 
939
  type="filepath",
940
  interactive=True,
941
  value=None
942
+ # visible=... <--- NO DEBE ESTAR AQUÍ
943
  )
944
 
945
+ # --- COMPONENTE: Selección de Voz ---
946
+ voice_dropdown = gr.Dropdown(
947
+ label="Seleccionar Voz para Guion",
948
+ choices=AVAILABLE_VOICES,
949
+ value=DEFAULT_VOICE,
950
+ interactive=True
951
+ # visible=... <--- NO DEBE ESTAR AQUÍ
952
+ )
953
+ # --- FIN COMPONENTE ---
954
+
955
+
956
  generate_btn = gr.Button("✨ Generar Video", variant="primary")
957
 
958
  with gr.Column():
 
960
  label="Previsualización del Video Generado",
961
  interactive=False,
962
  height=400
963
+ # visible=... <--- NO DEBE ESTAR AQUÍ
964
  )
965
  file_output = gr.File(
966
  label="Descargar Archivo de Video",
967
  interactive=False,
968
+ visible=False # <-- ESTA BIEN AQUÍ porque su visibilidad se controla solo por el lambda posterior
969
  )
970
  status_output = gr.Textbox(
971
  label="Estado",
 
973
  show_label=False,
974
  placeholder="Esperando acción...",
975
  value="Esperando entrada..."
976
+ # visible=... <--- NO DEBE ESTAR AQUÍ
977
  )
978
 
979
  # Evento para mostrar/ocultar los campos de texto según el tipo de prompt
 
980
  prompt_type.change(
981
  lambda x: (gr.update(visible=x == "Generar Guion con IA"),
982
  gr.update(visible=x == "Usar Mi Guion")),
983
  inputs=prompt_type,
984
+ # APUNTAR A LAS COLUMNAS, esto está correcto
985
  outputs=[ia_guion_column, manual_guion_column]
986
  )
987
 
988
  # Evento click del botón de generar video
989
  generate_btn.click(
990
+ # Acción 1 (síncrona): Resetear salidas y establecer estado
 
991
  lambda: (None, None, gr.update(value="⏳ Procesando... Esto puede tomar varios minutos.", interactive=False)),
992
  outputs=[video_output, file_output, status_output],
993
+ queue=True, # Usar la cola de Gradio
994
  ).then(
995
+ # Acción 2 (asíncrona): Llamar a la función principal
996
  run_app,
997
+ # PASAR TODOS LOS INPUTS RELEVANTES a run_app
998
+ # Esto parece que ahora sí debería coincidir con la definición de run_app con 5 argumentos
999
+ inputs=[prompt_type, prompt_ia, prompt_manual, musica_input, voice_dropdown],
1000
+ # run_app retornará los 3 outputs esperados
1001
  outputs=[video_output, file_output, status_output]
1002
  ).then(
1003
+ # Acción 3 (síncrona): Hacer visible el enlace de descarga
 
 
1004
  lambda video_path, file_path, status_msg: gr.update(visible=file_path is not None),
 
1005
  inputs=[video_output, file_output, status_output],
 
1006
  outputs=[file_output]
1007
  )
1008
 
 
1009
  gr.Markdown("### Instrucciones:")
1010
  gr.Markdown("""
1011
  1. **Clave API de Pexels:** Asegúrate de haber configurado la variable de entorno `PEXELS_API_KEY` con tu clave.