
    +j                        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dS )    N)Image)argsLatentPreviewMethod)TAESD)VAE)taehvlighttaew2_2lighttaew2_1lighttaehy1_5taeltx_2Tc                    |r0| dz   dz                       dd                              d          }n)|                      dd                              d          }t          j        j        r |                    t          j                  }|                    dt          j        t          j                            | j	                            }t          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/wildlama/comfy/ComfyUI/latent_preview.pypreview_to_imager#      s     	"+c1S8??1EE!$T M *//155!$T  !2 	D - 0 0u{ 0 C C%((U[W\Wm  XK  XK  LX  L_  X`  X`(  a  a}2244555    c                       e Zd Zd Zd ZdS )LatentPreviewerc                     d S N )selfx0s     r"   decode_latent_to_previewz(LatentPreviewer.decode_latent_to_preview    s    r$   c                 @    |                      |          }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9'=>>r$   N)__name__
__module____qualname__r,   r2   r)   r$   r"   r&   r&      s2          ? ? ? ? ?r$   r&   c                       e Zd Zd Zd ZdS )TAESDPreviewerImplc                     || _         d S r(   )taesd)r*   r9   s     r"   __init__zTAESDPreviewerImpl.__init__(   s    


r$   c                     | j                             |d d                   d                             dd          }t          |          S )Nr   r      )r9   decodemovedimr#   r*   r+   x_samples      r"   r,   z+TAESDPreviewerImpl.decode_latent_to_preview+   sB    :$$RV,,Q/771==)))r$   Nr3   r4   r5   r:   r,   r)   r$   r"   r7   r7   '   s2          * * * * *r$   r7   c                       e Zd Zd ZdS )TAEHVPreviewerImplc                     | 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   sJ    :$$RAAArr	]33A6q9599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dS )Latent2RGBPreviewerNc                     t          j        |d                              dd          | _        d | _        |t          j        |d          | _        || _        d S )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   sa    "',/A%"P"P"P"Z"Z[\^_"`"`'+$".+0<8OX]+^+^+^D(*D'''r$   c                    | j         |                      |          }| j                            |j        |j                  | _        | j        +| j                            |j        |j                  | _        |j        dk    r|dd d df         }n|d         }t          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44B"&"9"<"<28TVT]"<"^"^'3+/+G+J+JQSQYbdbk+J+l+lD(7a<<Aqqq!GBBABx*11"**Q2C2CTE\cgc1  A  A  ---r$   )NNrA   r)   r$   r"   rF   rF   4   s;        E E E E. . . . .r$   rF   c                    d }t           j        }|t          j        k    r_d }j        Ct          fdt          j        d          D             d          }t          j        d|          }|t          j	        k    rt          j
        }|t          j        k    r|rj        t          v rHt          t          j                            |                    }d|j        _        t'          |          }nft          d |j                                      |           }t-          |          }n,t/          j        d                    j                             |'j         t7          j        j        j                  }|S )Nc              3   P   K   | ] }|                     j                  |V  !d S r(   )
startswithtaesd_decoder_name).0fnlatent_formats     r"   	<genexpr>z get_previewer.<locals>.<genexpr>V   sS       H H}}]%EFFH H H H H H Hr$   
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 H H Hl<\JJ H H H" "
 ".!;LJ\!]!](---(3F(...! 	U 3zAA ; ;<N O OPPE@EE+= 25 9 9II!$(:MLijjjmmntuuE 25 9 9II j q qr  sS  !T  !T  U  U  U/;/0PR_Rw  zG  zb  c  c	r$   c                     ddvrdt          | j        | j        j                  t          j                            |          fd}|S )Nr.   )r.   PNGc                 ~    |d<   d }r                     |          }                    | dz   ||           d S )Nr+   r   )r2   update_absolute)	stepr+   xtotal_stepspreview_bytespbarr0   rp   x0_output_dicts	        r"   callbackz"prepare_callback.<locals>.callbackx   sY    %#%N4  	Y%DD^UWXXMTAX{MBBBBBr$   )rs   load_devicemodelr[   r   ri   ProgressBar)r   stepsr}   r~   r|   r0   rp   s     ` @@@r"   prepare_callbackr   p   s~    N_,,e/1JKKI;""5))DC C C C C C C C Or$   overridec                     | r*| dk    r$t          j        |           }||t          _        d S t          t          _        d S )Ndefault)r   from_stringr   r`   default_preview_method)r   rq   s     r"   set_preview_methodr      sE     H	))$0::"(DF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 4 4 4 4 4 4 4 # # # # # #                   , * SSS
6 6 6 6? ? ? ? ? ? ? ?* * * * * * * *: : : : :+ : : :
. . . . ./ . . .4     D   $1 1 1 1 1 1 1 1r$   