Flux_BATUTO / app.py
ivanoctaviogaitansantos's picture
Update app.py
45de435 verified
raw
history blame
2.98 kB
import os
from huggingface_hub import InferenceClient
import gradio as gr
from PIL import Image, ImageDraw
# === CONFIGURACIÓN DEL TOKEN ===
HF_TOKEN = os.environ.get("HF_TOKEN")
if not HF_TOKEN:
raise ValueError("HF_TOKEN no encontrado. Configúralo en los Secrets del Space.")
client = InferenceClient(token=HF_TOKEN)
# === MODELO ÚNICO: FLUX.1-schnell (público, sin gate) ===
MODELO = "black-forest-labs/FLUX.1-schnell"
# === FUNCIÓN DE GENERACIÓN CON MANEJO DE ERRORES ===
def generar_imagen(prompt):
negative_prompt = "low quality, blurry, cartoon, lowres, deformed, mutation, extra limbs, bad anatomy, distorted, unnatural colors, pixelated, watermark, text, logo"
try:
print(f"Generando imagen con FLUX.1-schnell... Prompt: {prompt[:50]}...")
image = client.text_to_image(
model=MODELO,
prompt=prompt,
negative_prompt=negative_prompt,
width=576, # 9:16
height=1024, # 9:16
guidance_scale=3.5,
num_inference_steps=4 # schnell es rápido
)
return image
except Exception as e:
print(f"Error en generación: {e}")
# Imagen de error roja
img = Image.new("RGB", (576, 1024), "#8B0000")
draw = ImageDraw.Draw(img)
try:
draw.text((20, 480), f"Error: {str(e)[:80]}", fill="white", font_size=30)
except:
draw.text((20, 480), "Error al generar imagen", fill="white")
return img
# === INTERFAZ GRADIO ===
with gr.Blocks(title="FLUX 9:16 Generator") as demo:
gr.Markdown("# Generador de Imágenes 9:16 con FLUX.1-schnell")
gr.Markdown("**Formato: 576x1024 px (ideal para móviles)**")
gr.Markdown("_Negative prompt automático: evita baja calidad, deformaciones, texto, etc._")
with gr.Row():
with gr.Column(scale=2):
prompt_input = gr.Textbox(
label="Describe tu imagen (en inglés para mejores resultados)",
placeholder="Ej: A futuristic city at sunset, cyberpunk style, vibrant colors, detailed, 9:16",
lines=4
)
btn = gr.Button("Generar Imagen", variant="primary", size="lg")
with gr.Column(scale=1):
output_image = gr.Image(
label="Imagen Generada",
type="pil",
height=600
)
# Botón → función
btn.click(fn=generar_imagen, inputs=prompt_input, outputs=output_image)
# Ejemplos
gr.Examples(
examples=[
["A serene Japanese garden with cherry blossoms, koi pond, morning mist, ultra-realistic, 9:16"],
["Cyberpunk girl with neon hair, rain, reflections on wet street, cinematic lighting, 9:16"],
["Minimalist product shot of a luxury watch on black marble, studio lighting, 9:16"]
],
inputs=prompt_input
)
# === LANZAMIENTO ===
if __name__ == "__main__":
demo.launch()