salomonsky commited on
Commit
2b1c90d
verified
1 Parent(s): 8b79d9c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -32
app.py CHANGED
@@ -4,9 +4,11 @@
4
  # pip install Flask gTTS Flask-Cors
5
  #
6
  # C贸mo ejecutar:
7
- # python gtts_server.py
8
- #
9
- # El servidor se ejecutar谩 en http://localhost:5000
 
 
10
 
11
  from flask import Flask, request, jsonify, send_file
12
  from flask_cors import CORS
@@ -19,39 +21,47 @@ app = Flask(__name__)
19
  # Habilitar CORS para permitir peticiones desde el navegador (frontend)
20
  CORS(app)
21
 
22
- @app.route('/api/tts', methods=['POST'])
 
23
  def text_to_speech():
24
  """
25
  Endpoint para convertir texto a voz.
26
- Recibe un JSON con la clave "text" y devuelve un archivo de audio MP3.
27
  """
28
- try:
29
- data = request.get_json()
30
- text_to_speak = data.get('text')
31
-
32
- if not text_to_speak:
33
- return jsonify({"error": "No se proporcion贸 texto (clave 'text')."}), 400
34
-
35
- # Generar el audio con acento de M茅xico
36
- tts = gTTS(text=text_to_speak, lang='es', tld='com.mx', slow=False)
37
-
38
- mp3_fp = BytesIO()
39
- tts.write_to_fp(mp3_fp)
40
- mp3_fp.seek(0)
41
-
42
- return send_file(
43
- mp3_fp,
44
- mimetype='audio/mpeg',
45
- as_attachment=False,
46
- download_name='narration.mp3'
47
- )
48
-
49
- except Exception as e:
50
- print(f"Ha ocurrido un error: {e}")
51
- return jsonify({"error": str(e)}), 500
 
 
 
 
 
 
 
52
 
53
  if __name__ == '__main__':
54
- print("Iniciando servidor de gTTS en http://localhost:5000")
55
- # Se deshabilita el modo debug para evitar errores de 'signal' en algunos entornos.
56
- app.run(host='0.0.0.0', port=5000, debug=False)
57
 
 
4
  # pip install Flask gTTS Flask-Cors
5
  #
6
  # C贸mo ejecutar:
7
+ # Sube este archivo como app.py a tu Hugging Face Space.
8
+ # Aseg煤rate de tener un archivo requirements.txt con:
9
+ # Flask
10
+ # gTTS
11
+ # Flask-Cors
12
 
13
  from flask import Flask, request, jsonify, send_file
14
  from flask_cors import CORS
 
21
  # Habilitar CORS para permitir peticiones desde el navegador (frontend)
22
  CORS(app)
23
 
24
+ # La ruta ahora acepta tanto POST (para enviar datos) como OPTIONS (para el "permiso" de seguridad)
25
+ @app.route('/api/tts', methods=['POST', 'OPTIONS'])
26
  def text_to_speech():
27
  """
28
  Endpoint para convertir texto a voz.
29
+ Maneja la petici贸n de permiso OPTIONS y la petici贸n POST.
30
  """
31
+ # Si la petici贸n es OPTIONS, Flask-CORS la manejar谩 y devolver谩 la respuesta correcta.
32
+ # No necesitamos hacer nada especial aqu铆 para OPTIONS.
33
+
34
+ if request.method == 'POST':
35
+ try:
36
+ data = request.get_json()
37
+ if not data or 'text' not in data:
38
+ return jsonify({"error": "No se proporcion贸 texto (clave 'text')."}), 400
39
+
40
+ text_to_speak = data.get('text')
41
+
42
+ # Generar el audio con acento de M茅xico
43
+ tts = gTTS(text=text_to_speak, lang='es', tld='com.mx', slow=False)
44
+
45
+ mp3_fp = BytesIO()
46
+ tts.write_to_fp(mp3_fp)
47
+ mp3_fp.seek(0)
48
+
49
+ return send_file(
50
+ mp3_fp,
51
+ mimetype='audio/mpeg',
52
+ as_attachment=False,
53
+ download_name='narration.mp3'
54
+ )
55
+
56
+ except Exception as e:
57
+ print(f"Ha ocurrido un error: {e}")
58
+ return jsonify({"error": str(e)}), 500
59
+
60
+ # Por defecto, si no es POST, se asume que CORS ya manej贸 OPTIONS
61
+ return jsonify(success=True)
62
 
63
  if __name__ == '__main__':
64
+ # Cuando se ejecuta en Hugging Face, ellos manejan el host y el puerto.
65
+ # El modo debug debe estar en False para evitar errores de 'signal'.
66
+ app.run(host='0.0.0.0', port=7860, debug=False)
67