arcanus/koala2
0
1from flask_cors import CORS2import os3from flask import Flask, render_template, request, jsonify, Response, stream_with_context4from app_rvc import SoniTranslate # Importuj SoniTranslate z app_rvc.py5import queue6import threading7import logging8 9app = Flask(__name__, template_folder="templates", static_folder="static")10CORS(app)11 12# Ujisti se, že adresář existuje13UPLOAD_FOLDER = "uploads"14if not os.path.exists(UPLOAD_FOLDER):15 os.makedirs(UPLOAD_FOLDER)16 17# Fronta pro logy18log_queue = queue.Queue()19 20def log_message(message):21 """Přidá zprávu do fronty logů."""22 log_queue.put(message)23 24# Přesměrování logování z knihovny SoniTranslate25class QueueLoggingHandler(logging.Handler):26 def emit(self, record):27 log_message(self.format(record))28 29logging.basicConfig(level=logging.INFO)30logger = logging.getLogger("SoniTranslate")31logger.addHandler(QueueLoggingHandler())32 33@app.route("/")34def index():35 return render_template("index.html")36 37@app.route("/logs")38def stream_logs():39 """Endpoint pro streamování logů."""40 def event_stream():41 while True:42 message = log_queue.get() # Získání zprávy z fronty43 yield f"data: {message}\n\n"44 45 return Response(stream_with_context(event_stream()), content_type="text/event-stream")46 47@app.route("/process_video", methods=["POST"])48def process_video():49 file = request.files["video"]50 target_language = request.form["target_language"]51 52 # Ulož dočasný soubor53 file_path = os.path.join(UPLOAD_FOLDER, file.filename)54 file.save(file_path)55 56 try:57 log_message("[INFO] >> Starting video processing...")58 translator = SoniTranslate(cpu_mode=False)59 60 # Spuštění zpracování v jiném vlákně61 def process():62 try:63 log_message("[INFO] >> Processing video...")64 result = translator.multilingual_media_conversion(65 media_file=file_path,66 target_language=target_language,67 is_gui=False,68 )69 log_message(f"[INFO] >> Processing completed. Result: {result}")70 except Exception as e:71 log_message(f"[ERROR] >> {str(e)}")72 finally:73 os.remove(file_path)74 75 threading.Thread(target=process).start()76 return jsonify({"status": "processing", "message": "Processing started."})77 except Exception as e:78 return jsonify({"status": "error", "message": str(e)})79 80if __name__ == "__main__":81 app.run(host="0.0.0.0", port=5000, debug=True)82 83 