
    
3j_J                        S SK Jr  S SK r S SKrSSKJrJrJrJrJ	r	   " S S5      r
 " S S5      r " S	 S
5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S 5      r " S! S"5      r " S# S$5      r " S% S&5      r " S' S(5      rS)r " S* S+5      r " S, S-5      r " S. S/5      rg)0    )TensorN   )BIGMINBIGMAXselect_indexes_from_strconvert_str_to_indexesselect_indexesc                   0    \ rS rSrSrSrSrSr\\\\/rSr	g)MergeStrategies	   zmatch Azmatch Bzmatch smallerzmatch larger N)
__name__
__module____qualname____firstlineno__MATCH_AMATCH_BMATCH_SMALLERMATCH_LARGERlist_all__static_attributes__r       i/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-VideoHelperSuite/videohelpersuite/image_latent_nodes.pyr   r   	   s$    GG#M!L->Hr   r   c                   6    \ rS rSrSrSrSrSrSr\\\\\/r	Sr
g)	ScaleMethods   znearest-exactbilinearareabicubicbislerpr   N)r   r   r   r   NEAREST_EXACTBILINEARAREABICUBICBISLERPr   r   r   r   r   r   r      s+    #MHDGGxw@Hr   r   c                   $    \ rS rSrSrSr\\/rSrg)CropMethods   disabledcenterr   N)r   r   r   r   DISABLEDCENTERr   r   r   r   r   r'   r'      s    HF&!Hr   r'   c                   P    \ rS rSr\S 5       rSrSrSrSr	S\
\\4   S\4S	 jrS
rg)SplitLatents#   c                 .    SSSSS[         [        S.4S.0$ )NrequiredLATENTINTr   r   defaultstepminmax)latentssplit_indexr   r   ss    r   INPUT_TYPESSplitLatents.INPUT_TYPES$   s+     *$)q!F[a+b#c 	r   *   Video Helper Suite 🎥🅥🅗🅢/latent)r3   r4   r3   r4   )LATENT_AA_countLATENT_BB_countsplit_latentsr:   r;   c                 P   [        US   5      nUR                  5       nUR                  5       nUR                  5        H=  u  pg[        U5      [        :X  d  M  [        U5      U:X  d  M+  X   S U XF'   X   US  XV'   M?     XDS   R                  S5      XUS   R                  S5      4$ Nsamplesr   )lencopyitemstyper   size)selfr:   r;   latents_lengroup_agroup_bkeyvals           r   rF   SplitLatents.split_latents3   s    '),-,,.,,.HCCyF"s3x;'>&|L[9&|KL9 ( +003Wi>P>U>UVW>XYYr   r   N)r   r   r   r   classmethodr?   CATEGORYRETURN_TYPESRETURN_NAMESFUNCTIONdictstrr   intrF   r   r   r   r   r.   r.   #   sI      <H5LALHZT#v+%6 ZS Zr   r.   c                   F    \ rS rSr\S 5       rSrSrSrSr	S\
S\4S	 jrS
rg)SplitImages>   c                 .    SSSSS[         [        S.4S.0$ )Nr1   IMAGEr4   r   r   r5   )imagesr;   r<   r=   s    r   r?   SplitImages.INPUT_TYPES?   s+     ($)q!F[a+b#c 	r   )   Video Helper Suite 🎥🅥🅗🅢/image)rc   r4   rc   r4   )IMAGE_ArC   IMAGE_BrE   split_imagesrd   r;   c                 X    US U nXS  nX3R                  S5      XDR                  S5      4$ Nr   rN   )rO   rd   r;   rQ   rR   s        r   ri   SplitImages.split_imagesN   s3    +&&a'<<?CCr   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r   r]   ri   r   r   r   r   r_   r_   >   s@      ;H3L?LHD6 D Dr   r_   c                   F    \ rS rSr\S 5       rSrSrSrSr	S\
S\4S	 jrS
rg)
SplitMasksT   c                 .    SSSSS[         [        S.4S.0$ )Nr1   MASKr4   r   r   r5   )maskr;   r<   r=   s    r   r?   SplitMasks.INPUT_TYPESU   s+     %$)q!F[a+b#c 	r   (   Video Helper Suite 🎥🅥🅗🅢/mask)rs   r4   rs   r4   )MASK_ArC   MASK_BrE   split_masksrt   r;   c                 X    US U nXS  nX3R                  S5      XDR                  S5      4$ rk   rl   )rO   rt   r;   rQ   rR   s        r   ry   SplitMasks.split_masksd   s3    |$|$a'<<?CCr   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r   r]   ry   r   r   r   r   ro   ro   T   s@      :H1L=LHD DS Dr   ro   c            
       R    \ rS rSr\S 5       rSrSrSrSr	S\
S\
S	\S
\S\4
S jrSrg)MergeLatentsj   c                 p    SSS[         R                  4[        R                  4[        R                  4S.0$ )Nr1   r2   )	latents_A	latents_Bmerge_strategyscale_methodcropr   r   r   r'   r=   s    r   r?   MergeLatents.INPUT_TYPESk   s@     ((#2#;#;"=!-!6!6 8$--/
 	
r   rA   r3   r4   r3   countmerger   r   r   r   r   c                    / nUR                  5       S   nUR                  5       S   nUR                  S   UR                  S   :w  d!  UR                  S   UR                  S   :w  Ga+  UR                  S   UR                  S   -  nUR                  S   UR                  S   -  nSn	U[        R                  :X  a  OXU[        R                  :X  a  Sn	OAU[        R
                  [        R                  4;   a  Xx::  a  U[        R
                  :X  a  SOSn	U	(       a<  [        R                  R                  X!R                  S   UR                  S   XE5      nO;[        R                  R                  XR                  S   UR                  S   XE5      nUR                  U5        UR                  U5        S[        R                  " USS90n
U
[        U
S   5      4$ )NrI         TFr   dim)rK   shaper   r   r   r   r   comfyutilscommon_upscaleappendtorchcatrJ   )rO   r   r   r   r   r   r:   A_sizeB_sizeuse_A_as_templatemergeds              r   r   MergeLatents.merge}   s   NN$Y/	NN$Y/	 ??1!33yq7IY__]^M_7___Q')//!*<<F__Q')//!*<<F $!8!88?#:#::$)!O$A$A?C_C_#``#0>/B_B_0_ej% !KK66y//RSBTV_VeVefgVhjv}	!KK66y//RSBTV_VeVefgVhjv}	y!y!UYYwA67F9-.00r   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r[   r\   r   r   r   r   r   r}   r}   j   sT    	
 	
 <H%L'LH1t 1 1c 1Y\ 1dg 1r   r}   c            
       R    \ rS rSr\S 5       rSrSrSrSr	S\
S\
S	\S
\S\4
S jrSrg)MergeImages   c                 p    SSS[         R                  4[        R                  4[        R                  4S.0$ )Nr1   rb   )images_Aimages_Br   r   r   r   r=   s    r   r?   MergeImages.INPUT_TYPES   s@     &&#2#;#;"=!-!6!6 8$--/
 	
r   rf   rc   r4   rc   r   r   r   r   r   r   r   c                     / nUR                   S   UR                   S   :w  d!  UR                   S   UR                   S   :w  Gas  UR                  SS5      nUR                  SS5      nUR                   S   UR                   S   -  nUR                   S   UR                   S   -  nSn	U[        R                  :X  a  OXU[        R                  :X  a  Sn	OAU[        R
                  [        R                  4;   a  Xx::  a  U[        R
                  :X  a  SOSn	U	(       a<  [        R                  R                  X!R                   S   UR                   S   XE5      nO;[        R                  R                  XR                   S   UR                   S   XE5      nUR                  SS5      nUR                  SS5      nUR                  U5        UR                  U5        [        R                  " USS9n
XR                  S5      4$ )	Nr   r   r   TFr   r   )r   movedimr   r   r   r   r   r   r   r   r   r   r   rN   )rO   r   r   r   r   r   rd   r   r   r   
all_imagess              r   r   MergeImages.merge   s   >>!q 11X^^A5F(..YZJ[5[''1-H''1-H^^A&)::F^^A&)::F $!8!88?#:#::$)!O$A$A?C_C_#``#0>/B_B_0_ej%  ;;55hq@QS[SaSabcSdfry ;;55hq@QS[SaSabcSdfry''"-H''"-HhhYYv1-
OOA.00r   r   Nr   r   r   r   rV   r?   rW   rX   rY   rZ   r   r\   r   r   r   r   r   r   r      sT    	
 	
 ;H$L&LH1f 1 1 1[^ 1fi 1r   r   c            
       R    \ rS rSr\S 5       rSrSrSrSr	S\
S\
S	\S
\S\4
S jrSrg)
MergeMasks   c                 p    SSS[         R                  4[        R                  4[        R                  4S.0$ )Nr1   rr   )mask_Amask_Br   r   r   r   r=   s    r   r?   MergeMasks.INPUT_TYPES   s@     ###2#;#;"=!-!6!6 8$--/
 	
r   rv   rs   r4   rs   r   r   r   r   r   r   r   c                 (   / nUR                   S   UR                   S   :w  d!  UR                   S   UR                   S   :w  Ga  UR                   S   UR                   S   -  nUR                   S   UR                   S   -  nSn	U[        R                  :X  a  OXU[        R                  :X  a  Sn	OAU[        R                  [        R
                  4;   a  Xx::  a  U[        R                  :X  a  SOSn	[        R                  " US5      n[        R                  " US5      nU	(       a<  [        R                  R                  X!R                   S   UR                   S   XE5      nO;[        R                  R                  XR                   S   UR                   S   XE5      n[        R                  " US5      n[        R                  " US5      nUR                  U5        UR                  U5        [        R                  " USS9n
XR                  S5      4$ )Nr   r   TFr   r   r   )r   r   r   r   r   r   r   	unsqueezer   r   r   squeezer   r   rN   )rO   r   r   r   r   r   masksr   r   r   	all_maskss              r   r   MergeMasks.merge   s   <<?fll1o-aFLLQRO1S\\!_v||A6F\\!_v||A6F $!8!88?#:#::$)!O$A$A?C_C_#``#0>/B_B_0_ej%__VQ/F__VQ/F 33FLLOV\\Z[_^jq33FLLOV\\Z[_^jq]]61-F]]61-FVVIIe+	>>!,..r   r   Nr   r   r   r   r   r      sT    	
 	
 :H#L%LH/F /F /C /WZ /be /r   r   c                   T    \ rS rSr\S 5       rSrSrSrSr	S\
\\4   S\S	\4S
 jrSrg)SelectEveryNthLatenti  c           	      >    SSSSS[         SS.4SSS[         SS.4S.0$ )Nr1   r2   r4   r   r6   r8   r9   r7   r   )r:   select_every_nthskip_first_latentsr   r=   s    r   r?    SelectEveryNthLatent.INPUT_TYPES  s?     *).AaPV`a0b(c+0aRXbc2d*e 	r   rA   r   r   select_latentsr:   r   r   c                     UR                  5       n[        US   5      nUR                  5        H4  u  pV[        U5      [        :X  d  M  [        U5      U:X  d  M+  XcS U2   X'   M6     XS   R                  S5      4$ rH   )rK   rJ   rL   rM   r   rN   )rO   r:   r   r   rP   rS   rT   s          r   r   #SelectEveryNthLatent.select_latents  ss    ,,.'),-HCCyF"s3x;'>"#G7G#GH ( +00344r   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r[   r\   r   r]   r   r   r   r   r   r   r     sN      <H%L'LH5d3;&7 53 5dg 5r   r   c                   J    \ rS rSr\S 5       rSrSrSrSr	S\
S\S	\4S
 jrSrg)SelectEveryNthImagei  c           	      >    SSSSS[         SS.4SSS[         SS.4S.0$ )Nr1   rb   r4   r   r   r   )rd   r   skip_first_imagesr   r=   s    r   r?   SelectEveryNthImage.INPUT_TYPES  s?     ().AaPV`a0b(c*/QqQWab1c)d 	r   rf   r   r   select_imagesrd   r   r   c                 4    XS U2   nXDR                  S5      4$ rk   rl   )rO   rd   r   r   
sub_imagess        r   r   !SelectEveryNthImage.select_images0  s%    ?/??@
OOA.//r   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r   r]   r   r   r   r   r   r   r     sE      ;H$L&LH0F 0c 0VY 0r   r   c                   J    \ rS rSr\S 5       rSrSrSrSr	S\
S\S	\4S
 jrSrg)SelectEveryNthMaski5  c           	      >    SSSSS[         SS.4SSS[         SS.4S.0$ )Nr1   rr   r4   r   r   r   )rt   r   skip_first_masksr   r=   s    r   r?   SelectEveryNthMask.INPUT_TYPES6  s?     %).AaPV`a0b(c).AaPV`a0b(c 	r   rv   r   r   select_masksrt   r   r   c                 4    XS U2   nXDR                  S5      4$ rk   rl   )rO   rt   r   r   sub_masks        r   r   SelectEveryNthMask.select_masksF  s%    :*::;--*++r   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r   r]   r   r   r   r   r   r   r   5  sE      :H#L%LH, ,3 ,RU ,r   r   c                   B    \ rS rSr\S 5       rSrSrSrSr	S\
4S jrS	rg
)GetLatentCountiK  c                     SSS00$ )Nr1   r:   r2   r   r=   s    r   r?   GetLatentCount.INPUT_TYPESL  s     ;
 	
r   rA   r4   r   count_inputr:   c                 ,    US   R                  S5      4$ rH   rl   )rO   r:   s     r   r   GetLatentCount.count_inputZ  s    	"''*,,r   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r[   r   r   r   r   r   r   r   K  s6    
 
 <HLLH-4 -r   r   c                   B    \ rS rSr\S 5       rSrSrSrSr	S\
4S jrS	rg
)GetImageCounti^  c                     SSS00$ )Nr1   rd   rb   r   r=   s    r   r?   GetImageCount.INPUT_TYPES_  s     *
 	
r   rf   r   r   r   rd   c                 &    UR                  S5      4$ rk   rl   )rO   rd   s     r   r   GetImageCount.count_inputm  s    A  r   r   Nr   r   r   r   rV   r?   rW   rX   rY   rZ   r   r   r   r   r   r   r   r   ^  s6    
 
 ;HLLH!& !r   r   c                   B    \ rS rSr\S 5       rSrSrSrSr	S\
4S jrS	rg
)GetMaskCountiq  c                     SSS00$ )Nr1   rt   rr   r   r=   s    r   r?   GetMaskCount.INPUT_TYPESr  s     	
 	
r   rv   r   r   r   rt   c                 &    UR                  S5      4$ rk   rl   )rO   rt   s     r   r   GetMaskCount.count_input  s    		!r   r   Nr   r   r   r   r   r   q  s6    
 
 :HLLH r   r   c                   P    \ rS rSr\S 5       rSrSrSrSr	S\
\\4   S\4S	 jrS
rg)RepeatLatentsi  c                 &    SSSSS[         SS.4S.0$ )Nr1   r2   r4   r   r   )r:   multiply_byr   r=   s    r   r?   RepeatLatents.INPUT_TYPES  s+     & %1QvWX'YZ
 	
r   rA   r   r   duplicate_inputr:   r   c                 d   UR                  5       n[        US   5      nUR                  5        Hj  u  pE[        U5      [        :X  d  M  [        U5      U:X  d  M+  / n[        SU5       H  nUR                  X   5        M     [        R                  " USS9X'   Ml     XS   R                  S5      4$ )NrI   r   r   )
rK   rJ   rL   rM   r   ranger   r   r   rN   )rO   r:   r   rP   rS   rT   full_latents_s           r   r   RepeatLatents.duplicate_input  s    ,,.'),-HCCyF"s3x;'>!q+.A ''5 /$yy1= ( +00355r   r   N)r   r   r   r   rV   r?   rW   rX   rY   rZ   r[   r\   r   r]   r   r   r   r   r   r   r     sF    
 
 <H%L'L H	6tCK'8 	6s 	6r   r   c                   F    \ rS rSr\S 5       rSrSrSrSr	S\
S\4S	 jrS
rg)RepeatImagesi  c                 &    SSSSS[         SS.4S.0$ )Nr1   rb   r4   r   r   )rd   r   r   r=   s    r   r?   RepeatImages.INPUT_TYPES  s+     $ %1QvWX'YZ
 	
r   rf   r   r   r   rd   r   c                     / n[        SU5       H  nUR                  U5        M     [        R                  " USS9nXUR	                  S5      4$ Nr   r   r   r   r   r   rN   )rO   rd   r   full_imagesn
new_imagess         r   r   RepeatImages.duplicate_input  sH    q+&Av& 'YY{2
OOA.00r   r   Nr   r   r   r   rV   r?   rW   rX   rY   rZ   r   r]   r   r   r   r   r   r   r     s=    
 
 ;H$L&L H1f 13 1r   r   c                   F    \ rS rSr\S 5       rSrSrSrSr	S\
S\4S	 jrS
rg)RepeatMasksi  c                 &    SSSSS[         SS.4S.0$ )Nr1   rr   r4   r   r   )rt   r   r   r=   s    r   r?   RepeatMasks.INPUT_TYPES  s+     ! %1QvWX'YZ
 	
r   rv   r   r   r   rt   r   c                     / n[        SU5       H  nUR                  U5        M     [        R                  " USS9nXUR	                  S5      4$ r   r   )rO   rt   r   
full_masksr   new_masks         r   r   RepeatMasks.duplicate_input  sH    
q+&Ad# '99ZQ/--*,,r   r   Nr  r   r   r   r  r    s=    
 
 :H#L%L H-F - -r   r  a   Use comma-separated indexes to select items in the given order.
Supports negative indexes, python-style ranges (end index excluded),
as well as range step.

Acceptable entries (assuming 16 items provided, so idxs 0 to 15 exist):
0         -> Returns [0]
-1        -> Returns [15]
0, 1, 13  -> Returns [0, 1, 13]
0:5, 13   -> Returns [0, 1, 2, 3, 4, 13]
0:-1      -> Returns [0, 1, 2, ..., 13, 14]
0:5:-1    -> Returns [4, 3, 2, 1, 0]
0:5:2     -> Returns [0, 2, 4]
::-1     -> Returns [15, 14, 13, ..., 2, 1, 0]
c                   X    \ rS rSr\S 5       r\rSrSr	Sr
S\\\4   S\S\S	\4S
 jrSrg)SelectLatentsi  c                 ,    SSSSS04SSS04SSS04S.0$ )	Nr1   r2   STRINGr6   0BOOLEANT)latentindexeserr_if_missingerr_if_emptyr   r=   s    r   r?   SelectLatents.INPUT_TYPES  s@     ) (9c*:;'09d2C&D%.D0A$B	 	r   rA   r2   selectr  r  r  r  c                 D   UR                  5       n[        US   5      n[        X%U(       + S9nU(       a  [        U5      S:X  a  [        SU S35      eUR	                  5        H8  u  px[        U5      [        :X  d  M  [        U5      U:X  d  M+  [        X5      X'   M:     U4$ )NrI   )allow_missingr   z0Nothing was selected based on indexes found in 'z'.)rK   rJ   r   	ExceptionrL   rM   r   r	   )	rO   r  r  r  r  rP   	real_idxsrS   rT   s	            r   r  SelectLatents.select  s    &+,*7SaOab	C	Na/NwiWYZ[[HCCyF"s3x;'>,S< ' yr   r   N)r   r   r   r   rV   r?   select_descriptionDESCRIPTIONrW   rX   rZ   r[   r\   r   boolr  r   r   r   r   r  r    sU      %K;HLH
T#v+. 
 
d 
bf 
r   r  c                   N    \ rS rSr\S 5       r\rSrSr	Sr
S\S\S\S	\4S
 jrSrg)SelectImagesi  c                 ,    SSSSS04SSS04SSS04S.0$ )	Nr1   rb   r  r6   r  r  T)imager  r  r  r   r=   s    r   r?   SelectImages.INPUT_TYPES  s@     ' (9c*:;'09d2C&D%.D0A$B	 	r   rf   rb   r  r#  r  r  r  c                 2    [        XX4S9n[        U5      nU4$ N)	input_objr  r  r  )r   rM   )rO   r#  r  r  r  	to_returnto_return_types          r   r  SelectImages.select  s#    +e7Eb	i|r   r   Nr   r   r   r   rV   r?   r  r  rW   rX   rZ   r   r\   r  r  r   r   r   r   r!  r!    sL      %K:HLHF S $ VZ r   r!  c                   N    \ rS rSr\S 5       r\rSrSr	Sr
S\S\S\S	\4S
 jrSrg)SelectMasksi  c                 ,    SSSSS04SSS04SSS04S.0$ )	Nr1   rr   r  r6   r  r  T)rt   r  r  r  r   r=   s    r   r?   SelectMasks.INPUT_TYPES  s@     % (9c*:;'09d2C&D%.D0A$B	 	r   rv   rr   r  rt   r  r  r  c                     [        XX4S94$ r&  )r   )rO   rt   r  r  r  s        r   r  SelectMasks.select(  s    '$7Eb d 	dr   r   Nr+  r   r   r   r-  r-    sQ      %K9HLHd6 dC d dUY dr   r-  ) r   r   comfy.utilsr   r   r   r   r   r   r	   r   r   r'   r.   r_   ro   r}   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r-  r   r   r   <module>r3     s       b b? ?A A" "Z Z6D D,D D,01 01f01 01f1/ 1/h5 540 0., ,,- -&! !& &6 681 10- -0  > 2d dr   