File size: 4,362 Bytes
0cfb4a5
d4fba6d
0dec378
 
de6051a
0dec378
0a67e9a
 
a484b84
d4fba6d
2fc432b
 
 
1a52ee5
e3be785
219d097
0dec378
219d097
20ffdd2
0dec378
79f1585
 
e3be785
219d097
e3be785
 
 
 
219d097
2fc432b
219d097
 
 
 
 
 
e3be785
219d097
e3be785
219d097
1a52ee5
e3be785
219d097
e3be785
79024bb
2fc432b
 
 
e3be785
 
 
 
 
 
 
 
de6051a
219d097
2fc432b
 
 
 
 
e3be785
219d097
e3be785
 
 
 
 
 
 
79f1585
e3be785
 
 
 
 
 
79f1585
e3be785
 
 
 
 
 
2fc432b
e3be785
 
 
 
 
 
 
 
 
 
 
 
 
219d097
 
 
 
 
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
import os
import gradio as gr
import numpy as np
import random
from huggingface_hub import AsyncInferenceClient
from translatepy import Translator
import requests
import re
import asyncio
from PIL import Image
from gradio_client import Client, handle_file
from huggingface_hub import login
from gradio_imageslider import ImageSlider


# Configuraci贸n inicial
translator = Translator()
HF_TOKEN = os.environ.get("HF_TOKEN")
basemodel = "black-forest-labs/FLUX.1-schnell"
MAX_SEED = np.iinfo(np.int32).max
CSS = "footer { visibility: hidden; }"
JS = "function () { gradioURL = window.location.href; if (!gradioURL.endsWith('?__theme=dark')) { window.location.replace(gradioURL + '?__theme=dark'); } }"

# Funci贸n para habilitar LoRA
def enable_lora(lora_add): 
    return basemodel if not lora_add else lora_add


# Funci贸n as铆ncrona para generar im谩genes
async def generate_image(prompt, model, lora_word, width, height, scales, steps, seed):
    try:
        if seed == -1: 
            seed = random.randint(0, MAX_SEED)
        seed = int(seed)
        text = str(translator.translate(prompt, 'English')) + "," + lora_word
        client = AsyncInferenceClient()
        image = await client.text_to_image(prompt=text, height=height, width=width, guidance_scale=scales, num_inference_steps=steps, model=model)
        return image, seed
    except Exception as e: 
        raise gr.Error(f"Error en {e}")


# Funci贸n as铆ncrona para generar im谩genes y aplicar upscale
async def gen(prompt, lora_add, lora_word, width, height, scales, steps, seed, upscale_factor, process_upscale):
    model = enable_lora(lora_add)
    image, seed = await generate_image(prompt, model, lora_word, width, height, scales, steps, seed)
    image_path = "temp_image.png"
    image.save(image_path)
    
    if process_upscale:
        upscale_image = get_upscale_finegrain(prompt, image_path, upscale_factor)
    else:
        upscale_image = image_path
    
    return [image_path, upscale_image]


# Funci贸n para aplicar upscale con Finegrain
def get_upscale_finegrain(prompt, img_path, upscale_factor):
    client = Client("finegrain/finegrain-image-enhancer")
    result = client.predict(input_image=handle_file(img_path), prompt=prompt, negative_prompt="", seed=42, upscale_factor=upscale_factor, controlnet_scale=0.6, controlnet_decay=1, condition_scale=6, tile_width=112, tile_height=144, denoise_strength=0.35, num_inference_steps=18, solver="DDIM", api_name="/process")
    return result[1]


# Configuraci贸n de CSS
css = """
#col-container{
    margin: 0 auto;
    max-width: 1024px;
}
"""

with gr.Blocks(css=CSS, js=JS, theme="Nymbo/Nymbo_Theme") as demo:
    with gr.Column(elem_id="col-container"):
        gr.Markdown("# Flux Upscaled")
        gr.Markdown("Step 1: Generate image with FLUX schnell; Step 2: UpScale with Finegrain Image-Enhancer")
        with gr.Group():
            prompt = gr.Textbox(label="Prompt")
            with gr.Row():
                lora_add = gr.Textbox(label="Add Flux LoRA", info="Modelo Lora", lines=1, value="XLabs-AI/flux-RealismLora")
                lora_word = gr.Textbox(label="Add Flux LoRA Trigger Word", info="Add the Trigger Word", lines=1, value="")
                width = gr.Slider(label="Width", minimum=512, maximum=1280, step=8, value=768)
                height = gr.Slider(label="Height", minimum=512, maximum=1280, step=8, value=1024)
                scales = gr.Slider(label="Guidance", minimum=3.5, maximum=7, step=0.1, value=3.5)
                steps = gr.Slider(label="Steps", minimum=1, maximum=100, step=1, value=24)
                seed = gr.Slider(label="Seeds", minimum=-1, maximum=MAX_SEED, step=1, value=-1)
                upscale_factor = gr.Radio(label="UpScale Factor", choices=[2, 3, 4], value=2, scale=2)
                process_upscale = gr.Checkbox(label="Process Upscale", value=True)
                submit_btn = gr.Button("Submit", scale=1)
            output_res = ImageSlider(label="Flux / Upscaled")

        submit_btn.click(
            fn=lambda: None,
            inputs=None,
            outputs=[output_res],
            queue=False
        ).then(
            fn=gen,
            inputs=[prompt, lora_add, lora_word, width, height, scales, steps, seed, upscale_factor, process_upscale],
            outputs=[output_res]
        )


# Iniciar la aplicaci贸n
demo.launch()