File size: 4,156 Bytes
e547b24
 
 
 
 
 
 
 
 
 
 
919ba89
e547b24
 
 
 
 
0ecf720
e547b24
 
 
 
c7e1ae3
 
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
 
 
 
 
 
 
 
 
 
 
6f5a32e
 
e547b24
 
 
 
 
 
 
6f5a32e
e547b24
 
6f5a32e
e547b24
 
0ecf720
54b5a7b
0ecf720
 
 
 
54b5a7b
211de11
deb7544
 
54b5a7b
02fa85d
0ecf720
 
 
 
 
 
 
02fa85d
 
deb7544
 
 
0ecf720
 
 
 
 
 
 
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
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

with gr.Blocks() 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():
                clear_button = gr.Button("Clear", elem_id="clear-button", variant="secondary", style={"border-color": "black", "border-width": "2px"})
                generate_button = gr.Button("Generate", elem_id="generate-button", variant="primary", style={"border-color": "black", "border-width": "2px", "background-color": "green", "color": "white"})

        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)