akhaliq's picture
akhaliq HF staff
Update app.py
3b40c15 verified
import os
import requests
import time
import gradio as gr
from PIL import Image
from io import BytesIO
def generate_image(prompt, width, height, api_key):
headers = {
'accept': 'application/json',
'x-key': api_key,
'Content-Type': 'application/json',
}
json_data = {
'prompt': prompt,
'width': int(width),
'height': int(height),
}
# Create image generation request
response = requests.post(
'https://api.bfl.ml/v1/flux-pro-1.1',
headers=headers,
json=json_data,
)
if response.status_code != 200:
return f"Error: {response.status_code} {response.text}"
request = response.json()
request_id = request.get("id")
if not request_id:
return "Failed to get request ID."
# Poll for result
while True:
time.sleep(0.5)
result_response = requests.get(
'https://api.bfl.ml/v1/get_result',
headers={
'accept': 'application/json',
'x-key': api_key,
},
params={
'id': request_id,
},
)
if result_response.status_code != 200:
return f"Error: {result_response.status_code} {result_response.text}"
result = result_response.json()
status = result.get("status")
if status == "Ready":
image_url = result['result'].get('sample')
if not image_url:
return "No image URL found in the result."
# Fetch the image from the URL
image_response = requests.get(image_url)
if image_response.status_code != 200:
return f"Failed to fetch image: {image_response.status_code}"
image = Image.open(BytesIO(image_response.content))
return image
elif status == "Failed":
return "Image generation failed."
elif status == "Pending":
pass # Continue polling
else:
return f"Unexpected status: {status}"
# Create Gradio interface with sliders for width and height
iface = gr.Interface(
fn=generate_image,
inputs=[
gr.Textbox(
label="Prompt",
placeholder="Describe the image you want to generate",
lines=3,
),
gr.Slider(
label="Width",
minimum=256,
maximum=1440,
step=32,
value=1024,
),
gr.Slider(
label="Height",
minimum=256,
maximum=1440,
step=32,
value=768,
),
gr.Textbox(
label="API Key",
type="password",
placeholder="Enter your BFL API key",
),
],
outputs="image",
title="BFL Image Generation Demo",
description="""
Generate images using the BFL FLUX 1.1 [pro] model.
**Instructions:**
1. Enter a descriptive prompt for the image you want to generate.
2. Use the sliders to specify the width and height (in pixels) for the image. Values must be multiples of 32.
3. Enter your BFL API key. You can obtain one from [BFL API Portal](https://api.bfl.ml).
4. Click "Submit" to generate the image.
**Note:** Ensure you have sufficient credits and adhere to the API usage limits.
"""
)
iface.launch()