import gradio as gr import torch from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler from diffusers.utils import export_to_video # Gerçekten tozlu raflardan: 2023'ün ilkel text-to-video modeli. # Inference Providers'ta yok, sadece diffusers ile lokal/Space içinde çalışır. MODEL_ID = "ali-vilab/text-to-video-ms-1.7b-legacy" print("Model yükleniyor (CPU), bu birkaç dakika sürebilir...") pipe = DiffusionPipeline.from_pretrained(MODEL_ID, torch_dtype=torch.float32) pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config) pipe.to("cpu") print("Model hazır.") def video_uret(prompt: str, num_steps: int, num_frames: int): if not prompt or not prompt.strip(): raise gr.Error("Prompt boş olamaz.") video_frames = pipe( prompt, num_inference_steps=int(num_steps), num_frames=int(num_frames), ).frames[0] video_path = export_to_video(video_frames) return video_path with gr.Blocks(title="Tozlu Raf Video Üretici") as demo: gr.Markdown( "# 📼 Tozlu Raf Video Üretici\n" f"Model: `{MODEL_ID}` — CPU üzerinde çalışıyor, GPU yok.\n\n" "**Uyarı:** Bu Space'te GPU yok. Bir video onlarca dakika sürebilir. " "Sabırsızsan adım/kare sayısını düşür." ) prompt = gr.Textbox( label="Prompt", value="a weird creature with three legs walking backwards, melting face, bad quality vhs glitch", ) with gr.Row(): steps = gr.Slider(5, 50, value=15, step=1, label="Inference steps (az = hızlı, kalitesiz)") frames = gr.Slider(8, 24, value=12, step=1, label="Kare sayısı") btn = gr.Button("Üret (sabırlı ol)") output = gr.Video(label="Sonuç") btn.click(video_uret, inputs=[prompt, steps, frames], outputs=output) demo.queue(max_size=5).launch()