| from flask import Flask, request, jsonify, send_file |
| from moviepy.editor import ColorClip,ImageClip, concatenate_videoclips,VideoFileClip |
| import traceback |
| import uuid |
| import glob |
| import os |
| import requests |
| import asyncio |
| from image_fetcher import main |
| from video import create_text_image |
| from video2 import video_com,video_func |
|
|
| app = Flask(__name__) |
|
|
| SAVE_DIR = "/app/data/video/" |
| os.makedirs(SAVE_DIR, exist_ok=True) |
|
|
| @app.route("/") |
| def home(): |
| return "Flask Video Generator is Running" |
|
|
| @app.route("/generate", methods=["POST"]) |
| def generate_video(): |
| try: |
| data = request.get_json() |
| prompt = data.get("duration", '').strip() |
| prompts=prompt.replace("**","") |
| print(prompts) |
| if prompts == '': |
| return jsonify({"error": "prompts be must"}), 400 |
| image_folder = "/tmp/images" |
| |
| |
| raw_lines = prompts.splitlines(keepends=False) |
| lines = [] |
| |
| i = 0 |
| while i < len(raw_lines): |
| line = raw_lines[i].strip() |
| |
| |
| if line.strip().startswith("#") and (line.endswith('?') or line.endswith(':')): |
| block = line |
| i += 1 |
| |
| |
| paragraph_lines = [] |
| while i < len(raw_lines): |
| next_line = raw_lines[i].strip() |
| |
| |
| if next_line.strip().startswith("#") and (next_line.endswith('?') or next_line.endswith(':')): |
| break |
| |
| paragraph_lines.append(next_line) |
| i += 1 |
| |
| |
| if len(paragraph_lines) >= 5: |
| break |
| |
| |
| if paragraph_lines: |
| block += '\n' + '\n'.join(paragraph_lines) |
| |
| lines.append(block) |
| |
| else: |
| |
| block_lines = [] |
| count = 0 |
| |
| while i < len(raw_lines) and count < 5: |
| next_line = raw_lines[i].strip() |
| |
| |
| if next_line.strip().startswith("#") and (next_line.endswith('?') or next_line.endswith(':')): |
| break |
| |
| block_lines.append(next_line) |
| i += 1 |
| count += 1 |
| |
| if block_lines: |
| lines.append('\n'.join(block_lines)) |
| |
| |
| if len(lines)==1: |
| image_folder="/tmp/images" |
| image_olst=[] |
| create_text_image(lines[0],0,image_olst) |
| image_files = sorted(glob.glob(os.path.join(image_folder, "*.png"))) |
| if not image_files: |
| raise ValueError("No images found in folder!") |
| video_link = "/app/data/video/clip0.mp4" |
| video_func(0,lines) |
| for img in image_files: |
| os.remove(img) |
| return send_file(video_link, mimetype='video/mp4') |
| else: |
| space_b_url = ['https://sreepathi-ravikumar-subprocess1.hf.space/generate', 'https://sreepathi-ravikumar-subprocess2.hf.space/generate', 'https://sreepathi-ravikumar-subprocess3.hf.space/generate', 'https://sreepathi-ravikumar-subprocess4.hf.space/generate', 'https://sreepathi-ravikumar-subprocess5.hf.space/generate', 'https://sreepathi-ravikumar-subprocess6.hf.space/generate', 'https://sreepathi-ravikumar-subprocess7.hf.space/generate', 'https://sreepathi-ravikumar-subprocess8.hf.space/generate', 'https://sreepathi-ravikumar-subprocess9.hf.space/generate', 'https://sreepathi-ravikumar-subprocess10.hf.space/generate'] |
| for id in range(len(lines)): |
| payload = { |
| "id": id, |
| "lines": lines |
| } |
| |
| |
| |
| |
| response = requests.post(space_b_url[id], json=payload) |
| |
| if response.status_code == 200: |
| |
| with open(f"/app/data/video/clip{id}.mp4", "wb") as f: |
| f.write(response.content) |
| else: |
| raise Exception(f"Error from Space B: {response.text}") |
|
|
| video_path = video_com(lines) |
| |
| |
| return send_file(video_path, mimetype='video/mp4') |
| except Exception as e: |
| traceback.print_exc() |
| return jsonify({"error": str(e)}), 500 |
|
|
| if __name__ == "__main__": |
| app.run(host="0.0.0.0", port=7860) |
|
|
| |