File size: 5,129 Bytes
e547b24
 
 
 
 
5329473
e547b24
 
 
 
 
919ba89
e547b24
 
 
 
5329473
 
e547b24
 
 
 
c7e1ae3
 
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
 
 
 
 
 
5329473
e547b24
 
 
 
6f5a32e
 
e547b24
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
a990e71
 
 
 
 
 
 
 
 
 
5329473
a990e71
 
 
5329473
 
 
 
 
 
 
 
 
 
 
 
 
a990e71
 
 
5329473
a990e71
 
5329473
 
a990e71
 
5329473
 
 
 
 
 
a990e71
 
 
 
5329473
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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-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):
    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,
        "seed": seed if seed != -1 else random.randint(1, 1000000000),
        "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: 2px solid black; /* Borde negro en botones */
}

button.primary {
    background-color: green; /* Fondo verde para el bot贸n 'Generate' */
    color: white; /* Texto blanco 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="Prompt", placeholder="Enter a prompt here", lines=2, elem_id="prompt-text-input")
            negative_prompt = gr.Textbox(label="Negative Prompt", placeholder="What should not be in the image", 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="Sampling steps", value=35, minimum=1, maximum=100, step=1)
            cfg = gr.Slider(label="CFG Scale", value=7, minimum=1, maximum=20, step=1)
            method = gr.Radio(label="Sampling method", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"])
            strength = gr.Slider(label="Strength", value=0.7, minimum=0, maximum=1, step=0.001)
            seed = gr.Slider(label="Seed", value=-1, minimum=-1, maximum=1000000000, step=1)

            with gr.Row(elem_id="button-row"):
                clear_button = gr.Button("Clear", elem_id="clear-button", variant="secondary")
                generate_button = gr.Button("Generate", 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, seed, strength], outputs=image_output)
    
    def clear_prompt():
        return gr.Textbox.update(value="")
    
    clear_button.click(clear_prompt, inputs=[], outputs=text_prompt)

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