Spaces:
Paused
Paused
| import gradio as gr | |
| import torch | |
| from diffusers import StableDiffusionXLPipeline, AutoencoderKL, KDPM2AncestralDiscreteScheduler | |
| from huggingface_hub import hf_hub_download | |
| import spaces | |
| from PIL import Image | |
| import requests | |
| from translatepy import Translator | |
| import random | |
| translator = Translator() | |
| # ์์ ์ ์ | |
| model = "Corcelio/mobius" | |
| vae_model = "madebyollin/sdxl-vae-fp16-fix" | |
| CSS = """ | |
| .gradio-container { | |
| max-width: 690px !important; | |
| } | |
| footer { | |
| visibility: hidden; | |
| } | |
| """ | |
| JS = """function () { | |
| gradioURL = window.location.href | |
| if (!gradioURL.endsWith('?__theme=dark')) { | |
| window.location.replace(gradioURL + '?__theme=dark'); | |
| } | |
| }""" | |
| # VAE ์ปดํฌ๋ํธ ๋ก๋ | |
| vae = AutoencoderKL.from_pretrained( | |
| vae_model, | |
| torch_dtype=torch.float16 | |
| ) | |
| # GPU ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ธ ๋ฐ ์ค์ผ์ค๋ฌ ์ด๊ธฐํ | |
| if torch.cuda.is_available(): | |
| pipe = StableDiffusionXLPipeline.from_pretrained(model, vae=vae, torch_dtype=torch.float16).to("cuda") | |
| pipe.scheduler = KDPM2AncestralDiscreteScheduler.from_config(pipe.scheduler.config) | |
| # ํจ์ ์ ์ | |
| def generate_image( | |
| prompt, | |
| negative="low quality", | |
| width=1024, | |
| height=1024, | |
| scale=1.5, | |
| steps=30): | |
| prompt = str(translator.translate(prompt, 'English')) | |
| print(f'prompt:{prompt}') | |
| generator1 = torch.manual_seed(random.randint(0, 10000)) | |
| generator2 = torch.manual_seed(random.randint(0, 10000)) | |
| images1 = pipe( | |
| prompt, | |
| negative_prompt=negative, | |
| width=width, | |
| height=height, | |
| guidance_scale=scale, | |
| num_inference_steps=steps, | |
| generator=generator1 | |
| ).images | |
| images2 = pipe( | |
| prompt, | |
| negative_prompt=negative, | |
| width=width, | |
| height=height, | |
| guidance_scale=scale, | |
| num_inference_steps=steps, | |
| generator=generator2 | |
| ).images | |
| return images1[0], images2[0] # ๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐํ | |
| examples = [ | |
| "์๋ฆ๋ค์ด 20์ธ ํ๊ตญ ์ฌ์ ๋ชจ๋ธ, 'ํ๊ตญ ์ฌ์๊ฐ์ ์์ด์ ๋ฎ์ ์ผ๊ตด', ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๊ฐ์ ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํฐ์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋ ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 20์ธ ์๊ตญ ์ฌ์ ๋ชจ๋ธ, '์ ๋ง์์จ ๋ฎ์ ์ผ๊ตด', ๊ธ๋ฐ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ์ด๋ธ๋ ๋๋ ์ค, ๋ฐฐ๊ฒฝ ์์์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋ ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 20์ธ ํ๊ตญ ์ฌ์ ๋ชจ๋ธ, 'ํ๊ตญ ์ฌ์ ์์ด๋ ๋ฎ์ ์ผ๊ตด', ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ์์์ฅ, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋ ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 23์ธ ์ค๊ตญ๊ตญ ์ฌ์ ๋ชจ๋ธ, ๊ฐ์ ๊ธด ์๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ๋ฐฐ๊ฒฝ ์คํ๋์ค, ์ง์งํ ํ์ , ์คํผ์ค ์ ๋ํผ, ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 18์ธ ์ผ๋ณธ ์ฌ์ ๋ชจ๋ธ, ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, ์ค๋ง์ผ ํ์ , ๊ต๋ณต ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํ๊ต ๊ต์ค, ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 20์ธ ๋ธ๋ผ์ง ์ฌ์ ๋ชจ๋ธ, ๊ฒ์์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๊ฐํธ์ฌ ์ ๋ํผ, ๋ฐฐ๊ฒฝ ํฐ์, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ ์ ๋ ธ์ถ, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 20์ธ ์ค์จ๋ด ์ฌ์ ๋ชจ๋ธ, ๊ธ๋ฐ ๊ธด ์๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ํด๋ณ๊ฐ, ์ค๋ง์ผ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 18์ธ ๋ฌ์์ ์ฌ์ ๋ชจ๋ธ, ๊ธ๋ฐ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋นํค๋ ์์๋ณต, ๋ฐฐ๊ฒฝ ์์์ฅ, ์์ํ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 20์ธ ํ๋์ค ์ฌ์ ๋ชจ๋ธ, ๊ฐ์ ์งง์ ๋จ๋ฐ๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ๋น์ฆ๋์ค ์ ์ฅ, ๋ฐฐ๊ฒฝ ์ฌ๋ฌด์ค, ํฌ๊ฒ ์๋ ํ์ , ๋ชจ๋ธ ํฌ์ฆ, ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง", | |
| "์๋ฆ๋ค์ด 16์ธ ์ฐํฌ๋ผ์ด๋ ์ฌ์ ๋ชจ๋ธ, ๊ฐ์ ๊ธด ์๋จธ๋ฆฌ, C์ปต ์ฌ์ด์ฆ์ ํฐ ๊ฐ์ด, ํฐ ๊ณจ๋ฐ, ์คํผ์ค ์ ๋ํผ, ์น์ค ํฌ์ฆ, ๋ฐฐ๊ฒฝ ํธํ , ํ๋ณตํ ํ์ , ์ ๋ฉด ์์, ์ด๊ณ ํด์๋ ์ฌ์ง" | |
| ] | |
| # Gradio ์ธํฐํ์ด์ค | |
| with gr.Blocks(css=CSS, js=JS, theme="soft") as demo: | |
| gr.HTML("<h1><center>๋๋ง์ ๋ชจ๋ธ ์บ๋ฆญํฐ ์์ฑ</center></h1>") | |
| with gr.Group(): | |
| with gr.Row(): | |
| prompt = gr.Textbox(label='Enter Your Prompt', value="best quality, HD, aesthetic", scale=6) | |
| submit = gr.Button(scale=1, variant='primary') | |
| img1 = gr.Image(label='Generated Image 1') | |
| img2 = gr.Image(label='Generated Image 2') | |
| with gr.Accordion("Advanced Options", open=False): | |
| with gr.Row(): | |
| negative = gr.Textbox(label="Negative prompt", value="low quality, low quality, (deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, (NSFW:1.25)") | |
| with gr.Row(): | |
| width = gr.Slider( | |
| label="Width", | |
| minimum=512, | |
| maximum=1280, | |
| step=8, | |
| value=1024, | |
| ) | |
| height = gr.Slider( | |
| label="Height", | |
| minimum=512, | |
| maximum=1280, | |
| step=8, | |
| value=1024, | |
| ) | |
| with gr.Row(): | |
| scale = gr.Slider( | |
| label="Guidance", | |
| minimum=3.5, | |
| maximum=7, | |
| step=0.1, | |
| value=7, | |
| ) | |
| steps = gr.Slider( | |
| label="Steps", | |
| minimum=1, | |
| maximum=50, | |
| step=1, | |
| value=50, | |
| ) | |
| gr.Examples( | |
| examples=examples, | |
| inputs=prompt, | |
| outputs=[img1, img2], | |
| fn=generate_image, | |
| cache_examples=False, # ์บ์ ์์ฑํ์ง ์๋๋ก ์ค์ | |
| ) | |
| prompt.submit(fn=generate_image, | |
| inputs=[prompt, negative, width, height, scale, steps], | |
| outputs=[img1, img2], | |
| ) | |
| submit.click(fn=generate_image, | |
| inputs=[prompt, negative, width, height, scale, steps], | |
| outputs=[img1, img2], | |
| ) | |
| #demo.queue().launch() | |
| demo.queue().launch() | |