
    Tii                        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 dlZd d	lmZmZmZmZ d dlZd dlZd d
lmZ d dlmZ  ed      Z ej6                  e	d       ej9                  d       ed      dfdedefd       Zdej                  dedefdZ ejC                  d      de"fd       Z#ej9                  d      de$fd       Z%y)    )FileResponse)run_in_threadpool)DEFAULT_PORT)generate_file_id)	FILES_DIR)Image)BytesION)	APIRouterHTTPException
UploadFileFile)
guess_type)
HttpClientz/api)prefixT)exist_okz/upload_image.g      @filemax_size_mbc           	      Z  K   t        d| j                         t               }| j                  xs d}	 | j                          d {   }t        |      dz  }t        j                  t        |            5 }|j                  \  }}	||kD  rlt        d|dd	| d
       |j                  dv ryt        j                  d|j                  d      }
|j                  dk(  r|j                  d      }|
j                  ||j                  dk(  r|j                         d   nd        |
}n |j                  dk7  r|j                  d      }t!        ||      }d}t"        j$                  j'                  t(        | d|       }t        j                  t        |            5 }|j                  \  }}	t+        |j,                  |ddd       d {    d d d        t        |      dz  }t        d|dd|dd       nt/        |      \  }}|r-|j1                  d      r|j                  d      d   }|dk(  rd}nd}t"        j$                  j'                  t(        | d|       }|j3                         dv rdn|j5                         }|dk(  r|j                  d      }t+        |j,                  ||       d {    d d d        t        d        | d d!t6         d"| d| 	d#S 7 # t        $ r}t        dd|       d }~ww xY w7 C# 1 sw Y   CxY w7 e# 1 sw Y   dxY ww)$Nu   🦄upload_image file   zError reading file: status_codedetail   u   🦄 Image size (z.2fzMB) exceeds limit (zMB), compressing...)RGBALAPRGB)   r   r   r   r   )maskjpg.JPEG_   Tformatqualityoptimizeu   🦄 Compressed from zMB to MBzimage//jpeg)r"   r,   )r'   u   🦄upload_image file_pathzhttp://localhost:z
/api/file/)file_idurlwidthheight)printfilenamer   read	Exceptionr   lenr   openr	   sizemodenewconvertpastesplitcompress_imageospathjoinr   r   saver   
startswithlowerupperr   )r   r   r-   r2   contenteoriginal_size_mbimgr/   r0   
backgroundcompressed_content	extension	file_pathcompressed_imgfinal_size_mb	mime_type_save_formats                      N/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/routers/image_router.pyupload_imagerS      s0    	
!4==1 G}}"HP		# 7|{3 
GG$	% 5Mv k)%&6s%;;N{m[nop xx.."YYuchhH
88s?++f-C  chh&>P399;r?VZ [ U"kk%( "0[!A IY7)1YK0HII G$678 rN . 3 3v'(;(;Yv_alpqqqr
   23{CM)*:3)?vmTWEXXZ[\ &h/LIqY11(;%OOC04	& %I!	 Y7)1YK0HII %.OO$5$H&iooN_Kf$kk%( $CHHiLLLk5Mp 

&	2Ya	{+"<.
7)1YKP	  $ P6J1#4NOOPB rr r6 Mk5M 5Ms   1L+K, K)K, ,L+8D%L-L
LLC(L7L8L<-L+)K, ,	L
5LL

L+LL		LL($L+rH   returnc                    d}|dkD  r[t               }| j                  |d|d       t        |j                               dz  }||k  r|j                         S |dz  }|dkD  r[| j                  \  }}d}|dkD  rt        ||z        }t        ||z        }	| j                  ||	ft        j                  j                        }
t               }|
j                  |dd	d       t        |j                               dz  }||k  r|j                         S |d
z  }|dkD  rt               }
j                  |ddd       |j                         S )zA
    Compress an image to be under the specified size limit.
    r%   
   r$   Tr&   r   g?g333333?F   g?   )
r	   rA   r5   getvaluer7   intresizer   
ResamplingLANCZOS)rH   r   r(   buffersize_mboriginal_widthoriginal_heightscale_factor	new_width
new_heightresized_imgs              rR   r=   r=   d   sT   
 G
B,$G foo'(K8k!??$$ 	2 B, '*hh#NOL

56	<78
jj)Z!8%:J:J:R:RS TJfoo'(K8k!??$$ 
" YFVFBF??    z/file/{file_id}r-   c                    K   t         j                  j                  t        |        }t	        d|       t         j                  j                  |      st        dd      t        |      S w)Nu   🦄get_file file_pathi  zFile not foundr   )r>   r?   r@   r   r1   existsr   r   )r-   rL   s     rR   get_fileri      sP     Y7)5I	
"I.77>>)$4DEE	""s   A)A+z/comfyui/object_infodatac                   K   | j                  dd      }|st        dd      	 t        j                  d      }t	        j
                  |      4 d {   }|j                  | d       d {   }|j                  d	k(  r!|j                         cd d d       d {    S t        |j                  d
|j                         7 t7 Z7 -# 1 d {  7  sw Y   y xY w# t        $ r}dt        t        |            v sdt        |      j                         v r$t        dt        |              t        dd      t        dt        |              t        ddt        |             d }~ww xY ww)Nr.   r   r   zURL is requiredr   g      $@)timeoutz/api/object_info   zComfyUI server returned status ConnectErrorrl   zComfyUI connection error: i  zEComfyUI server is not available. Please make sure ComfyUI is running.z(Unexpected error connecting to ComfyUI: i  zFailed to connect to ComfyUI: )getr   httpxTimeoutr   creater   jsonr4   strtyperC   r1   )rj   r.   rl   clientresponserF   s         rR   get_object_inforx      sz    
((5"
C4EFFO--%$$W5 	w 	w#ZZ3%/?(@AAH##s*}}	w 	w 	w
 $ ( 4 4?^_g_s_s^t=uw w	wA	w 	w 	w 	w  OSa\)Y#a&,,.-H.s1vh78(oq q8QAB&DSVH$MO 	OOs   "E:/C$ C	C$ C0C1"CC$ C C$ $E:%$C	C$ CC$ C!CC!C$  E:!C$ $	E7-BE22E77E:)&fastapi.responsesr   fastapi.concurrencyr   commonr   tools.utils.image_canvas_utilsr   services.config_servicer   PILr   ior	   r>   fastapir
   r   r   r   rp   aiofiles	mimetypesr   utils.http_clientr   routermakedirspostfloatrS   bytesr=   ro   rt   ri   dictrx    rf   rR   <module>r      s    * 1  ; -   	 > >     (	&	! I % _*.s)# LZ L% L L^, ,% ,E ,` #C # # #$O O %Orf   