Spaces:
Running
Running
File size: 4,843 Bytes
753e5f6 c6f24f8 753e5f6 2e415e8 753e5f6 c6f24f8 4ed1730 c6f24f8 2e415e8 4ed1730 2e415e8 c6f24f8 753e5f6 c6f24f8 c4fdee2 c6f24f8 753e5f6 7ca4dda c6f24f8 433e4de c6f24f8 753e5f6 7a84f3a 753e5f6 42e93b3 8d3409d 42e93b3 8d3409d 42e93b3 753e5f6 a340312 753e5f6 cc2aaf9 a340312 2e415e8 5194396 27a4093 c6f24f8 2036bc0 cc0c28f 2036bc0 27a4093 8ee7e50 c6f24f8 27a4093 cc2aaf9 753e5f6 42e93b3 43342c7 753e5f6 46e3f65 753e5f6 eec2048 753e5f6 46e3f65 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
import gradio as gr
import requests, base64, io
from dotenv import load_dotenv
import os, datetime
from PIL import Image
load_dotenv()
API_URL = os.environ.get("API_URL", "http://0.0.0.0:8021")
APP_ENV = os.environ.get("APP_ENV", None)
def image_to_base64(input_file):
if input_file is None:
return None
file_bytes = None
# Check if the input is a string (file path)
if isinstance(input_file, str):
with open(input_file, "rb") as file:
file_bytes = file.read()
else:
# Handle file-like object (_TemporaryFileWrapper)
file_bytes = input_file.read()
return base64.b64encode(file_bytes).decode()
# Assuming the API returns an image URL in the response
def generate_image(brand_name, primary_color, secondary_color, description, target_audience, font, logo_image, heading_text, sub_heading_text, image_layout, custom_graphic_prompt):
if logo_image:
logo_base64 = image_to_base64(logo_image)
else:
logo_base64 = ""
# Define your payload/data to send to the image generation API
data = {
"brand_name": brand_name,
"primary_color": primary_color,
"secondary_color": secondary_color,
"description": description,
"target_audience": target_audience,
"font": font,
"heading_text": heading_text or "",
"sub_heading_text": sub_heading_text or "",
"logo_url": logo_base64,
"user_prompt": custom_graphic_prompt,
"image_dimension": image_layout
}
# Make the API call
response = requests.post(API_URL, json=data)
# Ensure the API call was successful
if response.status_code != 200:
print(f"Error {response.status_code}: {response.text}")
return "Error: Unable to fetch image from the external API."
# Create the directory if it doesn't exist
image_directory = "images"
if not os.path.exists(image_directory):
os.makedirs(image_directory)
image_path = f"images/temp_image_{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.png"
with open(image_path, "wb") as image_file:
image_file.write(response.content)
return image_path
content_html = """
<div style="text-align: center; margin-top: 30px;">
<h2>Slidegen Examples</h2>
<div style="display: flex; justify-content: space-around; align-items: center;">
<!-- Displaying one video -->
<video controls width="30%">
<source src="https://cdn-uploads.huggingface.co/production/uploads/644252f59a5bbb07ab7a987a/IxuuqPhmIX3Jggqkeiseb.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
<!-- Displaying two images -->
<img src="https://cdn-uploads.huggingface.co/production/uploads/644252f59a5bbb07ab7a987a/f4xH6ZNx1rVbKzr8jAHmt.png" alt="Image Description 1" style="width: 30%; margin: 0 10px;">
<img src="https://cdn-uploads.huggingface.co/production/uploads/644252f59a5bbb07ab7a987a/A9BoWW2ulZycv0OQaihKO.png" alt="Image Description 2" style="width: 30%; margin: 0 10px;">
</div>
</div>
"""
iface = gr.Interface(
fn=generate_image,
inputs=[
gr.components.Textbox(placeholder="Brand/Company Name", label="Brand Name"),
gr.components.ColorPicker(value="#FFFFFF", label="Primary Color"),
gr.components.ColorPicker(value="#05A592", label="Secondary Color"),
gr.components.Textbox(placeholder="Brief description of your brand and design guidelines", label="Description", lines=2),
gr.components.Textbox(placeholder="Your Brand's target audience", label="Target Audience"),
gr.components.Textbox(placeholder="Google Font Label i.e Rubik", label="Font"),
gr.components.File(label="Logo Image", scale=2, file_types=["jpg", "jpeg", "png", "gif", "bmp"]),
gr.components.Textbox(placeholder="Heading text (not required)", label="Heading Text"),
gr.components.Textbox(placeholder="Paragraph text (not required)", label="Sub Heading Text"),
gr.components.Dropdown(
choices=[
("Select Layout", "750x1334"),
("Mobile Portrait (750x1334)", "750x1334"),
("Mobile Landscape (940x470)", "940x470"),
("Square (2048x2048)", "2048x2048")
],
value="750x1334",
label="Image Layout"
),
gr.components.Textbox(lines=4, placeholder="Enter your custom dall-e 2-3 image prompt here (not required)", value="", label="Custom Graphic Prompt")
],
outputs=[
gr.components.Image(label="Generated Image")
],
title="Slidegen AI - Image generator",
article=content_html,
description="Generate social media creatives from a few prompts",
live=False
)
# iface.queue()
# Run the interface
#trigger
iface.launch()
|