import os import gradio as gr import torch import spaces import random from PIL import Image from glob import glob from pathlib import Path from typing import Optional from diffsynth import ModelManager, SVDVideoPipeline, HunyuanDiTImagePipeline from diffsynth import ModelManager from diffusers.utils import load_image, export_to_video import uuid from huggingface_hub import hf_hub_download os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1" HF_TOKEN = os.environ.get("HF_TOKEN", None) # Constants #MAX_SEED = np.iinfo(np.int32).max MAX_SEED = 2147483647 CSS = """ footer { visibility: hidden; } """ JS = """function () { gradioURL = window.location.href if (!gradioURL.endsWith('?__theme=dark')) { window.location.replace(gradioURL + '?__theme=dark'); } }""" # Ensure model and scheduler are initialized in GPU-enabled function if torch.cuda.is_available(): model_manager = ModelManager( torch_dtype=torch.float16, device="cuda", model_id_list=["stable-video-diffusion-img2vid-xt", "ExVideo-SVD-128f-v1"], downloading_priority=["HuggingFace"]) pipe = SVDVideoPipeline.from_model_manager(model_manager) # function source codes modified from multimodalart/stable-video-diffusion @spaces.GPU(duration=120) def generate( image: image, seed: Optional[int] = -1, motion_bucket_id: int = 127, fps_id: int = 25, output_folder: str = "outputs", progress=gr.Progress(track_tqdm=True)): if seed == -1: seed = random.randint(0, MAX_SEED) image = Image.open(image) if image.mode == "RGBA": image = image.convert("RGB") torch.manual_seed(seed) os.makedirs(output_folder, exist_ok=True) base_count = len(glob(os.path.join(output_folder, "*.mp4"))) video_path = os.path.join(output_folder, f"{base_count:06d}.mp4") frames = pipe( input_image=image.resize((512, 512)), num_frames=128, fps=fps_id, height=512, width=512, motion_bucket_id=motion_bucket_id, num_inference_steps=50, min_cfg_scale=2, max_cfg_scale=2, contrast_enhance_scale=1.2 ).frames[0] export_to_video(frames, video_path, fps=fps_id) return video_path, seed examples = [ "./train.jpg", "./girl.webp", "./robo.jpg", ] # Gradio Interface with gr.Blocks(css=CSS, js=JS, theme="soft") as demo: gr.HTML("