File size: 5,558 Bytes
40462a0
7aafe2f
 
 
 
 
a30ff0a
7aafe2f
 
a30ff0a
 
9d8567b
8bd228f
40462a0
7aafe2f
 
 
 
 
 
40462a0
7aafe2f
 
 
8bd228f
7aafe2f
 
 
9d8567b
 
 
 
 
 
 
 
 
 
 
 
a30ff0a
 
 
 
8bd228f
a30ff0a
 
b02e794
7aafe2f
b02e794
a30ff0a
 
b02e794
 
7aafe2f
 
 
 
 
 
 
 
 
 
 
 
 
9d8567b
7aafe2f
 
b02e794
 
 
 
 
7aafe2f
b02e794
9d8567b
 
 
 
 
7aafe2f
 
d4545dc
 
 
 
 
 
7aafe2f
e55ac15
7aafe2f
 
 
9d8567b
7aafe2f
 
9d8567b
 
7aafe2f
 
 
 
9d8567b
7aafe2f
9d8567b
7aafe2f
 
 
9d8567b
b02e794
7aafe2f
9d8567b
 
 
7aafe2f
 
9d8567b
7aafe2f
 
 
b02e794
7aafe2f
 
b02e794
7aafe2f
 
b02e794
7aafe2f
 
97d3c4e
7aafe2f
 
 
 
 
 
 
 
 
23fd89e
7aafe2f
 
 
 
 
 
 
a30ff0a
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
import gradio as gr
import numpy as np
import random
import spaces
import torch
import time
import os
from diffusers import DiffusionPipeline
from custom_pipeline import FLUXPipelineWithIntermediateOutputs
from transformers import pipeline

# Translation model loading
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ko-en")

# Constants
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048
DEFAULT_WIDTH = 1024
DEFAULT_HEIGHT = 1024
DEFAULT_INFERENCE_STEPS = 1

# Device and model setup
dtype = torch.float16
pipe = FLUXPipelineWithIntermediateOutputs.from_pretrained(
    "black-forest-labs/FLUX.1-schnell", torch_dtype=dtype
).to("cuda")
torch.cuda.empty_cache()

# Menu labels dictionary
english_labels = {
    "Generated Image": "Generated Image",
    "Prompt": "Prompt",
    "Enhance Image": "Enhance Image",
    "Advanced Options": "Advanced Options",
    "Seed": "Seed",
    "Randomize Seed": "Randomize Seed",
    "Width": "Width",
    "Height": "Height",
    "Inference Steps": "Inference Steps",
    "Inspiration Gallery": "Inspiration Gallery"
}

def translate_if_korean(text):
    if any('\u3131' <= char <= '\u3163' or '\uac00' <= char <= '\ud7a3' for char in text):
        return translator(text)[0]['translation_text']
    return text

# Modified inference function to always use random seed for examples
@spaces.GPU(duration=25)
def generate_image(prompt, seed=None, width=DEFAULT_WIDTH, height=DEFAULT_HEIGHT, randomize_seed=True, num_inference_steps=DEFAULT_INFERENCE_STEPS):
    prompt = translate_if_korean(prompt)
    
    # Always generate a random seed if none provided or randomize_seed is True
    if seed is None or randomize_seed:
        seed = random.randint(0, MAX_SEED)
    generator = torch.Generator().manual_seed(seed)

    start_time = time.time()

    for img in pipe.generate_images(  
            prompt=prompt,
            guidance_scale=0,
            num_inference_steps=num_inference_steps,
            width=width,
            height=height,
            generator=generator
        ): 
        latency = f"Processing Time: {(time.time()-start_time):.2f} seconds"    
        yield img, seed, latency

# Function specifically for examples that always uses random seeds
def generate_example_image(prompt):
    return generate_image(prompt, randomize_seed=True)

# Example prompts
examples = [
    "비너 슈니첼의 애니메이션 일러스트레이션",
    "A steampunk owl wearing Victorian-era clothing and reading a mechanical book",
    "A floating island made of books with waterfalls of knowledge cascading down",
    "A bioluminescent forest where mushrooms glow like neon signs in a cyberpunk city",
    "An ancient temple being reclaimed by nature, with robots performing archaeology",
    "A cosmic coffee shop where baristas are constellations serving drinks made of stardust"
]

css = """
footer {
    visibility: hidden;
}
"""

# --- Gradio UI ---
with gr.Blocks(theme="Yntec/HaleyCH_Theme_Orange", css=css) as demo:
    with gr.Column(elem_id="app-container"):
        with gr.Row():
            with gr.Column(scale=3):
                result = gr.Image(label=english_labels["Generated Image"], show_label=False, interactive=False)
            with gr.Column(scale=1):
                prompt = gr.Text(
                    label=english_labels["Prompt"],
                    placeholder="Describe the image you want to generate...",
                    lines=3,
                    show_label=False,
                    container=False,
                )
                enhanceBtn = gr.Button(f"🚀 {english_labels['Enhance Image']}")

                with gr.Column(english_labels["Advanced Options"]):
                    with gr.Row():
                        latency = gr.Text(show_label=False)
                    with gr.Row():
                        seed = gr.Number(label=english_labels["Seed"], value=42, precision=0)
                        randomize_seed = gr.Checkbox(label=english_labels["Randomize Seed"], value=True)
                    with gr.Row():
                        width = gr.Slider(label=english_labels["Width"], minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=DEFAULT_WIDTH)
                        height = gr.Slider(label=english_labels["Height"], minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=DEFAULT_HEIGHT)
                        num_inference_steps = gr.Slider(label=english_labels["Inference Steps"], minimum=1, maximum=4, step=1, value=DEFAULT_INFERENCE_STEPS)

        with gr.Row():
            gr.Markdown(f"### 🌟 {english_labels['Inspiration Gallery']}")
        with gr.Row():
            gr.Examples(
                examples=examples,
                fn=generate_example_image,  # Use the example-specific function
                inputs=[prompt],
                outputs=[result, seed],
                cache_examples=False  # Disable caching to ensure new generation each time
            )

    # Event handling
    enhanceBtn.click(
        fn=generate_image,
        inputs=[prompt, seed, width, height],
        outputs=[result, seed, latency],
        show_progress="hidden",
        show_api=False,
        queue=False
    )

    gr.on(
        triggers=[prompt.input, width.input, height.input, num_inference_steps.input],
        fn=generate_image,
        inputs=[prompt, seed, width, height, randomize_seed, num_inference_steps],
        outputs=[result, seed, latency],
        show_progress="hidden",
        show_api=False,
        trigger_mode="always_last",
        queue=False
    )

demo.launch()