
    
3jhq              
       &   S SK r S SKrS SKrS SKrS SKJrJ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Jr  S SKrS SKJr  SSK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J r J!r!J"r"J#r#  / SQr$0 S	S
S.SSSS.SSSS.SSSS.SSSS.SSSS.S.r% \&" \S5      (       d  0 \l%        S r'S r(S\)4S jr*S.S\+\,\,4   4S jjr- S/S jr.  S0S jr/S r0S  r1S! r2SSSS\2S"4S# jr3 " S$ S%5      r4 " S& S'5      r5 " S( S)5      r6 " S* S+5      r7 " S, S-5      r8g)1    N)ImageImageOps)common_upscaleProgressBar)FolderOfImages   )logger)BIGMAXDIMMAXcalculate_file_hash#get_sorted_dir_files_from_directorylazy_get_audio	hash_pathvalidate_path
strip_pathtry_download_videois_urlimageOrLatentffmpeg_pathENCODE_ARGS
floatOrInt)webmmp4mkvgifmov   )r   r      r   )target_ratedim   )   r   iP    )   r   )r   r    frames)    r   i   r   )r   r   )   r   )r"   r   i   i  r"   )r   r   i@  r#   )NoneAnimateDiffMochiLTXVHunyuanCosmosWanVHSLoadFormatsc                      0 n U R                  [        R                  5        U R                  [        5        [        U R	                  5       5      SU S.4$ )Nr)   )defaultformats)updatenodesr/   listkeys)r2   s    g/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-VideoHelperSuite/videohelpersuite/load_video_nodes.pyget_load_formatsr8   *   sE    GNN5''(NN>" %':< <    c                 h    U [         ;   a	  [         U    $ [        R                   R                  U 0 5      $ N)r/   r4   get)formats    r7   
get_formatr>   1   s.    f%%##FB//r9   returnc                 ^    U R                  S5      n[        U5      S:  =(       a    US   S:H  $ )N.r   r   )splitlen)filename
file_partss     r7   is_gifrG   6   s-    $Jz?Q::b>U#::r9   c                     Uc  SnUS:X  a  US:X  a  O$US:X  a
  XU -  -  nUn OUS:X  a
  XU-  -  n UnOUn Un[        X-  S-   5      U-  n [        X-  S-   5      U-  nX4$ )Nr   r   g      ?)int)widthheightcustom_widthcustom_heightdownscale_ratios        r7   target_sizerO   ;   s    q]q0	!	u$$		v%%%+,>E'#-.@F?r9   c              #     #    [         R                  " U 5      nUR                  5       (       a  UR                  5       (       d  [	        U  S35      eUR                  [         R                  5      n[        UR                  [         R                  5      5      n	[        UR                  [         R                  5      5      n
