ThreadAbort/AI-Movie-Factory
0
1import gradio as gr2import moviepy.editor as mp3from diffusers import DiffusionPipeline4import spaces5 6# Load diffusion pipelines7image_pipeline = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo")8video_pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-video-diffusion-img2vid-xt")9 10@spaces.GPU(duration=120)11def generate_images(prompt, num_images):12 """Generates images using the image pipeline."""13 images = []14 for _ in range(num_images):15 generated_image = image_pipeline(prompt=prompt).images[0]16 images.append(generated_image)17 return images18 19@spaces.GPU(duration=120)20def generate_videos(images):21 """Generates videos from a list of images using the video pipeline."""22 videos = []23 for image in images:24 # Wrap the image in a list as expected by the pipeline25 generated_video = video_pipeline(images=[image]).images[0]26 videos.append(generated_video)27 return videos28 29def combine_videos(video_clips):30 """Combines video clips into a single video using moviepy."""31 final_clip = mp.concatenate_videoclips(video_clips)32 return final_clip33 34def generate(prompt):35 """Generates and combines images and videos."""36 images = generate_images(prompt, 2)37 video_clips = generate_videos(images)38 combined_video = combine_videos(video_clips)39 return combined_video40 41# Gradio interface with improved formatting and video output42interface = gr.Interface(43 fn=generate,44 inputs="text",45 outputs="video",46 title="AI Video Generation",47 description="Enter a prompt to generate a video using diffusion models.",48 css="""49 .output-video {50 width: 100%; /* Adjust width as needed */51 height: 400px; /* Adjust height as desired */52 }53 """,54)55 56# Launch the interface57interface.launch()58 