import gradio as gr import boto3 import banana_dev as client import os from typing import Iterable import gradio as gr from gradio.themes.base import Base from gradio.themes.utils import colors, fonts, sizes from PIL import Image import io import base64 from io import BytesIO import traceback import uuid from dotenv import load_dotenv import gzip load_dotenv() BANANA_API_KEY = os.getenv("BANANA_API_KEY") BANANA_MODEL_KEY = os.getenv("BANANA_MODEL_KEY") BANANA_URL = os.getenv("BANANA_URL") def predict(image, prompt,qr_code, negative_prompt, seed): try: my_model = client.Client( api_key=BANANA_API_KEY, model_key=BANANA_MODEL_KEY, url=BANANA_URL, ) #target image with open(image.name, "rb") as f: image_bytes = f.read() image_encoded = base64.b64encode(image_bytes) image = image_encoded.decode("utf-8") print(image) print(negative_prompt) print(seed) print(qr_code) print(prompt) inputs = { "prompt" : prompt, "qr_code_content" : qr_code, "negative_prompt": negative_prompt, "image": image, "seed": seed } result, meta = my_model.call("/", inputs) output_bytes = result["outputs"] image_encoded = output_bytes.encode('utf-8') image_data = base64.b64decode(image_encoded) image_data = gzip.decompress(image_data) image_io = BytesIO(image_data) output_image = Image.open(image_io) return output_image, None except Exception as e: tb_str = traceback.format_exception(type(e), e, e.__traceback__) tb_str = "".join(tb_str) return None, tb_str with gr.Blocks() as demo: title_with_logo = gr.Markdown("# Powered by Banana ") with gr.Column(): image = gr.File(label="Image", file_count="single", scale=1) prompt=gr.Textbox(label="Prompt") qr_code=gr.Textbox(label="QR code link") negative_prompt= gr.Textbox(label="Negative Prompt") seed= gr.Textbox(label="Seed") btn = gr.Button("Run illusion-diffusion-hq") output_image = gr.Image(label="Output Image") output_error = gr.Textbox(label="Error Message") btn.click(predict, [image, prompt,qr_code, negative_prompt, seed], [output_image, output_error]) demo.launch()