| import gradio as gr |
| import torch |
| import cv2 |
| import numpy as np |
| import sys |
|
|
| |
| print(f"Python: {sys.version}") |
| print(f"Torch: {torch.__version__}") |
| print(f"CUDA available: {torch.cuda.is_available()}") |
| if torch.cuda.is_available(): |
| print(f"GPU: {torch.cuda.get_device_name(0)}") |
| print(f"VRAM: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB") |
|
|
| from diffusers import DiffusionPipeline |
|
|
| |
| pipe = DiffusionPipeline.from_pretrained( |
| "damo-vilab/text-to-video-ms-1.7b", |
| torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32, |
| use_safetensors=True |
| ) |
|
|
| |
| pipe.enable_vae_slicing() |
| if torch.cuda.is_available(): |
| pipe.enable_model_cpu_offload() |
|
|
| def generate_video(prompt): |
| try: |
| print(f"Generating: '{prompt}'") |
| |
| |
| video_frames = pipe( |
| prompt, |
| num_inference_steps=15, |
| num_frames=16, |
| guidance_scale=7.5 |
| ).frames[0] |
| |
| |
| output_path = "/tmp/output.mp4" |
| |
| frames_uint8 = [(frame * 255).astype(np.uint8) for frame in video_frames] |
| height, width = frames_uint8[0].shape[:2] |
| |
| fourcc = cv2.VideoWriter_fourcc(*'mp4v') |
| out = cv2.VideoWriter(output_path, fourcc, 8, (width, height)) |
| |
| for frame in frames_uint8: |
| frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) |
| out.write(frame_bgr) |
| out.release() |
| |
| return output_path |
| |
| except Exception as e: |
| print(f"ERROR: {str(e)}") |
| import traceback |
| traceback.print_exc() |
| return None |
|
|
| |
| demo = gr.Interface( |
| fn=generate_video, |
| inputs=gr.Textbox( |
| label="Prompt (English)", |
| value="a cat walking in a garden, cartoon style", |
| lines=2 |
| ), |
| outputs=gr.Video(label="Generated Video (16 frames)"), |
| title="🎥 Text-to-Video Generator", |
| description="Free via Hugging Face T4 GPU • Model: ModelScope", |
| examples=[ |
| ["a robot dancing in cyberpunk city"], |
| ["a panda eating bamboo in forest"], |
| ["a bouncing ball on white background"] |
| ], |
| cache_examples=False |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch() |