
    
3jB              	          S SK r S SKrS SKJr  S SKrS SKrS SKrS SKrS SKJ	r	  S SKJ
r
  S SKrS SKrS SKJr  S SKrSSKJr  S SKrSrS	rS
rSrS r " S S\5      r\" SSS/5      r\" SSS/5      r " S S\5      rS\R8                  ;   a  \R8                  R;                  S5      rGO(/ r S SK J!r!  \!" 5       r"\RG                  \"5        S\R8                  ;   a  \"rO\RJ                  " S5      r&\&b  \RG                  \&5        \RN                  RQ                  S5      (       a*  \RG                  \RN                  RS                  S5      5        \RN                  RQ                  S5      (       a*  \RG                  \RN                  RS                  S5      5        \*" \5      S :X  a  \RV                  " S5        SrO\*" \5      S:X  a  \S    rO\," \\S9r\R8                  R;                  SS5      r-\-c1  \R8                  R;                  SS5      r-\-c  \RJ                  " S5      r-\R8                  R;                  S S5      =(       d+    \RJ                  " S!5      =(       d    \RJ                  " S"5      r.0 r/S# r0SIS$ jr1SJS%\S&\2S'\2S(\4S) jjr3SKS*\S+\24S, jjr4\Rj                  Rl                  Rn                  r7S- r8SS S 0 /q9SLS. jr:SMS/ jr; " S0 S1\	5      r<SMS2 jr=S3 r>S4 r?S5 r@S6 rASNS7 jrBSOS8\2S9\2S:\CS;\24S< jjrDSOS=\S9\2S:\CS;\24S> jjrESPS?\S9\2S;\F\2   4S@ jjrGSA\
\\F4   SB\F4SC jrHSQSD jrISRSA\
\\F4   SE\4SF jjrJSG rKSH rLg!   S\R8                  ;   a  e \RH                  " S5         GN= f)S    N)Iterable)Mapping)Union)Tensor   )loggerl l    i    )zutf-8backslashreplacec                 d    [         R                  " U S/SSS9R                  R                  " [        6 nSn/ SQnU H$  nUR                  US   5      S:  d  M  X$S   -  nM&     UR                  S5      nUS:  a-  XS-   US	-    nUR                  5       (       a  U[        U5      -  nU$ !    g= f)
Nz-versionT)checkcapture_outputr   ))libvpx   )264
   )265   )svtav1   )libopusr   r   z2000-2   	   )
subprocessrunstdoutdecodeENCODE_ARGSfind	isnumericint)pathversionscoresimple_criterion	criterioncopyright_indexcopyright_years          \/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-VideoHelperSuite/videohelpersuite/utils.pyffmpeg_suitabilityr(      s    ..$
!340466<fVVDEPR E5%	<<	!%*q\!E & ll8,O! !2?13DE##%%S((ELs   3B+ +B/c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )
MultiInput.   c                 2   > [         TU ]  X5      nX#l        U$ N)super__new__allowed_types)clsstringr0   res	__class__s       r'   r/   MultiInput.__new__/   s    goc*'
    c                 L    U R                   S:X  d  US:X  a  gXR                   ;  $ )N*F)r0   selfothers     r'   __ne__MultiInput.__ne__3   s(    $....r6    )r8   )__name__
