import gradio as gr import requests import io import random import os 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-dev" API_TOKEN = os.getenv("HF_READ_TOKEN") headers = {"Authorization": f"Bearer {API_TOKEN}"} timeout = 100 def query(prompt, is_negative=False, steps=30, cfg_scale=7, strength=0.7): if not prompt: return None key = random.randint(0, 999) # Detectar el idioma del prompt y traducirlo al inglés translator = GoogleTranslator(target='en') try: prompt = translator.translate(prompt) except Exception as e: print(f"Error during translation: {e}") return None print(f'\033[1mGeneration {key} translation:\033[0m {prompt}') prompt = f"{prompt} | ultra detail, ultra elaboration, ultra quality, perfect." print(f'\033[1mGeneration {key}:\033[0m {prompt}') payload = { "inputs": prompt, "is_negative": is_negative, "steps": steps, "cfg_scale": cfg_scale, "strength": strength } response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout) if response.status_code != 200: print(f"Error: Failed to get image. Response status: {response.status_code}") print(f"Response content: {response.text}") if response.status_code == 503: raise gr.Error(f"{response.status_code} : The model is being loaded") raise gr.Error(f"{response.status_code}") try: image_bytes = response.content image = Image.open(io.BytesIO(image_bytes)) print(f'\033[1mGeneration {key} completed!\033[0m ({prompt})') return image except Exception as e: print(f"Error when trying to open the image: {e}") return None css = """ #app-container { max-width: 100%; margin: 0 auto; padding: 20px; overflow-y: auto; /* Asegura la barra de desplazamiento vertical si el contenido es demasiado alto */ height: 100vh; /* Utiliza el 100% de la altura de la ventana de visualización */ box-sizing: border-box; /* Incluye el padding y el borde en el tamaño total */ } input, textarea, select { background-color: #f5f5f5; color: #333333; border: 1px solid #cccccc; width: calc(100% - 40px); box-sizing: border-box; padding-right: 40px; } input[type="text"] { position: relative; } input[type="text"]::after { content: "✕"; position: absolute; right: 10px; top: 50%; transform: translateY(-50%); cursor: pointer; color: #666; } button { background-color: #f5f5f5; color: #333333; border: 1px solid black; width: 100%; box-sizing: border-box; padding: 10px; } button.primary { background-color: green; color: black; } button.secondary { background-color: #f5f5f5; color: #333333; } button:hover { background-color: #e0e0e0; } h1, h2, h3, h4, h5, h6 { color: #333333; } @media (max-width: 768px) { .button-container { display: flex; flex-direction: column; align-items: center; } .button-container button { width: auto; margin-top: 10px; } #reset-button { display: none; /* Oculta el botón de reinicio en pantallas móviles */ } } @media (min-width: 769px) { .button-container { display: flex; justify-content: flex-end; } .button-container button { width: auto; } } """ examples = [ "Minions con gafas atrapados en un bloque de hielo transparente, mostrando expresiones sorprendidas. Hielo escarchado y agrietado refleja luz azul. Copos de nieve caen suavemente en un paisaje invernal.", "Un caballo castaño dorado trotando alegremente en realismo 8K contra un cielo vibrante con nubes multicolores en azul, rosa y naranja.", "El casco de Kylo Ren en forma de gato con texturas rugosas. Renderizado 3D ultra detallado con iluminación de borde y texturas hiper-realistas. Tonos pulidos de los colores de Kylo Ren, renderizado en 8K con fondo contrastante." ] with gr.Blocks(css=css) as app: gr.HTML("""