import gradio as gr import requests import io import random import os import time from PIL import Image from deep_translator import GoogleTranslator # Project by Nymbo API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell" API_TOKEN = os.getenv("HF_READ_TOKEN") headers = {"Authorization": f"Bearer {API_TOKEN}"} timeout = 100 def convert_to_png(image): """Convert any image format to true PNG format""" png_buffer = io.BytesIO() if image.mode == 'RGBA': # If image has alpha channel, save as PNG with transparency image.save(png_buffer, format='PNG', optimize=True) else: # Convert to RGB first if not in RGB/RGBA mode if image.mode != 'RGB': image = image.convert('RGB') image.save(png_buffer, format='PNG', optimize=True) png_buffer.seek(0) return Image.open(png_buffer) def query(prompt, is_negative=False, steps=4, cfg_scale=7, sampler="DPM++ 2M Karras", seed=-1, strength=0.7, width=1024, height=1024): if not prompt: return None key = random.randint(0, 999) API_TOKEN = random.choice([os.getenv("HF_READ_TOKEN")]) headers = {"Authorization": f"Bearer {API_TOKEN}"} payload = { "inputs": prompt, "is_negative": is_negative, "steps": steps, "cfg_scale": cfg_scale, "seed": seed if seed != -1 else random.randint(1, 1000000000), "strength": strength, "parameters": {"width": width, "height": height} } try: response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout) response.raise_for_status() # Convert directly to PNG without intermediate format img = Image.open(io.BytesIO(response.content)) png_img = convert_to_png(img) print(f'\033[1mGeneration {key} completed as PNG!\033[0m') return png_img except requests.exceptions.RequestException as e: print(f"API Error: {e}") if hasattr(e, 'response') and e.response: if e.response.status_code == 503: raise gr.Error("503: Model is loading, please try again later") raise gr.Error(f"{e.response.status_code}: {e.response.text}") raise gr.Error("Network error occurred") except Exception as e: print(f"Image processing error: {e}") raise gr.Error(f"Image processing failed: {str(e)}") # Light theme CSS css = """ #app-container { max-width: 800px; margin: 0 auto; padding: 20px; background: #ffffff; } #prompt-text-input, #negative-prompt-text-input { font-size: 14px; background: #f9f9f9; } #gallery { min-height: 512px; background: #ffffff; border: 1px solid #e0e0e0; } #gen-button { margin: 10px 0; background: #4CAF50; color: white; } .accordion { background: #f5f5f5; border: 1px solid #e0e0e0; } h1 { color: #333333; } """ with gr.Blocks(theme=gr.themes.Default(primary_hue="green"), css=css) as app: gr.HTML("