File size: 5,186 Bytes
255df7f f8e3a12 8e3c369 96f419b 8e3c369 e738b55 1125603 8e3c369 d8b35ea 255df7f 87f10b8 36d77a8 f6c296e 255df7f 8e3c369 ea26699 3f6bd82 3bde6e5 9b19eb5 1125603 8e3c369 1125603 36e3155 1125603 ebd1c2f 1125603 ebd1c2f 1125603 ebd1c2f e9902d8 1125603 e9902d8 1125603 e9902d8 ebd1c2f 1125603 e9902d8 1125603 8c36521 1125603 8c36521 1125603 ebd1c2f 1125603 e9902d8 1125603 e9902d8 1125603 e9902d8 1125603 e9902d8 1125603 e9902d8 1125603 f29c874 36d77a8 f29c874 36d77a8 f29c874 e738b55 dbca55f 0e321f9 f29c874 dbca55f f29c874 dbca55f f29c874 2f9786d f29c874 3bde6e5 89193d4 3bde6e5 3f6bd82 87f10b8 1125603 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | 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"
#line=prompts.splitlines()
#asyncio.run(main(line))
raw_lines = prompts.splitlines(keepends=False)
lines = []
i = 0
while i < len(raw_lines):
line = raw_lines[i].strip()
# Check if current line is a heading
if line.strip().startswith("#") and (line.endswith('?') or line.endswith(':')):
block = line # Start block with heading
i += 1
# Accumulate body lines until next heading or 5+ lines
paragraph_lines = []
while i < len(raw_lines):
next_line = raw_lines[i].strip()
# Stop if next line is a heading
if next_line.strip().startswith("#") and (next_line.endswith('?') or next_line.endswith(':')):
break
paragraph_lines.append(next_line)
i += 1
# If we've gathered enough lines for a slide, break to next
if len(paragraph_lines) >= 5:
break
# Combine heading + paragraph
if paragraph_lines:
block += '\n' + '\n'.join(paragraph_lines)
lines.append(block)
else:
# Group normal lines (not part of any heading)
block_lines = []
count = 0
while i < len(raw_lines) and count < 5:
next_line = raw_lines[i].strip()
# If this is a heading, break to handle it separately
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))
# Print or use lines as slides
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
}
# Replace with your actual Space B URL
response = requests.post(space_b_url[id], json=payload)
if response.status_code == 200:
# Save received video file
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)
#for img in image_files:
#os.remove(img)
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)
# Example call (remove or change in your actual app) |