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; } """ 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) # 함수 정의 @spaces.GPU() 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세 스웨덴 남자 모델, 금발 머리, 건장한 몸매, 배경 수영장, 스마일 표정, 선글라스 착용, 비지니스 슈트, 모델 포즈, 정면 응시, 초고해상도 사진", "아름다운 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("

나만의 모델 캐릭터 생성

") 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(auth=("gini", "pick"))