
    +j{6                        d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ  G d d          Z G d d          Z G d d          Z G d	 d
          Z G d d          Z G d d          Z G d d          ZddZ G d d          Z G d d          Z G d d          Z G d d          ZeeeeeeeeeeedZddiZdS )    N)argsc                   6    e Zd Zed             ZdZdZdZd ZdS )ModelMergeSimplec           	           dddddddddfdiS )	NrequiredMODELFLOAT      ?        {Gz?defaultminmaxstep)model1model2ratio ss    @/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_model_merging.pyINPUT_TYPESzModelMergeSimple.INPUT_TYPES   s4    
(2(/SUXbf1g1g'h    ! 	!    r   mergeadvanced/model_mergingc                     |                                 }|                    d          }|D ]$}|                    |||         id|z
  |           %|fS Ndiffusion_model.r   cloneget_key_patchesadd_patches)selfr   r   r   mkpks          r   r   zModelMergeSimple.merge   s^    LLNN##$677 	: 	:AMM1be*cEk59999ur   N	__name__
__module____qualname__classmethodr   RETURN_TYPESFUNCTIONCATEGORYr   r   r   r   r   r      M        ! ! [!
 LH'H    r   r   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelSubtractc           	           dddddddddfd	iS )
Nr   r   r
   r         $      $@r   r   )r   r   
multiplierr   r   s    r   r   zModelSubtract.INPUT_TYPES"   s4    
(2-4#e\`jn6o6o,p    ! 	!r   r   r   r   c                     |                                 }|                    d          }|D ]"}|                    |||         i| |           #|fS )Nr    r!   )r%   r   r   r7   r&   r'   r(   s          r   r   zModelSubtract.merge-   s^    LLNN##$677 	@ 	@AMM1be*
lJ????ur   Nr)   r   r   r   r3   r3   !   r1   r   r3   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelAddc                     ddddiS )Nr   r   )r   r   r   r   s    r   r   zModelAdd.INPUT_TYPES5   s    
(2    ! 	!r   r   r   r   c                     |                                 }|                    d          }|D ]!}|                    |||         idd           "|fS r   r!   )r%   r   r   r&   r'   r(   s         r   r   zModelAdd.merge?   sZ    LLNN##$677 	0 	0AMM1be*c3////ur   Nr)   r   r   r   r:   r:   4   sM        ! ! [! LH'H    r   r:   c                   6    e Zd Zed             ZdZdZdZd ZdS )CLIPMergeSimplec           	           dddddddddfdiS )	Nr   CLIPr
   r   r   r   r   )clip1clip2r   r   r   s    r   r   zCLIPMergeSimple.INPUT_TYPESH   s4    y'0(/SUXbf1g1g'h    ! 	!r   r@   r   r   c                     |                                 }|                                }|D ]O}|                    d          s|                    d          r-|                    |||         id|z
  |           P|fS N.position_ids.logit_scaler   r"   r#   endswithr$   )r%   rB   rC   r   r&   r'   r(   s          r   r   zCLIPMergeSimple.mergeS   s    KKMM""$$ 	: 	:Azz/** ajj.H.H MM1be*cEk59999ur   Nr)   r   r   r   r>   r>   G   sM        ! ! [!
 LH'H    r   r>   c                   >    e Zd ZddgZed             ZdZdZdZd Z	dS )	CLIPSubtractzclip differenceztext encoder subtractc           	           dddddddddfd	iS )
