# ============================================================================== # app.py - [FINAL CORRECTED VERSION FOR HUGGING FACE v2] # CHANGE: init_db() ko app startup par call kiya gaya hai. # ============================================================================== import os from dotenv import load_dotenv # Ye line aapke local .env file se variables load karegi (Hugging Face par iska koi asar nahi) load_dotenv() import uuid import threading from flask import Flask, request, jsonify, render_template_string, send_from_directory from werkzeug.utils import secure_filename # engine.py se zaroori functions AUR FOLDER PATHS import karein from engine import ( init_db, create_task, get_task, run_ai_engine_worker, generate_script_with_ai, UPLOAD_FOLDER, OUTPUT_FOLDER ) # ============================================================================== # 1. HTML Templates # ============================================================================== MODERN_CSS_BASE = """""" HTML_HOME = """Sparkling Gyan AI - होम""" + MODERN_CSS_BASE + """

एक उन्नत, ऑटोमेटिक वीडियो जेनरेटर

या
२. अतिरिक्त विकल्प
""" HTML_PROCESSING = """प्रोसेसिंग...""" + MODERN_CSS_BASE + """

मिशन कंट्रोल

प्रक्रिया शुरू हो रही है...

0%
""" HTML_RESULT = """आपकी वीडियो तैयार है!""" + MODERN_CSS_BASE + """

🎉 मिशन पूरा हुआ!

आपकी फाइनल वीडियो नीचे है।

""" HTML_HISTORY = """वीडियो हिस्ट्री""" + MODERN_CSS_BASE + """
वापस मुख्य पेज पर

बनाए गए वीडियो की हिस्ट्री

{% if items %}
{% for item in items %}
टास्क आईडी:

{{ item.task_id }}

{% endfor %}
{% else %}

कोई हिस्ट्री नहीं मिली

आपने अभी तक कोई वीडियो नहीं बनाया है।

{% endif %}
""" # ============================================================================== # Flask Application Setup # ============================================================================== app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['OUTPUT_FOLDER'] = OUTPUT_FOLDER # <<<--- YAHAN EK LINE JODI GAYI HAI --- >>> # Database table banayein agar pehle se nahi bani hai init_db() # <<<--- BADLAV YAHAN KHATM HOTA HAI --- >>> @app.route('/') def home(): return render_template_string(HTML_HOME) @app.route('/process', methods=['POST']) def process_video(): task_id = str(uuid.uuid4()) create_task(task_id) script_text = request.form.get('script_text') script_file = request.files.get('script_file') orientation = request.form.get('orientation', 'horizontal') max_clip_length = int(request.form.get('max_clip_length', 15)) mute_final_video = request.form.get('mute_final_video') == 'true' script_file_path = None if script_file and script_file.filename: filename = secure_filename(script_file.filename) task_upload_dir = os.path.join(app.config['UPLOAD_FOLDER'], task_id) os.makedirs(task_upload_dir, exist_ok=True) script_file_path = os.path.join(task_upload_dir, filename) script_file.save(script_file_path) if not script_text and not script_file_path: return "Please provide a script text or an audio file.", 400 thread = threading.Thread( target=run_ai_engine_worker, args=(task_id, script_text, script_file_path, orientation, max_clip_length, mute_final_video) ) thread.start() return render_template_string(HTML_PROCESSING, task_id=task_id) @app.route('/generate-script', methods=['POST']) def generate_script(): data = request.get_json() topic = data.get('topic') video_length = data.get('video_length') if not topic or not video_length: return jsonify({'error': 'Topic and video length are required.'}), 400 try: generated_script = generate_script_with_ai(topic, video_length) return jsonify({'script': generated_script}) except Exception as e: print(f"Error during script generation: {e}") return jsonify({'error': f"AI से संपर्क करने में विफल: {str(e)}"}), 500 @app.route('/progress/') def progress(task_id): task = get_task(task_id) if not task: return jsonify({'status': 'error', 'log': 'Task not found.'}) return jsonify(dict(task)) @app.route('/result/') def result(filename): return render_template_string(HTML_RESULT, filename=filename) @app.route('/outputs/') def serve_output_file(filename): return send_from_directory(app.config['OUTPUT_FOLDER'], filename) @app.route('/history') def history(): output_dir = app.config['OUTPUT_FOLDER'] history_items = [] try: all_files = sorted(os.listdir(output_dir), reverse=True) for filename in all_files: if filename.endswith('_final_video.mp4'): task_id = filename.replace('_final_video.mp4', '') report_filename = f"{task_id}_report.json" item = { 'video': filename, 'task_id': task_id, 'report': report_filename if report_filename in all_files else None } history_items.append(item) except FileNotFoundError: print(f"'{output_dir}' directory not found.") return render_template_string(HTML_HISTORY, items=history_items) # Is block ko ab production mein ignore kar diya jayega if __name__ == '__main__': init_db() app.run(host='0.0.0.0', port=5000, debug=True)