File size: 5,469 Bytes
e547b24
 
 
 
 
 
 
 
 
 
919ba89
e547b24
 
 
 
5db9fa6
 
e547b24
 
 
 
c7e1ae3
 
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
 
 
 
 
 
5db9fa6
 
 
e547b24
 
 
 
6f5a32e
 
e547b24
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
a990e71
 
 
 
 
5db9fa6
 
a990e71
 
 
 
 
5db9fa6
a990e71
 
 
5db9fa6
 
 
 
a990e71
 
 
5db9fa6
a990e71
 
5db9fa6
 
a990e71
 
5db9fa6
 
a990e71
 
 
 
5db9fa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e547b24
c7e1ae3
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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, sampler="DPM++ 2M Karras", seed=-1, strength=0.7, width=1024, height=1024):
    if prompt == "" or prompt is None:
        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,
        "seed": seed if seed != -1 else random.randint(1, 1000000000),
        "strength": strength,
        "width": width,
        "height": height
    }

    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: 600px;
    margin-left: auto;
    margin-right: auto;
    background-color: #ffffff; /* Fondo blanco */
    color: #333333; /* Texto gris oscuro */
}

input, textarea, select {
    background-color: #f5f5f5; /* Fondo gris claro para inputs */
    color: #333333; /* Texto gris oscuro en inputs */
    border: 1px solid #333333; /* Borde negro en inputs */
}

button {
    background-color: #28a745; /* Fondo verde */
    color: #ffffff; /* Texto blanco en botones */
    border: 1px solid #333333; /* Borde negro en botones */
    border-radius: 4px; /* Bordes redondeados */
}

button:hover {
    background-color: #218838; /* Verde oscuro en hover */
}

h1 {
    color: #333333; /* Texto gris oscuro en h1 */
}

h2 {
    color: #333333; /* Texto gris oscuro en h2 */
}
"""

with gr.Blocks(css=css) as app:
    gr.HTML("<center><h1>Generador de Sueños con Flux</h1></center>")
    gr.HTML("<center><h2>Transforma tus sueños en imágenes vibrantes con un solo clic.</h2></center>")
    with gr.Column(elem_id="app-container"):
        with gr.Row():
            with gr.Column():
                text_prompt = gr.Textbox(label="Prompt", placeholder="Introduce un prompt aquí", lines=2, elem_id="prompt-text-input")
                with gr.Accordion("Opciones avanzadas", open=False):
                    negative_prompt = gr.Textbox(label="Prompt Negativo", placeholder="Qué no debería aparecer en la imagen", value="(deformed, distorted, disfigured), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, misspellings, typos", lines=3, elem_id="negative-prompt-text-input")
                    steps = gr.Slider(label="Pasos de muestreo", value=35, minimum=1, maximum=100, step=1)
                    cfg = gr.Slider(label="Escala CFG", value=7, minimum=1, maximum=20, step=1)
                    method = gr.Radio(label="Método de muestreo", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"])
                    strength = gr.Slider(label="Fuerza", value=0.7, minimum=0, maximum=1, step=0.001)
                    seed = gr.Slider(label="Semilla", value=-1, minimum=-1, maximum=1000000000, step=1)
                    
                    image_size = gr.Dropdown(
                        label="Tamaño de Imagen",
                        choices=[
                            "4:3 (1024x768 px)",
                            "16:9 (1920x1080 px)",
                            "1:1 (1080x1080 px)",
                            "1:1 (500x500 px)",
                            "9:16 (720x1280 px)",
                            "9:16 (1080x1920 px)"
                        ],
                        value="16:9 (1920x1080 px)"
                    )

            with gr.Column():
                with gr.Row():
                    generate_button = gr.Button("Generar", elem_id="generate-button", variant="primary")
                with gr.Row():
                    image_output = gr.Image(type="pil", label="Imagen de Salida", elem_id="gallery")
        
        generate_button.click(query, inputs=[text_prompt, negative_prompt, steps, cfg, method, seed, strength, image_size], outputs=image_output)

app.launch(show_api=False, share=False)