ai-dreams-x / gradio_interface_extended.py
Unseenseven
Fixed merge conflict markers and enhanced gradio interface
2a58b6a
import gradio as gr
from diffusers import StableDiffusionPipeline
import moviepy.editor as mp
import torch
import os
from datetime import datetime
def generate_video(prompt, duration, frame_rate, music_file):
# Initialize the pipeline
device = "cuda" if torch.cuda.is_available() else "cpu"
if device == "cuda":
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16).to(device)
else:
# Use float32 when running on CPU
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4").to(device)
# Generate frames
num_frames = int(duration * frame_rate)
temp_dir = f"/tmp/{datetime.now().strftime('%Y%m%d%H%M%S')}"
os.makedirs(temp_dir, exist_ok=True)
for i in range(num_frames):
frame = pipeline(prompt).images[0]
frame_path = os.path.join(temp_dir, f"frame_{i:04d}.png")
frame.save(frame_path)
# Create video from frames
video_path = os.path.join(temp_dir, "video.mp4")
video_clip = mp.ImageSequenceClip([os.path.join(temp_dir, f"frame_{i:04d}.png") for i in range(num_frames)], fps=frame_rate)
if music_file:
audio_clip = mp.AudioFileClip(music_file)
audio_clip = audio_clip.set_duration(video_clip.duration)
video_clip = video_clip.set_audio(audio_clip)
video_clip.write_videofile(video_path, codec="libx264")
return video_path
with gr.Blocks() as demo:
gr.Markdown("# AI Dreams & Visions Video Generator")
gr.Markdown("Generate stunning videos from text prompts using AI technology. For inquiries, contact us at [aidreams@aidreams.company](mailto:aidreams@aidreams.company). Follow us on X: [@TheKingofJewelz](https://x.com/TheKingofJewelz).")
with gr.Row():
with gr.Column():
prompt = gr.Textbox(label="Text Prompt", placeholder="Enter your video description here...")
duration = gr.Slider(label="Duration (seconds)", minimum=1, maximum=30, step=1, value=5)
frame_rate = gr.Slider(label="Frame Rate", minimum=1, maximum=60, step=1, value=24)
music_file = gr.Audio(label="Music File (Optional)", type="file")
generate_btn = gr.Button("Generate Video")
with gr.Column():
video_output = gr.Video(label="Generated Video")
download_link = gr.File(label="Download Video")
generate_btn.click(
generate_and_display_video,
inputs=[prompt, duration, frame_rate, music_file],
outputs=[video_output, download_link]
)
if __name__ == "__main__":
demo.launch(share=True)