__module____qualname____firstlineno__r/   r<   __static_attributes____classcell__r4   s   @r'   r*   r*   .   s    / /r6   r*   IMAGELATENTFLOATINTc                   .   ^  \ rS rSrS rU 4S jrSrU =r$ )ContainsAll:   c                     g)NTr>   r9   s     r'   __contains__ContainsAll.__contains__;   s    r6   c                 (   > [         TU ]  US 0 45      $ r-   )r.   get)r:   keyr4   s     r'   __getitem__ContainsAll.__getitem__=   s    w{3r
++r6   r>   )r?   r@   rA   rB   rN   rS   rC   rD   rE   s   @r'   rK   rK   :   s    , ,r6   rK   VHS_FORCE_FFMPEG_PATH)get_ffmpeg_exeVHS_USE_IMAGEIO_FFMPEGzFailed to import imageio_ffmpegffmpegz
ffmpeg.exezNo valid ffmpeg found.)rR   
VHS_GIFSKI
JOV_GIFSKIgifskiVHS_YTDLzyt-dlpz
youtube-dlc                    [         c  g U [        ;   a	  [        U    $ [        R                  " [        R
                  " 5       SS9   [        R                  " [         SSS[        R
                  " 5       U /SSS9nUR                  R                  " [        6 S S nU[        U '   U$ ! [        R                   a.  n[        SUR                  R                  " [        6 -   5      eS nAff = f)	NT)exist_okz--printzafter_move:filepathz-Pr   r   z(An error occurred in the yt-dl process:
)	ytdl_pathdownload_historyosmakedirsfolder_pathsget_temp_directoryr   r   r   r   r   CalledProcessError	Exceptionstderr)urlr3   filees       r'   try_download_videorm   g   s    
$$KK//1DA
	nni4I"L$C$C$EsL,0> zz  +.s3
 !SK (( C((//;/0 1 	1s   AB# #C%7)C  C%c                     S[         R                  ;  a  U(       d  g[         R                  R                  S5      n [         R                  R	                  X /5      nX2:H  $ !    g= f)NVHS_STRICT_PATHST.F)rc   environr    abspath
commonpath)r    strictbasedircommon_paths       r'   is_safe_pathrw   ~   sU    +Fggooc"Ggg(('9 !!s    A! !A%	directoryskip_first_imagesselect_every_nth
extensionsc                    [        U 5      n [        R                  " U 5      n[        U5      nU Vs/ s H"  n[        R                  R                  X5      PM$     nn[        [        S U5      5      nUbV  [        U5      n/ nU HA  nSUR                  S5      S   -   nUR                  5       U;   d  M0  UR                  U5        MC     UnXAS  nUSS U2   nU$ s  snf )Nc                 @    [         R                  R                  U 5      $ r-   )rc   r    isfile)filepaths    r'   <lambda>5get_sorted_dir_files_from_directory.<locals>.<lambda>   s    RWW^^H-Er6   rp   r`   r   )
strip_pathrc   listdirsortedr    joinlistfiltersplitlowerappend)	rx   ry   rz   r{   	dir_filesxnew_dir_filesr   exts	            r'   #get_sorted_dir_files_from_directoryr      s    9%I

9%Iy!I5>?Yi+YI?VEyQRI*%
!Hs+B//Cyy{j($$X. " "	,-I!---.I @s   )Cfilenamehash_every_nc                    [         R                  " 5       nUR                  U R                  5       5        UR                  [	        [
        R                  R                  U 5      5      R                  5       5        UR                  5       $ r-   )	hashlibsha256updateencodestrrc   r    getmtime	hexdigest)r   r   hs      r'   calculate_file_hashr      sX     	AHHX__HHS!!(+,3356;;=r6   c                  ~   [         R                  n [        [        U R	                  5       5      5      n[        U5      S:X  a  Uu  p#pEpbOUu  p#pEnUR                  5       nU H2  nXG   S   S:X  d  M  XG   S   R                  SS5      S-   XG   S   S'   M4     [        R                  R                  R                  * n[        R                  R                  =R                  S-  sl        [        [        R                  R                  5       5      n[        U5      S:  a  US   O0 n	[         R                  XXEXi45        g	)
zDRequeues the current workflow without checking for multiple requeuesr   
class_typeVHS_BatchManagerinputsrequeuer   r   r   N)prompt_queuecurrently_runningnextitervalueslencopyrQ   serverPromptServerinstancenumberr   uuiduuid4put)
r   value_	prompt_idprompt
extra_dataoutputs_to_executeuidr   	sensitives
             r'   requeue_workflow_uncheckedr      s   $66'..012E 5zQDIAv+=qAF>v+= [[]F;|$(::/5{8/D/H/HST/UVW/WFK!),  !!**111F
  ''1,'FKK%%'(IJNaIf=O[\r6   c                    [        [        R                  5      S:X  d   e[        [	        [        R                  R                  5       5      5      n[        U5      S:X  a  Uu  p#pEpcOUu  p#pEn[        S   U:w  a^  SnU HP  nXH   S   S:X  d  M  U H:  n	XI   S   S;   d  M  XI   S   R                  5        H  n
XS/:X  d  M  US-  nM     M<     MR     USU0 /q[        S   S-   [        S'   U S   [        S   U S   '   [        S   [        S	   :X  a1  [        [        S   R                  5       5      (       a  [        5         g g g )
Nr   r   r   r   r   )VHS_VideoCombiner   r      )	r   r   r   r   r   r   requeue_guardmaxr   )requeue_requiredr   
run_numberr   r   r   r   managed_outputsbm_uid
output_uidinps              r'   requeue_workflowr      sR   |--.!343 l44;;=>?E 5zQEJB,>BG?,>Q:%F~l+/AA"(J),7;OO#)#5h#?#F#F#HC"qk1 / 2 $I #)  $Q<$Q')M!,<Q,?M!%a()Q=++M!4D4K4K4M0N0N"$ 1O+r6   c                    [         SU /nUS:  a  US[        U5      /-  nUS:  a  US[        U5      /-  n [        R                  " U/ SQ-   SSS9n[        R
                  " [        UR                  5      [        R                  S9n[        R                  " S	UR                  R                  " [        6 5      nU(       a2  [!        UR#                  S5      5      nSSS.UR#                  S5         n	OSnSn	UR%                  SU	45      R'                  SS5      R)                  S5      nXXS.$ ! [        R                   a2  n[        S
U  S3UR                  R                  " [        6 -   5      eS nAff = f)Nz-ir   z-ssz-t)z-ff32le-Tr_   )dtypez, (\d+) Hz, (\w+), z!VHS failed to extract audio from z:
r   r   )monostereoiD  r`   )waveformsample_rate)ffmpeg_pathr   r   r   torch
frombuffer	bytearrayr   float32researchri   r   r   rg   rh   r   groupreshape	transpose	unsqueeze)
rk   
start_timedurationargsr3   audiomatchrl   aracs
             r'   	get_audior      sT   t$DA~J((!|s8}%%1~~d%99-1?  3::!6emmL		1#**2C2C[2QR Q  1%ekk!n5MM2b'",,Qq1;;A>E11 (( 1;D6E((//;/0 1 	11s   BD- -E3-E..E3c                   ,    \ rS rSrS rS rS rS rSrg)LazyAudioMap   c                 6    Xl         X l        X0l        S U l        g r-   )rk   r   r   _dict)r:   rk   r   r   s       r'   __init__LazyAudioMap.__init__   s    	"
r6   c                     U R                   c0  [        U R                  U R                  U R                  5      U l         U R                   U   $ r-   )r   r   rk   r   r   )r:   rR   s     r'   rS   LazyAudioMap.__getitem__   s6    ::"499doot}}MDJzz#r6   c                     U R                   c0  [        U R                  U R                  U R                  5      U l         [        U R                   5      $ r-   )r   r   rk   r   r   r   r:   s    r'   __iter__LazyAudioMap.__iter__  s7    ::"499doot}}MDJDJJr6   c                     U R                   c0  [        U R                  U R                  U R                  5      U l         [        U R                   5      $ r-   )r   r   rk   r   r   r   r   s    r'   __len__LazyAudioMap.__len__  s6    ::"499doot}}MDJ4::r6   )r   r   rk   r   N)	r?   r@   rA   rB   r   rS   r   r   rC   r>   r6   r'   r   r      s    
 r6   r   c                     [        XU5      $ r-   )r   )rk   r   r   kwargss       r'   lazy_get_audior     s    (33r6   c                 0    U R                  S5      S   S;   $ )Nz://r   )httphttps)r   )rj   s    r'   is_urlr     s    99UA"333r6   c                    [         R                  R                  U 5      u  p[         R                  R                  U 5      (       d  g[        R
                  " SU5      nU(       d  gUR                  5       nUS:X  a  SnOSUSS -  n[        R                  " [        R                  " SX15      5      n[         R                  " U 5       H  nUR                  U5      (       d  M    g   g)	NFz%0?\d+dz%dz\\d+z\\d{%s}r   r`   T)rc   r    r   isdirr   r   r   compilesubr   	fullmatch)r    rk   r   seqfile_matchers        r'   validate_sequencer     s    77==&LT77==IIj$'E
++-C
d{C"I%::bffZ;<L

4 !!$'' ! r6   c                     U R                  5       n U R                  S5      (       a  U SS  n U R                  S5      (       a  U S S n U $ )N"r   r`   )strip
startswithendswithr    s    r'   r   r   %  sH    
 ::<DtABx}}TCRyKr6   c                     U c  g[        U 5      (       a  g[        R                  R                  U 5      (       d  g[	        [        U 5      5      $ )Ninputrj   DNE)r   rc   r    r~   r   r   r  s    r'   	hash_pathr  0  s<    |d||77>>$z$/00r6   c                     U c  U$ [        U 5      (       a  U(       d  g[        U 5      $ [        R                  R	                  [        U 5      5      (       d  SR                  U 5      $ [        U 5      $ )Nz"URLs are unsupported for this pathzInvalid file path: {})r   rw   rc   r    r~   r   format)r    
allow_none	allow_urls      r'   validate_pathr  :  s[    |d||7D!!77>>*T*++&--d33r6   indexlengthis_rangereturnc           	          U(       a  U $ US:  a!  XS-
  :  a  U(       d  [        SU  SU S35      eU S:  a>  U(       d  [        SU  S35      eX-   nUS:  a  U(       d  [        SU  SU SU S35      eUn U $ )	Nr   r   Index 'z' out of range for z	 item(s).z'Negative indeces not allowed, but was ''.z', converted to ')
IndexError)r  r  r  allow_negativeallow_missing
conv_indexs         r'   validate_indexr  G  s     zeQh&}75')<VHINOOqyFugRPQQ\
>-wug->zlJ]^d]eenoppLr6   	raw_indexc                 p     [        [        U 5      XX4S9$ ! [         a  n[        SU  S3U5      eS nAff = f)Nr  r  r  r  r  z' must be an integer.)r  r   
ValueError)r  r  r  r  r  rl   s         r'   convert_to_index_intr  Z  sK    Hc)nV_m  L  	L H79+-BCQGGHs    
505indexes_strc           
         U (       d  / $ [        [        SU5      5      nUS:  n/ nU R                  S5      nU Vs/ s H  owR                  5       PM     nnU GH  nSU;   a  UR                  SS5      nU V	s/ s H  oR                  5       PM     nn	US   n
[	        U
5      S:  a  [        XSXBS9n
OSn
US   n[	        U5      S:  a  [        XSXBS9nOUnSn[	        U5      S:  a#  US   n[	        U5      S:  a  [        XSSSS9nOSn[	        U5      S:  a  UR                  X:U S S U2   5        M  UR                  [        [        XU5      5      5        GM  UR                  [        XqXBS95        GM      U$ s  snf s  sn	f )	Nr   ,:r   Tr  r   )r  r  r  )r   ranger   r   r   r  extendr   )r  r  r  int_indexesr  chosen_indexesgroupsgindex_rangerstart_index	end_indexsteps                r'   convert_str_to_indexesr-  a  s   	uQ'(KaZNNs#F!'(AggiF(!8''#q/K.9:k779kK:%a.K;!#2;X\m{  Z#AI9~!0TXiw  V	"	D;!#"1~t9q=/dcgw{|DD;!#%%ki&H4&PQ %%d5+N&OP !!"6qXf  #E  FA B E )
 ;s   E<8F	input_objidxsc                 d    [        U 5      [        :X  a  X   $ U Vs/ s H  o U   PM	     sn$ s  snf r-   )typer   )r.  r/  is      r'   select_indexesr3    s0    I& &*+d!d+++s   -c                      U R                  U5      S-   nUn U R                  X5      nX==   SXS-      -   -  ss'   U R                  U5        U R                  U5        MI  ! [         a     g f = f)Nr   r   )r  popr  )r   ftyper*  r  s       r'   merge_filter_argsr7    sx    	jj')JJu,Et!G}!44HHUOHHUO	 
  s   A A" "
A/.A/indexesc                     [        U[        U 5      U(       + S9nU(       a  [        U5      S:X  a  [        SU S35      e[        X5      $ )N)r  r   z0Nothing was selected based on indexes found in 'r  )r-  r   rh   r3  )r.  r8  err_if_missingerr_if_empty	real_idxss        r'   select_indexes_from_strr=    sG    &wIR`N`aII!+J7)SUVWW)//r6   c                    ^ ^ UU 4S jnU$ )Nc                 d   > [         R                  " U [        TT5      5      n [        TTU 5        U $ r-   )	functoolsupdate_wrappergetattrsetattr)fattrobjs    r'   dechook.<locals>.dec  s-    $$QD(9:Dr6   r>   )rF  rE  rG  s   `` r'   hookrI    s     Jr6   c                    ^  U 4S jnU$ )Nc                 (   >^ ^^ S mSmUUUU 4S jnU$ )Nr   c                  ~   > [         R                   " 5       T T-   :  d  Tc  [         R                   " 5       m T" 5       mT$ r-   )time)
cache_time
cached_retr   rD  s   r'   cached_func(cached.<locals>.dec.<locals>.cached_func  s3    yy{Z(22j6H!YY[
S
r6   r>   )rD  rP  rN  rO  r   s   ` @@r'   rG  cached.<locals>.dec  s    

	 	 r6   r>   )r   rG  s   ` r'   cachedrS    s    	 Jr6   )F)r   r   N)r   ))r`   T)r   r   )FT)r   FFF)r   F)z-vf)TT)Mr   rc   typingr   shutilr   r   rM  collections.abcr   r   r@  r   r   r   r   re   BIGMINBIGMAXDIMMAXr   r(   r   r*   imageOrLatent
floatOrIntdictrK   rq   rQ   r   ffmpeg_pathsimageio_ffmpegrV   imageio_ffmpeg_pathr   warnwhichsystem_ffmpegr    r~   rr   r   errorr   gifski_pathra   rb   rm   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  boolr  r  r   r-  r3  r7  r=  rI  rS  r>   r6   r'   <module>rf     s    	    	  #       	
	+*/ / 7Wh$78'5!12
,$ , bjj(**..!89KL71,./0
  2::-)X.$.77>>(## 9:77>>,'' =>|!LL12K!# 'q/Kl0BCKjjnn\40**..t4Kll8,JJNN:t, &X0F &<<% 
 .	"3 3 dg w ,# S  ""++88]4 q!R %8247 $44&
1
# s  ru &HC H H$ H| H* *S *TXY\T] *Z,eFDL1 , ,0uVT\': 0S 0Q7#rzz156s   .M %M)