Spaces:
Paused
Paused
| from flask_cors import CORS | |
| import os | |
| from flask import Flask, render_template, request, jsonify, Response, stream_with_context | |
| from app_rvc import SoniTranslate # Importuj SoniTranslate z app_rvc.py | |
| import queue | |
| import threading | |
| import logging | |
| app = Flask(__name__, template_folder="templates", static_folder="static") | |
| CORS(app) | |
| # Ujisti se, že adresář existuje | |
| UPLOAD_FOLDER = "uploads" | |
| if not os.path.exists(UPLOAD_FOLDER): | |
| os.makedirs(UPLOAD_FOLDER) | |
| # Fronta pro logy | |
| log_queue = queue.Queue() | |
| def log_message(message): | |
| """Přidá zprávu do fronty logů.""" | |
| log_queue.put(message) | |
| # Přesměrování logování z knihovny SoniTranslate | |
| class QueueLoggingHandler(logging.Handler): | |
| def emit(self, record): | |
| log_message(self.format(record)) | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger("SoniTranslate") | |
| logger.addHandler(QueueLoggingHandler()) | |
| def index(): | |
| return render_template("index.html") | |
| def stream_logs(): | |
| """Endpoint pro streamování logů.""" | |
| def event_stream(): | |
| while True: | |
| message = log_queue.get() # Získání zprávy z fronty | |
| yield f"data: {message}\n\n" | |
| return Response(stream_with_context(event_stream()), content_type="text/event-stream") | |
| def process_video(): | |
| file = request.files["video"] | |
| target_language = request.form["target_language"] | |
| # Ulož dočasný soubor | |
| file_path = os.path.join(UPLOAD_FOLDER, file.filename) | |
| file.save(file_path) | |
| try: | |
| log_message("[INFO] >> Starting video processing...") | |
| translator = SoniTranslate(cpu_mode=False) | |
| # Spuštění zpracování v jiném vlákně | |
| def process(): | |
| try: | |
| log_message("[INFO] >> Processing video...") | |
| result = translator.multilingual_media_conversion( | |
| media_file=file_path, | |
| target_language=target_language, | |
| is_gui=False, | |
| ) | |
| log_message(f"[INFO] >> Processing completed. Result: {result}") | |
| except Exception as e: | |
| log_message(f"[ERROR] >> {str(e)}") | |
| finally: | |
| os.remove(file_path) | |
| threading.Thread(target=process).start() | |
| return jsonify({"status": "processing", "message": "Processing started."}) | |
| except Exception as e: | |
| return jsonify({"status": "error", "message": str(e)}) | |
| if __name__ == "__main__": | |
| app.run(host="0.0.0.0", port=5000, debug=True) | |