[        UR                  [         R                  5      5      nX-  nSn	U	S::  d  U
S::  a!  UR                  5       u  pUR                  u  pnSnSnSnSU-  nS nUS:X  a  UnOSU-  nUS:  a8  US:w  a  [        X-  U-  5      nOUnU(       a  UU-  nUS:w  a  [        UU5      nOSnXXUUU4v   [        U5      nUnUR                  5       (       Ga  UU:  a  UR                  5       nU(       d  OUU-  nUU:  a  MA  UU-  nUS-  nX::  a  MR  US-  nUU-  S:w  a  Mb  UR                  5       u  nn[         R                  " U[         R                   5      n["        R$                  " U["        R&                  S9n[(        R*                  " U5      R-                  S5        Ub  Uv nUb  g UnUS-  nUb  UR/                  UU5        US:  a  UU:  a  OUR                  5       (       a  GM  Ub"  UR0                  R3                  U5        SUl        Ub  Uv   g g 7f)Nz could not be loaded with cv.r   rB   r   dtype   T)cv2VideoCaptureisOpenedgrab
ValueErrorr<   CAP_PROP_FPSrI   CAP_PROP_FRAME_WIDTHCAP_PROP_FRAME_HEIGHTCAP_PROP_FRAME_COUNTretrieveshapeminr   cvtColorCOLOR_BGR2RGBnparrayfloat32torch
from_numpydiv_update_absoluteinputspophas_closed_inputs)video
force_rateframe_load_capskip_first_framesselect_every_nth
meta_batch	unique_id	video_capfpsrJ   rK   total_framesduration_frametotal_frame_counttotal_frames_evaluatedframes_addedbase_frame_time
prev_frametarget_frame_timeyieldable_framespbartime_offsetis_returnedunusedinps                              r7   cv_frame_generatorr   M   s      'Iy~~'7'7E7"?@AA --((
)C	c6678Es889:Fy}}S%=%=>?L!HEqyFQJ%%' ;;q L#gOJQ+jLa?"<#5
#BC+!11Q #N4D E#7HJZ
[['(D!K




**#..*K?*K**((Q1"a'" ""22a7
 "**,UC$5$56 bjj1$$S)!##C
  /?@A,."@S 



T i('+
$ s   J5K(:.K(c	              #   0  #    SU /n	[         /U	-   / SQ-   n
S nS n [        R                  " U
[        R                  [        R                  SS9nUR                  R                  " [        6 nSU;   ag  SS/U	-   n	[         /U	-   / SQ-   n
 [        R                  " U
[        R                  [        R                  SS9nUR                  R                  " [        6 nUR                  S	5       H  n[        R                  " S
U5      nUc  M  [        UR                  S5      5      [        UR                  S5      5      /n[        R                  " SU5      nU(       a  [        UR                  S5      5      nOSn[        R                  " SU5      S Ln  O   [        SU-   5      e[        R                  " SU5      nU(       aS  UR                  S5      R                  S5      n[        US   5      S-  [        US   5      S-  -   [        US   5      -   nOSnUS:  a,  US:  a  SS/nS[!        US-
  5      /U	-   n	OS[!        U5      /nO/ n[         SSS/U	-   SS/-   U-   n/ nUS:w  a  UR#                  S[!        U5      -   5        US:w  d  US:w  a  [%        US   US   UXVS9n[        US   5      [        US   5      -  n['        US   U-  US   -
  5      S:  a  UR#                  SU S U S!U S"U S#3	5        SR)                  [+        [         U5      5      nUR#                  S$U 35        OUn[-        U5      S:  a  US%S&R)                  U5      /-  nU=(       d    UU-  nUS:  a  US'[!        U5      /-  n[/        UU5      nUS   US   UUUU-  SU=(       d    U-  UUS   US   U4
v   U/ S(Q-  n[1        U5      n [        R2                  " U[        R                  S)9 nUS   US   -  S*-  n [5        U 5      n!Sn"S n# UR6                  R9                  U U"-
  5      n$U$c  [:        R<                  " S+5        M:  [-        U$5      S:X  a  OU$U!U"[-        U$5      & U"[-        U$5      -  n"U"U :X  a  U#b  U#v   UR?                  S5        [@        RB                  " U![@        RD                  " [@        RF                  5      RI                  S,5      S-9RK                  US   US   S5      S.-  n#U(       d  U#S S 2S S 2S S/24   n#Sn"M  S S S 5        Ub"  URN                  RQ                  U5        SUl)        W#b  U#v   g g ! [        R
                   a.  n[        SUR                  R                  " [        6 -   5      eS nAff = f! [        R
                   a.  n[        SUR                  R                  " [        6 -   5      eS nAff = f! , (       d  f       N= f! [L         a<  n[        S0WR                  R9                  5       R                  " [        6 -   5      eS nAff = f7f)1Nz-i)z-ccopy	-frames:v1-fnull-T)stdoutstderrcheckz,An error occurred in the ffmpeg subprocess:
zVideo: vp9 z-c:vz
libvpx-vp9
z*^ *Stream .* Video.*, ([1-9]|\d{2,})x(\d+)r      z, ([\d\.]+) fpsz(yuva|rgba|bgra|gbra)z8Failed to parse video/image information. FFMPEG output:
zDuration: (\d+:\d+:\d+\.\d+),:r   i  <   r'   z-ss4z-verrorz-anz-pix_fmtrgba64lezfps=fps=)rN   zcrop=if(gt(z\,a)\,iw\,ih*z):if(gt(z	\,a)\,iw/z\,ih)zscale=z-vf,r   )r   rawvideor   )r   r   皙?<rQ   i  rB   z+An error occured in the ffmpeg subprocess:
)*r   
subprocessrunDEVNULLPIPECalledProcessError	Exceptionr   decoder   rC   researchrI   groupfloatstrappendrO   absjoinmaprD   r_   r   Popen	bytearrayr   readtimesleepr3   rb   
frombufferrR   uint16newbyteorderreshapeBrokenPipeErrorri   rj   rk   )%rl   rm   rn   
start_timerL   rM   rN   rq   rr   
args_input
args_dummy	size_basefps_base	dummy_reselineslinematch	fps_matchalpha
durs_matchdursrv   	post_seekargs_all_framesvfilterssizearsize_argr   r   procbpicurrent_bytescurrent_offsetr}   
bytes_reads%                                        r7   ffmpeg_frame_generatorr      s)     J+-``JIH1NN:j6H6H(2tE	
 ##[1El+j8
!]Z/1dd
	5"z*:L:L,6OO4II
   ''5D!		H$OU[[^,c%++a..ABI		"5t<I !34II5t<DHE " SV[[\\?GJ"((-tAw<$s47|B6tAwGA~>IZ!^!45
BJJ0I	"D'59$j124=>O HQ
3z?23qMQ.9Q<1|(K47^E$q'N*y|By|+,1OOk"-=bT"[Y[X\\bcd88CDM*&
+,
8}qE388H#566".h8K^)<==/@Q<1x8h;Nj$H%'7a$q'5R R ..O'(D;ojooF$q'DG#a'C%cNMNJ![[--cN.BC
%JJrNz?a'@JnS_=J/!S(!-((A!#}BHHRYYDWDdDdehDi!j!r!rswxysz  }A  BC  }D  FG  "H  LS  "TJ %/1crc	%:
%&N!  G4 i('+
$ M (( 1G((//;/0 1 	11 ,, 	5Khhoo{34 5 5	5~ GF.  ;F++""$++[9: ; 	;;s   X3T2 9X3U7 ;A	XJ5X>#W !DV<<W .X2U4)U//U44X7V9)V44V99X<
W
W 	X
W 
X7XXXc              #      #    [        [        R                  " X5      5      =n(       a-  Uv   [        [        R                  " X5      5      =n(       a  M,  g g 7fr;   )tuple	itertoolsislice)itnbatchs      r7   batchedr     sE     ))"01
1%
1 ))"01
1%
1
1s   AAAc              #      #    [        X5       HT  n[        R                  " [        R                  " U5      5      nUR                  U5      R                  5        S h  vN   MV     g  N	7fr;   )r   re   rf   rb   rc   encodenumpy)imagesvaeframes_per_batchr   image_batchs        r7   batched_vae_encoder   !  sJ     2&&rxx7::k*00222 32s   AA)A'
A)c           	   +     ^^	^
#    [        S0 UD6n[        U5      nUS   US   sm
mST
T-  -  =(       d    SnUR                  SS 5      b  [        XcS   R                  5      nU S:w  d	  US:w  d  Ubw  [        T
TXU5      m	/ UQT	S   PT	S   PSP7v   T	S   T
:w  d	  T	S   T:w  aC  UU	U
4S jn[        R                  R                  [        U[        XF5      5      5       S h  vN   g O/ UQUS   PUS   PSP7v   U S h  vN   g  N$ N7f)Nr   r    @rq   Fc                 6  > [         R                  " [        R                  " U [        R                  " [        R
                  TTS445      5      5      nUR                  SS5      n[        UTS   TS   SS5      nUR                  SS5      R                  5       $ )N   rB   r   r   lanczoscenter)	re   rf   rb   fromiterrR   rd   movedimr   r   )rx   srK   new_sizerJ   s     r7   rescale%resized_cv_frame_gen.<locals>.rescale0  s{    $$R[["**vW\^_N`Aa8b%cdIIbO"1hqk8A;	8Tyy2,,..r9    )r   nextr<   r_   r   rO   r   chainfrom_iterabler   r   )rL   rM   rN   kwargsgeninfor   r   rK   r   rJ   s           @@@r7   resized_cv_frame_genr   %  s1    

&v
&CIDGT!WME6(efn=Bzz,%1/1E1V1VWqMQ./2Mufl?[66hqk68A;666A;%8A;&#8/
 !44S'#B`5abbb $9 /.d1g.tAw...NN	 c s$   CD"D#DD	D	Dr(   c                 v	   SU;   a'  UR                  S5        [        R                  " S5        [        U5      n[	        US   5      US'   Ub  [        USS5      nOUR                  SS5      S   nU b  XR                  ;  aZ  U" S%XUS	.UD6n[        U5      u
  pppnnnnU b8  XXXXUUU4U R                  U'   U(       a  [        U R                  U5      U l
        OU R                  U   u  ppppnnnS nUb  US
-  nOC [        R                  " 5       R                  [        R                  " 5       R                  -   S-
  nUb  [#        UX-  S-  S-  -  5      nO[#        UX-  S-  S-  -  5      nU b  SU;   at  U R$                  US   S   -  US   S   :w  aU  U R$                  US   S   -
  US   S   -  nU R$                  U-
  nUUS   S   S-  :  a  UUS   S   -  n['        SU 35      eU R$                  U:  a  ['        SU R$                   SU S35      e[(        R*                  " XR$                  5      nOUn[(        R*                  " UU5      nSX-  -  =(       d    SnUbv  [-        XU5      nUU-  UU-  nn[        USS5      n[.        R0                  " [2        R4                  " U[2        R6                  " [2        R8                  UUU445      5      5      nO[[.        R0                  " [2        R4                  " U[2        R6                  " [2        R8                  UUU(       a  SOS445      5      5      nU c'  Ub$   [        W5        ['        S[;        U5       S35      e[;        U5      S:X  a  ['        S5      eSU;   a~  [;        U5      US   S   -  US   S   :w  a`  S[;        U5       S3n[;        US   5      S:  a  US   S   (       a  ['        U5      eUS   S S u  nn[;        U5      U-
  U-  U-  U-   n US U  nSU;   a  US   n!OUS    U-  n!XR                  S!S5      -  n[?        US   U!US"   U-  5      n"UUUU	U
SU-  [;        U5      [;        U5      U-  UUS#.
n#Uc  U[;        U5      U"U#4$ S$U0[;        U5      U"U#4$ !   [        R                  " S5        [         n GNf= f! [<         a     GNUf = f)&N
force_sizezGforce_size has been removed. Did you reload the webpage after updating?rl   rN   r   r    )r   r   )rq   rr   rN   i   i   zIFailed to calculate available memory. Memory load limit has been disabledr   g333333 @r   r%   r   r   zJThe chosen frames per batch is incompatible with the selected format. Try zMeta Batch set to z frames but only z can fit in memoryr   latent_channelsr'   zMemory limit hit after loading z frames. Stopping execution.zNo frames generatedzThe number of frames loaded zC, does not match the requirements of the currently selected format.r   ro   rp   rn   )

source_fpssource_frame_countsource_durationsource_widthsource_height
loaded_fpsloaded_frame_countloaded_durationloaded_widthloaded_heightsamplesr   ) rj   r	   warnr>   r   getattrr<   ri   r   r_   ru   psutilvirtual_memory	availableswap_memoryfreer
   rI   r   RuntimeErrorr   r   r   re   rf   rb   r   rR   rd   rD   StopIterationr   )$rq   rr   memory_limit_mbr   	generatorr=   r   rN   r   rJ   rK   rt   rv   ru   r~   r   	new_width
new_heightr   memory_limitmax_loadable_framesr   	suggestedoriginal_genr   vwvhchannelsr   err_msgdivmodr%   r   audio
video_infos$                                       r7   
load_videor  ;  s   v

< ]^F 1F7O
!#'8!< **UD1!4Y.?.??n:Tcngmnz~  @C  {Dw|HXZceoqv!,/X]n  CL  NX  Z_  ,`Ji(*-j.E.EGW*X
' @J  @Q  @Q  R[  @\|V(:K_hjtv{L"	""113==@R@R@T@Y@YY]ddL !,a1J"KL ",a1D"EFv**VH-=a-@@F8DTUVDWW#44vh7G7JJfU]N^_`Naa&77%?	6(+A.22!1!!44I"%opyoz#{||&&)<<!3J4O4O3PPabuav  wI   J  K  Ks$?$?@s$78(en=B
 +;<?*J,G23 115!!"++c288RZZ(SUVXIY<Z3["\] !!"++c288RZZ*V_fkabqrIs<t3u"vwl6	!@VMijkk 6{a0116c&kF8,<Q,??6(CSTUCVV0V  >A  Bvh 1$)9!)<w''(#BQ'Sf+#+c1C7 vL)
/03DD
$6::6'?J?O8PQb8bcE *#))!&kv;)::!#J {FUJ77F#S[%DDS	"KKcd!LF  		s   ?AR ?#R* R'*
R87R8c                   b    \ rS rSr\S 5       rSr\SSS4rSr	Sr
S	 r\S
 5       r\S 5       rSrg)LoadVideoUploadi  c                 f   [         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   R                  5       [        ;   d  M  UR                  U5        M     [        U5      4[        SSSSSS.4SSS[        SS.4SSS[        SS.4SSS[        SSS.4SSS[        SS	.4SSS[        SS	.4S
.SS[!        5       S.SSS.S.$ )NrA   r   rB   r   r   r1   r_   maxstepdisableINTr1   r_   r  r!  r1   r_   r  r   rl   rm   rL   rM   rn   ro   rp   VHS_BatchManagerVAErq   r   r=   STRING	UNIQUE_IDr   rr   requiredoptionalhiddenfolder_pathsget_input_directoryoslistdirpathisfiler   rC   rD   lowervideo_extensionsr   sortedr   r   r
   r8   r   	input_dirfilesfrF   s        r7   INPUT_TYPESLoadVideoUpload.INPUT_TYPES  s0    446	I&Aww~~bggll9899WWS\
z?Q&JrN,@,@,BFV,VLLO	 ' %Um-#-1Qr[\ij/k"l%*!F_`,a$b&+1V`a-b%c',!Af^_lm.n&o*/QqQWab1c)d).AaPV`a0b(c #8#/1 #+!, 	r9   #   Video Helper Suite 🎥🅥🅗🅢r"  AUDIOVHS_VIDEOINFOIMAGEframe_countr  r  r  c                 b    [         R                  " [        US   5      5      US'   [        S0 UD6$ )Nrl   r   )r3  get_annotated_filepathr   r  selfr   s     r7   r  LoadVideoUpload.load_video  s.    &==jPW>YZw#F##r9   c                 D    [         R                  " U5      n[        U5      $ r;   r3  rI  r   r   rl   r   
image_paths       r7   
IS_CHANGEDLoadVideoUpload.IS_CHANGED      !88?
":..r9   c                 \    [         R                  " U5      (       d  SR                  U5      $ gNzInvalid video file: {}Tr3  exists_annotated_filepathr=   r   rl   s     r7   VALIDATE_INPUTSLoadVideoUpload.VALIDATE_INPUTS  '    55e<<+22599r9   r   N__name__
__module____qualname____firstlineno__classmethodr@  CATEGORYr   RETURN_TYPESRETURN_NAMESFUNCTIONr  rQ  rY  __static_attributes__r   r9   r7   r  r    s`     8 5H!5'?CLBLH$ / /  r9   r  c                   b    \ rS rSr\S 5       rSr\SSS4rSr	Sr
S	 r\S
 5       r\S 5       rSrg)LoadVideoPathi  c                     SS[         S.4[        SSSSSS.4SSS[        SS	.4SSS[        SS	.4SSS[        SSS.4SSS[        SS
.4SSS[        SS
.4S.SS[	        5       S.SSS.S.$ )Nr+  X://insert/path/here.mp4placeholdervhs_path_extensionsr   r   r   r  r"  r#  r$  r%  r&  r(  r*  r,  r-  r.  r:  r   r   r
   r8   r   s    r7   r@  LoadVideoPath.INPUT_TYPES  s     #4Ngw$xy)q2WXef+gh!&Aa[\(] ^"'Qq\])^!_#(a&Z[hi*j"k&+1V]^-_%`%*!F\],^$_ 4*, '(
 	
r9   rB  r"  rC  rD  rE  r  c                     US   b  [        US   5      S:w  a  [        SUS   -   5      e[        US   5      (       a  [        US   5      =(       d    US   US'   [	        S0 UD6$ )Nrl   Tvideo is not a valid path: r   )r   r   r   r   r  rJ  s     r7   r  LoadVideoPath.load_video  si    '?"mF7O&D&L9F7OKLL&/""0ATVG_F7O#F##r9   c                     [        U5      $ r;   r   r   rl   r   s      r7   rQ  LoadVideoPath.IS_CHANGED      r9   c                     [        USS9$ NT)
allow_noner   rX  s     r7   rY  LoadVideoPath.VALIDATE_INPUTS      Ut44r9   r   Nr\  r   r9   r7   rh  rh    s`    
 
, 5H!5'?CLBLH$     5 5r9   rh  c                   b    \ rS rSr\S 5       rSr\SSS4rSr	Sr
S	 r\S
 5       r\S 5       rSrg)LoadVideoFFmpegUploadi
  c                 P   [         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   R                  5       [        ;   d  M  UR                  U5        M     [        U5      4[        SSSSSS.4SSS[        SS.4SSS[        SS.4SSS[        SSS.4S	SS[        S
SS.4S.SS[!        5       S.SSS.S.$ )NrA   r   rB   r   r   r  r"  r#  FLOATMbP?VHSTIMESTAMPr1   r_   r  r   
widgetTyperl   rm   rL   rM   rn   r   r&  r(  r*  r+  r,  r-  r.  r2  r<  s        r7   r@  !LoadVideoFFmpegUpload.INPUT_TYPES  s"    446	I&Aww~~bggll9899WWS\
z?Q&JrN,@,@,BFV,VLLO	 ' %Um-#-1Qr[\ij/k"l%*!F_`,a$b&+1V`a-b%c',!Af^_lm.n&o#*!F\`p~,  #A #8#/1 #+!, 	r9   rB  MASKrC  rD  rF  maskr  r  r  c                 <   [         R                  " [        US   5      5      US'   [        S
0 UDS[        0D6u  p#pEUR                  S5      S:X  a$  US S 2S S 2S S 2S S24   SUS S 2S S 2S S 2S4   -
  XE4$ U[        R                  " UR                  S5      SSSS	9XE4$ )Nrl   r  r   r'   r   r   @   cpudevicer   )r3  rI  r   r  r   r   re   zerosrK  r   imagerw   r  r  s         r7   r   LoadVideoFFmpegUpload.load_video/  s    &==jPW>YZw'1']F']F\']#%::a=A!Aa(OQuQq1W~%5uIIu{{5::a="bG[[r9   c                 D    [         R                  " U5      n[        U5      $ r;   rN  rO  s       r7   rQ   LoadVideoFFmpegUpload.IS_CHANGED6  rS  r9   c                 \    [         R                  " U5      (       d  SR                  U5      $ grU  rV  rX  s     r7   rY  %LoadVideoFFmpegUpload.VALIDATE_INPUTS;  r[  r9   r   Nr\  r   r9   r7   r  r  
  sa     8 5H!67ODL;LH\ / /  r9   r  c                   b    \ rS rSr\S 5       rSr\SSS4rSr	Sr
S	 r\S
 5       r\S 5       rSrg)LoadVideoFFmpegPathiB  c                     SS[         S.4[        SSSSSS.4SSS[        SS	.4SSS[        SS	.4SSS[        SSS.4S
SS[        SSS.4S.SS[	        5       S.SSS.S.$ )Nr+  rj  rk  r   r   r   r  r"  r#  r  r  r  r  r  r&  r(  r*  r,  r-  r.  rn  ro  s    r7   r@  LoadVideoFFmpegPath.INPUT_TYPESC  s     #4Ngw$xy)q2WXef+gh!&Aa[\(] ^"'Qq\])^!_#(a&Z[hi*j"k&AaX\lz({| 4*, '(
 	
r9   rB  r  rC  rD  r  r  c                    US   b  [        US   5      S:w  a  [        SUS   -   5      e[        US   5      (       a  [        US   5      =(       d    US   US'   [	        S0 UDS[
        0D6u  p#pE[        U[        5      (       a  US XE4$ UR                  S5      S:X  a$  US S 2S S 2S S 2S S24   SUS S 2S S 2S S 2S4   -
  XE4$ U[        R                  " UR                  S5      S	S	S
S9XE4$ )Nrl   Trr  r  r   r'   r   r   r  r  r  r   )r   r   r   r   r  r   
isinstancedictr   re   r  r  s         r7   r  LoadVideoFFmpegPath.load_video`  s    '?"mF7O&D&L9F7OKLL&/""0ATVG_F7O'1']F']F\']#%eT""433::a=A!Aa(OQuQq1W~%5uIIu{{5::a="bG[[r9   c                     [        U5      $ r;   ru  rv  s      r7   rQ  LoadVideoFFmpegPath.IS_CHANGEDl  rx  r9   c                     [        USS9$ rz  r|  rX  s     r7   rY  #LoadVideoFFmpegPath.VALIDATE_INPUTSp  r~  r9   r   Nr\  r   r9   r7   r  r  B  sa    
 
* 5H!67ODL;LH
\     5 5r9   r  c                   ^    \ rS rSr\S 5       rSr\S4rSr	Sr
S r\S 5       r\S	 5       rS
rg)LoadImagePathit  c           	          SS[        [        R                  5      S.4SSS[        SSS.4SSS[        SSS.4S.S	S
0SS0S.$ )Nr+  zX://insert/path/here.pngrk  r"  r   r   r  )r  rL   rM   r   r(  r   r.  )r5   r   IMG_EXTENSIONSr   ro  s    r7   r@  LoadImagePath.INPUT_TYPESu  s     #4Ngklz  mJ  mJ  hK  %L  M!&AaXYfg(h i"'QqYZgh)i!j x h
 	
r9   rB  r  )rF  r  
load_imagec                    US   b  [        US   5      S:w  a  [        SUS   -   5      eUR                  US   SSSS.5        UR                  S5        [	        S0 UDS[
        0D6u  n    n[        U[        5      (       a  US 4$ UR                  S5      S:X  a#  US S 2S S 2S S 2S S24   S	US S 2S S 2S S 2S4   -
  4$ U[        R                  " UR                  S5      S
S
SS94$ )Nr  Tzimage is not a valid path: r   )rl   rm   rn   r   r  r   r'   r   r  r  r  r   )r   r   r3   rj   r  r   r  r  r   re   r  )rK  r   r  rw   s       r7   r  LoadImagePath.load_image  s    '?"mF7O&D&L9F7OKLLUV$%' 	(

7$PvP9OPq!QeT""4= ::a=A!Aa(OQuQq1W~%566u{{5::a="bGHHr9   c                     [        U5      $ r;   ru  )r   r  r   s      r7   rQ  LoadImagePath.IS_CHANGED  rx  r9   c                     [        USS9$ rz  r|  )r   r  s     r7   rY  LoadImagePath.VALIDATE_INPUTS  r~  r9   r   N)r]  r^  r_  r`  ra  r@  rb  r   rc  rd  re  r  rQ  rY  rf  r   r9   r7   r  r  t  s]    
 
 5H!6*L$LHI     5 5r9   r  )r   )NN)r   NN)9r5  r   r   rb   re   PILr   r   rT   r  r   r   r   r3  comfy.utilsr   r   r4   comfy.k_diffusion.utilsr   r	   utilsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r:  r/   hasattrr8   r>   boolrG   r   rI   rO   r   r   r   r   r   r  r  rh  r  r  r  r   r9   r7   <module>r     s`   	     
   	   3  2 D D D D
 8  #$];G~F!.5I 5ImeD u&''E<0
; ;
RWX[]`X`Ra & EI[| IJ6:qh3, $$-fhEX2 2j,5 ,5\5 5p05 05d+5 +5r9   