File size: 2,628 Bytes
32d4b56
 
 
 
 
 
 
 
 
 
 
2a58b6a
32d4b56
2a58b6a
 
32d4b56
 
2a58b6a
32d4b56
 
 
 
 
 
 
 
 
 
2a58b6a
 
32d4b56
 
 
 
2a58b6a
32d4b56
 
 
 
 
 
 
2a58b6a
32d4b56
 
 
 
 
2a58b6a
32d4b56
 
 
 
 
 
 
 
 
2a58b6a
32d4b56
 
 
 
 
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
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)