o
    {j(                     @   sz  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlmZ d	Zd
Ze je jeZe jedZdZe	 Zejedgdgdgd e jedd ejdeeddd ed ejeejddd eZ!e!j"dd e!j#j ej$d dej%j&j'_(dej%j)_(dej%j)_*ed e+dedededfde,de,d e,fd!d"Z-dS )#    N)Image) StableDiffusionXLImg2ImgPipeline)Body)FastAPI)HTTPException)CORSMiddleware)StaticFilesz(stabilityai/stable-diffusion-xl-base-1.0cudaoutputi   *POSTzContent-Type)allow_originsallow_methodsallow_headersT)exist_okz/output)	directory)namezLoading model...fp16)torch_dtypevariantuse_safetensors)disable)dtypezModel loaded!z	/generate.imagepromptnegative_promptc                 C   s   | }t d|  dd tj|stjt|}tj|s'tdd|  d| s1tddd| s;tdd	dt	
|d
}|ttf}t  t|||dddtjtdddjd }W d    n1 snw   Y  t  d}tjt|}|| dtj|tdS )Nzimage: T)flushi  u*   입력 파일을 찾을 수 없습니다: )status_codedetaili  u'   prompt가 입력되지 않았습니다.u0   negative_prompt가 입력되지 않았습니다.RGBg?g      $@2   )device*   )r   r   r   strengthguidance_scalenum_inference_steps	generatorr   z.pngsuccess)statusr   )printospathisabsjoin
SCRIPT_DIRisfiler   stripr   openconvertresizeCANVAS_SIZEtorchinference_modepipe	GeneratorDEVICEmanual_seedimagesuuiduuid4
OUTPUT_DIRsaverelpath)r   r   r   
image_pathinput_imageresultfilename	save_path rF   M/home/ubuntu/htdocs/OOTD2/inpainting/stable_diffusion/stable_diffusion_api.pygenerate;   s>   

rH   ).r*   r<   r5   PILr   	diffusersr   fastapir   r   r   fastapi.middleware.corsr   fastapi.staticfilesr   MODEL_IDr9   r+   dirnameabspath__file__r.   r-   r>   r4   appadd_middlewaremakedirsmountr)   from_pretrainedfloat16tor7   set_progress_bar_configvaefloat32backendsr	   matmul
allow_tf32cudnn	benchmarkpoststrrH   rF   rF   rF   rG   <module>   sR    	

0