Nr   r@   r
   r   r5   r6   r   r   )rB   rC   r7   r   r   s    r   r   zCLIPSubtract.INPUT_TYPES_   s4    y'0-4#e\`jn6o6o,p    ! 	!r   r@   r   r   c                     |                                 }|                                }|D ]M}|                    d          s|                    d          r-|                    |||         i| |           N|fS )NrF   rG   rH   )r%   rB   rC   r7   r&   r'   r(   s          r   r   zCLIPSubtract.mergej   s    KKMM""$$ 	@ 	@Azz/** ajj.H.H MM1be*
lJ????ur   N
r*   r+   r,   SEARCH_ALIASESr-   r   r.   r/   r0   r   r   r   r   rK   rK   ]   sX        ')@AN! ! [!
 LH'H    r   rK   c                   <    e Zd ZdgZed             ZdZdZdZd Z	dS )CLIPAddzcombine clipc                     ddddiS )Nr   r@   )rB   rC   r   r   s    r   r   zCLIPAdd.INPUT_TYPESv   s    y'0    ! 	!r   r@   r   r   c                     |                                 }|                                }|D ]L}|                    d          s|                    d          r-|                    |||         idd           M|fS rE   rH   )r%   rB   rC   r&   r'   r(   s         r   r   zCLIPAdd.merge   s    KKMM""$$ 	0 	0Azz/** ajj.H.H MM1be*c3////ur   NrN   r   r   r   rQ   rQ   t   sU        $%N! ! [! LH'H    r   rQ   c                   6    e Zd Zed             ZdZdZdZd ZdS )ModelMergeBlocksc                 @    dddddddddfddddddfddddddfdiS )	Nr   r   r
   r   r   r   r   )r   r   inputmiddleoutr   r   s    r   r   zModelMergeBlocks.INPUT_TYPES   s`    
(2(/SUXbf1g1g'h)0c#VYcg2h2h(i&-3sSV`d/e/e%f	    ! 	!r   r   r   r   c                    |                                 }|                    d          }t          t          |                                                    }|D ]}|}|t          d          d          }	d}
|D ]A}|	                    |          r*|
t          |          k     r||         }t          |          }
B|                    |||         id|z
  |           |fS )Nr    r   r   )r"   r#   nextitervalueslen
startswithr$   )r%   r   r   kwargsr&   r'   default_ratior(   r   k_unetlast_arg_sizeargs               r   r   zModelMergeBlocks.merge   s    LLNN##$677T&--//2233 
	: 
	:A!Es-..//0FM - -$$S)) -mc#hh.F.F"3KE$'HHMMM1be*cEk59999ur   Nr)   r   r   r   rU   rU      sM        ! ! [! LH'H    r   rU   c           	         t          j        ||          \  }}	}
}}d}|t          j        |          }i }d}t	          | j        t          j        j                  r0t	          | j        t          j        j	                  rd|d<   nd|d<   nt	          | j        t          j        j
                  rd|d<   nVt	          | j        t          j        j                  rd|d<   n,t	          | j        t          j        j                  rd|d<   nd	}|r#d
|d<   d|d<   d                    |	|
          |d<   i }|                     d          }t	          |t          j        j                  r{t	          |t          j        j                  r\t%          j        |j                                                  |d<   t%          j        |j                                                  |d<   | j        j        t          j        j        j        k    rd|d<   nh| j        j        t          j        j        j        k    rDd|d<   t%          j        g           |d<   t5          |dd	          rt%          j        g           |d<   t6          j        s)||d<   |"|D ]}t          j        ||                   ||<    |	 d|
dd}t:          j                            ||          }t          j         !                    || |||||           d S )N Tzstable-diffusion-xl-v1-editzmodelspec.architecturezstable-diffusion-xl-v1-basezstable-diffusion-xl-v1-refinerz!stable-video-diffusion-img2vid-v1zstable-diffusion-v3-mediumFz1.0.0zmodelspec.sai_model_specsgmzmodelspec.implementationz{} {}zmodelspec.titlemodel_samplingzedm_vpred.sigma_maxzedm_vpred.sigma_minepsilonzmodelspec.predict_keyvv_predzsnrztsnrprompt_05_.safetensors)metadata
extra_keys)"folder_pathsget_save_image_pathjsondumps
isinstancemodelcomfy
model_baseSDXLSDXL_instructpix2pixSDXLRefinerSVD_img2vidSD3formatget_model_objectrh   ModelSamplingContinuousEDMV_PREDICTIONtorchtensor	sigma_maxfloat	sigma_min
model_type	ModelTypeEPSgetattrr   disable_metadataospathjoinsdsave_checkpoint)ry   clipvaeclip_visionfilename_prefix
output_dirrn   extra_pnginfofull_output_folderfilenamecounter	subfolderprompt_inforr   enable_modelspecrs   rh   xoutput_checkpoints                      r   r   r      s   HTHhix  {E  IF  IFE'9oKj((H%+u/455 !ek5#3#HII 	O1NH-..1NH-..	EK!1!=	>	> !-M)**	EK!1!=	>	> !-P)**	EK!1!5	6	6 !-I)**  H/6+,/4+,&-nnXw&G&G"# J++,<==N.%"6"QRR _ne&:&GHH 	_05^=U0V0V0\0\0^0^J,-05^=U0V0V0\0\0^0^J,-{!1!;!???,5())		5#3#=#J	J	J,/()$|B//
8>6511 	3"',r"2"2Jw  ;($" ; ;"jq)9::#??g????%79JKK	H.tS+X`mwxxxxxr   c                   J    e Zd Zg dZd Zed             ZdZdZdZ	dZ
d
d	ZdS )CheckpointSave)z
save modelzexport checkpointz
merge savec                 6    t          j                    | _        d S Nrt   get_output_directoryr   r%   s    r   __init__zCheckpointSave.__init__       &;==r   c                 $    ddddddifddd	d
dS )Nr   r@   VAESTRINGr   zcheckpoints/ComfyUI)ry   r   r   r   PROMPTEXTRA_PNGINFOrn   r   r   hiddenr   r   s    r   r   zCheckpointSave.INPUT_TYPES   sD    '1&/%-2:YH]<^1_b b &.PP	S S 	Sr   r   saveTr   Nc           	      <    t          ||||| j        ||           i S )N)r   r   r   r   rn   r   r   r   )r%   ry   r   r   r   rn   r   s          r   r   zCheckpointSave.save   s:    Dc?_c_nw}  N[  	\  	\  	\  	\	r   NNr*   r+   r,   rO   r   r-   r   r.   r/   OUTPUT_NODEr0   r   r   r   r   r   r      sv        FFFN> > > S S [S LHK'H     r   r   c                   B    e Zd Zd Zed             ZdZdZdZdZ	d	dZ
dS )
CLIPSavec                 6    t          j                    | _        d S r   r   r   s    r   r   zCLIPSave.__init__   r   r   c                      ddddifddddd	S )
Nr@   r   r   zclip/ComfyUI)r   r   r   r   r   r   r   r   s    r   r   zCLIPSave.INPUT_TYPES   s;    &/2:Y<W1X[ [%-PPS S 	Sr   r   r   Tr   Nc                 p   d}|t          j        |          }i }t          j        s.d|d<   ||d<   |"|D ]}t          j        ||                   ||<    |                                 |                                }dD ]4t          t          fd|                                                    }	i }
|	D ]}|	                    |          |
|<   t          |
          dk    rhd d         }i }|}t          |          dk    rd	                    ||          }d|<   d|d
<   t          j        || j                  \  }}}}}| d|dd}t          j                            ||          }t$          j                            |
|          }
t$          j                            |
||           6i S )Nrf   ptr   rn   )zclip_l.zclip_g.zclip_h.zt5xxl.z
pile_t5xl.zmt5xl.zumt5xxl.zt5base.z
gemma2_2b.zllama.zhydit_clip.rf   c                 .    |                                S r   )r_   )aprefixs    r   <lambda>zCLIPSave.save.<locals>.<lambda>  s    all6&:&: r   r   z{}_{}ztransformer.ro   rp   rq   rr   )rv   rw   r   r   
load_modelstate_dict_for_savinglistfilterkeyspopr^   r   rt   ru   r   r   r   r   rz   utilsstate_dict_prefix_replacesave_torch_file)r%   r   r   rn   r   r   rr   r   clip_sdr(   current_clip_sdpreplace_prefixfilename_prefix_r   r   r   r   r   r   s                      @r   r   zCLIPSave.save
  s   *V,,K$ 	?!%HX!,HX(& ? ?A"&*]1-=">">HQKK,,.. \ 	_ 	_FV::::GLLNNKKLLA O 4 4%,[[^^""?##q((ssAN.1vvzz#*>>2BA#F#F )+v&-/N>*Q]Qq  sC  EI  ET  RU  RUN'9>N#+ G Gg G G G G "-?AR S S#kCCOUcddOK''9JU]'^^^^	r   r   r*   r+   r,   r   r-   r   r.   r/   r   r0   r   r   r   r   r   r      sk        > > > S S [S LHK'H( ( ( ( ( (r   r   c                   B    e Zd Zd Zed             ZdZdZdZdZ	d	dZ
dS )
VAESavec                 6    t          j                    | _        d S r   r   r   s    r   r   zVAESave.__init__5  r   r   c                      ddddifddddd	S )
Nr   r   r   zvae/ComfyUI_vae)r   r   r   r   r   r   r   r   s    r   r   zVAESave.INPUT_TYPES8  s<    %-2:YHY<Z1[^ ^%-PPS S 	Sr   r   r   Tr   Nc                    t          j        || j                  \  }}}}}d}	|t          j        |          }	i }
t
          j        s)|	|
d<   |"|D ]}t          j        ||                   |
|<    | d|dd}t          j        	                    ||          }t          j                            |                                ||
           i S )Nrf   rn   ro   rp   rq   r   )rt   ru   r   rv   rw   r   r   r   r   r   rz   r   r   get_sd)r%   r   r   rn   r   r   r   r   r   r   rr   r   r   s                r   r   zVAESave.saveC  s    LXLlm|  C  N  MO  MOIHgy/*V,,K$ 	?!,HX(& ? ?A"&*]1-=">">HQKK'CC'CCCCGLL);=NOO##CJJLL2Ch#WWW	r   r   r   r   r   r   r   r   4  sk        > > > S S [S LHK'H     r   r   c                   J    e Zd ZddgZd Zed             ZdZdZdZ	dZ
dd
Zd	S )	ModelSavezexport modelzcheckpoint savec                 6    t          j                    | _        d S r   r   r   s    r   r   zModelSave.__init__X  r   r   c                      ddddifddddd	S )
Nr   r   r   zdiffusion_models/ComfyUI)ry   r   r   r   r   r   r   r   s    r   r   zModelSave.INPUT_TYPES[  s<    '12:YHb<c1dg g%-PPS S 	Sr   r   r   Tr   Nc                 8    t          ||| j        ||           i S )N)r   r   rn   r   r   )r%   ry   r   rn   r   s        r   r   zModelSave.savef  s4    4?ci  zG  	H  	H  	H  	H	r   r   r   r   r   r   r   r   V  sv        $&78N> > > S S [S LHK'H     r   r   )r   rU   ModelMergeSubtractModelMergeAddr   r>   CLIPMergeSubtractCLIPMergeAddr   r   r   zSave Checkpoint)NNNNNNN)comfy.sdrz   comfy.utilscomfy.model_basecomfy.model_managementcomfy.model_samplingr   rt   rv   r   comfy.cli_argsr   r   r3   r:   r>   rK   rQ   rU   r   r   r   r   r   NODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSr   r   r   <module>r      s                          				             &       &       &       ,       .       ,       @9y 9y 9y 9yv       ,7 7 7 7 7 7 7 7r               D       * )('$&%   '   r   