Text2Motion / generate.py
Akshat7777's picture
Update generate.py
730aa68 verified
import torch
from diffusers import AnimateDiffPipeline, MotionAdapter, EulerDiscreteScheduler
from diffusers.utils import export_to_gif
def load_model():
try:
# Load Motion Adapter
adapter = MotionAdapter.from_pretrained(
"guoyww/animatediff-motion-adapter-v1-5",
torch_dtype=torch.float16
)
# Load AnimateDiff pipeline with Stable Diffusion 1.5
pipeline = AnimateDiffPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
motion_adapter=adapter,
torch_dtype=torch.float16
)
# Use Euler scheduler (smoother animations)
pipeline.scheduler = EulerDiscreteScheduler.from_config(
pipeline.scheduler.config,
timestep_spacing="trailing"
)
device = "cuda" if torch.cuda.is_available() else "cpu"
pipeline = pipeline.to(device)
print("βœ… Models loaded successfully!")
return pipeline
except Exception as e:
print(f"❌ Error during model loading: {e}")
raise
# Load once globally
pipe = load_model()
def generate(prompt: str, num_frames: int = 16, steps: int = 25, guidance: float = 7.5, seed: int = 42, out_path: str = "output.gif"):
"""
Generate an animated GIF from a text prompt.
"""
generator = torch.Generator("cuda" if torch.cuda.is_available() else "cpu").manual_seed(seed)
result = pipe(
prompt=prompt,
num_frames=num_frames,
num_inference_steps=steps,
guidance_scale=guidance,
generator=generator
)
frames = result.frames[0]
export_to_gif(frames, out_path)
return out_path