import os import torch import numpy as np import cv2 from PIL import Image from argparse import ArgumentParser from model import DiffMorpherPipeline parser = ArgumentParser() parser.add_argument( "--model_path", type=str, default="stabilityai/stable-diffusion-2-1-base", help="Pretrained model to use (default: %(default)s)" ) parser.add_argument( "--image_path_0", type=str, default="", help="Path of the first image (default: %(default)s)") parser.add_argument( "--prompt_0", type=str, default="", help="Prompt of the second image (default: %(default)s)") parser.add_argument( "--image_path_1", type=str, default="", help="Path of the first image (default: %(default)s)") parser.add_argument( "--prompt_1", type=str, default="", help="Prompt of the second image (default: %(default)s)") parser.add_argument( "--output_path", type=str, default="./results", help="Path of the output image (default: %(default)s)" ) parser.add_argument( "--save_lora_dir", type=str, default="./lora", help="Path of the output lora directory (default: %(default)s)" ) parser.add_argument( "--load_lora_path_0", type=str, default="", help="Path of the lora directory of the first image (default: %(default)s)" ) parser.add_argument( "--load_lora_path_1", type=str, default="", help="Path of the lora directory of the second image (default: %(default)s)" ) parser.add_argument( "--use_adain", action="store_true", help="Use AdaIN (default: %(default)s)" ) parser.add_argument( "--use_reschedule", action="store_true", help="Use reschedule sampling (default: %(default)s)" ) parser.add_argument( "--lamb", type=float, default=0.6, help="Lambda for self-attention replacement (default: %(default)s)" ) parser.add_argument( "--fix_lora_value", type=float, default=None, help="Fix lora value (default: LoRA Interp., not fixed)" ) parser.add_argument( "--save_inter", action="store_true", help="Save intermediate results (default: %(default)s)" ) parser.add_argument( "--num_frames", type=int, default=16, help="Number of frames to generate (default: %(default)s)" ) parser.add_argument( "--duration", type=int, default=100, help="Duration of each frame (default: %(default)s ms)" ) parser.add_argument( "--no_lora", action="store_true" ) args = parser.parse_args() os.makedirs(args.output_path, exist_ok=True) pipeline = DiffMorpherPipeline.from_pretrained( args.model_path, torch_dtype=torch.float32) pipeline.to("cuda") images = pipeline( img_path_0=args.image_path_0, img_path_1=args.image_path_1, prompt_0=args.prompt_0, prompt_1=args.prompt_1, save_lora_dir=args.save_lora_dir, load_lora_path_0=args.load_lora_path_0, load_lora_path_1=args.load_lora_path_1, use_adain=args.use_adain, use_reschedule=args.use_reschedule, lamd=args.lamb, output_path=args.output_path, num_frames=args.num_frames, fix_lora=args.fix_lora_value, save_intermediates=args.save_inter, use_lora=not args.no_lora ) images[0].save(f"{args.output_path}/output.gif", save_all=True, append_images=images[1:], duration=args.duration, loop=0)