
    
3j^                        S SK r S SKrS SK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
r
S SKJrJr  S SKJr  S SKJr  S SKJr  S SKrS SKrS SKrSSKJr  SS	K7  SS
KJrJrJrJrJr  SSKJ r J!r!  SSK"J#r#J$r$  SSK%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8  S\Rr                  ;  a  SS14\Rr                  S'   \:" \Rr                  S   S   5      S :X  a!  \Rr                  S   S   Rw                  S5        / SQr<S r=SS jr>\ R~                  R                  \ R~                  R                  \ R~                  R                  \C5      5      SS5      rD\5" S5      S 5       rES rFS rGS rHS rIS rJS rKS rL " S  S!5      rM " S" S#5      rN " S$ S%5      rO " S& S'5      rP " S( S)5      rQ " S* S+5      rR " S, S-5      rS " S. S/5      rT " S0 S15      rU " S2 S35      rV " S4 S55      rW " S6 S75      rX " S8 S95      rY0 S:\M_S;\_S<\_S=\_S>\_S?\_S@\ _SA\!_SB\N_SC\O_SD\P_SE\Q_SF\R_SG\S_SH\T_SI\U_SJ\V_0 SK\W_SL\#_SM\$_SN\Z_SO\[_SP\\_SQ\]_SR\^_SS\__ST\`_SU\a_SV\b_SW\c_SX\d_SY\e_SZ\f_S[\g_E\h\i\j\k\X\YS\.Erl0 S:S]_S;S^_S<S__S=S`_S>Sa_S?Sb_S@Sc_SASd_SBSe_SCSf_SDSg_SESh_SFSi_SGSj_SHSk_SISl_SJSm_0 SKSn_SLSo_SMSp_SNSq_SOSr_SPSs_SQSt_SRSu_SSSv_STSw_SUSx_SVSy_SWSz_SXS{_SYS|_SZS}_S[S~_ESSSSSSS\.Ermg)    N)List)ImageExifTags)PngInfo)Path)Template   )logger*)LoadVideoUploadLoadVideoPathLoadVideoFFmpegUploadLoadVideoFFmpegPathLoadImagePath)LoadImagesFromDirectoryUploadLoadImagesFromDirectoryPath)VAEEncodeBatchedVAEDecodeBatched)ffmpeg_path	get_audio	hash_pathvalidate_pathrequeue_workflowgifski_pathcalculate_file_hash
strip_pathtry_download_videois_urlimageOrLatentBIGMAXmerge_filter_argsENCODE_ARGS
floatOrIntcachedContainsAll)ProgressBarVHS_video_formats .json)mp3mp4wavoggc                     / nU  H<  n[        U[        5      (       a  UR                  U5        M+  UR                  U5        M>     U$ N)
isinstancelistextendappend)lretes      \/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-VideoHelperSuite/videohelpersuite/nodes.pyflatten_listr9   #   s;    
CaJJqMJJqM	 
 J    c              #   T  ^#    U4S jnU  H  nUS:X  a  T(       a  U S    Sh  vN   M  M!  UR                  S5      (       aJ  [        [        X   5      5       H  nU" X   U5       Sh  vN   M     T(       d  [        X   5      X'   M  M  U" X5       Sh  vN   M     g N} N9 N7f)z/Provides an iterator over widgets, or argumentsc              3      >#    [        X   [        5      (       aG  T(       a+  [        X   5      S:  a.  [        X   S   [        5      (       d  X   v nUb	  X U'   S v   g g g g g 7fNr	   )r1   r2   lendict)contindexinpfor_widgetss      r8   
indirector"iterate_format.<locals>.indirector.   sd     dk4((+q DKND)I)I#C!U  *J  )s   A A#extra_widgetsN_pass)endswithranger>   r9   )video_formatrC   rD   kis    `   r8   iterate_formatrM   ,   s      '888 ZZ  3|/0%loq999 1".|"?  ",222  9 : 3s4   !B(B"AB(*B$+-B(B&
B($B(&B(z..video_formats   c                     0 n [         R                  " S5       H  n[         R                  " SU5      X'   M     [        R                  " [
        5       HU  nUR                  5       (       a   UR                  R                  S5      (       d  M:  UR                  XR                  S S '   MW     / n0 nU R                  5        H  u  p[        US5       n[        R                  " U5      nS S S 5        SW;   a	  [        c  M?  [        [!        U5      5      nUR#                  SU-   5        [%        U5      S:  d  Mx  XSU-   '   M     X44$ ! , (       d  f       Nd= f)Nr(   r*   rgifski_passzvideo/r   )folder_pathsget_filename_listget_full_pathosscandirbase_formats_diris_filenamerH   pathitemsopenjsonloadr   r2   rM   r4   r>   )	format_filesformat_nameitemformatsformat_widgetsr\   streamrJ   widgetss	            r8   get_video_formatsrh   B   s   L#556IJ$0$>$>?RT_$`! K

+,||~~TYY%7%7%@%@'+yyYYs^$ - GN)//1$_99V,L L([-@~l34x+-.L14;8[01 2 "" _s   E
E	c           	         [         R                  R                  [         R                  R                  [        U S-   5      5      (       a(  [         R                  R                  [        U S-   5      nO[
        R                  " SU 5      n[        US5       n[        R                  " U5      nS S S 5        [        W5       H  nUS   U;  d  M  [        U5      S:  a  SUS   ;   a	  US   S   nO+[        US   5      [        L a	  US   S   nOSSSS	S
.US      nXaUS   '   [        R                  " SUS    SU 35        M     [        US5      nU H  n[!        U[        5      (       a  [        U5      S:X  a/  US    Vs/ s H  n[#        U5      R$                  " S0 UD6PM      nnO[!        US   [&        5      (       a  US   [)        XS      5         nO@[        U5      S:  a!  [#        US   5      R%                  XS      S9nO[)        XS      5      n[!        U[        5      (       a  M  UR+                  U5        M     U$ ! , (       d  f       GN= fs  snf )Nr*   r(   rR   r      defaultr	   F )BOOLEANINTFLOATSTRINGzMissing input for z has been set to    )valr)   )rW   r\   existsjoinrY   rT   rV   r^   r_   r`   rM   r>   typer2   r
   warnr1   r   
substituter?   strsend)	rb   kwargsvideo_format_pathrf   rJ   wrk   witxs	            r8   apply_format_widgetsr   Y   s   	ww~~bggll#3[75JKLLGGLL)9;;PQ(667JKX		%yy( 
&L)Q4v1vzi1Q4/A$y/!:%d1gG +0AQSTUVWXUYZG"1Q4LKK,QqTF2CG9MN * u
-CD!!1v{?@tDt!Xa[++5f5tDAaD$''aDVaD\*+Q!QqTN--&1,-?t% D!! 	  9 
&	%& Es   I?%I
Ic                     U R                  5       R                  5       SU-  S-
  -  S-   n [        R                  " U SSU-  S-
  5      $ )Nrj   r	   g      ?r   )cpunumpynpclip)tensorbitss     r8   tensor_to_intr   |   sC    ZZ\!QWQY/#5F7761q$wqy**r:   c                 T    [        U S5      R                  [        R                  5      $ )N   )r   astyper   uint16r   s    r8   tensor_to_shortsr      s    $++BII66r:   c                 T    [        U S5      R                  [        R                  5      $ )N   )r   r   r   uint8r   s    r8   tensor_to_bytesr      s    #**28844r:   c           
   #     #    S nS v nSnUR                  SS5      S:w  Ga  [        R                  " [        R                  " 5       SS9  [        R
                  R                  [        R                  " 5       S5      nS n	[        US5       n
U
R                  S	5        S
U;   a2  U
R                  U	" S
[        R                  " US
   5      5      S-   5        SU;   a2  U
R                  U	" S[        R                  " US   5      5      S-   5        UR                  5        H<  u  pUS;  d  M  U
R                  U	" U[        R                  " U5      5      S-   5        M>     S S S 5        U S S SU/-   U SS  -   / SQ-   n[        R                  " X/-   [        R                  [        R                  US9 n Ub)  UR                  R                  U5        S v nUS-  nUb  M)  UR                  R!                  5         UR                  R#                  5         UR$                  R'                  5       nS S S 5        US:w  a  [        R                  " X/-   [        R                  [        R                  US9 n Ub)  UR                  R                  U5        S v nUS-  nUb  M)  UR                  R!                  5         UR                  R#                  5         UR$                  R'                  5       n S S S 5        Uv   [;        U5      S:  a+  [3        UR.                  " [0        6 S[4        R$                  S9  g g ! , (       d  f       GN= f! [(         a  nUR$                  R'                  5       n[        R
                  R+                  U5      (       a  [-        SUR.                  " [0        6 -   5      e[3        UR.                  " [0        6 S[4        R$                  S9  [6        R8                  " S5         S nAGNS nAff = f! , (       d  f       GN= f! [(         a>  nUR$                  R'                  5       n[-        SUR.                  " [0        6 -   5      eS nAff = f! , (       d  f       GNr= f7f)Nr   save_metadataFalseTexist_okzmetadata.txtc                     [        U5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  S	S
5      nU  SU 3$ )N\z\\;z\;#z\#=z\=
z\
)rx   replace)keyvalues     r8   escape_ffmpeg_metadata.ffmpeg_process.<locals>.escape_ffmpeg_metadata   sl    JEMM$v.EMM#e,EMM#e,EMM#e,EMM$v.EU!E7##r:   r|   z;FFMETADATA1
promptr   workflow)r   r   r	   -i)z	-metadatazcreation_time=nowz	-movflagsuse_metadata_tags)stderrstdinenvz,An error occurred in the ffmpeg subprocess:
rl   endfilez+An error occurred when saving with metadatar:   )getrW   makedirsrT   get_temp_directoryr\   rt   r^   writer_   dumpsr]   
subprocessPopenPIPEr   flushcloser   readBrokenPipeErrorrs   	Exceptiondecoder#   printsysr
   rv   r>   )argsrJ   video_metadata	file_pathr   res
frame_datatotal_frames_outputmetadata_pathr   frK   vm_argsprocr7   errs                    r8   ffmpeg_processr      s    
CJ1W<
L335E\%D%D%FW	$ -%GG$%>).xNS[D\9]^aeef^+.z4::nU_F`;abeiij&,,.22GG21djjmDtKL / & bqT=11DH<  @D  Df{2:??$.OO>AEK ,JJ$$Z0!&J'*'	 !,
 

  "

  "kk&&(>, czd[0$.OO>AE4 ,JJ$$Z0!&J'*' !, 

  "

  "kk&&(> 
3x!|cjj+&BSZZ@ c &%, # 
Kkk&&( 77>>),,#$S!jj+6%7 8 8 cjj+.BSZZHIJJ
K> >B # 4kk&&( O**k2!3 4 44> >s   B
Q+BL5+3L5AQ+1O<3*MAM-AQ+1Q3*PAP.AQ+5
M?Q+
O9BO4.O<4O99O<<
PQ+
Q9QQQ
Q(#Q+c           	   #     #    S v n[         R                  " XS   -   / SQ-   [         R                  [         R                  [         R                  US9 n[         R                  " [        /US   -   SUS    SUS    /-   S	U /-   S
SUS/-   [         R                  UR                  [         R                  US9 n Ub$  UR
                  R                  U5        S v nUb  M$  UR
                  R                  5         UR
                  R                  5         UR                  R                  5       n	UR                  R                  5       n
UR                  R                  5       n S S S 5        S S S 5        [        W	5      S:  a*  [!        U	R                  " [        6 S["        R                  S9  [        W
5      S:  a*  [!        U
R                  " [        6 S["        R                  S9  [        W5      S:  a  [!        UR                  " [        6 5        g g ! [         a  nUR
                  R                  5         UR                  R                  5       n	UR                  R                  5       n
[        SU	R                  " [        6 -   S-   U
R                  " [        6 -   5      eS nAff = f! , (       d  f       GNL= f! , (       d  f       GNV= f7f)N	main_pass)-fyuv4mpegpipe-)r   r   stdoutr   rS   z-Wr   z-Hr	   -rz-qz-or   ziAn error occurred while creating gifski output
Make sure you are using gifski --version >=1.32.0
ffmpeg: z	
gifski: rl   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r>   r   r   )r   
dimensions
frame_raterJ   r   r   r   procffprocgsresffresgsoutgsr7   s                r8   gifski_processr      sT    J			$k!::=XX!+
!+c
;>D{ml=.II!%*Q-4JqM? TU!%* 78 "&tY <= FP__$*MM*//"%'
 +1b ,LL&&z2!&J !, ""$""$**,**,**,'
;2 5zA~ellK(bszzB
5zA~ellK(bszzB
5zA~ellK()  # b""$**,**, !X,,4!57C!DFKllT_F`!a b b	b' '
; 
;s^   AKA&J<9J*;%H"BH%J<-B'K
J'BJ""J''J**
J9	4J<<
KKc              #      #    [        U S5      (       d  [        U 5      n U  S h  vN   [        [        U 5      S-
  SS5       H	  nX   v   M     g  N+7f)N__getitem__rj   r   )hasattrr2   rI   r>   )rB   rL   s     r8   to_pingpongr      sI     3&&3iNN3s8A:a#f $ s   "AA,Ac                   h    \ rS rSr\S 5       rSrSrSrSr	Sr
             SS	\S
\4S jjrSrg)VideoCombine   c           	          [        5       u  pSSSS0//US'   [        4[        SSSS.4S	S
S
SSS.4SSS04SS/U-   SU04SSS04SSS04S.SSSS.[        SSSS.5      S.$ )Nlosslessrm   rk   Tz
image/webpr   r	   )rk   minsteprn   r   d   rk   r   maxr   rp   AnimateDiff	image/gifrd   F)imagesr   
loop_countfilename_prefixformatpingpongsave_outputAUDIOVHS_BatchManager)VAE)audio
meta_batchvaePROMPTEXTRA_PNGINFO	UNIQUE_ID)r   extra_pnginfo	unique_id)requiredoptionalhidden)rh   r    r$   r&   )sffmpeg_formatsre   s      r8   INPUT_TYPESVideoCombine.INPUT_TYPES   s    ):)<&)3YD@Q(R'S|$ )* !!Q7  %!AcST&UV$,y-.H#I'6G)UcIde&E(:; )It+<= $3
 ""!0(# %
 	
r:   VHS_FILENAMES)	FilenamesT#   Video Helper Suite 🎥🅥🅗🅢combine_videoNr   r   c                   ^O^P^Q Ub  UnUc  U/ 44$ Ub  [        U[        5      (       a  US   nOS n[        U[        R                  5      (       a  UR	                  S5      S:X  a  U/ 44$ [        U5      n[        U5      mQUb  [        USS5      nUR	                  S5      U-  nUR	                  S5      U-  nSUU-  -  =(       d    SnS	 mOUO4S
 jnU" X?U5      n[        U5      n[        R                  " U/U5      n[        UR                  5      S:  a   US   n[        UR                  5      S:  a  M   OUS   n[        U5      nU(       a  [        R                  " 5       O[        R                  " 5       n[        R                   " UU5      u  nnnnn/ n[#        5       n0 nU	b+  UR%                  S[&        R(                  " U	5      5        U	US'   U
b]  U
 H4  n UR%                  U [&        R(                  " U
U    5      5        U
U    UU '   M6     U
R+                  S0 5      R+                  S0 5      n!O0 n!UR%                  S[,        R,                  R/                  5       R1                  S5      S S 5        Ub"  XR2                  ;   a  UR2                  U   u  n"n#OSn$[4        R6                  " [4        R8                  " U5       S3[4        R:                  5      n%[<        R>                  " U5       HA  n&U%RA                  U&5      n'U'(       d  M  [C        U'RE                  S5      5      n(U(U$:  d  M?  U(n$MC     U$S-   n"S n#U SU"S S3n)[<        RF                  RI                  UU)5      n*U!R+                  SS5      S:w  a.  [J        RL                  " [O        U5      5      RQ                  U*USS9  URS                  U*5        URU                  S5      u  n+n,U+S:X  Ga8  Ub  [W        S5      e0 n-U,S:X  a  SU-S '   U,S!:X  a|  [J        RX                  " 5       n.S"[,        R,                  R/                  5       R1                  S5      S S 0U.[Z        R\                  RX                  '   U.U-S#'   UR+                  S$S5      U-S$'   U SU"S S%U, 3n/[<        RF                  RI                  UU/5      n*U(       a  [_        U5      nUQ4S& jn0U0" U5      n1[        U15      RP                  " U*4U,Ra                  5       SU1[c        S'U-  5      USS(.U-D6  URS                  U*5        GO"[d        c,  [g        S)[<        RF                  Ri                  S*5       S+35      eUb'  [j        Rl                  " S,5        URo                  U5        UR                  S   S:H  n2U2US-'   [q        U,U5      n3U3R+                  S.S5      n4UR                  S   U4-  (       d  UR                  S   U4-  (       a  UR                  S   * U4-  UR                  S   * U4-  4n5U5S   S-  U5S   U5S   S-  -
  U5S   S-  U5S   U5S   S-  -
  4n6[        Rr                  Ru                  U65      mPUP4S/ jn7[w        U7U5      nUR                  S   * U4-  UR                  S   -   UR                  S   * U4-  UR                  S   -   4n8[j        Rl                  " S05        OUR                  S   UR                  S   4n8U(       a9  Ub  [j        Rx                  " S15        [_        U5      nUS:  a  UUS-
  -  nUTQl=        US:  a   S2S3[}        U5      -   S4-   [}        U5      -   /n9O/ n9U3R+                  S5S65      S7:X  a  [w        [~        U5      nU2(       a  S8n:OS9n:O[w        [N        U5      nU2(       a  S:n:OS;n:U SU"S S%U3S<    3n/[<        RF                  RI                  UU/5      n*/ n;U3R+                  S=5      n<U<b3  S>U3R+                  S?5      S@:X  a  [}        U<5      SA-   O[}        U<5      SB-   /n;[d        SCSDSESFSGU:SHSISJSKSLSMSNU3R+                  SOSP5      SQU8S    SRU8S    3SS[}        U5      STSU/U9-   n=[w        SV U5      n[<        R                  R                  5       n>SWU3;   a  U>Ro                  U3SW   5        SXU3;   a  Ub  [W        SY5      eSZRI                  U5      /n[<        R                  " [        R                  " 5       SS[9  U=R                  ST5      S-   n?U=S U? U3SX   -   n@[        U@5         [        R                  " U@US   U>SSS\9  S^U3;   a%  U=R                  ST5      S-   n?U=S U? U3S^   -   U=U?S  -   n=U#ce  S_U3;   a  S`n[        U=U8UU3U*U>5      n#S nO%U=U3Sa   U;-   -  n=[        U=5        [        U=U3UU*U>5      n#U#R                  S 5        Ub  U"U#4UR2                  U'   U H%  nBTQRo                  S5        U#R                  UB5        M'     Ub&  [        UR                  UR                  (       + 45        Ub  UR                  (       ak   U#R                  S 5      nCU#R                  S 5        UbD  UR2                  R                  U5        [        UR2                  5      S:X  a  UR                  5         OSbS/0U/ 44Sc.$ URS                  U*5        S nDUb   USd   nDWDGb  U SU"S SeU3S<    3nE[<        RF                  RI                  UUE5      nFSfU3;  a  [j        Rl                  " Sg5        ShSi/U3Sf'   USd   R	                  S5      nGWCU-  S-   nHU3R+                  SjSk5      Sk:w  a  / nIOSlSm[}        WH5      -   /nI[d        SCSDSnSTU*So[}        USp   5      Sq[}        WG5      SESrSTSUSsSt/U3Sf   -   WI-   SuWF/-   nJUSd   R                  S5      R                  SS5      R                  5       R                  5       nK[        UJSl5         [        R                  " UJUKU>SSS\9nLWLR                  (       a4  [        WLR                  R                  " [        6 S*[        R                  Sw9  URS                  WF5        WEn/U!R+                  SxS5      S:X  aH  USS  H?  nM[<        RF                  R                  UM5      (       d  M)  [<        R                  " WM5        MA     U/UU(       a  SyOSzUUU)US   S{.nNUS:X  a&  S|U;   a   S}U/;   a  S~WNS'   U/R                  S}S5      UNS'   SWN/0UU44Sc.$ ! [        R                   a.  nA[W        S]UAR                  R                  " [        6 -   5      eS nAAAff = f! [         a     GNf = f!    GN= f! [        R                   a.  nA[W        SvUAR                  R                  " [        6 -   5      eS nAAAff = f)Nsamplesr   downscale_ratior   r   i @r	   c              3      #    [        [        R                  " X5      5      =n(       a-  Uv   [        [        R                  " X5      5      =n(       a  M,  g g 7fr0   )tuple	itertoolsislice)itnbatchs      r8   batched+VideoCombine.combine_video.<locals>.batched?  sE     $Y%5%5b%<==e=K  %Y%5%5b%<==e==s   AAAc              3      >#    T" [        U 5      U5       HF  n[        R                  " [        R                  " U5      5      nUR                  U5       S h  vN   MH     g  N	7fr0   )itertorch
from_numpyr   arrayr   )r   r   frames_per_batchr  image_batchr  s        r8   batched_encode2VideoCombine.combine_video.<locals>.batched_encodeB  sJ     $T&\3CDE"'"2"2288E?"CK"zz+666 E6s   AA#A!
A#rq   r   r   extraCreationTime    z_(\d+)\D*\..+_05z.pngVHS_MetadataImageTF   )pnginfocompress_level/imagez?Pillow('image/') formats are not compatible with batched outputgifrj   disposalwebpi  exifr   .c              3      >#    U  H5  nTR                  S5        [        R                  " [        U5      5      v   M7     g 7fr=   )updater   	fromarrayr   )r   rL   pbars     r8   
frames_gen.VideoCombine.combine_video.<locals>.frames_gen  s/     AKKN///!*<==  s   =A i  )r   save_allappend_imagesdurationloopr'  zffmpeg is required for video outputs and could not be found.
In order to use video outputs, you must either:
- Install imageio-ffmpeg with pip,
- Place a ffmpeg executable in rl   z4, or
- Install ffmpeg and add it to the system path.z\Format args can now be passed directly. The manual_format_widgets argument is now deprecated	has_alphadim_alignmentc                    > U R                  S5      n T" U R                  [        R                  S95      nUR                  S5      $ )N)rj   r   r	   dtype)r	   rj   r   )permutetor  float32)r)  paddedpadfuncs     r8   pad'VideoCombine.combine_video.<locals>.pad  s9    !MM'2E$UXXEMMX%BCF!>>'22r:   zGOutput images were not of valid resolution and have had padding appliedz,pingpong is incompatible with batched outputz-vfz
loop=loop=z:size=input_color_depth8bit16bitrgba64rgb48rgbargb24	extensionbitratez-b:vmegabitTrueMKz-verrorr   rawvideoz-pix_fmtz-color_rangepcz-colorspacergbz-color_primariesbt709z
-color_trcfake_trcziec61966-2-1z-sr~   r   r   r   c                 "    U R                  5       $ r0   )tobytes)r~   s    r8   <lambda>,VideoCombine.combine_video.<locals>.<lambda>  s
    199;r:   environmentpre_passzEFormats which require a pre_pass are incompatible with Batch Manager.r:   r   )inputr   capture_outputcheckz)An error occurred in the ffmpeg prepass:
inputs_main_passrS   r   r   unfinished_batch)uiresultwaveformz-audio.
audio_passz:Selected video format does not have explicit audio supportz-c:alibopustrim_to_audior   z-afzapad=whole_dur=z-n-arsample_rate-acf32lez-c:vcopyz	-shortest+An error occured in the ffmpeg subprocess:
r   VHS_KeepIntermediateoutputtemp)filename	subfolderru   r   r   r   fullpathpngz%03dz	image/pngr   001rr  gifs)]r1   r?   r  Tensorsizer>   r'   getattrnextr  chainshaper  rT   get_output_directoryr   get_save_image_pathr   add_textr_   r   r   datetimenow	isoformatoutputsrecompileescape
IGNORECASErW   listdir	fullmatchintgroupr\   rt   r   r1  r   saver4   splitr   Exifr   IFDr   upperroundr   ProcessLookupErrorabspathr
   rv   r0  r   nnReplicationPad2dmaprR  totalrx   r   environrm  r   rA   r"   r   runCalledProcessErrorr   r   r#   r   r   ry   r   r   has_closed_inputsStopIterationpopresetsqueeze	transposer   rY  r   r   rs   remover   )Rselfr   r   r   latentsr   r   r   r   r   r   r   r   manual_format_widgetsr   r   rz   
num_framesr
  widthheightr  r  first_image
output_dirfull_output_folderrr  r"  rs  output_filesmetadatar   r~   extra_optionscounteroutput_processmax_countermatcherexisting_filematchfile_counterfirst_image_filer   format_type
format_extimage_kwargsr-  r   r3  framesr9  rJ   r:  to_padpaddingrC  r   	loop_args	i_pix_fmtbitrate_argrM  r   r   in_args_lenpre_pass_argsr7   r)  r   
a_waveformoutput_file_with_audiooutput_file_with_audio_pathchannelsmin_audio_durapadmux_args
audio_datar   intermediatepreviewr  rB  r2  sR                                                                                  @@@r8   r  VideoCombine.combine_video  s)   & F> "%''?&$''	*fell++A!0C "%''[
:&?%c+<a@OKKOO3E[[__4F 0efnEJ 7 $F1ABFv,K__k]F;Fk''(1,)!n k''(1, !)K&\F  --/002 	 ,,_jI	
9h

6(:;'-N8$$"!!!TZZa0@%AB$1!$4q! # *--j"=AA'2NMM.(*;*;*?*?*A*K*KC*PQTRT*UV!i3E3E&E(2(:(:9(E%Wn K jjBIIh$7#88H!I2==YG!#,>!?))-85#&u{{1~#6L#k1&2 "@ "AoG!N 'ZqD9GGLL!35EF	0$75@OOOK89>>   ? 
 	I&"(,,s"3Z'!% abbLU"+,Z(V#zz|+0(2C2C2G2G2I2S2STW2XY\Z\2]*^X\\&&''+V$+1::j$+GZ(ZqAj\:D%7>I$V,>  'FL	!'')$tj01 	 	 	* "(  ,^  _a  _f  _f  _n  _n  oq  _r  ^s  sh  *i  j  j$0z{34#))"-2I"+F;/
FCL(,,_a@M!!!$}4+:K:KA:NQ^:^&,,Q//-?&,,Q//-?A!!9a<VAY\)A!!9a<VAY\)AC((33G<3 S&)*0033mCkFWFWXYFZZ*0033mCkFWFWXYFZZ\
ef)//2K4E4Ea4HI
)LL!OP$V,>*a-/J!+DJA~"L3z?$B8$KcR\o$]^		 3V<G-v6 (I 'I_f5 &I 'IZqAl;.G-HID%7>IK"&&y1G"%\=M=Mi=X\b=bs7|c'9hklshtwzhz{wj*i #D-@RT[ ,"2"2:~"NZ]O1Z]O<dC
OUY[^`   D .7F

!C-

<67\))
 $$kll((6*+L;;=M"jj.2 $\k 2\*5M M!-0=NN=q	s26dD
 "\1"jj.2L[)L9K,LLtT_T`Oaa% L0(F%3D*jR^`ikn%oN EL5CCD%d+%3D,Xacf%gN##D))5<n4MJ&&y1A##E*   % *"6"6J<X<X8X!YZ!Z%A%A*8*=*=d*C'"''- )&&**95:--.!3"((*  2D6:UWGXFZ[[	* J !&z!2J %,4:Qwrl',WbJcId)e&.0ggll;MOe.f+|3KK \]28)1DL. !,11!4 3j @1 D##OW=HD!#4S5G#GHD'wdI!3u]';#<eS] '4ffF +<89 #	# '23N%O	P #:.66q9CCAaH !(E2=$..-0TSC
 ::#**++[9r

S##$?@ .3T:eC ,Qr 277>>,//IIl+ !3 !&$/V (,(, ?u6T> +GH"&,,vu"=GJy){L6Q5STTW "44 =#$Phhoo{;%< = ==> % &> "44 =#$Rhhoo{;%< = ==sN   4s "t t- <t5 t+)tt
t*)t*-t25u7	)u22u7r)   )NNr   r   FTNNNNNNN)__name__
__module____qualname____firstlineno__classmethodr  RETURN_TYPESRETURN_NAMESOUTPUT_NODECATEGORYFUNCTIONr  r  __static_attributes__r)   r:   r8   r   r      s|    
 
8 &L!LK4HH %"!aUaU aU aUr:   r   c                   ^    \ rS rSr\S 5       rSrSrSrSr	SS jr
\S 5       r\S	 5       rS
rg)	LoadAudioi{  c           	      @    SSS/ SQS.40SSSSS	.4SSSS
SSS.4S.S.$ )N
audio_filerp   zinput/)r-   r+   r.   m4aflacrk   vhs_path_extensionsro   r   VHSTIMESTAMP)rk   r   
widgetType逖 {Gz?rk   r   r   r   r  )seek_secondsr7  r   r   r)   r   s    r8   r  LoadAudio.INPUT_TYPES|  sO    
 xXVv)wx ")aQ_*` a$1QxY]m{'|}	
 	
r:   r   ro   r   r7  )   Video Helper Suite 🎥🅥🅗🅢/audio
load_audioc                     [        U5      nUb  [        U5      S:w  a  [        SU-   5      e[        U5      (       a  [	        U5      =(       d    Un[        XUS9nUS   R                  S5      US   -  nXE4$ )NT audio_file is not a valid path: 
start_timer7  re  rj   rj  )r   r   r   r   r   r   ry  )r  r  r  r7  r   loaded_durations         r8   r  LoadAudio.load_audio  s    
+
z!:d!B>KLL*+J7E:J *Q
+003E-4HH''r:   c                     [        U5      $ r0   )r   r   r  rz   s      r8   
IS_CHANGEDLoadAudio.IS_CHANGED  s    $$r:   c                     [        USS9$ NT)
allow_none)r   r  s      r8   VALIDATE_INPUTSLoadAudio.VALIDATE_INPUTS  s    ZD99r:   r)   Nr   r   )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r:   r8   r  r  {  sW    

 

 &L(L:HH
( % % : :r:   r  c                   ^    \ rS rSr\S 5       rSrSrSrSr	SS jr
\S 5       r\S	 5       rS
rg)LoadAudioUploadi  c           	         [         R                  " 5       n/ n[        R                  " U5       H  n[        R                  R                  [        R                  R                  X5      5      (       d  MF  UR                  S5      n[        U5      S:  d  Mh  US   [        ;   d  Mw  UR                  U5        M     S[        U5      40SSSSSS	S
.4SSSSSS	S
.4S.S.$ )Nr.  r	   r   r   ro   r   r  r  r  r  r  r  )rT   get_input_directoryrW   r  r\   isfilert   r  r>   audio_extensionsr4   sorted)r   	input_dirfilesr   
file_partss        r8   r  LoadAudioUpload.INPUT_TYPES  s     446	I&Aww~~bggll9899WWS\
z?Q&JrN>N,NLLO	 ' fUm-0 $+1X_c  tB  .C  #D!(q8]aq  ,A  !B 	r:   r  r  r  r  c                     [         R                  " [        US   5      5      nUb  [        U5      S:w  a  [	        SU-   5      e[        XAU5      nUS   R                  S5      US   -  nXV4$ )Nr   Tr  re  rj   rj  )rT   get_annotated_filepathr   r   r   r   ry  )r  r  r7  rz   r  r   r  s          r8   r  LoadAudioUpload.load_audio  sr    !88F7O9TU
z!:d!B>KLL*(;
+003E-4HH''r:   c                 V    [         R                  " [        U5      5      n[        U5      $ r0   )rT   r	  r   r   r   r   rz   r  s       r8   r  LoadAudioUpload.IS_CHANGED  s"    !88E9JK
$$r:   c                 T    [         R                  " [        U5      5      n[        USS9$ r  )rT   r	  r   r   r  s       r8   r  LoadAudioUpload.VALIDATE_INPUTS  s$    !88E9JK
ZD99r:   r)   Nr  )r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r:   r8   r  r    sW       ;H%L(LH( % % : :r:   r  c                   >    \ rS rSrSr\S 5       rSrSrSr	Sr
S rS	rg
)AudioToVHSAudioi  zLegacy method for external nodes that utilized VHS_AUDIO,
VHS_AUDIO is deprecated as a format and should no longer be usedc                     SSS00$ )Nr   r   r   r)   r  s    r8   r  AudioToVHSAudio.INPUT_TYPES  s    Wj122r:   r  	VHS_AUDIO)	vhs_audioconvert_audioc                 N  ^ [        US   5      n[        US   R                  S5      5      n[        SSSUSUSS	SS
S	/nUS   R                  S5      R	                  SS5      R                  5       R                  5       n [        R                  " XESSS9mTR                  (       a4  [        TR                  R                  " [        6 S[        R                  S9  U4S j4$ ! [        R                   a.  n[        SUR                  R                  " [        6 -   5      eS nAff = f)Nrj  re  r	   r   rl  ri  rk  r   r   r-   r   Tr^  r_  r`  rn  rl   r   c                     > T R                   $ r0   )r   )r   s   r8   rZ  /AudioToVHSAudio.convert_audio.<locals>.<lambda>  s	    

r:   )rx   ry  r   r  r  r   rY  r   r  r  r   r   r   r#   r   r   )r  r   aracr  r  r7   r   s          @r8   r  AudioToVHSAudio.convert_audio  s
   }%&z"''*+wr5"#tUC1 :&..q1;;Aa@ 		5..04DBC
 ::#**##[1r

K"$$ ,, 	5Jhhoo{34 5 5	5s    C" "D$6)DD$r)   Nr  r  r  r  __doc__r  r  r  r  r  r  r  r  r)   r:   r8   r  r    s3    H3 3:H"L!LH%r:   r  c                   >    \ rS rSrSr\S 5       rSrSrSr	Sr
S rS	rg
)VHSAudioToAudioi  r  c                     SSS00$ )Nr   r  r  r)   r  s    r8   r  VHSAudioToAudio.INPUT_TYPES  s    [.9::r:   r  r   )r   r  c                    U(       a  U" 5       (       d  [        S5      e[        SS/n [        R                  " U/ SQ-   U" 5       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XGS.4$ ! [        R                   a.  n[        SUR                  R                  " [        6 -   5      eS nAff = f)Nzaudio input is not validr   r   )r   rl  r   Tr  r<  rn  z, (\d+) Hz, (\w+), r	   rj   )monostereoiD  r   r   )re  rj  )r   r   r   r  r  
frombuffer	bytearrayr   r@  r  r   r   r#   r  searchr  r  reshaper  	unsqueeze)	r  r  r   r   r   r7   r  r  r  s	            r8   r  VHSAudioToAudio.convert_audio  s4   	677T3'	5>>$)="=Y[15TCC$$Yszz%:%--PE 		1#**2C2C[2QRU[[^$B q)%++a.9BBBr"g&0015??B"688 ,, 	5Jhhoo{34 5 5	5s   AD& &E(:)E##E(r)   Nr   r)   r:   r8   r#  r#    s3    H; ;:HLLH9r:   r#  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg)	PruneOutputsi  c                     SSSS/4S.0$ )Nr   r  IntermediateIntermediate and Utility)	filenamesoptionsr)   r  s    r8   r  PruneOutputs.INPUT_TYPES  s%     !3!/1K LN 	r:   r)   Tr  prune_outputsc                    [        US   5      S:X  a  g[        US   5      S::  a  [        US   5      S:  d   e/ nUS;   a
  X1S   SS -  nUS;   a  UR                  US   S   5        US	;   a  UR                  US   S   5        [        R                  " 5       [        R                  " 5       /nU H  n[
        R                  R                  US   U/5      US   :w  a9  [
        R                  R                  US   U/5      US   :w  a  [        S
U-   5      e[
        R                  R                  U5      (       d  M  [
        R                  " U5        M     g)Nr	   r   r)   rq   rj   )r2  r3  Allr   )r3  r9  )r9  z.Tried to prune output from invalid directory: )r>   r4   rT   r~  r   rW   r\   
commonpathr   rs   r  )r  r4  r5  delete_listoutput_dirsr   s         r8   r7  PruneOutputs.prune_outputs  sC   y|!9Q< A%#il*;q*@A@IIQ<"--K99y|A/gy|B/0#88:#668:D""KND#9:k!nL++[^T,BC{ST~U'(X[_(_``ww~~d##		$   r:   N)r  r  r  r  r  r  r  r  r  r  r7  r  r)   r:   r8   r0  r0    s/      LK4HHr:   r0  c                   Z    \ rS rSrSS jrS rS rS r\S 5       r	Sr
SrS	rS
rSS jrSrg)BatchManageri2  c                 h    Xl         0 U l        0 U l        S U l        SU l        [        S5      U l        g )NFinf)r  inputsr  r   r  floattotal_frames)r  r  s     r8   __init__BatchManager.__init__3  s1     0!&!%Lr:   c                 .   U R                  5         U R                   HI  n[        U R                  U   S   SS5      (       d  M'   U R                  U   S   R                  S 5        MK     U R                  U R                  5        g ! [         a     Mv  f = f)Nr   gi_suspendedF)close_inputsr  rz  ry   r  rE  r  r  r   s     r8   r  BatchManager.reset:  s    <<Ct||C(,neDDLL%b)..t4   	d++, % s   !B
BBc                 2    [        U R                  5      S:  $ )Nr   )r>   rB  )r  s    r8   has_open_inputsBatchManager.has_open_inputsC  s    4;;!##r:   c                     U R                    HI  n[        U R                   U   S   SS5      (       d  M'   U R                   U   S   R                  S5        MK     0 U l         g ! [         a     Mb  f = f)Nr   rH  Fr	   )rB  rz  ry   r  rJ  s     r8   rI  BatchManager.close_inputsE  sk    ;;Ct{{3'+^UCCKK$R(--a0   % s   !A""
A0/A0c                 ,    SSSS[         SS.40SSS.S	.$ )
Nr  rn   r   r	   r   r   r   )r   r   )r   r   )r!   r  s    r8   r  BatchManager.INPUT_TYPESN  s5     'BqQWab0c(d '!,	 	r:   r   )r   r  update_batchNc                     Ub  Ub  X#   S   R                  SS5      nOSnUS:X  a  U R                  5         Xl        X0l        U 4$ U R                  U R                  -   S-
  U-  n[        SU SU 35        U 4$ )NrB  requeuer   r	   zMeta-Batch r(  )r   r  r  r   rD  r   )r  r  r   r   rU  num_batchess         r8   rS  BatchManager.update_batch_  s     V%7'155iCGGa<JJL$4!&N
 w  ,,T-B-BB1DGWWKKy+78wr:   )r  r  rB  r  rD  r   )r   )NN)r  r  r  r  rE  r  rM  rI  r  r  r  r  r  r  rS  r  r)   r:   r8   r?  r?  2  sE    )-$ 	 	 )L"L4HHr:   r?  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
	VideoInfoio  c                     SSS00$ Nr   
video_info)VHS_VIDEOINFOr)   r  s    r8   r  VideoInfo.INPUT_TYPESp        "4 	r:   r  )
ro   rn   ro   rn   rn   ro   rn   ro   rn   rn   )
u   source_fps🟨u   source_frame_count🟨u   source_duration🟨u   source_width🟨u   source_height🟨u   loaded_fps🟦u   loaded_frame_count🟦u   loaded_duration🟦u   loaded_width🟦u   loaded_height🟦get_video_infoc                     / SQn/ n/ nU H1  nUR                  USU 3   5        UR                  USU 3   5        M3     / UQUQ7$ )Nfpsframe_countr7  r  r  source_loaded_r4   )r  r\  keyssource_infoloaded_infor   s         r8   r`  VideoInfo.get_video_info  s_    DCzGC5/:;zGC5/:;  ,+{++r:   r)   Nr  r  r  r  r  r  r  r  r  r  r`  r  r)   r:   r8   rY  rY  o  s3      5H_LL  H
,r:   rY  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
VideoInfoSourcei  c                     SSS00$ r[  r)   r  s    r8   r  VideoInfoSource.INPUT_TYPES  r_  r:   r  ro   rn   ro   rn   rn   )u   fps🟨u   frame_count🟨u   duration🟨u	   width🟨u
   height🟨r`  c                 X    / SQn/ nU H  nUR                  USU 3   5        M     / UQ7$ )Nrb  re  rg  )r  r\  rh  ri  r   s        r8   r`  VideoInfoSource.get_video_info  ;    DCzGC5/:;  r:   r)   Nrl  r)   r:   r8   rn  rn    3      5H:LL  Hr:   rn  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
VideoInfoLoadedi  c                     SSS00$ r[  r)   r  s    r8   r  VideoInfoLoaded.INPUT_TYPES  r_  r:   r  rq  )u   fps🟦u   frame_count🟦u   duration🟦u	   width🟦u
   height🟦r`  c                 X    / SQn/ nU H  nUR                  USU 3   5        M     / UQ7$ )Nrb  rf  rg  )r  r\  rh  rj  r   s        r8   r`  VideoInfoLoaded.get_video_info  rt  r:   r)   Nrl  r)   r:   r8   rw  rw    ru  r:   rw  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
SelectFilenamei  c                     SSSSSSS.4S.0$ )Nr   r  rn   r   r	   )rk   r   r   )r4  rA   r)   r  s    r8   r  SelectFilename.INPUT_TYPES  s"    *<[]ghqsOtGuvwwr:   rp   Filenamer  select_filenamec                     US   U   4$ r=   r)   )r  r4  rA   s      r8   r  SelectFilename.select_filename  s    !U#%%r:   r)   N)r  r  r  r  r  r  r  r  r  r  r  r  r)   r:   r8   r}  r}    s/    x xLL4H H&r:   r}  c                   r    \ rS rSr " S S\5      r\S 5       r\" S5      4rSr	Sr
SrS	rS
 r\S 5       rSrg)Unbatchi  c                       \ rS rSrS rSrg)Unbatch.Anyi  c                     g)NFr)   )r  others     r8   __ne__Unbatch.Any.__ne__  s    r:   r)   N)r  r  r  r  r  r  r)   r:   r8   Anyr    s    	r:   r  c                     SSS00$ )Nr   r  r   r)   r  s    r8   r  Unbatch.INPUT_TYPES  s    Y/00r:   r   T)	unbatchedr  unbatchc                    [        US   [        R                  5      (       a  [        R                  " U5      4$ [        US   [        5      (       a  US   R                  5       nSU;   a,  [        R                  " U Vs/ s H  o3S   PM	     sn5      US'   SU;   a,  [        R                  " U Vs/ s H  o3S   PM	     sn5      US'   UR                  SS 5        U4$ [        R                  " S U5      4$ s  snf s  snf )Nr   r	  re  batch_indexc                 
    X-   $ r0   r)   )r~   ys     r8   rZ  !Unbatch.unbatch.<locals>.<lambda>  s    QSr:   )	r1   r  rx  catr?   rm  r  	functoolsreduce)r  r  outr~   s       r8   r  Unbatch.unbatch  s    gaj%,,//IIg&((gaj$''!*//#CC!&'+J'QiL'+J!KIS "'))G,LGqz]G,L"MJGGM4(6M  ':<< ,K,Ls   ?C71C<c                     g)NTr)   )clsinput_typess     r8   r  Unbatch.VALIDATE_INPUTS  s    r:   r)   N)r  r  r  r  rx   r  r  r  r  INPUT_IS_LISTr  r  r  r  r  r  r)   r:   r8   r  r    sZ    c  1 1H;LM L4HH=  r:   r  c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)SelectLatesti  c                 "    SSS/ S.4SSS04S.0$ )Nr   rp   zoutput/AnimateDiffr  placeholderz.webm)r   filename_postfixr)   r  s    r8   r  SelectLatest.INPUT_TYPES  s2    G[tv;w0x2:]G<T1UW X 	Xr:   r  r  r  select_latestTc                      S5       e)NzNot Reachabler)   )r  r   r  s      r8   r  SelectLatest.select_latest  s    %o%ur:   r)   N)r  r  r  r  r  r  r  r  r  r  EXPERIMENTALr  r  r)   r:   r8   r  r    s6    X X LL4HHL&r:   r  VHS_VideoCombineVHS_LoadVideoVHS_LoadVideoPathVHS_LoadVideoFFmpegVHS_LoadVideoFFmpegPathVHS_LoadImagePathVHS_LoadImagesVHS_LoadImagesPathVHS_LoadAudioVHS_LoadAudioUploadVHS_AudioToVHSAudioVHS_VHSAudioToAudioVHS_PruneOutputsr   VHS_VideoInfoVHS_VideoInfoSourceVHS_VideoInfoLoadedVHS_SelectFilenameVHS_VAEEncodeBatchedVHS_VAEDecodeBatchedVHS_SplitLatentsVHS_SplitImagesVHS_SplitMasksVHS_MergeLatentsVHS_MergeImagesVHS_MergeMasksVHS_GetLatentCountVHS_GetImageCountVHS_GetMaskCountVHS_DuplicateLatentsVHS_DuplicateImagesVHS_DuplicateMasksVHS_SelectEveryNthLatentVHS_SelectEveryNthImage)VHS_SelectEveryNthMaskVHS_SelectLatentsVHS_SelectImagesVHS_SelectMasksVHS_UnbatchVHS_SelectLatestu   Video Combine 🎥🅥🅗🅢u$   Load Video (Upload) 🎥🅥🅗🅢u"   Load Video (Path) 🎥🅥🅗🅢u+   Load Video FFmpeg (Upload) 🎥🅥🅗🅢u)   Load Video FFmpeg (Path) 🎥🅥🅗🅢u"   Load Image (Path) 🎥🅥🅗🅢u%   Load Images (Upload) 🎥🅥🅗🅢u#   Load Images (Path) 🎥🅥🅗🅢u!   Load Audio (Path)🎥🅥🅗🅢u#   Load Audio (Upload)🎥🅥🅗🅢u)   Audio to legacy VHS_AUDIO🎥🅥🅗🅢u)   Legacy VHS_AUDIO to Audio🎥🅥🅗🅢u   Prune Outputs 🎥🅥🅗🅢u#   Meta Batch Manager 🎥🅥🅗🅢u   Video Info 🎥🅥🅗🅢u$   Video Info (Source) 🎥🅥🅗🅢u$   Video Info (Loaded) 🎥🅥🅗🅢u    Select Filename 🎥🅥🅗🅢u#   VAE Encode Batched 🎥🅥🅗🅢u#   VAE Decode Batched 🎥🅥🅗🅢u   Split Latents 🎥🅥🅗🅢u   Split Images 🎥🅥🅗🅢u   Split Masks 🎥🅥🅗🅢u   Merge Latents 🎥🅥🅗🅢u   Merge Images 🎥🅥🅗🅢u   Merge Masks 🎥🅥🅗🅢u!   Get Latent Count 🎥🅥🅗🅢u    Get Image Count 🎥🅥🅗🅢u   Get Mask Count 🎥🅥🅗🅢u   Repeat Latents 🎥🅥🅗🅢u   Repeat Images 🎥🅥🅗🅢u   Repeat Masks 🎥🅥🅗🅢u(   Select Every Nth Latent 🎥🅥🅗🅢u'   Select Every Nth Image 🎥🅥🅗🅢u&   Select Every Nth Mask 🎥🅥🅗🅢u   Select Latents 🎥🅥🅗🅢u   Select Images 🎥🅥🅗🅢u   Select Masks 🎥🅥🅗🅢u   Unbatch 🎥🅥🅗🅢u   Select Latest 🎥🅥🅗🅢)T)nrW   r   r_   r   r   r   r  r  typingr   r  PILr   r   PIL.PngImagePluginr   pathlibr   stringr   r  r  rT   r
   image_latent_nodesload_video_nodesr   r   r   r   r   load_images_nodesr   r   batched_nodesr   r   utilsr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   comfy.utilsr'   folder_names_and_pathsr>   addr  r9   rM   r\   rt   dirnamer  __file__rY   rh   r   r   r   r   r   r   r   r   r  r  r  r#  r0  r?  rY  rn  rw  r}  r  r  SplitLatentsSplitImages
SplitMasksMergeLatentsMergeImages
MergeMasksGetLatentCountGetImageCountGetMaskCountRepeatLatentsRepeatImagesRepeatMasksSelectEveryNthLatentSelectEveryNthImageSelectEveryNthMaskSelectLatentsSelectImagesSelectMasksNODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSr)   r:   r8   <module>r     s   	 
    	     &       ! w w Y =     $lAAA@BG9~L''(;<|**+>?BCqH''(;<Q?CCGL/ 3* 77<<0I JDRab # #,!F+75DAL!*FEU EUN$: $:L): ):T% %<!9 !9F$ $L: :z$, $,N @ >
& 
& 6& &++_+ + 0	+
 2+ + 3+ 5+ Y+ ?+ ?+ ?+ + + Y+  ?!+" ?#+$ .%+( ,)+* ,++. /+0 {1+2 j3+4 5+6 {7+8 j9+: .;+< =+> ?+@ MA+B <C+D +E+F  4G+H 2I+J 1&$"$U+ X+8+;+ =+ H	+
 J+ =+ =+ ?+ 8+ @+ F+ F+ 8+ =+ 2+  A!+" A#+$ <%+( A)+* A++. 8/+0 61+2 43+4 85+6 67+8 49+: =;+< ;=+> 9?+@ =A+B ;C+D 9E+F  JG+H HI+J G:86.8U+ r:   