File size: 4,400 Bytes
255df7f f8e3a12 8e3c369 96f419b 8e3c369 1125603 8e3c369 6e89c0c 255df7f 87f10b8 d25f5c1 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 f6c296e 1125603 6e89c0c 1125603 6ec513d 1125603 89193d4 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 |
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 asyncio
from image_fetcher import main
from video import create_text_image
from video2 import video_com
app = Flask(__name__)
SUBSPACE_URL = "https://sreepathi-ravikumar-subprocess1.hf.space/generate_video"
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
id=0
try:
# Send list + int to subspace
res = requests.post(SUBSPACE_URL, json={"lines": lines, "id": id})
if res.status_code == 200:
video_content = res.content
filename = f"video_{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4"
filepath = os.path.join(SAVE_DIR, filename)
with open(filepath, "wb") as f:
f.write(video_content)
return jsonify({
"status": "success",
"saved_to": filepath
})
else:
return jsonify({
"status": "error",
"code": res.status_code,
"message": res.text
})
except Exception as e:
return jsonify({"status": "failed", "error": str(e)})
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) |