Spaces:
Runtime error
Runtime error
| # gtts_server.py | |
| # | |
| # Requisitos: | |
| # pip install Flask gTTS Flask-Cors | |
| # | |
| # C贸mo ejecutar: | |
| # Sube este archivo como app.py a tu Hugging Face Space. | |
| # Aseg煤rate de tener un archivo requirements.txt con: | |
| # Flask | |
| # gTTS | |
| # Flask-Cors | |
| from flask import Flask, request, jsonify, send_file | |
| from flask_cors import CORS | |
| from gtts import gTTS | |
| from io import BytesIO | |
| # Inicializar la aplicaci贸n Flask | |
| app = Flask(__name__) | |
| # Habilitar CORS para permitir peticiones desde el navegador (frontend) | |
| CORS(app) | |
| # La ruta ahora acepta tanto POST (para enviar datos) como OPTIONS (para el "permiso" de seguridad) | |
| def text_to_speech(): | |
| """ | |
| Endpoint para convertir texto a voz. | |
| Maneja la petici贸n de permiso OPTIONS y la petici贸n POST. | |
| """ | |
| # Si la petici贸n es OPTIONS, Flask-CORS la manejar谩 y devolver谩 la respuesta correcta. | |
| # No necesitamos hacer nada especial aqu铆 para OPTIONS. | |
| if request.method == 'POST': | |
| try: | |
| data = request.get_json() | |
| if not data or 'text' not in data: | |
| return jsonify({"error": "No se proporcion贸 texto (clave 'text')."}), 400 | |
| text_to_speak = data.get('text') | |
| # Generar el audio con acento de M茅xico | |
| tts = gTTS(text=text_to_speak, lang='es', tld='com.mx', slow=False) | |
| mp3_fp = BytesIO() | |
| tts.write_to_fp(mp3_fp) | |
| mp3_fp.seek(0) | |
| return send_file( | |
| mp3_fp, | |
| mimetype='audio/mpeg', | |
| as_attachment=False, | |
| download_name='narration.mp3' | |
| ) | |
| except Exception as e: | |
| print(f"Ha ocurrido un error: {e}") | |
| return jsonify({"error": str(e)}), 500 | |
| # Por defecto, si no es POST, se asume que CORS ya manej贸 OPTIONS | |
| return jsonify(success=True) | |
| if __name__ == '__main__': | |
| # Cuando se ejecuta en Hugging Face, ellos manejan el host y el puerto. | |
| # El modo debug debe estar en False para evitar errores de 'signal'. | |
| app.run(host='0.0.0.0', port=7860, debug=False) | |