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

# ๋ฒˆ์—ญ ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ํ•˜๋“œ์›จ์–ด ์„ค์ •
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)

    # ํ•œ๊ธ€ ์ž…๋ ฅ ๊ฐ์ง€ ๋ฐ ๋ฒˆ์—ญ
    if any('\uAC00' <= char <= '\uD7A3' for char in prompt):
        print("ํ•œ๊ตญ์–ด ํ”„๋กฌํ”„ํŠธ ๋ฒˆ์—ญ ์ค‘...")
        translated_prompt = translator(prompt, max_length=512)[0]['translation_text']
        print("๋ฒˆ์—ญ๋œ ํ”„๋กฌํ”„ํŠธ:", 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

# (์ด์ „ import ๊ตฌ๋ฌธ ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ • ์œ ์ง€)

examples = [
    ["[Style: Minimal] [Color: Blue and White] [Concept: Tech Company] [Text: 'INNOVATE'] [Background: Clean]"],
    ["[Style: Modern] [Color: Black and Gold] [Concept: Luxury Brand] [Text: 'ELITE'] [Background: Gradient]"],
    ["[Style: Geometric] [Color: Green and Gray] [Concept: Eco Friendly] [Text: 'NATURE'] [Background: White]"],
    ["[ํ•œ๊ธ€] [์Šคํƒ€์ผ: ๋ชจ๋˜] [์ƒ‰์ƒ: ๋นจ๊ฐ•๊ณผ ๊ฒ€์ •] [์ปจ์…‰: ์‹๋‹น] [ํ…์ŠคํŠธ: '๋ง›์žˆ๋Š”์ง‘'] [๋ฐฐ๊ฒฝ: ์‹ฌํ”Œ]"],
    ["[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}
"""

with gr.Blocks(theme="Yntec/HaleyCH_Theme_Orange", css=css) as demo:
    gr.HTML("<h1 class='title'>AI ๋กœ๊ณ  ์ƒ์„ฑ๊ธฐ</h1>")
    
    with gr.Column(elem_id="container"):
        with gr.Group():
            prompt = gr.Text(
                label="๋กœ๊ณ  ์„ค๋ช…",
                placeholder="๋กœ๊ณ  ๋””์ž์ธ์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š” (ํ•œ๊ธ€ ์ž…๋ ฅ ๊ฐ€๋Šฅ)",
                lines=2
            )
            run_button = gr.Button("๋กœ๊ณ  ์ƒ์„ฑ", variant="primary")
        
        with gr.Row():
            result = gr.Image(label="์ƒ์„ฑ๋œ ๋กœ๊ณ ", show_label=True)
        
        with gr.Accordion("๊ณ ๊ธ‰ ์„ค์ •", open=False):
            with gr.Row():
                seed = gr.Slider(label="์‹œ๋“œ", minimum=0, maximum=MAX_SEED, step=1, value=0)
                randomize_seed = gr.Checkbox(label="๋žœ๋ค ์‹œ๋“œ", value=True)
            
            with gr.Row():
                width = gr.Slider(label="๋„ˆ๋น„", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=512)
                height = gr.Slider(label="๋†’์ด", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=512)
                num_inference_steps = gr.Slider(label="ํ’ˆ์งˆ", 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()