akhaliq's picture
akhaliq HF staff
Create app.py
ad30d11 verified
raw
history blame
2.96 kB
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
iface = gr.Interface(
fn=generate_image,
inputs=[
gr.Textbox(label="Prompt", placeholder="Describe the image you want to generate"),
gr.Number(label="Width", value=512),
gr.Number(label="Height", value=512),
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. Specify the width and height (in pixels) for the image.
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()