Spaces:
Build error
Build error
File size: 2,592 Bytes
5f8a662 6cd2a2e 4b86371 c6011cd 6cd2a2e c6011cd 6c4f4bc 5f8a662 4b86371 5f8a662 4b86371 |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import os
import torch
import gradio as gr
from diffusers import StableVideoDiffusionPipeline
from PIL import Image
import numpy as np
import cv2
import tempfile
from diffusers.utils import export_to_video
pipe = None
def load():
global pipe
if pipe is None:
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt",
torch_dtype=torch.float16,
variant="fp16"
)
pipe.to("cuda")
gr.Info("Модель на GPU — генерация 30–60 сек")
return pipe
def run(ref_img, video, mode, quality, prog=gr.Progress()):
pipe = load()
prog(0, desc="Подготовка...")
img = Image.fromarray(ref_img).convert("RGB").resize((576, 320))
cap = cv2.VideoCapture(video)
n = int(cap.get(7)); cap.release()
hint = f" ({n} кадров)"
steps = 25 if quality == "wan-pro" else 15
frames = 25 if quality == "wan-pro" else 14
noise = 0.1 if mode == "wan2.2-animate-mix" else 0.02
def cb(step, *_):
prog((step+1)/steps, desc=f"Шаг {step+1}/{steps}")
prog(0.1, desc="Генерация...")
out = pipe(
img,
num_inference_steps=steps,
num_frames=frames,
decode_chunk_size=2,
noise_aug_strength=noise,
callback_on_step_end=cb
).frames[0]
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4")
export_to_video(out, tmp.name, fps=7)
return tmp.name, "Готово!" + hint
with gr.Blocks() as demo:
gr.Markdown("# Wan2.2-Animate (GPU)")
with gr.Accordion("Инструкция", open=False):
gr.Markdown("Загрузи фото + видео → выбери режим → жми Generate")
with gr.Row():
with gr.Column():
img = gr.Image(label="Фото", type="numpy")
vid = gr.Video(label="Видео")
with gr.Row():
mode = gr.Dropdown(["wan2.2-animate-move", "wan2.2-animate-mix"],
label="Режим", value="wan2.2-animate-move")
qual = gr.Dropdown(["wan-pro", "wan-std"], label="Качество", value="wan-pro")
btn = gr.Button("Generate Video")
with gr.Column():
out = gr.Video(label="Результат")
stat = gr.Textbox(label="Статус")
btn.click(run, [img, vid, mode, qual], [out, stat])
demo.queue(max_size=2).launch(
server_name="0.0.0.0",
server_port=7860,
share=True, # ← ФИКС 1
enable_queue=True
) |