o
    i                     @   s   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	 d dl
Zd dlZd dlZd dlZejZejZg dZddd	ZG d
d dZG dd deZG dd deZG dd deZdd ZdddZddefddZdS )    N)Image)argsLatentPreviewMethod)TAESD)VAE)taehvlighttaew2_2lighttaew2_1lighttaehy1_5taeltx_2Tc                 C   sr   |r| d d  ddd}n	|  ddd}tjjr$|jtjd}|jdtjtj| j	d}t
| S )	Ng      ?g       @r         )dtypecpu)devicer   non_blocking)clampmulcomfymodel_managementdirectml_enabledtotorchuint8device_supports_non_blockingr   r   	fromarraynumpy)latent_imagedo_scalelatents_ubyte r    ,/mnt/c/Users/fbmor/ComfyUI/latent_preview.pypreview_to_image   s   
r"   c                   @      e Zd Zdd Zdd ZdS )LatentPreviewerc                 C   s   d S Nr    )selfx0r    r    r!   decode_latent_to_preview    s   z(LatentPreviewer.decode_latent_to_previewc                 C   s   |  |}d|tfS )NJPEG)r(   MAX_PREVIEW_RESOLUTION)r&   preview_formatr'   preview_imager    r    r!   decode_latent_to_preview_image#   s   

z.LatentPreviewer.decode_latent_to_preview_imageN)__name__
__module____qualname__r(   r-   r    r    r    r!   r$          r$   c                   @   r#   )TAESDPreviewerImplc                 C   s
   || _ d S r%   )taesd)r&   r3   r    r    r!   __init__(   s   
zTAESDPreviewerImpl.__init__c                 C   s(   | j |d d d dd}t|S )Nr   r      )r3   decodemovedimr"   r&   r'   x_sampler    r    r!   r(   +   s    z+TAESDPreviewerImpl.decode_latent_to_previewNr.   r/   r0   r4   r(   r    r    r    r!   r2   '   r1   r2   c                   @   s   e Zd Zdd ZdS )TAEHVPreviewerImplc                 C   s6   | j |d dd d d df d d }t|ddS )Nr   r   F)r   )r3   r6   r"   r8   r    r    r!   r(   0   s   *z+TAEHVPreviewerImpl.decode_latent_to_previewN)r.   r/   r0   r(   r    r    r    r!   r;   /   s    r;   c                   @   s   e Zd ZdddZdd ZdS )Latent2RGBPreviewerNc                 C   s@   t j|dddd| _d | _|d urt j|dd| _|| _d S )Nr   )r   r   r   )r   tensor	transposelatent_rgb_factorslatent_rgb_factors_biaslatent_rgb_factors_reshape)r&   r?   r@   rA   r    r    r!   r4   5   s
   
zLatent2RGBPreviewer.__init__c                 C   s   | j d ur
|  |}| jj|j|jd| _| jd ur%| jj|j|jd| _|jdkr4|dd d df }n|d }tjj	j
|dd| j| jd}t|S )N)r   r      r   )bias)rA   r?   r   r   r   r@   ndimr   nn
functionallinearr7   r"   )r&   r'   r   r    r    r!   r(   <   s   



 z,Latent2RGBPreviewer.decode_latent_to_preview)NNr:   r    r    r    r!   r<   4   s    
r<   c                    s   d }t j}|tjkrvd } jd ur&t fddtdD d}td|}|tj	kr.tj
}|tjkrd|r[ jtv rKttj|}d|j_t|}ntd | jd| }t|}n	td j |d u rv jd urvt j j j}|S )Nc                 3   s     | ]}|  jr|V  qd S r%   )
startswithtaesd_decoder_name).0fnlatent_formatr    r!   	<genexpr>V   s    
z get_previewer.<locals>.<genexpr>
vae_approx F)latent_channelszHWarning: TAESD previews enabled, but could not find models/vae_approx/{})r   preview_methodr   
NoPreviewsrJ   nextfolder_pathsget_filename_listget_full_pathAuto
Latent2RGBr   
VIDEO_TAESr   r   utilsload_torch_filefirst_stage_modelshow_progress_barr;   rR   r   r2   loggingwarningformatr?   r<   r@   rA   )r   rN   	previewermethodtaesd_decoder_pathr3   r    rM   r!   get_previewerN   s2   







rf   c                    sB   ddvrdt | j| jjtj|  fdd}|S )Nr)   )r)   PNGc                    s:   d ur|d< d }r |} | d || d S )Nr'   r   )r-   update_absolute)stepr'   xtotal_stepspreview_bytespbarr+   rc   x0_output_dictr    r!   callbackx   s   z"prepare_callback.<locals>.callback)rf   load_devicemodelrN   r   r\   ProgressBar)rr   stepsro   rp   r    rm   r!   prepare_callbackp   s   ru   overridec                 C   s2   | r| dkrt | }|d ur|t_d S tt_d S )Ndefault)r   from_stringr   rS   default_preview_method)rv   rd   r    r    r!   set_preview_method   s   

rz   )Tr%   )r   PILr   comfy.cli_argsr   r   comfy.taesd.taesdr   comfy.sdr   comfy.model_managementr   rV   comfy.utilsr`   rS   ry   preview_sizer*   r[   r"   r$   r2   r;   r<   rf   ru   strrz   r    r    r    r!   <module>   s(    

"