File size: 5,130 Bytes
7abf701
 
 
 
 
 
a6021dc
 
8ea8af0
7abf701
5114b0d
 
7abf701
 
 
 
 
 
 
 
 
 
8ea8af0
 
a6021dc
8ea8af0
a6021dc
8ea8af0
a6021dc
8ea8af0
7abf701
 
 
 
 
 
 
 
8ea8af0
7abf701
 
5114b0d
a2b21c2
 
 
 
5114b0d
7abf701
3319cd3
a2b21c2
 
 
 
 
 
7abf701
 
928e2b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f4e88b8
928e2b7
797e81e
a2b21c2
 
 
7abf701
8ea8af0
 
a2b21c2
7abf701
8ea8af0
a2b21c2
 
8ea8af0
a2b21c2
8ea8af0
7abf701
8ea8af0
 
a2b21c2
7abf701
8ea8af0
 
 
 
7abf701
a6021dc
 
 
 
7abf701
 
8ea8af0
a6021dc
 
 
 
 
 
7abf701
4ff5580
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
import gradio as gr
import numpy as np
import random
import spaces
import torch
from diffusers import DiffusionPipeline
from transformers import pipeline

# Translation pipeline and hardware settings
device = "cuda" if torch.cuda.is_available() else "cpu"
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-ko-en", device=device)
dtype = torch.bfloat16
pipe = DiffusionPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=dtype).to(device)

MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048

@spaces.GPU()
def infer(prompt, seed=42, randomize_seed=False, width=1024, height=1024, num_inference_steps=4, progress=gr.Progress(track_tqdm=True)):
    if randomize_seed:
        seed = random.randint(0, MAX_SEED)
    generator = torch.Generator().manual_seed(seed)
    
    # Korean input detection and translation
    if any('\uAC00' <= char <= '\uD7A3' for char in prompt):
        print("Translating Korean prompt...")
        translated_prompt = translator(prompt, max_length=512)[0]['translation_text']
        print("Translated prompt:", translated_prompt)
        prompt = translated_prompt
        
    image = pipe(
            prompt = prompt,
            width = width,
            height = height,
            num_inference_steps = num_inference_steps,
            generator = generator,
            guidance_scale=0.0
    ).images[0]
    
    return image, seed

examples = [
    ["[ํ•œ๊ธ€] [์Šคํƒ€์ผ: ๋ชจ๋˜] [์ƒ‰์ƒ: ๋นจ๊ฐ•๊ณผ ๊ฒ€์ •] [์ปจ์…‰: ์‹๋‹น] [ํ…์ŠคํŠธ: '๋ง›์žˆ๋Š”์ง‘'] [๋ฐฐ๊ฒฝ: ์‹ฌํ”Œ]"],
    ["[Style: Corporate] [Color: Navy and Silver] [Concept: Finance] [Text: 'TRUST'] [Background: Professional]"],
    ["[Style: Dynamic] [Color: Purple and Orange] [Concept: Creative Agency] [Text: 'SPARK'] [Background: Abstract]"],
    ["[Style: Minimalist] [Color: Red and White] [Concept: Sports] [Text: 'POWER'] [Background: Clean]"]
]

css = """
footer {visibility: hidden}
.container {max-width: 850px; margin: auto; padding: 20px}
.title {text-align: center; margin-bottom: 20px}
#prompt {min-height: 50px}
#result {min-height: 400px}
.gr-box {border-radius: 10px; border: 1px solid #ddd}
"""


def create_snow_effect():
    # CSS ์Šคํƒ€์ผ ์ •์˜
    snow_css = """
    @keyframes snowfall {
        0% {
            transform: translateY(-10vh) translateX(0);
            opacity: 1;
        }
        100% {
            transform: translateY(100vh) translateX(100px);
            opacity: 0.3;
        }
    }
    .snowflake {
        position: fixed;
        color: white;
        font-size: 1.5em;
        user-select: none;
        z-index: 1000;
        pointer-events: none;
        animation: snowfall linear infinite;
    }
    """

    # JavaScript ์ฝ”๋“œ ์ •์˜
    snow_js = """
    function createSnowflake() {
        const snowflake = document.createElement('div');
        snowflake.innerHTML = 'โ„';
        snowflake.className = 'snowflake';
        snowflake.style.left = Math.random() * 100 + 'vw';
        snowflake.style.animationDuration = Math.random() * 3 + 2 + 's';
        snowflake.style.opacity = Math.random();
        document.body.appendChild(snowflake);
        
        setTimeout(() => {
            snowflake.remove();
        }, 5000);
    }
    setInterval(createSnowflake, 200);
    """

    # CSS์™€ JavaScript๋ฅผ ๊ฒฐํ•ฉํ•œ HTML 
    snow_html = f"""
    <style>
        {snow_css}
    </style>
    <script>
        {snow_js}
    </script>
    """
    
    return gr.HTML(snow_html)


with gr.Blocks(theme="Yntec/HaleyCH_Theme_Orange", css=css) as demo:
    create_snow_effect()        
    gr.HTML("<h1 class='title'>LOGO Generator AI</h1>")
    
    with gr.Column(elem_id="container"):
        with gr.Group():
            prompt = gr.Text(
                label="PROMPT",
                placeholder="Text input Prompt (Korean input supported)",
                lines=2
            )
            run_button = gr.Button("Generate Logo", variant="primary")
        
        with gr.Row():
            result = gr.Image(label="Generated Logo", show_label=True)
        
        with gr.Accordion("Advanced Settings", open=False):
            with gr.Row():
                seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
                randomize_seed = gr.Checkbox(label="Random Seed", value=True)
            
            with gr.Row():
                width = gr.Slider(label="Width", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=512)
                height = gr.Slider(label="Height", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=512)
                num_inference_steps = gr.Slider(label="Quality", minimum=1, maximum=50, step=1, value=4)
        
        gr.Examples(
            examples=examples,
            fn=infer,
            inputs=[prompt],
            outputs=[result, seed],
            cache_examples="lazy"
        )
        
        gr.on(
            triggers=[run_button.click, prompt.submit],
            fn=infer,
            inputs=[prompt, seed, randomize_seed, width, height, num_inference_steps],
            outputs=[result, seed]
        )

demo.launch()