akhaliq's picture
akhaliq HF staff
Update app.py
fe37c2f verified
import gradio as gr
import fal_client
import requests
from PIL import Image
from io import BytesIO
import traceback
import os
def generate_image(api_key, prompt, image_size='landscape_4_3', num_images=1):
try:
# Set the API key as an environment variable
os.environ['FAL_KEY'] = api_key
handler = fal_client.submit(
"fal-ai/flux-pro/v1.1",
arguments={
"prompt": prompt,
"image_size": image_size,
"num_images": num_images,
},
)
result = handler.get()
images = []
for img_info in result['images']:
img_url = img_info['url']
# Download the image
response = requests.get(img_url)
img = Image.open(BytesIO(response.content))
images.append(img)
return [gr.update(value=images, visible=True), gr.update(visible=False)]
except Exception as e:
error_msg = f"Error: {str(e)}\n\nTraceback:\n{traceback.format_exc()}"
print(error_msg)
return [gr.update(visible=False), gr.update(value=error_msg, visible=True)]
with gr.Blocks() as demo:
gr.Markdown("# FLUX1.1 [pro] Text-to-Image Generator")
gr.Markdown("get your api key at https://fal.ai/dashboard/keys")
with gr.Row():
api_key = gr.Textbox(label="API Key", type="password", placeholder="Enter your API key here")
with gr.Row():
prompt = gr.Textbox(label="Prompt", lines=2, placeholder="Enter your prompt here")
with gr.Row():
image_size = gr.Dropdown(
label="Image Size",
choices=["square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9"],
value="landscape_4_3"
)
num_images = gr.Slider(label="Number of Images", minimum=1, maximum=4, step=1, value=1)
generate_btn = gr.Button("Generate Image")
output_gallery = gr.Gallery(label="Generated Images", columns=2, rows=2)
error_output = gr.Textbox(label="Error Message", visible=False)
generate_btn.click(
fn=generate_image,
inputs=[api_key, prompt, image_size, num_images],
outputs=[output_gallery, error_output]
)
if __name__ == "__main__":
demo.launch()