File size: 5,613 Bytes
e547b24
 
 
 
 
 
 
 
 
 
919ba89
e547b24
 
 
 
3141340
5329473
e547b24
 
 
 
c7e1ae3
 
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
 
 
 
 
5329473
e547b24
 
 
 
6f5a32e
 
e547b24
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
a990e71
 
 
 
 
 
 
 
 
 
5329473
a990e71
 
 
5329473
 
3141340
5329473
 
 
 
f41cd41
5329473
 
 
 
 
a990e71
 
 
5329473
a990e71
 
5329473
 
a990e71
 
5329473
 
 
 
 
 
a990e71
 
 
 
5329473
 
 
 
 
 
 
 
 
bcff34a
3141340
 
3eb21d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3141340
5329473
f41cd41
5329473
 
 
 
3141340
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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", 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: 600px;
    margin-left: auto;
    margin-right: auto;
}

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

button {
    background-color: #f5f5f5; /* Fondo gris claro */
    color: #333333; /* Texto gris oscuro */
    border: 1px solid black; /* Borde negro en botones */
}

button.primary {
    background-color: green; /* Fondo verde para el botón 'Generate' */
    color: black; /* Texto negro en el botón 'Generate' */
}

button.secondary {
    background-color: #f5f5f5; /* Fondo gris claro para el botón 'Clear' */
    color: #333333; /* Texto gris oscuro en el botón 'Clear' */
}

button:hover {
    background-color: #e0e0e0; /* Fondo gris más oscuro en hover */
}

h1, h2, h3, h4, h5, h6 {
    color: #333333; /* Texto gris oscuro en encabezados */
}

@media (max-width: 768px) {
    .button-row {
        display: flex;
        flex-direction: column;
        gap: 10px;
    }
}
"""

with gr.Blocks(css=css) as app:
    gr.HTML("""
    <center>
        <h1>Dream Generator with Flux</h1>
        <h2>Transforma tus sueños en imágenes vibrantes con un solo clic.</h2>
    </center>
    """)
    
    with gr.Row():
        with gr.Column(scale=1):
            text_prompt = gr.Textbox(label="¿Cuál fue tu sueño?", placeholder="Describe lo que soñaste, no omitas ningún detalle.", lines=2, elem_id="prompt-text-input")
            
            with gr.Accordion("Opciones Avanzadas", open=False):
                negative_prompt = gr.Textbox(
                    label="¿Qué elementos no deseas que se plasmen de tu sueño?", 
                    placeholder="Describe en detalle lo que quieres que aparezca.", 
                    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="Profundidad del sueño (Pasos de muestreo)", 
                    value=35, 
                    minimum=1, 
                    maximum=100, 
                    step=1
                )
                cfg = gr.Slider(
                    label="Claridad del sueño (Nivel de detalle)", 
                    value=7, 
                    minimum=1, 
                    maximum=20, 
                    step=1
                )
                method = gr.Radio(
                    label="Estilo de sueño (Método de muestreo)", 
                    value="DPM++ 2M Karras", 
                    choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"]
                )
                strength = gr.Slider(
                    label="Intensidad del sueño (Fuerza de transformación)", 
                    value=0.7, 
                    minimum=0, 
                    maximum=1, 
                    step=0.001
                )
            
            with gr.Row(elem_id="button-row"):
                generate_button = gr.Button("QUIERO VER MI SUEÑO", elem_id="generate-button", variant="primary")

        with gr.Column(scale=1):
            image_output = gr.Image(type="pil", label="Image Output", elem_id="gallery")

    generate_button.click(query, inputs=[text_prompt, negative_prompt, steps, cfg, method, strength], outputs=image_output)

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