File size: 5,110 Bytes
255df7f
f8e3a12
8e3c369
96f419b
b8e8579
96f419b
8e3c369
e738b55
1125603
8e3c369
 
5a93262
ca42371
255df7f
87f10b8
36d77a8
f6c296e
 
5b103a6
 
255df7f
b8e8579
ca42371
 
 
 
 
8a31738
cd69a04
ca42371
cd69a04
ca42371
cd69a04
 
ca42371
 
 
 
8a31738
cd69a04
 
ca42371
 
cd69a04
ca42371
cd69a04
ca42371
cd69a04
 
ca42371
4a29a3f
ca42371
 
8e3c369
 
 
ea26699
b8e8579
 
ea26699
3f6bd82
3bde6e5
 
db8baa3
b0d8952
 
51b2060
8e3c369
 
ca42371
51b2060
 
 
 
 
ca42371
51b2060
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38d890f
51b2060
 
 
 
 
 
 
 
 
 
11943dd
b0d8952
51b2060
 
ca42371
 
 
51b2060
3bde6e5
89193d4
3bde6e5
3f6bd82
ca42371
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
from flask import Flask, request, jsonify, send_file
from moviepy.editor import ColorClip,ImageClip, concatenate_videoclips,VideoFileClip
import traceback
import uuid
from concurrent.futures import ThreadPoolExecutor, as_completed
import glob
import os
import requests
import asyncio
from image_fetcher import main
from video import create_text_image
from video2 import video_func
import re

app = Flask(__name__)

SAVE_DIR = "/app/data/video/"
os.makedirs(SAVE_DIR, exist_ok=True)
CLIPS_DIR= "/app/data/video/"
os.makedirs(SAVE_DIR, exist_ok=True)



def extract_english_paragraphs(text):
    """
    Extract paragraphs that contain only English text
    """
    paragraphs = text.split('\n\n')
    english_paragraphs = [paragraphs[0]]
    
    #for para in paragraphs:
        # Check if the paragraph contains only English characters
        #if not re.search(r'[^\x00-\x7F]', para):
            #english_paragraphs.append(para.strip())
    
    return '\n\n'.join(english_paragraphs)

def extract_native_text(text):
    paragraphs = text.split('\n\n')
    nativelang_paragraphs = paragraphs[1]
    #pattern = r'[^\x00-\x7F]'
    
    # Search for the first non-English character
    #match = re.search(pattern, text)
    
    #if match:
        # Return everything from the first non-English character
        #return text[match.start():]
    #else:
        # If no non-English characters found, return empty string
    return nativelang_paragraphs


@app.route("/")
def home():
    return "Flask Video Generator is Running"



@app.route("/generate", methods=["POST"])
def generate_video():
    try:
        data = request.get_json()
        userprompt = data.get("duration", '').strip()
        prompt=extract_english_paragraphs(userprompt)
        lang=extract_native_text(userprompt)
        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:
            try:
                os.remove("/app/data/video/clip0.mp4")
                os.remove("/app/data/sound/audio0.mp3")
            except Exception as e:
                print(e)
            #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,lang)
            #for img in image_files:
                #os.remove(img)
            return send_file(video_link, mimetype='video/mp4')
            
        else:
            print("learn deeper")
    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)