Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
from PIL import Image | |
from pathlib import Path | |
import tempfile | |
import uuid | |
# Hugging Face video generation inference | |
from diffusers import AnimateDiffPipeline | |
import torch | |
# Optional: Replace with your model of choice from HF | |
ANIMATEDIFF_MODEL = "guoyww/animatediff-light" | |
pipe = AnimateDiffPipeline.from_pretrained( | |
ANIMATEDIFF_MODEL, | |
torch_dtype=torch.float16, | |
variant="fp16" | |
).to("cuda" if torch.cuda.is_available() else "cpu") | |
def generate_motion_video(concept, motion_prompt, sketch_img): | |
if sketch_img is None: | |
return "Please upload or generate a sketch first.", None | |
unique_id = str(uuid.uuid4()) | |
out_dir = Path(tempfile.gettempdir()) / f"motion_{unique_id}" | |
out_dir.mkdir(exist_ok=True) | |
# Generate text prompt from sketch concept and motion | |
prompt = ( | |
f"You are given a sketch of a {concept} composed of strokes over a grid. " | |
f"Imagine this sketch being brought to life in a short animation.\n\n" | |
f"The motion task is: '{motion_prompt}'\n\n" | |
f"Generate a short animation (5–8 seconds) that shows this action applied naturally " | |
f"to the sketch, while keeping the line-drawn aesthetic." | |
) | |
# AnimateDiff generation | |
video = pipe(prompt, num_frames=16).frames[0] # Get 1st sample’s frames | |
gif_path = out_dir / f"{concept.replace(' ', '_')}_motion.gif" | |
video[0].save( | |
gif_path, | |
save_all=True, | |
append_images=video[1:], | |
duration=100, | |
loop=0 | |
) | |
return "GIF created successfully!", str(gif_path) | |