import sys
import PIL
import requests
import torch
from diffusers import StableDiffusionInstructPix2PixPipeline, EulerAncestralDiscreteScheduler
from PIL import Image

def download_image(url):
    image = PIL.Image.open(requests.get(url, stream=True).raw)
    image = PIL.ImageOps.exif_transpose(image)
    image = image.convert("RGB")
    return image

model_id = "timbrooks/instruct-pix2pix"
pipe = StableDiffusionInstructPix2PixPipeline.from_pretrained(model_id, torch_dtype=torch.float32, safety_checker=None)
pipe.to("cpu")
pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)

def resize_image(image, target_size=(300, 300)): 
    image = image.resize(target_size, Image.LANCZOS)
    return image

def generate_image(prompt, input_image_path, output_image_path):
  
    image = PIL.Image.open(input_image_path).convert("RGB")
    resized_image = resize_image(image)
    
 
    images = pipe(prompt, image=resized_image, num_inference_steps=6, image_guidance_scale=1).images

    images[0].save(output_image_path)

if __name__ == "__main__":
    prompt = sys.argv[1]
    input_image_path = sys.argv[2]
    output_image_path = sys.argv[3]
    generate_image(prompt, input_image_path, output_image_path)

