a
    Ad                     @   sr   d dl mZ d dlZd dlmZmZ d dlZd dl	m
Z
mZ d dlmZ i ZG dd dejZG dd	 d	eZdS )
    )ImageN)scripts_postprocessingshared)FormRow
ToolButton)switch_values_symbolc                   @   s>   e Zd ZdZdZdd Zdd ZdejdddZ	dd Z
d	S )ScriptPostprocessingUpscaleUpscalei  c                 C   s  t jdd}t  ` t  t jddT t jddd&}t jddd	d
ddd}W d    n1 sl0    Y  t jddd}t  t jddd< t jddddddd}t jddddddd}W d    n1 s0    Y  t jdddd, ttdd}t j	d d!d"d#}W d    n1 s,0    Y  W d    n1 sL0    Y  W d    n1 sl0    Y  W d    n1 s0    Y  W d    n1 s0    Y  t 6 t j
d$d%d&d' tjD tjd jd(}	W d    n1 s0    Y  t L t j
d)d*d+d' tjD tjd jd(}
t jd,dd-d.d,d/d}W d    n1 s^0    Y  W d    n1 s~0    Y  |jd0d1 ||g||gd2d3 |jd4d1 g |gd5 |jd6d1 g |gd5 ||||||	|
|d7S )8Nr   )valueZextras_resize_mode)elem_idzScale byZextras_scale_by_tabg      ?       @皙?Resize   Zextras_upscaling_resize)minimummaximumsteplabelr
   r   zScale toZextras_scale_to_tabZupscaling_column_size)r   scale@   i      Widthi   Zextras_upscaling_resize_wHeightZextras_upscaling_resize_hZupscaling_dimensions_row   zdimensions-tools)r   r   elem_classesupscaling_res_switch_btn)r
   r   zCrop to fitTZextras_upscaling_crop)r   r
   r   z
Upscaler 1extras_upscaler_1c                 S   s   g | ]
}|j qS  name.0xr   r   F/var/www/html/stable-diffusion-webui/scripts/postprocessing_upscale.py
<listcomp>$       z2ScriptPostprocessingUpscale.ui.<locals>.<listcomp>)r   r   choicesr
   z
Upscaler 2extras_upscaler_2c                 S   s   g | ]
}|j qS r   r   r    r   r   r#   r$   '   r%           gMbP?zUpscaler 2 visibilityextras_upscaler_2_visibilityc                 S   s   || fS Nr   )whr   r   r#   <lambda>*   r%   z0ScriptPostprocessingUpscale.ui.<locals>.<lambda>F)inputsoutputsshow_progressc                   S   s   dS )Nr   r   r   r   r   r#   r-   +   r%   )fnr.   r/   c                   S   s   dS )Nr   r   r   r   r   r#   r-   ,   r%   )upscale_mode
upscale_byupscale_to_widthupscale_to_heightupscale_cropupscaler_1_nameupscaler_2_nameupscaler_2_visibility)grStateColumnr   TabsTabItemSliderr   r   CheckboxDropdownr   sd_upscalersr   clickselect)selfZselected_tabtab_scale_byupscaling_resizetab_scale_toupscaling_resize_wupscaling_resize_hr   upscaling_cropr   r'   r)   r   r   r#   ui   s>    
44F&VzScriptPostprocessingUpscale.uic	                 C   s&  |dkr2t ||j ||j }| d| |d< n||d< tt|  |j|||||f}	t	
|	d }
|
d urz|
}n|j|||j}|t	|	< tt	tjjkrt	
ttt	d d  |dkr"|r"td||f}|j||d |jd  |d |jd  fd |}|j d|j |d< |S )	Nr   r"   zPostprocess upscale tozPostprocess upscale byRGB   )boxzPostprocess crop to)maxwidthheighthashnparraygetdatatobytesr   upscale_cachepopscalerupscale	data_pathlenr   optsupscaling_max_images_in_cachenextiterr   newpaste)rE   imageinfoupscalerr2   r3   r4   r5   r6   	cache_keyZcached_imagecroppedr   r   r#   r[   9   s$    &.z#ScriptPostprocessingUpscale.upscaler          @NFr(   ppc
              
      s   dkrd  t t fddtjD d }
|
sD d u sDJ d  |
sLd S dkrXd t tfddtjD d }|sd u sJ d | |j|j|
|||||}|
j|jd< |r|	dkr| |j|j||||||}t	|||	}|j|jd< ||_d S )	NNonec                    s   g | ]}|j  kr|qS r   r   r    )r7   r   r#   r$   X   r%   z7ScriptPostprocessingUpscale.process.<locals>.<listcomp>could not find upscaler named c                    s$   g | ]}|j  kr|j d kr|qS )rl   r   r    )r8   r   r#   r$   a   r%   Postprocess upscalerr   zPostprocess upscaler 2)
r`   ra   r   rB   r[   rd   re   r   r   blend)rE   rk   r2   r3   r4   r5   r6   r7   r8   r9   	upscaler1Z	upscaler2Zupscaled_imageZsecond_upscaler   )r7   r8   r#   processT   s"    z#ScriptPostprocessingUpscale.processc                 C   s   t   d S r*   )rX   clear)rE   r   r   r#   image_changedo   s    z)ScriptPostprocessingUpscale.image_changed)r   ri   NNFNNr(   )__name__
__module____qualname__r   orderrL   r[   r   PostprocessedImagerq   rs   r   r   r   r#   r      s   (r   c                   @   s.   e Zd ZdZdZdd Zd
ejddd	ZdS )!ScriptPostprocessingUpscaleSimplezSimple Upscalei  c                 C   sh   t  H tjddd tjD tjd jd}tjddddd	d
}W d    n1 sT0    Y  ||dS )NUpscalerc                 S   s   g | ]
}|j qS r   r   r    r   r   r#   r$   y   r%   z8ScriptPostprocessingUpscaleSimple.ui.<locals>.<listcomp>r   )r   r&   r
   r   r   z
Upscale byrN   )r   r   r   r   r
   )r3   upscaler_name)r   r:   rA   r   rB   r   r?   )rE   r{   r3   r   r   r#   rL   w   s    $2z$ScriptPostprocessingUpscaleSimple.uiri   Nrj   c              
      sr    d u s dkrd S t t fddtjD d }|sDJ d  | |j|j|d|ddd|_|j|jd< d S )Nrl   c                    s   g | ]}|j  kr|qS r   r   r    r{   r   r#   r$      r%   z=ScriptPostprocessingUpscaleSimple.process.<locals>.<listcomp>rm   r   Frn   )r`   ra   r   rB   r[   rd   re   r   )rE   rk   r3   r{   rp   r   r|   r#   rq      s    z)ScriptPostprocessingUpscaleSimple.process)ri   N)	rt   ru   rv   r   rw   rL   r   rx   rq   r   r   r   r#   ry   s   s   
ry   )PILr   numpyrT   modulesr   r   gradior:   Zmodules.ui_componentsr   r   
modules.uir   rX   ScriptPostprocessingr   ry   r   r   r   r#   <module>   s   f