File size: 3,930 Bytes
255df7f
f8e3a12
8e3c369
96f419b
 
8e3c369
1125603
8e3c369
 
4032e5f
255df7f
87f10b8
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
 
 
 
e5ecc3a
1125603
 
8e3c369
 
1125603
 
82f17cb
24d493c
5553637
82f17cb
 
b020f69
82f17cb
 
 
 
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
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_func

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!")
    
        video_path = f"/tmp/video_{uuid.uuid4().hex}.mp4"
        for id in range(len(lines)):
          video_func(id,lines)
          print(id,lines[id])
        clips = []
        for id in range(len(lines)):
            clip = VideoFileClip(f"/app/data/video/clip{id}.mp4")
            clips.append(clip)
        
        final_video = concatenate_videoclips(clips,method="compose")
        final_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)