gnosticdev commited on
Commit
518f669
verified
1 Parent(s): c7b9a72

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -22
app.py CHANGED
@@ -7,43 +7,41 @@ from transformers import pipeline
7
  import requests
8
  from datetime import datetime
9
 
10
- # 1. Configuraci贸n inicial (SIN ASYNCIO en callbacks)
11
  VOICES = asyncio.run(edge_tts.list_voices())
12
  PEXELS_API_KEY = os.getenv("PEXELS_API_KEY")
13
 
14
- # 2. Generador de gui贸n (sincr贸nico)
15
  def generar_guion(prompt):
16
  try:
17
  generator = pipeline("text-generation", model="facebook/mbart-large-50")
18
  return generator(
19
- f"Genera un guion sobre '{prompt}' (4 puntos breves):",
20
  max_length=200,
21
  num_return_sequences=1
22
  )[0]['generated_text']
23
- except Exception as e:
24
- print(f"Error en generaci贸n: {e}")
25
- return prompt # Fallback al texto original
26
 
27
  # 3. Funci贸n principal (sincr贸nica)
28
  def crear_video(prompt, script_personalizado, voz_seleccionada, musica=None):
29
  try:
30
- # A. Generar gui贸n
31
  guion = script_personalizado if script_personalizado else generar_guion(prompt)
32
 
33
  # B. Generar voz (soluci贸n sincr贸nica)
34
  os.system(f'edge-tts --voice "{voz_seleccionada}" --text "{guion}" --write-media "voz.mp3"')
35
 
36
- # C. Descargar videos
37
  headers = {"Authorization": PEXELS_API_KEY}
38
  query = prompt[:50].replace(" ", "+")
39
- response = requests.get(
40
  f"https://api.pexels.com/videos/search?query={query}&per_page=2",
41
  headers=headers,
42
  timeout=10
43
- )
44
- videos = response.json().get("videos", [])
45
 
46
- # D. Procesar audio
47
  audio = AudioFileClip("voz.mp3")
48
  if musica:
49
  musica_clip = AudioFileClip(musica.name)
@@ -59,16 +57,16 @@ def crear_video(prompt, script_personalizado, voz_seleccionada, musica=None):
59
 
60
  return output_path
61
  except Exception as e:
62
- print(f"ERROR CR脥TICO: {e}")
63
  return None
64
 
65
- # 4. Interfaz (con queue enabled=False)
66
- with gr.Blocks(title="Generador de Videos", css="footer {visibility: hidden}") as app:
67
- gr.Markdown("# 馃幀 GENERADOR DE VIDEOS (ESTABLE)")
68
 
69
  with gr.Row():
70
  with gr.Column():
71
- prompt = gr.Textbox(label="Tema principal", placeholder="Ej: 'Tecnolog铆a en 2025'")
72
  script = gr.TextArea(label="Guion personalizado (opcional)", lines=5)
73
  voz = gr.Dropdown(
74
  label="Selecciona voz",
@@ -79,14 +77,13 @@ with gr.Blocks(title="Generador de Videos", css="footer {visibility: hidden}") a
79
  btn = gr.Button("Generar Video", variant="primary")
80
 
81
  with gr.Column():
82
- output = gr.Video(label="Resultado", autoplay=True)
83
 
84
  btn.click(
85
  fn=crear_video,
86
  inputs=[prompt, script, voz, musica],
87
- outputs=output,
88
- api_name="generar" # Evita usar colas
89
  )
90
 
91
- # 5. Lanzamiento (sin colas)
92
- app.launch(enable_queue=False) # 隆Clave para evitar el error!
 
7
  import requests
8
  from datetime import datetime
9
 
10
+ # 1. Configuraci贸n inicial
11
  VOICES = asyncio.run(edge_tts.list_voices())
12
  PEXELS_API_KEY = os.getenv("PEXELS_API_KEY")
13
 
14
+ # 2. Generador de gui贸n
15
  def generar_guion(prompt):
16
  try:
17
  generator = pipeline("text-generation", model="facebook/mbart-large-50")
18
  return generator(
19
+ f"Genera un guion sobre '{prompt}':",
20
  max_length=200,
21
  num_return_sequences=1
22
  )[0]['generated_text']
23
+ except:
24
+ return prompt # Fallback
 
25
 
26
  # 3. Funci贸n principal (sincr贸nica)
27
  def crear_video(prompt, script_personalizado, voz_seleccionada, musica=None):
28
  try:
29
+ # A. Generar contenido
30
  guion = script_personalizado if script_personalizado else generar_guion(prompt)
31
 
32
  # B. Generar voz (soluci贸n sincr贸nica)
33
  os.system(f'edge-tts --voice "{voz_seleccionada}" --text "{guion}" --write-media "voz.mp3"')
34
 
35
+ # C. Buscar videos en Pexels
36
  headers = {"Authorization": PEXELS_API_KEY}
37
  query = prompt[:50].replace(" ", "+")
38
+ videos = requests.get(
39
  f"https://api.pexels.com/videos/search?query={query}&per_page=2",
40
  headers=headers,
41
  timeout=10
42
+ ).json().get("videos", [])
 
43
 
44
+ # D. Procesar m煤sica
45
  audio = AudioFileClip("voz.mp3")
46
  if musica:
47
  musica_clip = AudioFileClip(musica.name)
 
57
 
58
  return output_path
59
  except Exception as e:
60
+ print(f"ERROR: {str(e)}")
61
  return None
62
 
63
+ # 4. Interfaz Gradio (versi贸n estable)
64
+ with gr.Blocks() as app:
65
+ gr.Markdown("# 馃幀 GENERADOR DE VIDEOS")
66
 
67
  with gr.Row():
68
  with gr.Column():
69
+ prompt = gr.Textbox(label="Tema del video")
70
  script = gr.TextArea(label="Guion personalizado (opcional)", lines=5)
71
  voz = gr.Dropdown(
72
  label="Selecciona voz",
 
77
  btn = gr.Button("Generar Video", variant="primary")
78
 
79
  with gr.Column():
80
+ output = gr.Video(label="Resultado")
81
 
82
  btn.click(
83
  fn=crear_video,
84
  inputs=[prompt, script, voz, musica],
85
+ outputs=output
 
86
  )
87
 
88
+ # 5. Lanzamiento SIN par谩metros conflictivos
89
+ app.launch(server_name="0.0.0.0", server_port=7860)