File size: 3,689 Bytes
89193d4
508b017
89193d4
 
62d483c
77b90e5
0fd6348
 
e5ecc3a
6ec513d
5c45900
6ec513d
89193d4
 
 
 
3f6bd82
 
3bde6e5
 
9b19eb5
 
77f733f
21b11ab
 
dc85dd8
e5ecc3a
 
36e3155
 
 
ebd1c2f
 
 
e9902d8
8c36521
e9902d8
8c36521
ebd1c2f
 
e9902d8
ebd1c2f
e9902d8
 
 
 
 
 
 
 
ebd1c2f
8c36521
e9902d8
 
 
 
 
8c36521
 
ebd1c2f
8c36521
e9902d8
ebd1c2f
e9902d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77f733f
e5ecc3a
 
8bacd57
924c7a9
0fd6348
 
 
8bacd57
0fd6348
508b017
0fd6348
35b33ac
 
6ec513d
3bde6e5
89193d4
3bde6e5
89193d4
3bde6e5
3f6bd82
 
0fd6348
 
 
 
 
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
from flask import Flask, request, jsonify, send_file
from moviepy.editor import ColorClip,ImageClip, concatenate_videoclips
import traceback
import uuid
import glob
import os
import asyncio
from image_fetcher import main
from video import create_text_image

app = Flask(__name__)

@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
        
        image_olst=[]
        for id in range(len(lines)):
          create_text_image(lines[id],id,image_olst)
        image_files = sorted(glob.glob(os.path.join(image_folder, "*.png")))
        if not image_files:
            raise ValueError("No images found in folder!")
    
        clips = [ImageClip(m).set_duration(5) for m in image_files]
        video = concatenate_videoclips(clips, method="compose")
        video_path = f"/tmp/video_{uuid.uuid4().hex}.mp4"
        video.write_videofile(video_path, fps=24)
        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)