Spaces:
Sleeping
Sleeping
File size: 3,764 Bytes
5e5fd54 72398d0 9c51543 8182768 79251e5 72398d0 8a226e2 31520f0 8a226e2 d4bdcdb 0d3242a 683915d f94dc93 c95b55d 9c51543 314a6d7 9c51543 72398d0 c95b55d 72398d0 8182768 314a6d7 72398d0 8182768 72398d0 8182768 febdcdd c95b55d d4bdcdb 9c51543 89dc556 9c51543 314a6d7 9c51543 d4bdcdb febdcdd 9c51543 d4bdcdb 9c51543 d4bdcdb 8a226e2 d4bdcdb 9c51543 d4bdcdb 9c51543 8182768 9c51543 8182768 9c51543 8182768 9c51543 8182768 314a6d7 8182768 79251e5 8182768 9c51543 c95b55d 9c51543 c95b55d 4c8d63a c95b55d 8182768 9c51543 72398d0 5e5fd54 9c51543 314a6d7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import gradio as gr
import requests
from io import BytesIO
from PIL import Image
import os
import tempfile
import mimetypes
TOKEN = os.getenv("TOKEN0")
API_URL = os.getenv("API_URL")
token_id = 0
tokens_tried = 0
no_of_accounts = 11
model_id = os.getenv("MODEL_ID")
def get_image_from_url(url):
"""
Fetches and returns an image from a given URL, converting to PNG if needed.
"""
try:
response = requests.get(url, stream=True)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
return image, url # Return the image and the URL
except requests.exceptions.RequestException as e:
return f"Error fetching image: {e}", None
except Exception as e:
return f"Error processing image: {e}", None
def generate_image(prompt, aspect_ratio, realism):
global token_id
global TOKEN
global tokens_tried
global no_of_accounts
global model_id
payload = {
"id": model_id,
"inputs": [prompt, aspect_ratio, str(realism).lower()],
}
headers = {"Authorization": f"Bearer {TOKEN}"}
try:
response_data = requests.post(API_URL, json=payload, headers=headers).json()
if "error" in response_data:
if 'error 429' in response_data['error']:
if tokens_tried < no_of_accounts:
token_id = (token_id + 1) % (no_of_accounts)
tokens_tried += 1
TOKEN = os.getenv(f"TOKEN{token_id}")
response_data = generate_image(prompt, aspect_ratio, realism)
tokens_tried = 0
return response_data
return "No credits available", None
return response_data, None
elif "output" in response_data:
url = response_data['output']
image, url = get_image_from_url(url)
return image, url # Return the image and the URL
else:
return "Error: Unexpected response from server", None
except Exception as e:
return f"Error", None
def download_image(image_url):
if not image_url:
return None # Return None if image_url is empty
try:
response = requests.get(image_url, stream=True)
response.raise_for_status()
# Get the content type from the headers
content_type = response.headers.get('content-type')
extension = mimetypes.guess_extension(content_type)
if not extension:
extension = ".png" # Default to .png if can't determine the extension
# Create a temporary file with the correct extension
with tempfile.NamedTemporaryFile(suffix=extension, delete=False) as tmp_file:
for chunk in response.iter_content(chunk_size=8192):
tmp_file.write(chunk)
temp_file_path = tmp_file.name
return temp_file_path
except Exception as e:
return None
# Define the Gradio interface
interface = gr.Interface(
fn=generate_image,
inputs=[
gr.Textbox(label="Prompt", placeholder="Describe the image you want to generate"),
gr.Radio(
choices=["1:1", "3:4", "4:3", "9:16", "16:9", "9:21", "21:9"],
label="Aspect Ratio",
value="16:9" # Default value
),
gr.Checkbox(label="Realism", value=False), # Checkbox for realism (True/False)
],
outputs=[
gr.Image(type="pil"), # Output image
gr.File(label="Download Image", file_types = [".png", ".jpg", ".jpeg"]), # Output File to be downloaded
],
title="Image Generator",
description="Provide a prompt, select an aspect ratio, and set realism to generate an image.",
)
# Launch the interface
interface.launch() |