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()) @app.route("/") def index(): return render_template("index.html") @app.route("/logs") 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") @app.route("/process_video", methods=["POST"]) 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)