a
    Aþd8  ã                   @   sz   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
mZ d dlZd dlZG dd„ deƒZdd	„ Ze
 e¡ dS )
é    N)Úload_file_from_url)ÚUpscalerÚUpscalerData)ÚLDSR)ÚsharedÚscript_callbacksÚerrorsc                       s2   e Zd Z‡ fdd„Zedœdd„Zdd„ Z‡  ZS )ÚUpscalerLDSRc                    s:   d| _ || _d| _d| _tƒ  ¡  tdd | ƒ}|g| _d S )Nr   z=https://heibox.uni-heidelberg.de/f/578df07c8fc04ffbadf3/?dl=1z=https://heibox.uni-heidelberg.de/f/31a76b13ea27482981b4/?dl=1)ÚnameÚ	user_pathÚ	model_urlÚyaml_urlÚsuperÚ__init__r   Úscalers)Úselfr   Zscaler_data©Ú	__class__© úR/var/www/html/stable-diffusion-webui/extensions-builtin/LDSR/scripts/ldsr_model.pyr      s    
zUpscalerLDSR.__init__)Úpathc                 C   s.  t j | jd¡}t j | jd¡}t j | jd¡}| jddgd}ttdd„ |D ƒƒd ƒ}ttd	d„ |D ƒƒd ƒ}ttd
d„ |D ƒƒd ƒ}t j |¡rºt  |¡}	|	j	dkrºt
dƒ t  |¡ t j |¡rÚt
dƒ t  ||¡ |d urôt j |¡rô|}
n|p
t| j| jdd}
|p"t| j| jdd}t|
|ƒS )Núproject.yamlz	model.pthú
model.ckptz.ckptz.safetensors)Ú
ext_filterc                 S   s   g | ]}|  d ¡r|‘qS )r   ©Úendswith©Ú.0Zlocal_modelr   r   r   Ú
<listcomp>   ó    z+UpscalerLDSR.load_model.<locals>.<listcomp>c                 S   s   g | ]}|  d ¡r|‘qS )zmodel.safetensorsr   r   r   r   r   r      r   c                 S   s   g | ]}|  d ¡r|‘qS )r   r   r   r   r   r   r      r   i    z Removing invalid LDSR YAML file.z+Renaming model from model.pth to model.ckpt)Ú	model_dirÚ	file_name)Úosr   ÚjoinÚ
model_pathÚfind_modelsÚnextÚiterÚexistsÚstatÚst_sizeÚprintÚremoveÚrenamer   r   Úmodel_download_pathr   r   )r   r   Z	yaml_pathZold_model_pathZnew_model_pathZlocal_model_pathsZlocal_ckpt_pathZlocal_safetensors_pathZlocal_yaml_pathZstatinfoÚmodelÚyamlr   r   r   Ú
load_model   s(    


zUpscalerLDSR.load_modelc                 C   sR   z|   |¡}W n* ty8   tjd|› dd | Y S 0 tjj}| ||| j¡S )NzFailed loading LDSR model T)Úexc_info)	r1   Ú	Exceptionr   Úreportr   ÚoptsÚ
ldsr_stepsZsuper_resolutionÚscale)r   Úimgr   ZldsrÚ
ddim_stepsr   r   r   Ú
do_upscale3   s    
zUpscalerLDSR.do_upscale)Ú__name__Ú
__module__Ú__qualname__r   Ústrr1   r:   Ú__classcell__r   r   r   r   r	      s   	r	   c                  C   sX   dd l } tj dtjdd| jddddœdd	¡ tj d
tjdd| jddidd	¡ d S )Nr   r6   éd   z%LDSR processing steps. Lower = fasteré   éÈ   )ÚminimumÚmaximumÚstep)Ú	upscalingÚ	Upscaling)ÚsectionZldsr_cachedFzCache LDSR model in memoryÚinteractiveT)Úgradior   r5   Ú
add_optionÚ
OptionInfoÚSliderÚCheckbox)Úgrr   r   r   Úon_ui_settings=   s    (rP   )r"   Zmodules.modelloaderr   Úmodules.upscalerr   r   Zldsr_model_archr   Úmodulesr   r   r   Zsd_hijack_autoencoderZsd_hijack_ddpm_v1r	   rP   r   r   r   r   Ú<module>   s   2