a / app.py
drdudddd's picture
Rename ap1p.py to app.py
403f9ac verified
import gradio as gr
from gradio_client import Client, handle_file
import re
# Instantiate a Client object from gradio_client pointing to the 'selfit-camera/Omni-Image-Editor' Space.
client = Client("selfit-camera/Omni-Image-Editor")
# Define a Python function for text-to-image generation
def generate_image(prompt):
"""
Generate an image from a text prompt using the Omni Image Editor API.
Args:
prompt (str): Text description of the image to generate
Returns:
str: URL of the generated image or error message
"""
try:
# Call the client.predict() method with the user's prompt, aspect_ratio='16:9', and api_name='/text_to_image_interface'.
result = client.predict(
prompt=prompt,
aspect_ratio="16:9",
api_name="/text_to_image_interface"
)
# The predict method returns a tuple. The first element of this tuple is an HTML string containing the image.
# Extract the image URL from this HTML string.
html_string = result[0]
match = re.search(r"src='([^']+)'", html_string)
if match:
image_url = match.group(1)
return image_url
else:
# Handle cases where the URL might not be found
return "https://via.placeholder.com/400x200?text=Error:Image+Not+Found"
except Exception as e:
return f"Error generating image: {str(e)}"
# Define a Python function for image editing
def edit_image(input_image, edit_prompt):
"""
Edit an image based on a text prompt using the Omni Image Editor API.
Args:
input_image (str): Path to the image file or image object
edit_prompt (str): Text description of the edits to apply
Returns:
str: URL of the edited image or error message
"""
try:
if input_image is None:
return "Please upload an image first"
# Use handle_file to properly handle the image upload
result = client.predict(
input_image=handle_file(input_image),
prompt=edit_prompt,
api_name="/edit_image_interface"
)
# Extract the image URL from the HTML response
if isinstance(result, tuple) and len(result) > 0:
html_string = result[0]
match = re.search(r"src='([^']+)'", html_string)
if match:
image_url = match.group(1)
return image_url
else:
return "https://via.placeholder.com/400x200?text=Error:Image+Not+Found"
else:
return str(result)
except Exception as e:
return f"Error editing image: {str(e)}"
# Create a Gradio application using gr.Blocks for more granular control.
with gr.Blocks(
title='Omni Image Editor with Gradio',
theme=gr.themes.Soft()
) as demo:
gr.Markdown("# Omni Image Editor Studio")
gr.Markdown("Generate images from text descriptions or edit existing images with AI-powered tools.")
with gr.Tabs():
# Text-to-Image Tab
with gr.TabItem("Text to Image Generator"):
gr.Markdown("### Generate Images from Text")
gr.Markdown("Describe the image you want to generate in detail for best results.")
with gr.Row():
with gr.Column():
prompt_input = gr.Textbox(
label='Image Description',
placeholder='e.g., A futuristic city at sunset with flying cars, neon lights, cyberpunk style, high quality',
lines=3
)
generate_btn = gr.Button("🎨 Generate Image", variant="primary")
generated_image = gr.Image(label='Generated Image', type='filepath')
# Bind the generate_image function to the button click event
generate_btn.click(
fn=generate_image,
inputs=[prompt_input],
outputs=[generated_image]
)
# Image Editing Tab
with gr.TabItem("Image Editor"):
gr.Markdown("### Edit Images with AI")
gr.Markdown("Upload an image and describe the changes you want to make.")
with gr.Row():
with gr.Column():
input_image = gr.Image(
label='Upload Image',
type='filepath'
)
with gr.Row():
with gr.Column():
edit_prompt = gr.Textbox(
label='Edit Instructions',
placeholder='e.g., Change the sky to sunset colors, add stars, increase contrast',
lines=3
)
edit_btn = gr.Button("✨ Edit Image", variant="primary")
edited_image = gr.Image(label='Edited Image', type='filepath')
# Bind the edit_image function to the button click event
edit_btn.click(
fn=edit_image,
inputs=[input_image, edit_prompt],
outputs=[edited_image]
)
# Launch the Gradio application.
if __name__ == "__main__":
demo.launch(share=True)