
    L3i                        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Z G d d	      Z G d
 de      Z G d de      Z G d de      Zd ZddZddefdZy)    N)Image)argsLatentPreviewMethod)TAESD)VAE)taehvlighttaew2_2lighttaew2_1lighttaehy1_5taeltx_2c                    |r(| dz   dz  j                  dd      j                  d      }n!| j                  dd      j                  d      }t        j                  j                  r |j                  t        j                        }|j                  dt        j                  t        j                  j                  | j                              }t        j                  |j                               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_ubytes      (/home/serv3090/ComfyUI/latent_preview.pypreview_to_imager#      s    +c1S8??1E!$T  *//15!$T  !!22 - 0 0u{{ 0 C%((U[[W\WmWm  XK  XK  LX  L_  L_  X`(  a}22455    c                       e Zd Zd Zd Zy)LatentPreviewerc                      y N )selfx0s     r"   decode_latent_to_previewz(LatentPreviewer.decode_latent_to_preview    s    r$   c                 6    | j                  |      }d|t        fS )NJPEG)r,   MAX_PREVIEW_RESOLUTION)r*   preview_formatr+   preview_images       r"   decode_latent_to_preview_imagez.LatentPreviewer.decode_latent_to_preview_image#   s     55b9'=>>r$   N)__name__
__module____qualname__r,   r2   r)   r$   r"   r&   r&      s    ?r$   r&   c                       e Zd Zd Zd Zy)TAESDPreviewerImplc                     || _         y r(   )taesd)r*   r9   s     r"   __init__zTAESDPreviewerImpl.__init__(   s	    
r$   c                 z    | j                   j                  |d d       d   j                  dd      }t        |      S )Nr   r      )r9   decodemovedimr#   r*   r+   x_samples      r"   r,   z+TAESDPreviewerImpl.decode_latent_to_preview+   s9    ::$$RV,Q/771=))r$   Nr3   r4   r5   r:   r,   r)   r$   r"   r7   r7   '   s    *r$   r7   c                       e Zd Zd Zy)TAEHVPreviewerImplc                 v    | j                   j                  |d dd d d df         d   d   }t        |d      S )Nr   r   F)r    )r9   r=   r#   r?   s      r"   r,   z+TAEHVPreviewerImpl.decode_latent_to_preview0   s?    ::$$RArr	]3A6q9599r$   N)r3   r4   r5   r,   r)   r$   r"   rC   rC   /   s    :r$   rC   c                       e Zd ZddZd Zy)Latent2RGBPreviewerNc                     t        j                  |d      j                  dd      | _        d | _        |t        j                  |d      | _        || _        y )Nr   )r   r   r   )r   tensor	transposelatent_rgb_factorslatent_rgb_factors_biaslatent_rgb_factors_reshape)r*   rJ   rK   rL   s       r"   r:   zLatent2RGBPreviewer.__init__5   sP    "',,/A%"P"Z"Z[\^_"`'+$".+0<<8OX]+^D(*D'r$   c                     | j                   | j                  |      }| j                  j                  |j                  |j                        | _        | j
                  6| j
                  j                  |j                  |j                        | _        |j                  dk(  r|dd d df   }n|d   }t        j                  j                  j                  |j                  dd      | j                  | j
                        }t        |      S )N)r   r      r   )bias)rL   rJ   r   r   r   rK   ndimr   nn
functionallinearr>   r#   )r*   r+   r   s      r"   r,   z,Latent2RGBPreviewer.decode_latent_to_preview<   s    **6004B"&"9"9"<"<288TVT]T]"<"^''3+/+G+G+J+JQSQYQYbdbkbk+J+lD(77a<Aq!GBABxx**11"**Q2CTE\E\cgcc1  A  --r$   )NNrA   r)   r$   r"   rF   rF   4   s    E.r$   rF   c                 >   d }t         j                  }|t        j                  k7  rud }j                  >t        fdt        j                  d      D        d      }t        j                  d|      }|t        j                  k(  rt        j                  }|t        j                  k(  r|rj                  t        v rEt        t        j                  j!                  |            }d|j"                  _        t'        |      }nat        d |j(                        j+                  |       }t-        |      }n.t/        j0                  dj3                  j                               |7j4                  +t7        j4                  j8                  j:                        }|S )Nc              3   X   K   | ]!  }|j                  j                        r| # y wr(   )
startswithtaesd_decoder_name).0fnlatent_formats     r"   	<genexpr>z get_previewer.<locals>.<genexpr>V   s,      H}}]%E%EF  Hs   '*
vae_approx F)latent_channelszHWarning: TAESD previews enabled, but could not find models/vae_approx/{})r   preview_methodr   
NoPreviewsrX   nextfolder_pathsget_filename_listget_full_pathAuto
Latent2RGBr   
VIDEO_TAESr   r   utilsload_torch_filefirst_stage_modelshow_progress_barrC   r_   r   r7   loggingwarningformatrJ   rF   rK   rL   )r   r[   	previewermethodtaesd_decoder_pathr9   s    `    r"   get_previewerrs   N   s~   I  F$///!++7!%Hl<<\J H"
 ".!;!;LJ\!](---(33F(...! 33zA ; ;<N OPE@EE++= 25 9I!$(:MLiLijmmntuE 25 9I j q qr  sS  sS  !T  U//;/0P0PR_RwRw  zG  zb  zb  c	r$   c                     ddvrdt        | j                  | j                  j                        t        j
                  j                  |      fd}|S )Nr.   )r.   PNGc                 l    |d<   d }rj                  |      }j                  | dz   ||       y )Nr+   r   )r2   update_absolute)	stepr+   xtotal_stepspreview_bytespbarr0   rp   x0_output_dicts	        r"   callbackz"prepare_callback.<locals>.callbackx   sD    %#%N4 %DD^UWXMTAX{MBr$   )rs   load_devicemodelr[   r   ri   ProgressBar)r   stepsr}   r~   r|   r0   rp   s     ` @@@r"   prepare_callbackr   p   sR    N_,e//1J1JKI;;""5)DC Or$   overridec                 v    | r(| dk7  r#t        j                  |       }||t        _        y t        t        _        y )Ndefault)r   from_stringr   r`   default_preview_method)r   rq   s     r"   set_preview_methodr      s5    H	)$00:"(D0Dr$   )Tr(   )r   PILr   comfy.cli_argsr   r   comfy.taesd.taesdr   comfy.sdr   comfy.model_managementr   rc   comfy.utilsrm   r`   r   preview_sizer/   rh   r#   r&   r7   rC   rF   rs   r   strr   r)   r$   r"   <module>r      s      4 #     ,, ** S
6? ?* *:+ :
./ .4 D$1 1r$   