sdk/python/foundation-models/stabilityai/gradio_sample/Image_to_Image.py (69 lines of code) (raw):

import gradio as gr from io import BytesIO import json from PIL import Image import requests import base64 import io AZURE_ENDPOINT = "AZURE_AI_MAAS_ENDPOINT" + "/images/generations" KEY = "AZURE_AI_MAAS_ENDPOINT_KEY" def save_and_generate_image( input_image, prompt, output_format, strength, negative_prompt, seed ): print(f"Image Prompt is : {prompt}") # Convert the inital image object to bytes buffered = io.BytesIO() input_image.save(buffered, format="JPEG") image_bytes = buffered.getvalue() # Encode the bytes to base64 encoded_string = base64.b64encode(image_bytes).decode("utf-8") image = generate_image( prompt, output_format, negative_prompt, strength, encoded_string, seed ) image_path = "./generated_image.png" image.save(image_path) print(f"Image saved to {image_path}") return image_path def generate_image( prompt, output_format, negative_prompt, strength, encoded_string, seed ): params = { "prompt": prompt, "image_prompt": {"image": encoded_string}, "output_format": output_format, "seed": seed, } if negative_prompt: params["negative_prompt"] = negative_prompt if strength: params["image_prompt"]["strength"] = strength headers = {"Authorization": f"{KEY}", "Accept": "application/json"} response = requests.post(AZURE_ENDPOINT, headers=headers, json=params) try: response.raise_for_status() except requests.exceptions.HTTPError as e: print(f"HTTPError: {e}") print(f"Response content: {response.content}") raise # Decode response image_data = base64.b64decode(response.json()["image"]) output_image = Image.open(BytesIO(image_data)) return output_image demo = gr.Interface( fn=save_and_generate_image, inputs=[ gr.Image(type="pil", label="Initial Image"), gr.Textbox( label="Enter your Image Prompt", placeholder="Describe your image..." ), gr.Radio(choices=["jpeg", "png"], label="Output Format", value="jpeg"), gr.Slider( minimum=0, maximum=1, step=0.01, label="Strength (optional)", value=0.5 ), gr.Textbox( label="Negative Prompt (optional)", placeholder="What to avoid in the image" ), gr.Slider(minimum=0, maximum=1000, step=1, label="Seed (optional)", value=0), ], outputs=[gr.Image(label="Generated Image")], title="Stability AI on Azure AI | Image to Image", ) if __name__ == "__main__": demo.launch()