MindCraft24729's picture
Update app.py
31252ab verified
raw
history blame
2.45 kB
import gradio as gr
import requests
import random
from io import BytesIO
from PIL import Image, ImageDraw
import os
import time
# Base URL from HF secret or fallback
BASE_URL = os.environ.get('POLLINATIONS_URL') # e.g. "https://image.pollinations.ai/prompt/"
# Load watermark logo (CodeHubb logo)
WATERMARK_PATH = "CodeHubb.png"
watermark = Image.open(WATERMARK_PATH).convert("RGBA")
watermark = watermark.resize((150, 40)) # Resize as needed
def add_watermark(image):
image = image.convert("RGBA")
# Create a transparent layer and paste watermark
layer = Image.new("RGBA", image.size, (0, 0, 0, 0))
layer.paste(watermark, (10, 10)) # Top-left corner with 10px padding
final_image = Image.alpha_composite(image, layer)
return final_image.convert("RGB")
def generate_image(prompt, model):
if not prompt:
raise gr.Error("Please enter a prompt.")
seed = random.randint(1, 999999)
url = f"{BASE_URL}{prompt}?width=2048&height=2048&seed={seed}&nologo=true&model={model}"
max_retries = 2
for attempt in range(max_retries):
try:
response = requests.get(url, stream=True)
response.raise_for_status()
img = Image.open(BytesIO(response.content))
watermarked_img = add_watermark(img)
return watermarked_img
except requests.exceptions.HTTPError as e:
if response.status_code == 500 and 'Access to kontext model' in response.text:
if attempt < max_retries - 1:
time.sleep(1)
continue
raise gr.Error("Access denied for kontext model (limit reached). Try turbo/flux or authenticate at pollinations.ai.")
else:
raise gr.Error(f"Error: {response.status_code} - {response.text}")
except Exception as e:
raise gr.Error(f"Unexpected error: {str(e)}")
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# CodeHubb AI Image Generator\n**Design. Develop. Dominate.**")
prompt_input = gr.Textbox(label="Prompt", placeholder="e.g., A futuristic cityscape at night")
model_input = gr.Dropdown(choices=["kontext", "turbo", "flux"], label="Model", value="turbo")
generate_btn = gr.Button("Generate")
output_image = gr.Image(label="Generated Image")
generate_btn.click(generate_image, inputs=[prompt_input, model_input], outputs=output_image)
demo.queue()
demo.launch()