|
import gradio as gr |
|
import fal_client |
|
import time |
|
|
|
def generate_image(api_key, prompt, image_size, num_images, enable_safety_checker, safety_tolerance): |
|
try: |
|
|
|
fal_client.api_key = api_key |
|
|
|
|
|
image_size_mapping = { |
|
"Square HD": "square_hd", |
|
"Square": "square", |
|
"Portrait 4:3": "portrait_4_3", |
|
"Portrait 16:9": "portrait_16_9", |
|
"Landscape 4:3": "landscape_4_3", |
|
"Landscape 16:9": "landscape_16_9" |
|
} |
|
|
|
|
|
safety_tolerance_mapping = { |
|
"1 (Most Strict)": "1", |
|
"2": "2", |
|
"3": "3", |
|
"4": "4", |
|
"5 (Most Permissive)": "5" |
|
} |
|
|
|
handler = fal_client.submit( |
|
"fal-ai/flux-pro/v1.1", |
|
arguments={ |
|
"prompt": prompt, |
|
"image_size": image_size_mapping[image_size], |
|
"num_images": num_images, |
|
"enable_safety_checker": enable_safety_checker, |
|
"safety_tolerance": safety_tolerance_mapping[safety_tolerance] |
|
}, |
|
) |
|
|
|
|
|
while True: |
|
status = handler.status() |
|
if status["status"] == "completed": |
|
break |
|
elif status["status"] == "failed": |
|
return "The image generation failed." |
|
time.sleep(1) |
|
|
|
result = handler.get() |
|
images = [] |
|
for image_info in result["images"]: |
|
image_url = image_info["url"] |
|
images.append(image_url) |
|
|
|
return images if len(images) > 1 else images[0] |
|
except Exception as e: |
|
return str(e) |
|
|
|
|
|
iface = gr.Interface( |
|
fn=generate_image, |
|
inputs=[ |
|
gr.Textbox(label="API Key", placeholder="Enter your API key here...", type="password"), |
|
gr.Textbox(label="Prompt", placeholder="Enter your prompt here..."), |
|
gr.Dropdown( |
|
choices=["Landscape 4:3", "Landscape 16:9", "Portrait 4:3", "Portrait 16:9", "Square", "Square HD"], |
|
value="Landscape 4:3", |
|
label="Image Size" |
|
), |
|
gr.Slider(minimum=1, maximum=4, step=1, value=1, label="Number of Images"), |
|
gr.Checkbox(value=True, label="Enable Safety Checker"), |
|
gr.Dropdown( |
|
choices=["1 (Most Strict)", "2", "3", "4", "5 (Most Permissive)"], |
|
value="2", |
|
label="Safety Tolerance" |
|
), |
|
], |
|
outputs=gr.Gallery(label="Generated Images").style(grid=[2], height="auto"), |
|
title="FLUX1.1 [pro] Image Generation", |
|
description="Generate images using the FLUX1.1 [pro] model by providing a text prompt and your API key." |
|
) |
|
|
|
iface.launch() |
|
|