|
import gradio as gr |
|
import torch |
|
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler |
|
from diffusers.utils import export_to_video |
|
import logging |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
try: |
|
|
|
logger.info("Loading diffusion pipeline...") |
|
pipe = DiffusionPipeline.from_pretrained( |
|
"heboya8/text2video-test-2", |
|
torch_dtype=torch.float16, |
|
trust_remote_code=True, |
|
) |
|
|
|
|
|
logger.info("Enabling CPU offload and VAE slicing...") |
|
pipe.enable_model_cpu_offload() |
|
pipe.enable_vae_slicing() |
|
except Exception as e: |
|
logger.error(f"Failed to initialize pipeline: {str(e)}") |
|
raise |
|
|
|
def generate_video(prompt): |
|
try: |
|
logger.info(f"Generating video for prompt: {prompt}") |
|
|
|
video_frames = pipe( |
|
prompt, |
|
num_inference_steps=50, |
|
num_frames=16, |
|
).frames |
|
|
|
|
|
video_path = export_to_video(video_frames, output_video_path="output_video.mp4") |
|
logger.info(f"Video generated at: {video_path}") |
|
return video_path |
|
except Exception as e: |
|
logger.error(f"Error generating video: {str(e)}") |
|
return f"Error generating video: {str(e)}" |
|
|
|
|
|
interface = gr.Interface( |
|
fn=generate_video, |
|
inputs=gr.Textbox( |
|
label="Enter your prompt", |
|
placeholder="e.g., a flower in a garden" |
|
), |
|
outputs=gr.Video(label="Generated Video"), |
|
title="Text-to-Video Generator", |
|
description="Enter a text prompt to generate a video using the diffusion model." |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
logger.info("Launching Gradio interface...") |
|
interface.launch(server_name="0.0.0.0", server_port=7860) |