Delete app.py
Browse files
app.py
DELETED
@@ -1,129 +0,0 @@
|
|
1 |
-
import os
|
2 |
-
import logging
|
3 |
-
import uuid
|
4 |
-
from gtts import gTTS
|
5 |
-
import moviepy.editor as mp
|
6 |
-
import g4f
|
7 |
-
from g4f import Provider
|
8 |
-
import urllib.request
|
9 |
-
|
10 |
-
# Set up logging
|
11 |
-
logging.basicConfig(level=logging.INFO)
|
12 |
-
logger = logging.getLogger(__name__)
|
13 |
-
|
14 |
-
def generate_image(prompt):
|
15 |
-
try:
|
16 |
-
unique_id = uuid.uuid4().hex
|
17 |
-
safe_prompt = prompt[:30].replace(' ', '_') # Take first 30 chars and make filename safe
|
18 |
-
image_filename = f"{safe_prompt}_{unique_id}.png"
|
19 |
-
|
20 |
-
response = g4f.Image.create(
|
21 |
-
prompt=f"{prompt} in comic style",
|
22 |
-
model="dalle",
|
23 |
-
provider=Provider.DeepAI
|
24 |
-
)
|
25 |
-
|
26 |
-
if response:
|
27 |
-
urllib.request.urlretrieve(response, image_filename)
|
28 |
-
logger.info(f"β
Generated image: {image_filename}")
|
29 |
-
return image_filename
|
30 |
-
return None
|
31 |
-
except Exception as e:
|
32 |
-
logger.error(f"β Error generating image: {e}")
|
33 |
-
return None
|
34 |
-
|
35 |
-
def generate_audio(text):
|
36 |
-
try:
|
37 |
-
unique_id = uuid.uuid4().hex
|
38 |
-
safe_text = text[:30].replace(' ', '_') # Take first 30 chars and make filename safe
|
39 |
-
audio_filename = f"{safe_text}_{unique_id}.mp3"
|
40 |
-
|
41 |
-
tts = gTTS(text=text, lang='en')
|
42 |
-
tts.save(audio_filename)
|
43 |
-
logger.info(f"β
Generated audio: {audio_filename}")
|
44 |
-
return audio_filename
|
45 |
-
except Exception as e:
|
46 |
-
logger.error(f"β Error generating audio: {e}")
|
47 |
-
return None
|
48 |
-
|
49 |
-
def get_images_and_audio(text):
|
50 |
-
segments = [s.strip() for s in text.split(",,") if s.strip()]
|
51 |
-
images = []
|
52 |
-
audio_files = []
|
53 |
-
|
54 |
-
for segment in segments:
|
55 |
-
image_file = generate_image(segment)
|
56 |
-
audio_file = generate_audio(segment)
|
57 |
-
|
58 |
-
if image_file and audio_file:
|
59 |
-
images.append(image_file)
|
60 |
-
audio_files.append(audio_file)
|
61 |
-
logger.info(f"β
Processed prompt: {segment}, Image: {image_file}, Audio: {audio_file}")
|
62 |
-
|
63 |
-
return images, audio_files
|
64 |
-
|
65 |
-
def create_video_from_images_and_audio(images, audio_files):
|
66 |
-
try:
|
67 |
-
if len(images) != len(audio_files):
|
68 |
-
raise ValueError("Number of images and audio files don't match.")
|
69 |
-
|
70 |
-
clips = []
|
71 |
-
for img, aud in zip(images, audio_files):
|
72 |
-
# Create audio clip
|
73 |
-
audio_clip = mp.AudioFileClip(aud)
|
74 |
-
|
75 |
-
# Create image clip
|
76 |
-
image_clip = mp.ImageClip(img).set_duration(audio_clip.duration)
|
77 |
-
|
78 |
-
# Combine image and audio
|
79 |
-
video_clip = image_clip.set_audio(audio_clip)
|
80 |
-
clips.append(video_clip)
|
81 |
-
|
82 |
-
# Concatenate all clips
|
83 |
-
final_clip = mp.concatenate_videoclips(clips)
|
84 |
-
|
85 |
-
# Write final video
|
86 |
-
output_filename = f"output_{uuid.uuid4().hex[:8]}.mp4"
|
87 |
-
final_clip.write_videofile(output_filename, fps=24)
|
88 |
-
|
89 |
-
# Clean up
|
90 |
-
final_clip.close()
|
91 |
-
for clip in clips:
|
92 |
-
clip.close()
|
93 |
-
|
94 |
-
# Clean up temporary files
|
95 |
-
for file in images + audio_files:
|
96 |
-
if os.path.exists(file):
|
97 |
-
os.remove(file)
|
98 |
-
|
99 |
-
logger.info(f"β
Video created successfully: {output_filename}")
|
100 |
-
return output_filename
|
101 |
-
|
102 |
-
except Exception as e:
|
103 |
-
logger.error(f"β Error: {e}")
|
104 |
-
return None
|
105 |
-
|
106 |
-
def create_video(text):
|
107 |
-
try:
|
108 |
-
# Get images and audio files
|
109 |
-
images, audio_files = get_images_and_audio(text)
|
110 |
-
|
111 |
-
# Create video
|
112 |
-
video_file = create_video_from_images_and_audio(images, audio_files)
|
113 |
-
|
114 |
-
return video_file
|
115 |
-
except Exception as e:
|
116 |
-
logger.error(f"β Error in create_video: {e}")
|
117 |
-
return None
|
118 |
-
|
119 |
-
if __name__ == "__main__":
|
120 |
-
# Test the functionality
|
121 |
-
test_text = """Once upon a time there was a village.,,
|
122 |
-
One day a visitor came to town.,,
|
123 |
-
That's okay', said the visitor. 'I will make stone soup for everyone'."""
|
124 |
-
|
125 |
-
result = create_video(test_text)
|
126 |
-
if result:
|
127 |
-
print(f"Video created successfully: {result}")
|
128 |
-
else:
|
129 |
-
print("Failed to create video")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|