Video.p / app.py
zainmushtaq54's picture
Update app.py
55cd7bf verified
!pip install gTTS
import streamlit as st
from gtts import gTTS
from moviepy.editor import ImageSequenceClip, AudioFileClip
from diffusers import StableDiffusionPipeline
from PIL import Image, ImageFilter, ImageEnhance
import os
# Function to generate audio using gTTS
def generate_audio(text, output_path="audio.mp3"):
tts = gTTS(text=text, lang='en')
tts.save(output_path)
return output_path
# Function to generate images using Stable Diffusion
def generate_images(prompt, num_images=5):
# Load Stable Diffusion pipeline (ensure you have the model locally)
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipeline = pipeline.to("cpu") # Use "cuda" for GPU if available
image_paths = []
for i in range(num_images):
image = pipeline(prompt).images[0] # Generate an image
image = apply_cartoon_filter(image) # Apply cartoon effect
image_path = f"image_{i}.png"
image.save(image_path)
image_paths.append(image_path)
return image_paths
# Function to apply a cartoon effect to an image
def apply_cartoon_filter(image):
# Convert to Pillow format if needed
if not isinstance(image, Image.Image):
image = Image.fromarray(image)
# Enhance colors and edges
image = ImageEnhance.Color(image).enhance(1.5) # Increase saturation
image = image.filter(ImageFilter.CONTOUR) # Add cartoon-style edges
return image
# Function to create a video using MoviePy
def create_video(image_paths, audio_path, output_path="output_video.mp4"):
clip = ImageSequenceClip(image_paths, fps=1) # 1 FPS for a slow animation
audio = AudioFileClip(audio_path)
final_clip = clip.set_audio(audio)
final_clip.write_videofile(output_path, fps=24)
return output_path
# Streamlit App
st.title("Cartoon Video Generator")
st.write("Enter a prompt, and we'll create a cartoon video with scenes and voices!")
# Input prompt
prompt = st.text_area("Enter your prompt:", "A cartoon story about a cat and a dog playing in the park.")
# Generate Button
if st.button("Generate Video"):
with st.spinner("Generating cartoon video..."):
# Generate Audio
audio_file = generate_audio(prompt)
# Generate Images
st.info("Generating cartoon images...")
images = generate_images(prompt)
# Create Video
st.info("Creating video...")
video_file = create_video(images, audio_file)
st.success("Video generated successfully!")
# Show video preview
st.video(video_file)
# Provide download link
with open(video_file, "rb") as file:
st.download_button(
label="Download Video",
data=file,
file_name="cartoon_video.mp4",
mime="video/mp4"
)